class Stubby::Extensions::HTTP::HTTPApp
Public Class Methods
adapter(*names, &block)
click to toggle source
# File lib/stubby/extensions/http.rb, line 30 def adapter(*names, &block) names.each do |name| adapters[name] = block end end
adapters()
click to toggle source
# File lib/stubby/extensions/http.rb, line 36 def adapters @@adapters ||= {} end
port()
click to toggle source
# File lib/stubby/extensions/http.rb, line 15 def port 80 end
run!(session, server_settings={})
click to toggle source
Calls superclass method
# File lib/stubby/extensions/http.rb, line 19 def run!(session, server_settings={}) puts self.inspect + ": " + port.to_s set :bind, STUBBY_MASTER set :port, port set :stubby_session, session set :server, 'thin' super(:server_settings => server_settings) end
Private Instance Methods
forbidden()
click to toggle source
# File lib/stubby/extensions/http.rb, line 137 def forbidden [403, "Forbidden"] end
instruction()
click to toggle source
# File lib/stubby/extensions/http.rb, line 145 def instruction @instruction ||= MultiJson.load(HTTPI.post("http://#{STUBBY_MASTER}:9000/rules/search.json", trigger: "#{request.scheme}://#{request.host}").body) end
instruction_params()
click to toggle source
# File lib/stubby/extensions/http.rb, line 150 def instruction_params Rack::Utils.parse_nested_query url.query end
not_found(resource="*unknown*")
click to toggle source
# File lib/stubby/extensions/http.rb, line 141 def not_found(resource="*unknown*") [404, "Not Found:\n #{resource}"] end
run_handler()
click to toggle source
# File lib/stubby/extensions/http.rb, line 89 def run_handler if instruction.nil? not_found elsif adapter=self.class.adapters[url.scheme] instance_eval &adapter else instance_eval &self.class.adapters["default"] end end
run_proxy(scheme)
click to toggle source
# File lib/stubby/extensions/http.rb, line 99 def run_proxy(scheme) to = url.dup to.scheme = scheme to.path = request.path if to.path.empty? to.query = request.query_string puts "#{to.to_s} scheme: #{request.scheme}" r = HTTPI::Request.new r.url = to.to_s # TODO: this is a hack, should support streaming the bodies # and handling the headers more systematically (allow # keep-alives and transfer encoding) r.headers.merge! Hash[(env.select { |k,v| v.is_a? String }.collect { |k,v| [k.gsub("HTTP_", "").gsub("_", "-"), v] })] r.headers["HOST"] = request.host r.headers["STUBBY-ENV"] = settings.stubby_session.environment r.headers["STUBBY-KEY"] = settings.stubby_session.key(instruction) r.headers["STUBBY-USER"] = settings.stubby_session.user_key r.headers["X-FORWARDED-PROTO"] = request.scheme r.headers["X-FORWARDED-FOR"] = request.ip r.headers["CONNECTION"] = "close" r.headers.delete "ACCEPT-ENCODING" request.body.rewind r.body = request.body.read response = HTTPI.request(request.request_method.downcase.to_sym, r) response.headers.delete "TRANSFER-ENCODING" status(response.code) puts "response: #{response.headers}" headers(response.headers) body(response.body) end
url()
click to toggle source
# File lib/stubby/extensions/http.rb, line 154 def url @url ||= URI.parse(instruction) end