class Daredevil::Responder

Attributes

controller[R]
errors[RW]
namespace[R]
options[R]
params[R]
resource[R]
status[RW]

Public Class Methods

new(resource, options = {}) click to toggle source
# File lib/daredevil/responder.rb, line 20
def initialize(resource, options = {})
  @resource = resource
  @options = options
  self.status = @options[:status]
  @params = @options[:params]
  @controller = @options[:controller]
  @namespace = @options[:namespace]
end

Public Instance Methods

render_error() click to toggle source
# File lib/daredevil/responder.rb, line 38
def render_error
  controller.render(error_render_options)
end
render_response() click to toggle source
# File lib/daredevil/responder.rb, line 33
def render_response
  return send("respond_to_#{action}_action") if action.in?(ACTIONS)
  raise(Daredevil::Errors::UnknownAction, action)
end
respond!() click to toggle source
# File lib/daredevil/responder.rb, line 29
def respond!
  render_response
end

Private Instance Methods

action() click to toggle source
# File lib/daredevil/responder.rb, line 52
def action
  params[:action]
end
added_errors_obj(error_obj) click to toggle source
# File lib/daredevil/responder.rb, line 102
def added_errors_obj(error_obj)
  error_obj[:errors] = error_response unless errors
end
added_message(error_obj) click to toggle source
# File lib/daredevil/responder.rb, line 122
def added_message(error_obj)
  error_obj[:message] = errors[:reason] if errors
end
added_resource(error_obj) click to toggle source
# File lib/daredevil/responder.rb, line 106
def added_resource(error_obj)
  return unless errors
  error_obj[:resource] = resource_model_or_param
  error_obj[:detail] = errors[:detail]
end
error_render_options() click to toggle source
# File lib/daredevil/responder.rb, line 60
def error_render_options
  render_options.merge(
    json: {
      status: status_code,
      message: general_error_message
    }.tap do |added_errors|
      added_errors_obj(added_errors)
      added_resource(added_errors)
      added_message(added_errors)
    end
  )
end
error_response() click to toggle source
# File lib/daredevil/responder.rb, line 80
def error_response
  return if errors
  resource.errors.inject([]) do |new_errors, (attribute, message)|
    new_errors << {
      resource: resource_name.titleize,
      field: attribute,
      reason: message,
      detail: resource.errors.full_message(attribute, message)
    }
  end
end
general_error_message() click to toggle source
# File lib/daredevil/responder.rb, line 98
def general_error_message
  I18n.t('daredevil.errors.conflict.reason')
end
render_options() click to toggle source
# File lib/daredevil/responder.rb, line 73
def render_options
  {
    status: status,
    content_type: 'application/vnd.api+json'
  }
end
resource_model_or_param() click to toggle source
# File lib/daredevil/responder.rb, line 112
def resource_model_or_param
  return resource.model if resource.try(:model).present?
  resource_param
end
resource_name() click to toggle source
# File lib/daredevil/responder.rb, line 92
def resource_name
  return resource.object.class.name if resource.respond_to?(:decorated?) &&
    resource.decorated?
  resource.class.name
end
resource_param() click to toggle source
# File lib/daredevil/responder.rb, line 117
def resource_param
  resource.param if
    resource.class.name.eql?('ActionController::ParameterMissing')
end
status=(status) click to toggle source
# File lib/daredevil/responder.rb, line 44
def status=(status)
  @status = Sanitizers.status_symbol(status)
end
status_code() click to toggle source
# File lib/daredevil/responder.rb, line 48
def status_code
  Rack::Utils::SYMBOL_TO_STATUS_CODE[status]
end