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