Class: AgentHarness::ReleaseRegistry

Inherits:
Object
  • Object
show all
Defined in:
lib/agent_harness/release_registry.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeReleaseRegistry

Returns a new instance of ReleaseRegistry.



7
8
9
# File 'lib/agent_harness/release_registry.rb', line 7

def initialize
  @releases = {}
end

Instance Attribute Details

#releasesObject (readonly)

Returns the value of attribute releases.



5
6
7
# File 'lib/agent_harness/release_registry.rb', line 5

def releases
  @releases
end

Instance Method Details

#clearObject



62
63
64
# File 'lib/agent_harness/release_registry.rb', line 62

def clear
  @releases.clear
end

#clear_provider(provider_name) ⇒ Object



66
67
68
# File 'lib/agent_harness/release_registry.rb', line 66

def clear_provider(provider_name)
  @releases.delete(provider_name.to_sym)
end

#merge!(other_registry) ⇒ Object



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/agent_harness/release_registry.rb', line 70

def merge!(other_registry)
  other_registry.releases.each do |provider_name, entries|
    @releases[provider_name] ||= []
    entries.each do |entry|
      existing = @releases[provider_name].find { |e| e[:version] == entry[:version] }
      if existing
        existing[:released_at] = entry[:released_at]
      else
        @releases[provider_name] << entry.dup
      end
    end
  end

  self
end

#providersObject



58
59
60
# File 'lib/agent_harness/release_registry.rb', line 58

def providers
  @releases.keys
end

#register(provider_name, version, released_at: Time.now) ⇒ Object

Raises:

  • (ArgumentError)


11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/agent_harness/release_registry.rb', line 11

def register(provider_name, version, released_at: Time.now)
  provider_name = provider_name.to_sym
  version = version.to_s

  raise ArgumentError, "version must be a non-empty string" if version.empty?
  raise ArgumentError, "released_at must be a Time" unless released_at.is_a?(Time)

  @releases[provider_name] ||= []
  entry = {version: version, released_at: released_at}
  existing = @releases[provider_name].find { |e| e[:version] == version }
  if existing
    existing[:released_at] = released_at
  else
    @releases[provider_name] << entry
  end

  entry
end

#registered?(provider_name, version) ⇒ Boolean

Returns:

  • (Boolean)


48
49
50
51
52
53
54
55
56
# File 'lib/agent_harness/release_registry.rb', line 48

def registered?(provider_name, version)
  provider_name = provider_name.to_sym
  version = version.to_s

  entries = @releases[provider_name]
  return false unless entries

  entries.any? { |e| e[:version] == version }
end

#released_at(provider_name, version) ⇒ Object



37
38
39
40
41
42
43
44
45
46
# File 'lib/agent_harness/release_registry.rb', line 37

def released_at(provider_name, version)
  provider_name = provider_name.to_sym
  version = version.to_s

  entries = @releases[provider_name]
  return nil unless entries

  entry = entries.find { |e| e[:version] == version }
  entry&.fetch(:released_at, nil)
end

#versions_for(provider_name) ⇒ Object



30
31
32
33
34
35
# File 'lib/agent_harness/release_registry.rb', line 30

def versions_for(provider_name)
  provider_name = provider_name.to_sym
  return nil unless @releases.key?(provider_name)

  @releases[provider_name].dup
end