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

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

Overview

Active Record-backed registry for scheduler definitions.

Instance Method Summary collapse

Methods inherited from Definition::Registry

#disable_definition, #enable_definition, #update_definition_enabled_state

Constructor Details

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

Returns a new instance of DefinitionRegistry.

Parameters:

  • connection: (Kaal::rbs_any, nil) (defaults to: nil)
  • model: (Kaal::rbs_any) (defaults to: DefinitionRecord)


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_definitions ⇒ Kaal::rbs_any

Returns:

  • (Kaal::rbs_any)


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_definitions ⇒ Kaal::rbs_any

Returns:

  • (Kaal::rbs_any)


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) ⇒ Kaal::rbs_any

Parameters:

  • key (Kaal::rbs_any)

Returns:

  • (Kaal::rbs_any)


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

#normalize(record) ⇒ nil, Kaal::rbs_any

Parameters:

  • record (Kaal::rbs_any)

Returns:

  • (nil, Kaal::rbs_any)


60
61
62
63
64
# File 'lib/kaal/internal/active_record/definition_registry.rb', line 60

def normalize(record)
  return nil unless record

  normalize_definition_record(record)
end

#normalize_definition_record(record) ⇒ { key: Kaal::rbs_any, cron: Kaal::rbs_any, enabled: Kaal::rbs_any, source: Kaal::rbs_any, metadata: Kaal::rbs_any, created_at: Kaal::rbs_any, updated_at: Kaal::rbs_any, disabled_at: Kaal::rbs_any }

Parameters:

  • record (Kaal::rbs_any)

Returns:

  • ({ key: Kaal::rbs_any, cron: Kaal::rbs_any, enabled: Kaal::rbs_any, source: Kaal::rbs_any, metadata: Kaal::rbs_any, created_at: Kaal::rbs_any, updated_at: Kaal::rbs_any, disabled_at: Kaal::rbs_any })


66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/kaal/internal/active_record/definition_registry.rb', line 66

def normalize_definition_record(record)
  {
    key: record.key,
    cron: record.cron,
    enabled: record.enabled ? true : false,
    source: record.source,
    metadata: Kaal::Definition::PersistenceHelpers.(record.),
    created_at: record.created_at,
    updated_at: record.updated_at,
    disabled_at: record.disabled_at
  }
end

#remove_definition(key) ⇒ nil, Kaal::rbs_any

Parameters:

  • key (Kaal::rbs_any)

Returns:

  • (nil, Kaal::rbs_any)


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: {}) ⇒ Kaal::rbs_any

Parameters:

  • key: (Kaal::rbs_any)
  • cron: (Kaal::rbs_any)
  • enabled: (Boolean) (defaults to: true)
  • source: (::String) (defaults to: 'code')
  • metadata: (::Hash[Kaal::rbs_any, Kaal::rbs_any]) (defaults to: {})

Returns:

  • (Kaal::rbs_any)


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