class OpenapiFirst::Responder

Public Class Methods

new(namespace: nil, resolver: nil) click to toggle source
# File lib/openapi_first/responder.rb, line 9
def initialize(namespace: nil, resolver: nil)
  @resolver = resolver || DefaultOperationResolver.new(namespace)
  @namespace = namespace
end

Public Instance Methods

call(env) click to toggle source
# File lib/openapi_first/responder.rb, line 14
def call(env)
  operation = env[OpenapiFirst::OPERATION]
  res = Rack::Response.new
  handler = find_handler(operation)
  result = handler.call(env[INBOX], res)
  res.write serialize(result) if result && res.body.empty?
  res[Rack::CONTENT_TYPE] ||= operation.content_type_for(res.status)
  res.finish
end

Private Instance Methods

find_handler(operation) click to toggle source
# File lib/openapi_first/responder.rb, line 26
def find_handler(operation)
  handler = @resolver.call(operation)
  raise NotImplementedError, "Could not find handler for #{operation.name}" unless handler

  handler
end
serialize(result) click to toggle source
# File lib/openapi_first/responder.rb, line 33
def serialize(result)
  return result if result.is_a?(String)

  MultiJson.dump(result)
end