module JSONAPI::Utils::Response::Renders

Public Instance Methods

jsonapi_render(json:, status: nil, options: {}) click to toggle source

Helper method to render JSON API-compliant responses.

@param json [ActiveRecord::Base, ActiveRecord::Relation, Hash, Array<Hash>]

Object to be serialized into JSON
e.g.: User.first, User.all, { data: { id: 1, first_name: 'Tiago' } },
[{ data: { id: 1, first_name: 'Tiago' } }]

@param status [Integer, String, Symbol] HTTP status code

e.g.: 201, '201', :created

@option options [JSONAPI::Resource] resource: it tells the render which resource

class to be used rather than use an infered one (default behaviour)

@option options [JSONAPI::Resource] source_resource: it tells the render that this response is from a related resource

and the result should be interpreted as a related resources response

@option options [String, Symbol] relationship_type: it tells that the render which relationship the data is from

@option options [ActiveRecord::Base] model: ActiveRecord model class to be instantiated

when a Hash or Array of Hashes is passed to the "json" key argument

@option options [Integer] count: if it's rendering a collection of resources, the default

gem's counting method can be bypassed by the use of this options. It's shows then the total
records resulting from that request and also calculates the pagination.

@return [String]

@api public

# File lib/jsonapi/utils/response/renders.rb, line 33
def jsonapi_render(json:, status: nil, options: {})
  body = jsonapi_format(json, options)
  render json: body, status: (status || @_response_document.status)
rescue => e
  handle_exceptions(e) # http://bit.ly/2sEEGTN
ensure
  correct_media_type
end
jsonapi_render_bad_request() click to toggle source

Helper method to render HTTP 400 Bad Request.

@api public

# File lib/jsonapi/utils/response/renders.rb, line 76
def jsonapi_render_bad_request
  jsonapi_render_errors(::JSONAPI::Utils::Exceptions::BadRequest.new)
end
jsonapi_render_errors(error = nil, json: nil, status: nil) click to toggle source

Helper method to render JSON API-compliant error responses.

@param error [ActiveRecord::Base or any object that responds to errors]

Error object to be serialized into JSON
e.g.: User.new(name: nil).tap(&:save), MyErrorDecorator.new(invalid_object)

@param json [ActiveRecord::Base or any object that responds to errors]

Error object to be serialized into JSON
e.g.: User.new(name: nil).tap(&:save), MyErrorDecorator.new(invalid_object)

@param status [Integer, String, Symbol] HTTP status code

e.g.: 422, '422', :unprocessable_entity

@return [String]

@api public

# File lib/jsonapi/utils/response/renders.rb, line 58
def jsonapi_render_errors(error = nil, json: nil, status: nil)
  body   = jsonapi_format_errors(error || json)
  status = status || body.try(:first).try(:[], :status) || :bad_request
  render json: { errors: body }, status: status
ensure
  correct_media_type
end
jsonapi_render_internal_server_error() click to toggle source

Helper method to render HTTP 500 Interval Server Error.

@api public

# File lib/jsonapi/utils/response/renders.rb, line 69
def jsonapi_render_internal_server_error
  jsonapi_render_errors(::JSONAPI::Utils::Exceptions::InternalServerError.new)
end
jsonapi_render_not_found(exception) click to toggle source

Helper method to render HTTP 404 Bad Request.

@api public

# File lib/jsonapi/utils/response/renders.rb, line 83
def jsonapi_render_not_found(exception)
  id = exception.message =~ /=([\w-]+)/ && $1 || '(no identifier)'
  jsonapi_render_errors(JSONAPI::Exceptions::RecordNotFound.new(id))
end
jsonapi_render_not_found_with_null() click to toggle source

Helper method to render HTTP 404 Bad Request with null “data”.

@api public

# File lib/jsonapi/utils/response/renders.rb, line 91
def jsonapi_render_not_found_with_null
  render json: { data: nil }, status: 200
end