Module: Legion::Registry::Persistence

Defined in:
lib/legion/registry/persistence.rb

Class Method Summary collapse

Class Method Details

.data_available?Boolean

Returns:

  • (Boolean)


7
8
9
10
11
12
13
14
15
# File 'lib/legion/registry/persistence.rb', line 7

def data_available?
  return false unless defined?(Legion::Data)
  return false unless Legion::Data.respond_to?(:connection) && Legion::Data.connection

  Legion::Data.connection.table_exists?(:extensions_registry)
rescue StandardError => e
  Legion::Logging.debug "Registry::Persistence#data_available? check failed: #{e.message}" if defined?(Legion::Logging)
  false
end

.load_from_dbObject



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/legion/registry/persistence.rb', line 17

def load_from_db
  return 0 unless data_available?

  count = 0
  registry_dataset.each do |row|
    entry = Entry.new(
      name:        row[:name],
      version:     row[:version],
      author:      row[:author],
      description: row[:description],
      status:      row[:status]&.to_sym,
      airb_status: row[:airb_status],
      risk_tier:   row[:risk_tier]
    )
    Legion::Registry.register(entry)
    count += 1
  end
  count
end

.persist(entry) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/legion/registry/persistence.rb', line 37

def persist(entry)
  return false unless data_available?

  attrs = persistence_attrs(entry)
  existing = registry_dataset.where(name: entry.name).first

  if existing
    registry_dataset.where(name: entry.name).update(**attrs, updated_at: Time.now)
  else
    registry_dataset.insert(**attrs, created_at: Time.now, updated_at: Time.now)
  end

  true
rescue StandardError => e
  Legion::Logging.warn("Registry::Persistence failed to persist #{entry.name}: #{e.message}") if defined?(Legion::Logging)
  false
end