class OpenAPIRest::RestRenderer

Rest Response Renderer

Attributes

controller[R]
response[R]

Public Class Methods

new(args) click to toggle source
# File lib/openapi_rest/rest_renderer.rb, line 9
def initialize(args)
  @controller = args[:controller]
  @response = args[:response]
end

Public Instance Methods

render() click to toggle source
# File lib/openapi_rest/rest_renderer.rb, line 14
def render
  unless response.is_a?(OpenAPIRest::QueryResponse)
    controller.render(response)
    return
  end

  return controller.render(error_response) if response.errors?

  method = controller.request.request_method_symbol
  return controller.render(nothing: true, status: 204) if [:delete, :patch, :put].include?(method)

  if method == :post
    path = "#{controller.openapi_path[:namespace]}#{response.resource}_path"
    controller.render(json: to_json_response, status: 201, location: controller.send(path, response.results))
    return
  end

  controller.render(json: to_json_response)
end

Private Instance Methods

collection_response(opts = {}) click to toggle source
# File lib/openapi_rest/rest_renderer.rb, line 49
def collection_response(opts = {})
  resp = {}
  resp[response.entity] = fetch(opts)
  success_response(resp)
end
error_response() click to toggle source
# File lib/openapi_rest/rest_renderer.rb, line 63
def error_response
  error_code = 400
  {
    status: error_code,
    json: {
      status: error_code,
      message: Rack::Utils::HTTP_STATUS_CODES[error_code],
      errors: response.errors
    }
  }
end
fetch(opts) click to toggle source
# File lib/openapi_rest/rest_renderer.rb, line 44
def fetch(opts)
  response.results.as_json(opts.merge(only: [],
                                      methods: response.fields))
end
single_response(opts = {}) click to toggle source
# File lib/openapi_rest/rest_renderer.rb, line 55
def single_response(opts = {})
  success_response(fetch(opts))
end
success_response(obj) click to toggle source
# File lib/openapi_rest/rest_renderer.rb, line 59
def success_response(obj)
  obj.to_json
end
to_json_response() click to toggle source
# File lib/openapi_rest/rest_renderer.rb, line 36
def to_json_response
  if response.single?
    single_response
  else
    collection_response
  end
end