Skip to content

NoMethodError on validation of complex types #1042

Closed
@dim

Description

@dim

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!'

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions