class Rack::TradeTracker::Handler

Constants

LOGGER_REGEX
PARAMS_MAP

Attributes

app[R]
domain[R]
env[R]
path[R]
request[R]

Public Class Methods

new(domain, path, app) click to toggle source
# File lib/rack/trade_tracker/handler.rb, line 17
def initialize(domain, path, app)
  @domain = domain
  @path = path
  @app = app
end

Public Instance Methods

call(env) click to toggle source
# File lib/rack/trade_tracker/handler.rb, line 23
def call(env)
  @env = env
  @request = Rack::Request.new(env)

  return @app.call(env) unless matches_path?

  begin
    redirect
  rescue Parameters::MissingParametersError
    redirect_to_root
  end
end

Private Instance Methods

log(message, level = :info) click to toggle source
# File lib/rack/trade_tracker/handler.rb, line 88
def log(message, level = :info)
  return unless logger

  logger.send(level, message) if logger.respond_to?(level)
end
logger() click to toggle source
# File lib/rack/trade_tracker/handler.rb, line 94
def logger
  @logger ||= env.find { |key, _| LOGGER_REGEX.match(key) }&.[] 1
end
matches_path?() click to toggle source
# File lib/rack/trade_tracker/handler.rb, line 40
def matches_path?
  request.path == path
end
parameters() click to toggle source
# File lib/rack/trade_tracker/handler.rb, line 44
def parameters
  @_parameters ||= Parameters.new(request.params)
end
params_hash() click to toggle source
# File lib/rack/trade_tracker/handler.rb, line 48
def params_hash
  @_params_hash ||= parameters.to_hash
end
redirect() click to toggle source
# File lib/rack/trade_tracker/handler.rb, line 58
def redirect
  response(301, {'Location' => redirect_url} ) do |response|
    set_cookie(response)
    set_p3p_header(response)
    log("Redirecting to Trade Tracker with cookie: #{URI.encode(cookie.value)}")
  end
end
redirect_to_root() click to toggle source
# File lib/rack/trade_tracker/handler.rb, line 52
def redirect_to_root
  response(302, {'Location' => request.base_url} ) do
    log("Redirecting to root as Trade Tracker parameters missing", :error)
  end
end
redirect_url() click to toggle source
# File lib/rack/trade_tracker/handler.rb, line 66
def redirect_url
  url = URI(TRACKBACK_URL)
  params = PARAMS_MAP.keys.each_with_object({}) { |param, result| result[PARAMS_MAP[param]] = params_hash[param] }
  url.query = params.map { |k,v| "#{k}=#{URI.encode(v)}" }.join('&')
  url.to_s
end
response(status, header) { |response| ... } click to toggle source
# File lib/rack/trade_tracker/handler.rb, line 73
def response(status, header)
  Rack::Response.new([], status, header).tap do |response|
    yield response if block_given?
  end.finish
end
set_p3p_header(response) click to toggle source
# File lib/rack/trade_tracker/handler.rb, line 84
def set_p3p_header(response)
  response.headers['P3P'] = 'CP="ALL PUR DSP CUR ADMi DEVi CONi OUR COR IND"'
end