I was using dry-validation, which uses dry-types under the hood. You can pre-process the input using a custom type that transforms it as you’d like:
NumberArrayAsString =
Dry::Types::Definition
.new(Array)
.constructor { |input| input.split(',').map { |v| Integer(v) } }
In complete context, using dry-validation:
# frozen_string_literal: true
require 'dry-validation'
NumberArrayAsString =
Dry::Types::Definition
.new(Array)
.constructor { |input| input.split(',').map { |v| Integer(v) } }
ExampleContract = Dry::Validation.Params do
configure do
config.type_specs = true
end
required(:ids, NumberArrayAsString)
end
puts ExampleContract.call(ids: '1,3,5').inspect
#<Dry::Validation::Result output={:ids=>[1, 3, 5]} errors={}>
This works with dry-validation 0.13, but similar code should work for 1.0.