class Rack::PactBroker::SetBaseUrl

Constants

X_FORWARDED_PATTERN

Attributes

app[R]
base_urls[R]

Public Class Methods

new(app, base_urls) click to toggle source
# File lib/rack/pact_broker/set_base_url.rb, line 6
def initialize app, base_urls
  @app = app
  @base_urls = base_urls
end

Public Instance Methods

call(env) click to toggle source
# File lib/rack/pact_broker/set_base_url.rb, line 11
def call(env)
  if env["pactbroker.base_url"]
    app.call(env)
  else
    app.call(env.merge("pactbroker.base_url" => select_matching_base_url(env)))
  end
end

Private Instance Methods

default_base_url() click to toggle source
# File lib/rack/pact_broker/set_base_url.rb, line 32
def default_base_url
  base_urls.first
end
matching_base_url(env) click to toggle source
# File lib/rack/pact_broker/set_base_url.rb, line 44
def matching_base_url(env)
  request_base_url = Rack::Request.new(env).base_url
  if base_urls.include?(request_base_url)
    request_base_url
  end
end
matching_base_url_considering_x_forwarded_headers(env) click to toggle source
# File lib/rack/pact_broker/set_base_url.rb, line 36
def matching_base_url_considering_x_forwarded_headers(env)
  matching_base_url(env)
end
matching_base_url_not_considering_x_forwarded_headers(env) click to toggle source
# File lib/rack/pact_broker/set_base_url.rb, line 40
def matching_base_url_not_considering_x_forwarded_headers(env)
  matching_base_url(env.reject{ |k, _| k =~ X_FORWARDED_PATTERN} )
end
select_matching_base_url(env) click to toggle source
# File lib/rack/pact_broker/set_base_url.rb, line 23
def select_matching_base_url(env)
  if base_urls.size > 1
    return matching_base_url_considering_x_forwarded_headers(env) ||
      matching_base_url_not_considering_x_forwarded_headers(env) ||
      default_base_url
  end
  default_base_url
end