Class: Kaal::Definition::MemoryEngine

Inherits:
Registry
  • Object
show all
Includes:
Support::HashTools
Defined in:
lib/kaal/definition/memory_engine.rb

Overview

In-memory definition registry used when no persistent backend is configured.

Instance Method Summary collapse

Methods included from Support::HashTools

constantize, deep_dup, deep_merge, duplicable?, stringify_keys, symbolize_keys

Methods inherited from Registry

#disable_definition, #enable_definition, #enabled_definitions

Constructor Details

#initializeMemoryEngine

Returns a new instance of MemoryEngine.



17
18
19
20
21
# File 'lib/kaal/definition/memory_engine.rb', line 17

def initialize
  super
  @definitions = {}
  @mutex = Mutex.new
end

Instance Method Details

#all_definitionsObject



50
51
52
# File 'lib/kaal/definition/memory_engine.rb', line 50

def all_definitions
  @mutex.synchronize { @definitions.values.sort_by { |definition| definition[:key] }.map { |definition| deep_dup(definition) } }
end

#clearObject



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

def clear
  @mutex.synchronize { @definitions.clear }
end

#find_definition(key) ⇒ Object



46
47
48
# File 'lib/kaal/definition/memory_engine.rb', line 46

def find_definition(key)
  @mutex.synchronize { deep_dup(@definitions[key]) }
end

#remove_definition(key) ⇒ Object



42
43
44
# File 'lib/kaal/definition/memory_engine.rb', line 42

def remove_definition(key)
  @mutex.synchronize { deep_dup(@definitions.delete(key)) }
end

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



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

def upsert_definition(key:, cron:, enabled: true, source: 'code', metadata: {})
  @mutex.synchronize do
    now = Time.now.utc
    existing = @definitions[key]
    definition = {
      key: key,
      cron: cron,
      enabled: enabled,
      source: source,
      metadata: deep_dup( || {}),
      created_at: existing ? existing[:created_at] : now,
      updated_at: now,
      disabled_at: PersistenceHelpers.disabled_at_for(existing, enabled, now)
    }
    @definitions[key] = definition
    deep_dup(definition)
  end
end