class Stubify::Server

Public Class Methods

forward(request, method, body) click to toggle source
# File lib/stubify/server.rb, line 62
def self.forward(request, method, body)
  # Build url
  uri = URI(Stubify.options.host)
  uri.path = request.path
  uri.query = request.query_string

  # Create new request
  new_req = nil
  if method == 'DELETE'
    new_req = Net::HTTP::Delete.new(uri)
    new_req.body = body
  elsif method == 'POST'
    new_req = Net::HTTP::Post.new(uri)
    new_req.body = body
  elsif method == 'PUT'
    new_req = Net::HTTP::Put.new(uri)
    new_req.body = body
  else
    new_req = Net::HTTP::Get.new(uri)
  end

  # Set headers
  request.env.each do |key, value|
    if key.include?('HTTP_')
      new_key = key.dup
      new_key.slice!('HTTP_')
      new_req[new_key] = value unless ['HOST', 'VERSION'].include?(new_key)
    end
  end

  # Perform request
  response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
    http.request(new_req)
  end

  return response
end
on_request(request) click to toggle source
# File lib/stubify/server.rb, line 46
def self.on_request(request)
  body = nil
  body = request.body.read unless request.body.nil?

  if IO.cached?(request, body)
    puts "Loading \"#{request.path}\" from cache"
    response_map = IO.read_from_disk(request, body)
    return response_map
  else
    puts "Requesting \"#{request.path}\""
    response = Server.forward(request, request.request_method, body)
    response_map = IO.write_on_disk(request, body, response)
    return response_map
  end
end