class Rack::ServiceApiVersioning::AcceptContentTypeSelector

Select API Version of Component Service based on HTTP `Accept` header.

Attributes

app[R]
env[R]
input[R]

Public Class Methods

new(app) click to toggle source
# File lib/rack/service_api_versioning/accept_content_type_selector.rb, line 15
def initialize(app)
  @app = app
  @env = nil
  @input = nil
  self
end

Public Instance Methods

call(env) click to toggle source
# File lib/rack/service_api_versioning/accept_content_type_selector.rb, line 22
def call(env)
  @env = env
  @input = InputEnv.new env
  match_request_from_header
end

Private Instance Methods

add_component_api_version_data(version) click to toggle source
# File lib/rack/service_api_versioning/accept_content_type_selector.rb, line 32
def add_component_api_version_data(version)
  env['COMPONENT_API_VERSION_DATA'] = encoded_data_for(version)
  self
end
api_versions() click to toggle source
# File lib/rack/service_api_versioning/accept_content_type_selector.rb, line 37
def api_versions
  input.data[:api_versions]
end
encoded_data_for(api_version) click to toggle source
# File lib/rack/service_api_versioning/accept_content_type_selector.rb, line 41
def encoded_data_for(api_version)
  EncodedApiVersionData.call(api_version: api_version, data: input.data)
end
if_component_apis_defined() { || ... } click to toggle source
# File lib/rack/service_api_versioning/accept_content_type_selector.rb, line 45
def if_component_apis_defined(&_)
  InputIsInvalid.call(input) || yield
end
if_requested_api_version_found() { |best_version| ... } click to toggle source
# File lib/rack/service_api_versioning/accept_content_type_selector.rb, line 49
def if_requested_api_version_found
  best_version = specified_api_version
  return report_no_matching_api_versions unless best_version
  yield best_version
end
match_request_from_header() click to toggle source
# File lib/rack/service_api_versioning/accept_content_type_selector.rb, line 55
def match_request_from_header
  if_component_apis_defined do
    if_requested_api_version_found do |matching_version|
      use_api_version(matching_version)
    end
  end
end
report_no_matching_api_versions() click to toggle source
# File lib/rack/service_api_versioning/accept_content_type_selector.rb, line 63
def report_no_matching_api_versions
  ReportNoMatchingVersion.call api_versions: api_versions
end
specified_api_version() click to toggle source
# File lib/rack/service_api_versioning/accept_content_type_selector.rb, line 67
def specified_api_version
  MatchHeaderAgainstApiVersions.call(accept_header: env['HTTP_ACCEPT'],
                                     api_versions: api_versions)
end
use_api_version(matching_version) click to toggle source
# File lib/rack/service_api_versioning/accept_content_type_selector.rb, line 72
def use_api_version(matching_version)
  add_component_api_version_data(matching_version)
  app.call env
end