class ActiveResponse::Responders::JsonApi

Public Instance Methods

collection(**opts) click to toggle source
# File lib/active_response/responders/json_api.rb, line 8
def collection(**opts)
  opts[:adapter] = :json_api
  super
end
invalid_resource(**opts) click to toggle source
# File lib/active_response/responders/json_api.rb, line 13
def invalid_resource(**opts)
  controller.render json: {errors: formatted_errors(opts[:resource].errors)}, status: :unprocessable_entity
end
resource(**opts) click to toggle source
# File lib/active_response/responders/json_api.rb, line 17
def resource(**opts)
  opts[:adapter] = :json_api
  super
end

Private Instance Methods

error_code(errors, key, index) click to toggle source
# File lib/active_response/responders/json_api.rb, line 24
def error_code(errors, key, index)
  "value_#{errors.details[key][index][:error]}".upcase
end
formatted_error(errors, key) click to toggle source
# File lib/active_response/responders/json_api.rb, line 28
def formatted_error(errors, key)
  errors.full_messages_for(key).map.with_index { |m, i| formatted_error_hash(key, error_code(errors, key, i), m) }
end
formatted_error_hash(key, code, message) click to toggle source
# File lib/active_response/responders/json_api.rb, line 32
def formatted_error_hash(key, code, message)
  {
    code: code,
    message: message,
    status: Rack::Utils::HTTP_STATUS_CODES[422],
    source: {parameter: key}
  }
end
formatted_errors(errors) click to toggle source
# File lib/active_response/responders/json_api.rb, line 41
def formatted_errors(errors)
  case errors
  when Array
    errors.map { |error| formatted_errors(error) }.flatten
  when ActiveModel::Errors
    errors.keys.reduce([]) do |array, key|
      array.concat(formatted_error(errors, key))
    end
  end
end