Sha256: c9efab768d7a6ffb1448d28c8d8dd23909e703d346092306f78b11e56b023595

Contents?: true

Size: 1.16 KB

Versions: 2

Compression:

Stored size: 1.16 KB

Contents

# frozen_string_literal: true

require_relative './http_error_response'

# All(?) Rack code is namespaced within this module.
module Rack
  # Module includes our middleware components for managing service API versions.
  module ServiceApiVersioning
    # Builds Rack::Response to halt request execution with an HTTP status code
    # of 406 ("Not Acceptable") when no presently available API Version has been
    # specified in an HTTP `Accept` header.
    class ReportNoMatchingVersion < HttpErrorResponse
      def self.call(api_versions:, code: 406)
        new(code, Internals.message_data(api_versions)).call
      end

      # Stateless methods.
      module Internals
        def self.all_types_as_string(api_versions, separator = ', ')
          all_types = api_versions.values.map do |version|
            version[:content_type]
          end
          all_types.join(separator)
        end

        def self.message_data(api_versions)
          types = all_types_as_string(api_versions)
          JSON.dump('supported-media-types': types)
        end
      end
      private_constant :Internals
    end # class Rack::ServiceApiVersioning::ReportNoMatchingVersion
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rack-service_api_versioning-0.1.1 lib/rack/service_api_versioning/report_no_matching_version.rb
rack-service_api_versioning-0.1.0 lib/rack/service_api_versioning/report_no_matching_version.rb