lib/infrataster/contexts/http_context.rb in infrataster-0.3.1 vs lib/infrataster/contexts/http_context.rb in infrataster-0.3.2
- old
+ new
@@ -1,34 +1,37 @@
require 'faraday'
+require 'faraday_middleware'
module Infrataster
module Contexts
class HttpContext < BaseContext
def response
server.forward_port(resource.uri.port) do |address, port|
url = "#{resource.uri.scheme}://#{address}:#{port}"
options = {:url => url}
-
+
if resource.uri.scheme == 'https'
options[:ssl] = resource.ssl_option
end
-
+
+ host = determine_host(address)
+
conn = Faraday.new(options) do |faraday|
faraday.request :url_encoded
faraday.response :logger, Logger
- if resource.inflate_gzip?
- faraday.use Infrataster::FaradayMiddleware::Gzip
+ middlewares(host => address).each do |middleware|
+ faraday.use(*middleware)
end
faraday.adapter Faraday.default_adapter
faraday.basic_auth(*resource.basic_auth) if resource.basic_auth
end
conn.public_send(resource.method) do |req|
resource.params.each_pair do |k, v|
req.params[k] = v
end
- req.headers['Host'] = determine_host(address)
+ req.headers['Host'] = host
resource.headers.each_pair do |k, v|
req.headers[k] = v
end
req.body = resource.body if resource.body
@@ -39,10 +42,24 @@
end
def determine_host(default)
resource.uri.host || (server.options[:http] && server.options[:http][:host]) || default
end
+
+ private
+
+ def middlewares(host_mapping)
+ host_mapping = resource.host_mapping.merge(host_mapping)
+
+ ms = resource.faraday_middlewares.dup
+ if resource.follow_redirects?
+ ms << [Infrataster::FaradayMiddlewares::FollowRedirects, host_mapping: host_mapping]
+ end
+ if resource.inflate_gzip?
+ ms << [FaradayMiddleware::Gzip]
+ end
+
+ ms
+ end
end
end
end
-
-