Как проверить строку даты с помощью dry -validation gem? - PullRequest
2 голосов
/ 14 января 2020

Я хочу разрешить строку в формате даты с гемом dry -validation, но не могу.

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"]}>

Строка в формате даты была разрешена до 0.13, но, похоже, запрещена начиная с 1.0. Сейчас я пытаюсь обновить гем dry -validation в моем приложении Rails.

EDIT

Я не уверен, почему, но код выше работает сейчас же. Может проблема с кешированием? (Я помню, что я набрал bin/rake tmp:cache:clear, хотя) Пожалуйста, проигнорируйте этот вопрос.

Ответы [ 3 ]

0 голосов
/ 14 января 2020

Этот код работал в dry -подтверждении 1.4.1!

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

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

contract.call(date: '2020-01-20')
#=> #<Dry::Validation::Result{:date=>Mon, 20 Jan 2020} errors={}>

contract.call(date: 'foo')
#=> #<Dry::Validation::Result{:date=>"foo"} errors={:date=>["must be a date"]}>

'params-date' здесь определено: https://github.com/dry-rb/dry-types/blob/v1.2.2/lib/dry/types/params.rb#L11

0 голосов
/ 14 января 2020

Я проверил с dry-validation 1.4.1, dry-schema 1.4.3 и dry-types 1.2.2, и это прекрасно работает:

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={}>
0 голосов
/ 14 января 2020

Я не проверял это, но я думаю, что вы можете использовать Тип принуждения .

что-то вроде:

optional(:date).filled(:date?)

Примечание: чтобы использовать это, вы должны включить некоторую конфигурацию.

configure { config.type_specs = true }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...