Closed
Description
I have an API where I expect an array of complex types as a parameter, e.g.:
# models/week.rb
class Week
include Virtus.model
attribute :number, Integer
end
# api/events.rb
params do
requires :event, type: Hash do
optional :schedule, type: Array[Week]
end
end
Everything is OK when I call:
post "/events", event: { schedule: [{number: 31}, {number: 32}] }
The problem occurs when I don't send an array:
post "/events", event: { schedule: {number: 31} }
In this case, I would expect a (graceful) error to occur, but I instead get:
NoMethodError:
undefined method `all?' for #<Grape::Validations::CoerceValidator::InvalidValue:0x00000005681aa0>
# /home/me/.rvm/gems/ruby-2.2.2/gems/grape-0.12.0/lib/grape/validations/validators/coerce.rb:23:in `_valid_array_type?'
# /home/me/.rvm/gems/ruby-2.2.2/gems/grape-0.12.0/lib/grape/validations/validators/coerce.rb:45:in `valid_type?'
# /home/me/.rvm/gems/ruby-2.2.2/gems/grape-0.12.0/lib/grape/validations/validators/coerce.rb:11:in `validate_param!'
# /home/me/.rvm/gems/ruby-2.2.2/gems/grape-0.12.0/lib/grape/validations/validators/base.rb:17:in `block in validate!'
# /home/me/.rvm/gems/ruby-2.2.2/gems/grape-0.12.0/lib/grape/validations/attributes_iterator.rb:15:in `block (2 levels) in each'
# /home/me/.rvm/gems/ruby-2.2.2/gems/grape-0.12.0/lib/grape/validations/attributes_iterator.rb:14:in `each'
# /home/me/.rvm/gems/ruby-2.2.2/gems/grape-0.12.0/lib/grape/validations/attributes_iterator.rb:14:in `block in each'
# /home/me/.rvm/gems/ruby-2.2.2/gems/grape-0.12.0/lib/grape/validations/attributes_iterator.rb:13:in `each'
# /home/me/.rvm/gems/ruby-2.2.2/gems/grape-0.12.0/lib/grape/validations/attributes_iterator.rb:13:in `each'
# /home/me/.rvm/gems/ruby-2.2.2/gems/grape-0.12.0/lib/grape/validations/validators/base.rb:15:in `validate!'