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