Sha256: 378de696efb7dff746125d8a4c9ae7ccddfbd75c320b8a257d9ffd5ff0f7ef00

Contents?: true

Size: 1.22 KB

Versions: 1

Compression:

Stored size: 1.22 KB

Contents

# frozen_string_literal: true

module Grape
  module Middleware
    module Versioner
      # This middleware sets various version related rack environment variables
      # based on the HTTP Accept-Version header
      #
      # Example: For request header
      #    Accept-Version: v1
      #
      # The following rack env variables are set:
      #
      #    env['api.version']  => 'v1'
      #
      # If version does not match this route, then a 406 is raised with
      # X-Cascade header to alert Grape::Router to attempt the next matched
      # route.
      class AcceptVersionHeader < Base
        include VersionerHelpers

        def before
          potential_version = env[Grape::Http::Headers::HTTP_ACCEPT_VERSION]&.strip
          not_acceptable!('Accept-Version header must be set.') if strict? && potential_version.blank?

          return if potential_version.blank?

          not_acceptable!('The requested version is not supported.') unless potential_version_match?(potential_version)
          env[Grape::Env::API_VERSION] = potential_version
        end

        private

        def not_acceptable!(message)
          throw :error, status: 406, headers: error_headers, message: message
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
grape-2.2.0 lib/grape/middleware/versioner/accept_version_header.rb