Class: DecisionAgent::Versioning::Adapter

Inherits:
Object
  • Object
show all
Defined in:
lib/decision_agent/versioning/adapter.rb

Overview

Abstract base class for version storage adapters Allows framework-agnostic versioning with pluggable storage backends

Direct Known Subclasses

ActiveRecordAdapter, FileStorageAdapter

Instance Method Summary collapse

Instance Method Details

#activate_version(version_id:) ⇒ Hash

Activate a specific version

Parameters:

  • The version to activate

Returns:

  • The activated version

Raises:



57
58
59
# File 'lib/decision_agent/versioning/adapter.rb', line 57

def activate_version(version_id:)
  raise NotImplementedError, "#{self.class} must implement #activate_version"
end

#compare_versions(version_id_1:, version_id_2:) ⇒ Hash

Compare two versions

Parameters:

  • First version ID

  • Second version ID

Returns:

  • Comparison result with differences



65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/decision_agent/versioning/adapter.rb', line 65

def compare_versions(version_id_1:, version_id_2:)
  v1 = get_version(version_id: version_id_1)
  v2 = get_version(version_id: version_id_2)

  return nil if v1.nil? || v2.nil?

  {
    version_1: v1,
    version_2: v2,
    differences: calculate_diff(v1[:content], v2[:content])
  }
end

#create_tag(model_id:, version_id:, name:) ⇒ Hash

Create (or update) a named tag pointing to a specific version. Tags are unique per model; calling this with an existing name re-points the tag.

Parameters:

  • The rule/model identifier

  • The version to tag

  • The tag name (e.g. "release-candidate")

Returns:

  • The created/updated tag ({ name:, version_id:, created_at: })

Raises:



91
92
93
# File 'lib/decision_agent/versioning/adapter.rb', line 91

def create_tag(model_id:, version_id:, name:)
  raise NotImplementedError, "#{self.class} must implement #create_tag"
end

#create_version(rule_id:, content:, metadata: {}) ⇒ Hash

Create a new version for a rule

Parameters:

  • Unique identifier for the rule

  • Rule definition as a hash

  • (defaults to: {})

    Additional metadata (created_by, changelog, etc.)

Returns:

  • The created version

Raises:



13
14
15
# File 'lib/decision_agent/versioning/adapter.rb', line 13

def create_version(rule_id:, content:, metadata: {})
  raise NotImplementedError, "#{self.class} must implement #create_version"
end

#delete_tag(model_id:, name:) ⇒ Boolean

Delete a tag by name.

Parameters:

  • The rule/model identifier

  • The tag name

Returns:

  • True if deleted, false if tag did not exist

Raises:



114
115
116
# File 'lib/decision_agent/versioning/adapter.rb', line 114

def delete_tag(model_id:, name:)
  raise NotImplementedError, "#{self.class} must implement #delete_tag"
end

#delete_version(version_id:) ⇒ Boolean

Delete a specific version

Parameters:

  • The version to delete

Returns:

  • True if deleted successfully

Raises:



81
82
83
# File 'lib/decision_agent/versioning/adapter.rb', line 81

def delete_version(version_id:)
  raise NotImplementedError, "#{self.class} must implement #delete_version"
end

#get_active_version(rule_id:) ⇒ Hash?

Get the active version for a rule

Parameters:

  • The rule identifier

Returns:

  • The active version or nil

Raises:



50
51
52
# File 'lib/decision_agent/versioning/adapter.rb', line 50

def get_active_version(rule_id:)
  raise NotImplementedError, "#{self.class} must implement #get_active_version"
end

#get_tag(model_id:, name:) ⇒ Hash?

Retrieve a tag by name for a given model.

Parameters:

  • The rule/model identifier

  • The tag name

Returns:

  • The tag hash or nil if not found

Raises:



99
100
101
# File 'lib/decision_agent/versioning/adapter.rb', line 99

def get_tag(model_id:, name:)
  raise NotImplementedError, "#{self.class} must implement #get_tag"
end

#get_version(version_id:) ⇒ Hash?

Get a specific version by ID

Parameters:

  • The version identifier

Returns:

  • The version hash or nil if not found

Raises:



35
36
37
# File 'lib/decision_agent/versioning/adapter.rb', line 35

def get_version(version_id:)
  raise NotImplementedError, "#{self.class} must implement #get_version"
end

#get_version_by_number(rule_id:, version_number:) ⇒ Hash?

Get a specific version by rule_id and version_number

Parameters:

  • The rule identifier

  • The version number

Returns:

  • The version hash or nil if not found

Raises:



43
44
45
# File 'lib/decision_agent/versioning/adapter.rb', line 43

def get_version_by_number(rule_id:, version_number:)
  raise NotImplementedError, "#{self.class} must implement #get_version_by_number"
end

#list_all_versions(limit: nil) ⇒ Array<Hash>

List all versions across all rules

Parameters:

  • (defaults to: nil)

    Optional limit for number of versions

Returns:

  • Array of version hashes

Raises:



28
29
30
# File 'lib/decision_agent/versioning/adapter.rb', line 28

def list_all_versions(limit: nil)
  raise NotImplementedError, "#{self.class} must implement #list_all_versions"
end

#list_tags(model_id:) ⇒ Array<Hash>

List all tags for a given model.

Parameters:

  • The rule/model identifier

Returns:

  • Array of tag hashes, sorted by name

Raises:



106
107
108
# File 'lib/decision_agent/versioning/adapter.rb', line 106

def list_tags(model_id:)
  raise NotImplementedError, "#{self.class} must implement #list_tags"
end

#list_versions(rule_id:, limit: nil) ⇒ Array<Hash>

List all versions for a specific rule

Parameters:

  • The rule identifier

  • (defaults to: nil)

    Optional limit for number of versions

Returns:

  • Array of version hashes

Raises:



21
22
23
# File 'lib/decision_agent/versioning/adapter.rb', line 21

def list_versions(rule_id:, limit: nil)
  raise NotImplementedError, "#{self.class} must implement #list_versions"
end