lib/hyperdrive/middleware/error.rb in hyperdrive-0.0.6 vs lib/hyperdrive/middleware/error.rb in hyperdrive-0.0.7
- old
+ new
@@ -2,34 +2,39 @@
module Hyperdrive
module Middleware
class Error
include Hyperdrive::Values
-
+
def initialize(app)
@app = app
end
def call(env)
@app.call(env)
- rescue Hyperdrive::Errors::HTTPError => e
- status = e.http_status_code
- headers = { 'Content-Type' => 'application/json',
- 'Allow' => supported_request_methods.join(', ') }
- body = Oj.dump(error_message(e), mode: :compat)
- [status, headers, [body]]
+ rescue => e
+ headers = { 'Content-Type' => 'application/json' }
+ if e.respond_to?(:http_status_code)
+ status = e.http_status_code
+ body = [json_error(e)]
+ else
+ env['rack.errors'] << e
+ status = 500
+ body = json_error(Hyperdrive::Errors::HTTPError.new)
+ end
+ [status, headers, body]
end
private
-
- def error_message(e)
- {
+
+ def json_error(e)
+ MultiJson.dump({
_links: { root: { href: '/', title: 'API Root' } },
- error: {
+ error: {
type: "#{e.class.to_s.split('::').last}",
message: e.message
}
- }
+ })
end
end
end
end