0

I am trying to create an API web service in Rails using Grape. I followed this tutorial.

I managed to get everything up and running and expected it to work perfectly. When I try to test my API endpoint however, I'm presented with a vague error. I am not sure where to start, as I don't know how to interpret the error returned. Here it is:

compared with non class/module

def rescuable?(klass)
  options[:rescue_all] || (options[:rescue_handlers] || []).any? { |error, _handler| klass <= error } || (options[:base_only_rescue_handlers] || []).include?(klass)
end

Here are the 20 last entries in my trace:

grape (0.13.0) lib/grape/middleware/error.rb:50:in `<='
grape (0.13.0) lib/grape/middleware/error.rb:50:in `block in rescuable?'
grape (0.13.0) lib/grape/middleware/error.rb:50:in `any?'
grape (0.13.0) lib/grape/middleware/error.rb:50:in `rescuable?'
grape (0.13.0) lib/grape/middleware/error.rb:30:in `rescue in call!'
grape (0.13.0) lib/grape/middleware/error.rb:25:in `call!'
grape (0.13.0) lib/grape/middleware/base.rb:18:in `call'
rack (1.6.4) lib/rack/head.rb:13:in `call'
rack (1.6.4) lib/rack/builder.rb:153:in `call'
grape (0.13.0) lib/grape/endpoint.rb:202:in `call!'
grape (0.13.0) lib/grape/endpoint.rb:190:in `call'
rack-mount (0.8.3) lib/rack/mount/route_set.rb:152:in `block in call'
rack-mount (0.8.3) lib/rack/mount/code_generation.rb:96:in `block in recognize'
rack-mount (0.8.3) lib/rack/mount/code_generation.rb:68:in `optimized_each'
rack-mount (0.8.3) lib/rack/mount/code_generation.rb:95:in `recognize'
rack-mount (0.8.3) lib/rack/mount/route_set.rb:141:in `call'
grape (0.13.0) lib/grape/api.rb:114:in `call'
grape (0.13.0) lib/grape/api.rb:44:in `call!'
grape (0.13.0) lib/grape/api.rb:39:in `call'
actionpack (4.2.2) lib/action_dispatch/routing/mapper.rb:51:in `serve'

Can anybody please help me understand what's going on here?

HermannHH
  • 1,732
  • 1
  • 27
  • 57

1 Answers1

1

In the expression klass <= error, error is not a class or module, so that comparison is failing. Instead, you want to check if error.kind_of? klass (or perhaps error.instance_of? klass if you want to ensure that error is an instance of that exact class. See https://stackoverflow.com/a/3893305/1106267 for more on that distinction.

EDIT:

If you followed the linked tutorial verbatim, it's possible you're using deprecated methods in grape. According to the upgrade docs, error_response (used in the tutorial to generate a custom response for ActiveRecord::RecordNotFound and ActiveRecord::RecordInvalid errors) should be replaced with error! if you're using grape >= 0.12.

Community
  • 1
  • 1
Charles Treatman
  • 558
  • 3
  • 14
  • Thanks @Charles. Could this be an issue with Grape, seeing as that snippet is part of the Grape gem. It's not something I added? – HermannHH Aug 24 '15 at 20:56
  • this helped a lot. After fixing this, I just needed to change my Model references from 'Graduate.all' to '::Graduate.all' and now everything works perfectly. – HermannHH Aug 25 '15 at 04:36