module Rack::PactBroker::RequestTarget

Constants

API_CONTENT_TYPES
WEB_ASSET_EXTENSIONS

Public Instance Methods

request_for_api?(env) click to toggle source
# File lib/rack/pact_broker/request_target.rb, line 16
def request_for_api?(env)
  explicit_request_for_api(env) || no_accept_header(env) || is_badge_request?(env) || (accept_all(env) && !is_web_extension(env))
end
request_for_ui?(env) click to toggle source
# File lib/rack/pact_broker/request_target.rb, line 12
def request_for_ui?(env)
  !(request_for_api?(env))
end

Private Instance Methods

accept_all(env) click to toggle source

default curl Accept header Also used by browsers to request various web assets like woff files

# File lib/rack/pact_broker/request_target.rb, line 48
def accept_all(env)
  env["HTTP_ACCEPT"] == "*/*"
end
accepts_api_content_type(env) click to toggle source
# File lib/rack/pact_broker/request_target.rb, line 30
def accepts_api_content_type(env)
  is_api_content_type((env["HTTP_ACCEPT"]&.downcase) || "")
end
body_is_api_content_type(env) click to toggle source
# File lib/rack/pact_broker/request_target.rb, line 34
def body_is_api_content_type(env)
  is_api_content_type((env["CONTENT_TYPE"]&.downcase) || "")
end
body_is_json(env) click to toggle source
# File lib/rack/pact_broker/request_target.rb, line 22
def body_is_json(env)
  env["CONTENT_TYPE"]&.include?("json")
end
explicit_request_for_api(env) click to toggle source
# File lib/rack/pact_broker/request_target.rb, line 26
def explicit_request_for_api(env)
  accepts_api_content_type(env) || body_is_api_content_type(env)
end
is_api_content_type(header) click to toggle source
# File lib/rack/pact_broker/request_target.rb, line 38
def is_api_content_type(header)
  API_CONTENT_TYPES.any?{ |content_type| header.include?(content_type) }
end
is_badge_request?(env) click to toggle source
# File lib/rack/pact_broker/request_target.rb, line 42
def is_badge_request?(env)
  env["HTTP_ACCEPT"].include?("svg") && ::PactBroker::Api::Paths.is_badge_path?(env["PATH_INFO"])
end
is_web_extension(env) click to toggle source
# File lib/rack/pact_broker/request_target.rb, line 58
def is_web_extension(env)
  env["PATH_INFO"].end_with?(*WEB_ASSET_EXTENSIONS)
end
no_accept_header(env) click to toggle source

No browser ever makes a request without an accept header, so it must be an API request if there is no Accept header

# File lib/rack/pact_broker/request_target.rb, line 54
def no_accept_header(env)
  env["HTTP_ACCEPT"] == nil || env["HTTP_ACCEPT"] == ""
end