Class: Treaty::Action::Versions::Resolver
- Inherits:
-
Object
- Object
- Treaty::Action::Versions::Resolver
- 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
- If version specified → find matching factory or raise VersionNotFound
- If no version → use default factory or raise SpecifiedVersionNotFound
- 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
-
.resolve! ⇒ Treaty::Action::Versions::Factory
Resolves version factory (class method shortcut).
Instance Method Summary collapse
-
#initialize(specified_version:, collection_of_versions:) ⇒ Resolver
constructor
Creates a new resolver instance.
-
#resolve! ⇒ Treaty::Action::Versions::Factory
Resolves and returns the appropriate version factory.
Constructor Details
#initialize(specified_version:, collection_of_versions:) ⇒ Resolver
Creates a new resolver instance
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)
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
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 |