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