Sha256: 3992b85f2df3a55037810edb8dd33b2f2e2078f569e814c1513941725e6420db

Contents?: true

Size: 1.17 KB

Versions: 1

Compression:

Stored size: 1.17 KB

Contents

module VersionCake
  class VersionedRequest
    attr_reader :version, :extracted_version, :is_latest_version

    def initialize(request, version_override=nil)
      @version = version_override || extract_version(request)
      @is_latest_version = @version == config.latest_version
    end

    def supported_versions
      config.supported_versions(@version)
    end

    private

    def config
      VersionCake::Railtie.config.versioncake
    end

    def apply_strategies(request)
      version = nil
      config.extraction_strategies.each do |strategy|
        version = strategy.extract(request)
        break unless version.nil?
      end
      version
    end

    def extract_version(request)
      @extracted_version = apply_strategies(request)
      if @extracted_version.nil?
        @version = config.default_version || config.latest_version
      elsif config.supports_version? @extracted_version
        @version = @extracted_version
      elsif @extracted_version > config.latest_version
        raise ActionController::RoutingError.new("No route match for version")
      else
        raise ActionController::RoutingError.new("Version is deprecated")
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
versioncake-2.0.0 lib/versioncake/versioned_request.rb