Class: Kaal::Definition::DatabaseEngine

Inherits:
Registry
  • Object
show all
Defined in:
lib/kaal/definition/database_engine.rb

Overview

Sequel-backed definition registry persisted in kaal_definitions.

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Registry

#disable_definition, #enable_definition

Constructor Details

#initialize(database:) ⇒ DatabaseEngine

Returns a new instance of DatabaseEngine.



16
17
18
19
# File 'lib/kaal/definition/database_engine.rb', line 16

def initialize(database:)
  super()
  @database = Kaal::Persistence::Database.new(database)
end

Class Method Details

.normalize_row(row) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/kaal/definition/database_engine.rb', line 66

def self.normalize_row(row)
  return nil unless row

  {
    key: row[:key],
    cron: row[:cron],
    enabled: row[:enabled] ? true : false,
    source: row[:source],
    metadata: PersistenceHelpers.(row[:metadata]),
    created_at: row[:created_at],
    updated_at: row[:updated_at],
    disabled_at: row[:disabled_at]
  }
end

Instance Method Details

#all_definitionsObject



58
59
60
# File 'lib/kaal/definition/database_engine.rb', line 58

def all_definitions
  dataset.order(:key).all.map { |row| self.class.normalize_row(row) }
end

#enabled_definitionsObject



62
63
64
# File 'lib/kaal/definition/database_engine.rb', line 62

def enabled_definitions
  dataset.where(enabled: true).order(:key).all.map { |row| self.class.normalize_row(row) }
end

#find_definition(key) ⇒ Object



54
55
56
# File 'lib/kaal/definition/database_engine.rb', line 54

def find_definition(key)
  self.class.normalize_row(dataset.where(key: key).first)
end

#remove_definition(key) ⇒ Object



45
46
47
48
49
50
51
52
# File 'lib/kaal/definition/database_engine.rb', line 45

def remove_definition(key)
  rows = dataset.where(key: key)
  row = rows.first
  return nil unless row

  rows.delete
  self.class.normalize_row(row)
end

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



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/kaal/definition/database_engine.rb', line 21

def upsert_definition(key:, cron:, enabled: true, source: 'code', metadata: {})
  rows = dataset.where(key: key)
  existing = rows.first
  now = Time.now.utc
  payload = {
    key: key,
    cron: cron,
    enabled: enabled,
    source: source,
    metadata: JSON.generate( || {}),
    created_at: existing ? existing[:created_at] : now,
    updated_at: now,
    disabled_at: PersistenceHelpers.disabled_at_for(existing, enabled, now)
  }

  if existing
    rows.update(payload)
  else
    dataset.insert(payload)
  end

  find_definition(key)
end