Skip to content

Instantly share code, notes, and snippets.

@ilnurnasyrov2
Last active March 22, 2018 09:28
Show Gist options
  • Save ilnurnasyrov2/5e5691c53716b5442fdd4b8a47c33e75 to your computer and use it in GitHub Desktop.
Save ilnurnasyrov2/5e5691c53716b5442fdd4b8a47c33e75 to your computer and use it in GitHub Desktop.
require "dry-validation"
schema = Dry::Validation.Schema do
optional(:vin).maybe(:str?)
optional(:chassis_number).maybe(:str?)
optional(:engine_number).maybe(:str?)
optional(:body_number).maybe(:str?)
rule(numbers_presense: [:vin, :chassis_number, :engine_number, :body_number]) do |vin, chassis_number, engine_number, body_number|
vin.filled? | (engine_number.filled? & (chassis_number.filled? | body_number.filled?))
end
end
schema.call(vin: nil, engine_number: "qweqwe", chassis_number: "qweqwe")
# => #<Dry::Validation::Result output={:vin=>nil, :engine_number=>"qweqwe", :chassis_number=>"qweqwe"} errors={}>
schema.call(vin: nil, engine_number: "qweqwe", body_number: "qweqwe")
# => #<Dry::Validation::Result output={:vin=>nil, :engine_number=>"qweqwe", :body_number=>"qweqwe"} errors={}>
schema.call(vin: nil, engine_number: nil, body_number: "qweqwe")
# => #<Dry::Validation::Result output={:vin=>nil, :engine_number=>nil, :body_number=>"qweqwe"} errors={:numbers_presense=>["must be filled"]}>
schema.call(vin: "qweqweq", engine_number: nil, body_number: "qweqwe")
# => #<Dry::Validation::Result output={:vin=>"qweqweq", :engine_number=>nil, :body_number=>"qweqwe"} errors={}>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment