gpt4 book ai didi

ruby - 自动截断字符串

转载 作者:数据小太阳 更新时间:2023-10-29 08:02:26 24 4
gpt4 key购买 nike

以干式验证为例:

require "dry-validation"

module Types
include Dry::Types.module

Name = Types::String.constructor do |str|
str ? str.strip.chomp : str
end
end

SignUpForm = Dry::Validation.Params do
configure do
config.type_specs = true
end

required(:code, Types::StrictString).filled(max_size?: 4)
required(:name, Types::Name).filled(min_size?: 1)
required(:password, :string).filled(min_size?: 6)
end

result = SignUpForm.call(
"name" => "\t François \n",
"code" => "francois",
"password" => "some password")

result.success?
# true

# This is what I WANT
result[:code]
# "fran"

我想创建一个新类型 StrictString,它将使用谓词信息,如 max_size 并截断它。

问题:我无权访问 Types::String.constructor 中的谓词。如果我反过来,即通过自定义谓词,我不能只返回 true 或 false,我看不出如何更改参数

我是想用霰弹枪打死一只苍蝇吗?

最佳答案

根据干字创建者的提示,我设法创建了一个可以使用的新类型:

# frozen_string_literal: true

require 'dry-types'

module Types
include Dry::Types.module

# rubocop:disable Naming/MethodName
def self.TruncatedString(size)
Types::String.constructor { |s| s[0..size - 1] unless s.nil? }.constrained(max_size: size)
end
# rubocop:enable Naming/MethodName
end

所以现在我可以使用:

属性:company_name,Types::TruncatedString(100)

代替:

attribute :company_name, Types::String.constrained(max_size: 100)

关于ruby - 自动截断字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53766096/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com