Sha256: 9400f10575b82620cd4475aca808ddeafc3167b156573a67bc89407270c6e4f7

Contents?: true

Size: 1.13 KB

Versions: 3

Compression:

Stored size: 1.13 KB

Contents

require 'sitehub/constants'
require 'sitehub/nil_proxy'
require 'rack/request'
require 'rack/response'
require 'rack/utils'
require 'em-http'

class SiteHub
  module Middleware
    class ForwardProxies
      NIL_PROXY = NilProxy.new

      def call(env)
        source_request = Rack::Request.new(env)

        forward_proxy = mapped_proxy(path: source_request.path, request: source_request)

        forward_proxy.call(env)
      end

      def init
        forward_proxies.values.each(&:build)
        self
      end

      def <<(route)
        forward_proxies[route.mapped_path] = route
      end

      def mapped_proxy(path:, request:)
        forward_proxies[mapping(path)].resolve(id: request.cookies[RECORDED_ROUTES_COOKIE], env: request.env)
      end

      def mapping(path)
        forward_proxies.keys.find do |key|
          case key
          when Regexp
            key.match(path)
          else
            path == key
          end
        end
      end

      def forward_proxies
        @forward_proxies ||= begin
          {}.tap do |hash|
            hash.default = NIL_PROXY
          end
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
sitehub-0.4.8 lib/sitehub/middleware/forward_proxies.rb
sitehub-0.4.7 lib/sitehub/middleware/forward_proxies.rb
sitehub-0.4.6 lib/sitehub/middleware/forward_proxies.rb