module Ant::Server::GrapeDecorator
Descorator for using grape with ant. This will implement:
-
exception handling
-
logs
-
JSend format
Constants
- HTTP_CODES
Public Class Methods
configure_custom_exceptions(base)
click to toggle source
# File lib/ant/server/grape.rb, line 31 def self.configure_custom_exceptions(base) Server::Response.resources(:exceptions).each do |exception_class, level| base.rescue_from(exception_class) do |ex| response = Ant::Server::GrapeDecorator.handler.call(env, level, ex) http_code = Ant::Server::GrapeDecorator.extract_http_code(ex, level) error!(response, http_code) end end end
configure_global_exception_handler(base)
click to toggle source
:nocov: #
# File lib/ant/server/grape.rb, line 52 def self.configure_global_exception_handler(base) base.rescue_from(:all) do |ex| level = :fatal response = Ant::Server::GrapeDecorator.handler.call(env, level, ex) http_code = Ant::Server::GrapeDecorator.extract_http_code(ex, level) error!(response, http_code) end end
configure_grape_exceptions(base)
click to toggle source
:nocov: #
# File lib/ant/server/grape.rb, line 42 def self.configure_grape_exceptions(base) base.rescue_from(Grape::Exceptions::Base) do |ex| ant_ex = Ant::Exceptions::AntFail.new(ex.message) response = Ant::Server::GrapeDecorator .handler.call(env, :fail, ant_ex) error!(response, 400) end end
configure_handlers(base)
click to toggle source
# File lib/ant/server/grape.rb, line 61 def self.configure_handlers(base) configure_custom_exceptions(base) configure_grape_exceptions(base) configure_global_exception_handler(base) end
configure_logger(base)
click to toggle source
# File lib/ant/server/grape.rb, line 77 def self.configure_logger(base) base.before do params[:__init_time] = Time.now end base.after do params = env['api.endpoint'].params request = env['api.endpoint'].request pkg = RequestResponse.new(request: request, params: params) Server::Response.logger.access(pkg) end end
extract_http_code(exception, level)
click to toggle source
# File lib/ant/server/grape.rb, line 26 def self.extract_http_code(exception, level) default = HTTP_CODES[level] || 500 exception.respond_to?(:http_code) ? exception.http_code : default end
handler()
click to toggle source
# File lib/ant/server/grape.rb, line 11 def self.handler lambda do |env, level, ex| params = env['api.endpoint'].params request = env['api.endpoint'].request pkg = RequestResponse.new(request: request, params: params) pkg.exception = ex Server::Response.logger.send(level, pkg) Server::Response.format.send(level, pkg) end end
included(base)
click to toggle source
# File lib/ant/server/grape.rb, line 67 def self.included(base) base.formatter(:json, lambda do |response, _| pkg = RequestResponse.new(request: {}, params: {}) pkg.result = response Server::Response.format.send(:success, pkg).to_json end) configure_logger(base) configure_handlers(base) end