Class: Treaty::Action::Versions::Resolver

Inherits:
Object
  • Object
show all
Defined in:
lib/treaty/action/versions/resolver.rb

Overview

Resolves version factory based on specified or default version.

Purpose

Finds the appropriate version factory from the collection based on:

  • Specified version (from request header or parameter)
  • Default version (if no version specified)

Also enforces deprecation by raising error for deprecated versions.

Usage

Called internally by:

  • Versions::Workspace (at the start of treaty execution)

Resolution Logic

  1. If version specified → find matching factory or raise VersionNotFound
  2. If no version → use default factory or raise SpecifiedVersionNotFound
  3. If resolved factory is deprecated → raise Deprecated

Error Types

Error Condition
VersionNotFound Specified version doesn't exist
SpecifiedVersionNotFound No version specified and no default
Deprecated Resolved version is marked deprecated

Example

# Find specific version:
factory = Resolver.resolve!(
specified_version: "2",
collection_of_versions: collection
)

# Use default version:
factory = Resolver.resolve!(
specified_version: nil,
collection_of_versions: collection
)

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(specified_version:, collection_of_versions:) ⇒ Resolver

Creates a new resolver instance

Parameters:



65
66
67
68
# File 'lib/treaty/action/versions/resolver.rb', line 65

def initialize(specified_version:, collection_of_versions:)
  @specified_version = specified_version
  @collection_of_versions = collection_of_versions
end

Class Method Details

.resolve!Treaty::Action::Versions::Factory

Resolves version factory (class method shortcut)

Parameters:

Returns:

Raises:



57
58
59
# File 'lib/treaty/action/versions/resolver.rb', line 57

def self.resolve!(...)
  new(...).resolve!
end

Instance Method Details

#resolve!Treaty::Action::Versions::Factory

Resolves and returns the appropriate version factory

Returns:

Raises:



76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/treaty/action/versions/resolver.rb', line 76

def resolve!
  determined_factory =
    if specified_version_blank?
      default_version_factory || raise_specified_version_not_found!
    else
      version_factory || raise_version_not_found!
    end

  raise_version_deprecated! if determined_factory.deprecated_result

  determined_factory
end