class Alephant::Publisher::Request::Request

Constants

DEFAULT_CONTENT_TYPE

Attributes

data_mapper_factory[R]
opts[R]
processor[R]

Public Class Methods

new(processor, data_mapper_factory, opts) click to toggle source
# File lib/alephant/publisher/request.rb, line 23
def initialize(processor, data_mapper_factory, opts)
  @processor           = processor
  @data_mapper_factory = data_mapper_factory
  @opts                = opts
end

Public Instance Methods

call(env) click to toggle source
# File lib/alephant/publisher/request.rb, line 29
def call(env)
  req      = Rack::Request.new(env)
  response = Rack::Response.new("<h1>Not Found</h1>", 404, DEFAULT_CONTENT_TYPE)

  case req.path_info
  when /status$/
    response = Rack::Response.new('ok', 200, DEFAULT_CONTENT_TYPE)
  when /component\/(?<id>[^\/]+)$/
    component_id = $~['id']
    logger.info "Component request for: #{component_id} with options: #{req.params.inspect}"

    response = Rack::Response.new(
      template_data(component_id, req.params),
      200,
      DEFAULT_CONTENT_TYPE
    )
  end

  response.finish
rescue InvalidApiStatus => e
  error_response(e, e.status)
rescue ApiError, ConnectionFailed => e
  error_response(e, 502)
rescue InvalidComponent => e
  error_response(e, 404)
rescue Exception => e
  error_response e
end

Protected Instance Methods

error_response(e = "", code = 500) click to toggle source
# File lib/alephant/publisher/request.rb, line 73
def error_response(e = "", code = 500)
  logger.error "Publisher::Request#error_response: #{e.message}"
  logger.metric "PublisherRequestErrorResponseStatus#{code}"
  message = opts.fetch(:debug, false) ? e.message : ""
  Rack::Response.new(message, code, DEFAULT_CONTENT_TYPE).finish
end
render_component(component_id, params) click to toggle source
# File lib/alephant/publisher/request.rb, line 60
def render_component(component_id, params)
  Rack::Response.new(
    template_data(component_id, params),
    200,
    { "Content-Type" => "text/html" }
  )
end
template_data(component_id, params) click to toggle source
# File lib/alephant/publisher/request.rb, line 68
def template_data(component_id, params)
  mapper = data_mapper_factory.create(component_id, params)
  processor.consume(mapper.data, component_id)
end