Class: DecisionAgent::Versioning::VersionManager
- Inherits:
-
Object
- Object
- DecisionAgent::Versioning::VersionManager
- Defined in:
- lib/decision_agent/versioning/version_manager.rb
Overview
High-level service for managing rule versions Provides a framework-agnostic API using pluggable storage adapters
Instance Attribute Summary collapse
-
#adapter ⇒ Object
readonly
Returns the value of attribute adapter.
Instance Method Summary collapse
-
#compare(version_id_1:, version_id_2:) ⇒ Hash
Compare two versions.
-
#delete_tag(model_id:, name:) ⇒ Boolean
Delete a tag by name.
-
#delete_version(version_id:) ⇒ Boolean
Delete a specific version.
-
#get_active_version(rule_id:) ⇒ Hash?
Get the currently active version for a rule.
-
#get_history(rule_id:) ⇒ Hash
Get version history with metadata.
-
#get_tag(model_id:, name:) ⇒ Hash?
Resolve a tag to its version hash, or nil if the tag does not exist.
-
#get_version(version_id:) ⇒ Hash?
Get a specific version.
-
#get_versions(rule_id:, limit: nil) ⇒ Array<Hash>
Get all versions for a rule.
-
#initialize(adapter: nil) ⇒ VersionManager
constructor
Initialize with a storage adapter.
-
#list_all_versions(limit: nil) ⇒ Array<Hash>
Get all versions across all rules.
-
#list_tags(model_id:) ⇒ Array<Hash>
List all tags for a model.
-
#rollback(version_id:, performed_by: "system") ⇒ Hash
Rollback to a previous version (activate it without creating a duplicate).
-
#save_version(rule_id:, rule_content:, created_by: "system", changelog: nil, tag: nil) ⇒ Hash
Save a new version of a rule.
-
#tag!(model_id, version_id, name) ⇒ Hash
Tag a specific version after the fact.
Constructor Details
#initialize(adapter: nil) ⇒ VersionManager
Initialize with a storage adapter
12 13 14 |
# File 'lib/decision_agent/versioning/version_manager.rb', line 12 def initialize(adapter: nil) @adapter = adapter || default_adapter end |
Instance Attribute Details
#adapter ⇒ Object (readonly)
Returns the value of attribute adapter.
8 9 10 |
# File 'lib/decision_agent/versioning/version_manager.rb', line 8 def adapter @adapter end |
Instance Method Details
#compare(version_id_1:, version_id_2:) ⇒ Hash
Compare two versions
85 86 87 88 89 90 |
# File 'lib/decision_agent/versioning/version_manager.rb', line 85 def compare(version_id_1:, version_id_2:) @adapter.compare_versions( version_id_1: version_id_1, version_id_2: version_id_2 ) end |
#delete_tag(model_id:, name:) ⇒ Boolean
Delete a tag by name.
144 145 146 |
# File 'lib/decision_agent/versioning/version_manager.rb', line 144 def delete_tag(model_id:, name:) @adapter.delete_tag(model_id: model_id, name: name) end |
#delete_version(version_id:) ⇒ Boolean
Delete a specific version
111 112 113 |
# File 'lib/decision_agent/versioning/version_manager.rb', line 111 def delete_version(version_id:) @adapter.delete_version(version_id: version_id) end |
#get_active_version(rule_id:) ⇒ Hash?
Get the currently active version for a rule
67 68 69 |
# File 'lib/decision_agent/versioning/version_manager.rb', line 67 def get_active_version(rule_id:) @adapter.get_active_version(rule_id: rule_id) end |
#get_history(rule_id:) ⇒ Hash
Get version history with metadata
95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/decision_agent/versioning/version_manager.rb', line 95 def get_history(rule_id:) versions = get_versions(rule_id: rule_id) { rule_id: rule_id, total_versions: versions.length, active_version: get_active_version(rule_id: rule_id), versions: versions, created_at: versions.last&.dig(:created_at), updated_at: versions.first&.dig(:created_at) } end |
#get_tag(model_id:, name:) ⇒ Hash?
Resolve a tag to its version hash, or nil if the tag does not exist.
129 130 131 |
# File 'lib/decision_agent/versioning/version_manager.rb', line 129 def get_tag(model_id:, name:) @adapter.get_tag(model_id: model_id, name: name) end |
#get_version(version_id:) ⇒ Hash?
Get a specific version
60 61 62 |
# File 'lib/decision_agent/versioning/version_manager.rb', line 60 def get_version(version_id:) @adapter.get_version(version_id: version_id) end |
#get_versions(rule_id:, limit: nil) ⇒ Array<Hash>
Get all versions for a rule
46 47 48 |
# File 'lib/decision_agent/versioning/version_manager.rb', line 46 def get_versions(rule_id:, limit: nil) @adapter.list_versions(rule_id: rule_id, limit: limit) end |
#list_all_versions(limit: nil) ⇒ Array<Hash>
Get all versions across all rules
53 54 55 |
# File 'lib/decision_agent/versioning/version_manager.rb', line 53 def list_all_versions(limit: nil) @adapter.list_all_versions(limit: limit) end |
#list_tags(model_id:) ⇒ Array<Hash>
List all tags for a model.
136 137 138 |
# File 'lib/decision_agent/versioning/version_manager.rb', line 136 def (model_id:) @adapter.(model_id: model_id) end |
#rollback(version_id:, performed_by: "system") ⇒ Hash
Rollback to a previous version (activate it without creating a duplicate)
75 76 77 78 79 |
# File 'lib/decision_agent/versioning/version_manager.rb', line 75 def rollback(version_id:, performed_by: "system") # Simply activate the previous version without creating a duplicate # The version history already contains the full record @adapter.activate_version(version_id: version_id) end |
#save_version(rule_id:, rule_content:, created_by: "system", changelog: nil, tag: nil) ⇒ Hash
Save a new version of a rule
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/decision_agent/versioning/version_manager.rb', line 23 def save_version(rule_id:, rule_content:, created_by: "system", changelog: nil, tag: nil) validate_rule_content!(rule_content) = { created_by: created_by, changelog: changelog || generate_default_changelog(rule_id) } version = @adapter.create_version( rule_id: rule_id, content: rule_content, metadata: ) tag!(rule_id, version[:id], tag) if tag version end |
#tag!(model_id, version_id, name) ⇒ Hash
Tag a specific version after the fact. Creates the tag if it does not exist; re-points it if the name is already used.
121 122 123 |
# File 'lib/decision_agent/versioning/version_manager.rb', line 121 def tag!(model_id, version_id, name) @adapter.create_tag(model_id: model_id, version_id: version_id, name: name) end |