Sha256: 9d77591e32ec6f2e8a395a54d626fbf974d64ce1f056413fd8eba73a2f5d72d8

Contents?: true

Size: 1.27 KB

Versions: 48

Compression:

Stored size: 1.27 KB

Contents

require "uri"
require "rack/request"
require "rack/static"

module Rack
  module HalBrowser
    class Redirect

      def initialize(app, options = {})
        @app = app
        @excluded_paths = Array(options[:exclude]) << "/hal-browser"
        @hal_browser = Rack::Static.new(@app, :urls => ["/hal-browser"], :root => ::File.expand_path("../../../../vendor", __FILE__))
      end

      def call(env)
        request = Rack::Request.new(env)
        if match?(request)
          return [303, {"Location" => hal_browser_url_from_request(request)}, []]
        end
        @hal_browser.call(env)
      end

      private

      def match?(request)
        request.get? && prefers_html?(request) && path_not_excluded?(request)
      end

      def prefers_html?(request)
        # TODO: actually follow real HTTP content negotiation rules
        request.env.fetch("HTTP_ACCEPT", "").start_with?("text/html") && request.env.fetch("HTTP_ACCEPT", "").include?("json")
      end

      def path_not_excluded?(request)
        !@excluded_paths.detect{|excluded_path| request.path.start_with?(excluded_path) }
      end

      def hal_browser_url_from_request(request)
        url = URI.parse("/hal-browser/browser.html")
        url.fragment = request.path_info
        url.to_s
      end
    end
  end
end

Version data entries

48 entries across 48 versions & 1 rubygems

Version Path
pact_broker-2.114.0 lib/rack/hal_browser/redirect.rb
pact_broker-2.113.2 lib/rack/hal_browser/redirect.rb
pact_broker-2.113.1 lib/rack/hal_browser/redirect.rb
pact_broker-2.113.0 lib/rack/hal_browser/redirect.rb
pact_broker-2.112.0 lib/rack/hal_browser/redirect.rb
pact_broker-2.111.0 lib/rack/hal_browser/redirect.rb
pact_broker-2.109.1 lib/rack/hal_browser/redirect.rb
pact_broker-2.109.0 lib/rack/hal_browser/redirect.rb
pact_broker-2.108.0 lib/rack/hal_browser/redirect.rb
pact_broker-2.107.1 lib/rack/hal_browser/redirect.rb
pact_broker-2.107.0 lib/rack/hal_browser/redirect.rb
pact_broker-2.107.0.beta.1 lib/rack/hal_browser/redirect.rb
pact_broker-2.106.0 lib/rack/hal_browser/redirect.rb
pact_broker-2.105.0 lib/rack/hal_browser/redirect.rb
pact_broker-2.104.0 lib/rack/hal_browser/redirect.rb
pact_broker-2.103.0 lib/rack/hal_browser/redirect.rb
pact_broker-2.102.2 lib/rack/hal_browser/redirect.rb
pact_broker-2.102.1 lib/rack/hal_browser/redirect.rb
pact_broker-2.102.0 lib/rack/hal_browser/redirect.rb
pact_broker-2.101.0 lib/rack/hal_browser/redirect.rb