dry-rb / dry-validation

Validation library with type-safe schemas and rules
https://dry-rb.org/gems/dry-validation
MIT License
1.34k stars 188 forks source link

Getting proc instead of string message #736

Open sekrett opened 2 months ago

sekrett commented 2 months ago

Describe the bug

I am getting a callable proc in the following code.

To Reproduce

require 'dry-validation'

class TestContract < Dry::Validation::Contract
  params do
    required(:last_name).filled(:string)
    optional(:birthday).maybe(:date)
  end

  rule(:birthday) do
    key.failure('wrong date')
  end

  rule(:last_name) do
    result.errors.to_h
  end
end

validator = TestContract.new
puts validator.call(last_name: 'Last', birthday: '5.01.0202').errors.to_h

# {:birthday=>[#<Proc:0x0000000128fc0ed0 /Users/sekrett/.local/share/mise/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/dry-validation-1.10.0/lib/dry/validation/messages/resolver.rb:36 (lambda)>]}

Expected behavior

# {:birthday=>["wrong date"]}

My environment

Workaround

Make a copy of errors:

result.errors.dup.to_h