Class: Kaal::Internal::ActiveRecord::DefinitionRegistry

Inherits:
Definition::Registry show all
Defined in:
lib/kaal/internal/active_record/definition_registry.rb

Overview

Active Record-backed registry for scheduler definitions.

Instance Method Summary collapse

Methods inherited from Definition::Registry

#disable_definition, #enable_definition

Constructor Details

#initialize(connection: nil, model: DefinitionRecord) ⇒ DefinitionRegistry

Returns a new instance of DefinitionRegistry.



16
17
18
19
20
# File 'lib/kaal/internal/active_record/definition_registry.rb', line 16

def initialize(connection: nil, model: DefinitionRecord)
  super()
  ConnectionSupport.configure!(connection)
  @model = model
end

Instance Method Details

#all_definitionsObject



50
51
52
# File 'lib/kaal/internal/active_record/definition_registry.rb', line 50

def all_definitions
  @model.order(:key).map { |record| normalize(record) }
end

#enabled_definitionsObject



54
55
56
# File 'lib/kaal/internal/active_record/definition_registry.rb', line 54

def enabled_definitions
  @model.where(enabled: true).order(:key).map { |record| normalize(record) }
end

#find_definition(key) ⇒ Object



46
47
48
# File 'lib/kaal/internal/active_record/definition_registry.rb', line 46

def find_definition(key)
  normalize(@model.find_by(key: key))
end

#remove_definition(key) ⇒ Object



37
38
39
40
41
42
43
44
# File 'lib/kaal/internal/active_record/definition_registry.rb', line 37

def remove_definition(key)
  record = @model.find_by(key: key)
  return nil unless record

  normalized = normalize(record)
  record.destroy!
  normalized
end

#upsert_definition(key:, cron:, enabled: true, source: 'code', metadata: {}) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/kaal/internal/active_record/definition_registry.rb', line 22

def upsert_definition(key:, cron:, enabled: true, source: 'code', metadata: {})
  record = @model.find_or_initialize_by(key: key)
  existing = record.persisted? ? { enabled: record.enabled, disabled_at: record.disabled_at } : nil
  now = Time.now.utc
  record.cron = cron
  record.enabled = enabled
  record.source = source
  record. = JSON.generate( || {})
  record.created_at ||= now
  record.updated_at = now
  record.disabled_at = Kaal::Definition::PersistenceHelpers.disabled_at_for(existing, enabled, now)
  record.save!
  normalize(record)
end