Skip to content

values validator can no longer accept a range #881

Closed
@smathieu

Description

@smathieu

We're currently migration from grape 0.9.0 to 0.10.1. This validator that use to work now stopped working:

    params do
      requires :score, type: Integer, values: 0..10, desc: "..."
    end

relevant stacktrace:

     TypeError:
       no implicit conversion of Range into Array

     # /Users/simon/.rvm/gems/ruby-2.2.0@rainforest/gems/grape-0.10.1/lib/grape/validations/validators/values.rb:14:in `validate_param!'
     # /Users/simon/.rvm/gems/ruby-2.2.0@rainforest/gems/grape-0.10.1/lib/grape/validations/validators/base.rb:17:in `block in validate!'
     # /Users/simon/.rvm/gems/ruby-2.2.0@rainforest/gems/grape-0.10.1/lib/grape/validations/attributes_iterator.rb:15:in `block (2 levels) in each'
     # /Users/simon/.rvm/gems/ruby-2.2.0@rainforest/gems/grape-0.10.1/lib/grape/validations/attributes_iterator.rb:14:in `each'
     # /Users/simon/.rvm/gems/ruby-2.2.0@rainforest/gems/grape-0.10.1/lib/grape/validations/attributes_iterator.rb:14:in `block in each'
     # /Users/simon/.rvm/gems/ruby-2.2.0@rainforest/gems/grape-0.10.1/lib/grape/validations/attributes_iterator.rb:13:in `each'
     # /Users/simon/.rvm/gems/ruby-2.2.0@rainforest/gems/grape-0.10.1/lib/grape/validations/attributes_iterator.rb:13:in `each'
     # /Users/simon/.rvm/gems/ruby-2.2.0@rainforest/gems/grape-0.10.1/lib/grape/validations/validators/base.rb:15:in `validate!'
     # /Users/simon/.rvm/gems/ruby-2.2.0@rainforest/gems/grape-0.10.1/lib/grape/endpoint.rb:235:in `block in run'
     # /Users/simon/.rvm/gems/ruby-2.2.0@rainforest/gems/grape-0.10.1/lib/grape/endpoint.rb:233:in `each'
     # /Users/simon/.rvm/gems/ruby-2.2.0@rainforest/gems/grape-0.10.1/lib/grape/endpoint.rb:233:in `run'
     # /Users/simon/.rvm/gems/ruby-2.2.0@rainforest/gems/grape-0.10.1/lib/grape/endpoint.rb:195:in `block in call!'
     # /Users/simon/.rvm/gems/ruby-2.2.0@rainforest/gems/newrelic-grape-2.0.0/lib/newrelic-grape/instrument.rb:21:in `call'
     # /Users/simon/.rvm/gems/ruby-2.2.0@rainforest/gems/newrelic-grape-2.0.0/lib/newrelic-grape/instrument.rb:21:in `block in call!'
     # /Users/simon/.rvm/gems/ruby-2.2.0@rainforest/gems/newrelic_rpm-3.9.9.275/lib/new_relic/agent/instrumentation/controller_instrumentation.rb:366:in `perform_action_with_newrelic_trace'
     # /Users/simon/.rvm/gems/ruby-2.2.0@rainforest/gems/newrelic-grape-2.0.0/lib/newrelic-grape/instrument.rb:20:in `call!'
     # /Users/simon/.rvm/gems/ruby-2.2.0@rainforest/gems/grape-0.10.1/lib/grape/middleware/base.rb:18:in `call'
     # /Users/simon/.rvm/gems/ruby-2.2.0@rainforest/gems/grape-0.10.1/lib/grape/middleware/base.rb:24:in `call!'
     # /Users/simon/.rvm/gems/ruby-2.2.0@rainforest/gems/grape-0.10.1/lib/grape/middleware/base.rb:18:in `call'
     # /Users/simon/.rvm/gems/ruby-2.2.0@rainforest/gems/grape-0.10.1/lib/grape/middleware/base.rb:24:in `call!'
     # /Users/simon/.rvm/gems/ruby-2.2.0@rainforest/gems/grape-0.10.1/lib/grape/middleware/base.rb:18:in `call'

In this case, it's easy to convert the range to an array, but it might not be possible if you have a large range. It also feels like the range is more intention revealing than an array here.

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