Class: Kaal::Definition::DatabaseEngine

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

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, #update_definition_enabled_state

Constructor Details

#initialize(database:) ⇒ DatabaseEngine

Returns a new instance of DatabaseEngine.

Parameters:

  • database: (Kaal::rbs_any)


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) ⇒ nil, { 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:

  • row (Kaal::rbs_any)

Returns:

  • (nil, { 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
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_definitions ⇒ Kaal::rbs_any

Returns:

  • (Kaal::rbs_any)


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

#dataset ⇒ Kaal::rbs_any

Returns:

  • (Kaal::rbs_any)


83
84
85
# File 'lib/kaal/definition/database_engine.rb', line 83

def dataset
  @database.definitions_dataset
end

#enabled_definitions ⇒ Kaal::rbs_any

Returns:

  • (Kaal::rbs_any)


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

Parameters:

  • key (Kaal::rbs_any)

Returns:

  • (Kaal::rbs_any)


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

Parameters:

  • key (Kaal::rbs_any)

Returns:

  • (nil, Kaal::rbs_any)


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


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