Sha256: 55da535e72c6be647ef48d7da122ad99a22f49ebf0de173f255a7c30036f1034

Contents?: true

Size: 1.18 KB

Versions: 2

Compression:

Stored size: 1.18 KB

Contents

module VersionCake
  class VersionContextService

    def initialize(config)
      @versioned_resources = config.versioned_resources
      @default_version = config.missing_version
      @strategies = config.extraction_strategies
    end

    def create_context_from_request(raw_request)
      return unless resource = find_resource(raw_request.path)

      request = VersionCake::VersionedRequest.new(
                    raw_request,
                    @strategies,
                    @default_version
                )
      request.execute

      result = if request.failed
        :invalid_version
      else
        check_version(resource, request.version)
      end

      VersionCake::VersionContext.new(request.version, resource, result)
    end

    def create_context(uri, version)
      return unless resource = find_resource(uri)

      result = check_version(resource, version)

      VersionCake::VersionContext.new(version, resource, result)
    end

    private

    def check_version(resource, version)
      VersionCake::VersionChecker.new(resource, version).execute
    end

    def find_resource(uri)
      @versioned_resources.find { |resource| resource.uri.match uri }
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
versioncake-3.1.0 lib/versioncake/version_context_service.rb
versioncake-3.0.0 lib/versioncake/version_context_service.rb