Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to validate date string with dry-validation gem?

I want to allow date formatted string with dry-validation gem, but I can't.

class NewUserContract < Dry::Validation::Contract
  params do
    optional(:date).filled(:date)
  end
end
contract = NewUserContract.new

contract.call(date: Date.today)
#=> #<Dry::Validation::Result{:date=>Tue, 14 Jan 2020} errors={}>

# I want to allow date formatted string
contract.call(date: '2020-01-20')
#=> #<Dry::Validation::Result{:date=>"2020-01-20"} errors={:date=>["must be a date"]}>

Date formatted string was allowed until 0.13, but it seems prohibited since 1.0. Now I'm trying to upgrade the dry-validation gem in my Rails app.

EDIT

I am not sure why, but the code above is working now. Maybe caching issue? (I remember I ran bin/rake tmp:cache:clear, though) Please ignore this question.

like image 249
Junichi Ito Avatar asked Nov 16 '25 09:11

Junichi Ito


1 Answers

I checked with dry-validation 1.4.1, dry-schema 1.4.3 and dry-types 1.2.2 and this works just fine:

require 'dry/validation'

class NewUserContract < Dry::Validation::Contract
  params do
    optional(:date).filled(:date)
  end
end
contract = NewUserContract.new

puts contract.call(date: Date.today).inspect
# #<Dry::Validation::Result{:date=>#<Date: 2020-01-14 ((2458863j,0s,0n),+0s,2299161j)>} errors={}>

puts contract.call(date: '2020-01-20').inspect
# #<Dry::Validation::Result{:date=>#<Date: 2020-01-20 ((2458869j,0s,0n),+0s,2299161j)>} errors={}>
like image 124
solnic Avatar answered Nov 18 '25 15:11

solnic



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!