class Playback::Request

Constants

DEFAULT_CONTENT_TYPE
DEFAULT_USER_AGENT
PARSER
REQUEST_WITHOUT_BODY
REQUEST_WITH_BODY

Public Class Methods

new(base_uri) click to toggle source
# File lib/playback/request.rb, line 15
def initialize(base_uri)
  @base_uri = base_uri
  @common_parser = PARSER.new('common')
  @combined_parser = PARSER.new('combined')
end

Public Instance Methods

run(line, return_type='') click to toggle source
# File lib/playback/request.rb, line 21
def run(line, return_type='')
  parsed_line = parse_log(line)

  method     = parsed_line[:request][:method]
  path       = parsed_line[:request][:path]
  referer    = parsed_line[:referer] ||= ''
  user_agent = parsed_line[:user_agent] ||= DEFAULT_USER_AGENT

  response = request(method, path, referer, user_agent)

  return response if return_type == 'net-http'

  {method: method, path: path, status: response.code.to_i}.to_json
rescue => e
  e.message
end

Private Instance Methods

parse_log(line) click to toggle source
# File lib/playback/request.rb, line 40
def parse_log(line)
  begin
    @combined_parser.parse(line.chomp)
  rescue
    @common_parser.parse(line.chomp)
  end
end
request(method, path, referer, user_agent) click to toggle source
# File lib/playback/request.rb, line 48
def request(method, path, referer, user_agent)
  uri = URI.parse("#{@base_uri}#{path}")
  http = Net::HTTP.new(uri.host, uri.port)
  header = {'Content-Type' => DEFAULT_CONTENT_TYPE, 'Referer' => referer, 'User-Agent' => user_agent}

  if REQUEST_WITHOUT_BODY.include?(method)
    http.send(method.downcase, path, header)
  elsif REQUEST_WITH_BODY.include?(method)
    http.send(method.downcase, uri.path, uri.query, header)
  else
    raise "it is not supported http method: <#{method}>"
  end
end