Sha256: ccfc0e4af8e02537ba14813a8753d142b6e3d4a091463b97506c1f2fa76f76fd

Contents?: true

Size: 1.7 KB

Versions: 1

Compression:

Stored size: 1.7 KB

Contents

# frozen_string_literal: true

module Grape
  module Middleware
    module VersionerHelpers
      DEFAULT_PATTERN = /.*/i.freeze
      DEFAULT_PARAMETER = 'apiver'

      def default_options
        {
          versions: nil,
          prefix: nil,
          mount_path: nil,
          pattern: DEFAULT_PATTERN,
          version_options: {
            strict: false,
            cascade: true,
            parameter: DEFAULT_PARAMETER
          }
        }
      end

      def versions
        options[:versions]
      end

      def prefix
        options[:prefix]
      end

      def mount_path
        options[:mount_path]
      end

      def pattern
        options[:pattern]
      end

      def version_options
        options[:version_options]
      end

      def strict?
        version_options[:strict]
      end

      # By default those errors contain an `X-Cascade` header set to `pass`, which allows nesting and stacking
      # of routes (see Grape::Router) for more information). To prevent
      # this behavior, and not add the `X-Cascade` header, one can set the `:cascade` option to `false`.
      def cascade?
        version_options[:cascade]
      end

      def parameter_key
        version_options[:parameter]
      end

      def vendor
        version_options[:vendor]
      end

      def error_headers
        cascade? ? { Grape::Http::Headers::X_CASCADE => 'pass' } : {}
      end

      def potential_version_match?(potential_version)
        versions.blank? || versions.any? { |v| v.to_s == potential_version }
      end

      def version_not_found!
        throw :error, status: 404, message: '404 API Version Not Found', headers: { Grape::Http::Headers::X_CASCADE => 'pass' }
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
grape-2.2.0 lib/grape/middleware/versioner_helpers.rb