Class: Grape::Middleware::Error
- Defined in:
- lib/grape/middleware/error.rb
Constant Summary
Constants inherited from Base
Instance Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
- #call!(env) ⇒ Object
- #default_options ⇒ Object
- #default_rescue_handler(e) ⇒ Object
- #error!(message, status = options[:default_status], headers = {}, backtrace = [], original_exception = nil) ⇒ Object
-
#error_response(error = {}) ⇒ Object
TODO: This method is deprecated.
- #format_message(message, backtrace, original_exception = nil) ⇒ Object
-
#initialize(app, **options) ⇒ Error
constructor
A new instance of Error.
- #rack_response(message, status = , headers = { Grape::Http::Headers::CONTENT_TYPE => content_type }) ⇒ Object
Methods inherited from Base
#after, #before, #call, #content_type, #content_type_for, #content_types, #mime_types, #response
Methods included from DSL::Headers
Methods included from Helpers
Constructor Details
#initialize(app, **options) ⇒ Error
Returns a new instance of Error.
30 31 32 33 |
# File 'lib/grape/middleware/error.rb', line 30 def initialize(app, **) super self.class.send(:include, @options[:helpers]) if @options[:helpers] end |
Instance Method Details
#call!(env) ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/grape/middleware/error.rb', line 35 def call!(env) @env = env begin error_response(catch(:error) do return @app.call(@env) end) rescue Exception => error # rubocop:disable Lint/RescueException handler = rescue_handler_for_base_only_class(error.class) || rescue_handler_for_class_or_its_ancestor(error.class) || rescue_handler_for_grape_exception(error.class) || rescue_handler_for_any_class(error.class) || raise run_rescue_handler(handler, error) end end |
#default_options ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/grape/middleware/error.rb', line 9 def { default_status: 500, # default status returned on error default_message: '', format: :txt, helpers: nil, formatters: {}, error_formatters: {}, rescue_all: false, # true to rescue all exceptions rescue_grape_exceptions: false, rescue_subclasses: true, # rescue subclasses of exceptions listed rescue_options: { backtrace: false, # true to display backtrace, true to let Grape handle Grape::Exceptions original_exception: false, # true to display exception }, rescue_handlers: {}, # rescue handler blocks base_only_rescue_handlers: {}, # rescue handler blocks rescuing only the base class all_rescue_handler: nil, # rescue handler block to rescue from all exceptions } end |
#default_rescue_handler(e) ⇒ Object
58 59 60 |
# File 'lib/grape/middleware/error.rb', line 58 def default_rescue_handler(e) error_response(message: e., backtrace: e.backtrace, original_exception: e) end |
#error!(message, status = options[:default_status], headers = {}, backtrace = [], original_exception = nil) ⇒ Object
53 54 55 56 |
# File 'lib/grape/middleware/error.rb', line 53 def error!(, status = [:default_status], headers = {}, backtrace = [], original_exception = nil) headers = headers.reverse_merge(Grape::Http::Headers::CONTENT_TYPE => content_type) rack_response((, backtrace, original_exception), status, headers) end |
#error_response(error = {}) ⇒ Object
TODO: This method is deprecated. Refactor out.
63 64 65 66 67 68 69 70 71 |
# File 'lib/grape/middleware/error.rb', line 63 def error_response(error = {}) status = error[:status] || [:default_status] = error[:message] || [:default_message] headers = { Grape::Http::Headers::CONTENT_TYPE => content_type } headers.merge!(error[:headers]) if error[:headers].is_a?(Hash) backtrace = error[:backtrace] || error[:original_exception] && error[:original_exception].backtrace || [] original_exception = error.is_a?(Exception) ? error : error[:original_exception] || nil rack_response((, backtrace, original_exception), status, headers) end |
#format_message(message, backtrace, original_exception = nil) ⇒ Object
80 81 82 83 84 85 86 87 88 89 |
# File 'lib/grape/middleware/error.rb', line 80 def (, backtrace, original_exception = nil) format = env[Grape::Env::API_FORMAT] || [:format] formatter = Grape::ErrorFormatter.formatter_for(format, **) throw :error, status: 406, message: "The requested format '#{format}' is not supported.", backtrace: backtrace, original_exception: original_exception unless formatter formatter.call(, backtrace, , env, original_exception) end |
#rack_response(message, status = , headers = { Grape::Http::Headers::CONTENT_TYPE => content_type }) ⇒ Object
73 74 75 76 77 78 |
# File 'lib/grape/middleware/error.rb', line 73 def rack_response(, status = [:default_status], headers = { Grape::Http::Headers::CONTENT_TYPE => content_type }) if headers[Grape::Http::Headers::CONTENT_TYPE] == TEXT_HTML = ERB::Util.html_escape() end Rack::Response.new([], status, headers) end |