1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Proxy
  def initialize on_port, to_port
    @proxy_server = create_server on_port
    map_routes to_port
  end

  def create_server port
    proxy_server = WEBrick::HTTPServer.new :Port => port   # need this stubbed
    trap("INT") { proxy_server.shutdown }
    proxy_server
  end

  def map_routes on_port
    @proxy_server.mount_proc '/' do |request, response|
      from_path = resolve request
      server_response = fetch from_path, on_port
      case server_response
      when Net::HTTPSuccess
        response.body = server_response.body
      else
        response.body = 'Request not found!'
      end
    end
  end

  def fetch path, on_port
    uri = create_uri path[0], on_port
    response = Net::HTTP.get_response(uri)
  end
end