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