Class: Kaal::Definition::RedisEngine
Overview
Redis-backed definition registry shared across processes.
Class Method Summary
collapse
Instance Method Summary
collapse
constantize, deep_dup, deep_merge, duplicable?, stringify_keys, symbolize_keys
Methods inherited from Registry
#disable_definition, #enable_definition, #enabled_definitions
Constructor Details
#initialize(redis, namespace: 'kaal') ⇒ RedisEngine
Returns a new instance of RedisEngine.
19
20
21
22
23
|
# File 'lib/kaal/definition/redis_engine.rb', line 19
def initialize(redis, namespace: 'kaal')
super()
@redis = redis
@namespace = namespace
end
|
Class Method Details
.deserialize_payload(raw) ⇒ Object
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
# File 'lib/kaal/definition/redis_engine.rb', line 75
def deserialize_payload(raw)
return nil unless raw
parsed = JSON.parse(raw)
{
key: parsed['key'],
cron: parsed['cron'],
enabled: parsed['enabled'] == true,
source: parsed['source'],
metadata: parsed['metadata'] || {},
created_at: parse_time(parsed['created_at']),
updated_at: parse_time(parsed['updated_at']),
disabled_at: parse_time(parsed['disabled_at'])
}
rescue JSON::ParserError
nil
end
|
.parse_time(value) ⇒ Object
93
94
95
96
97
|
# File 'lib/kaal/definition/redis_engine.rb', line 93
def parse_time(value)
Time.iso8601(value.to_s)
rescue ArgumentError
nil
end
|
.serialize_payload(payload) ⇒ Object
69
70
71
72
73
|
# File 'lib/kaal/definition/redis_engine.rb', line 69
def serialize_payload(payload)
payload.transform_values do |value|
value.is_a?(Time) ? value.iso8601 : value
end
end
|
Instance Method Details
#all_definitions ⇒ Object
54
55
56
|
# File 'lib/kaal/definition/redis_engine.rb', line 54
def all_definitions
@redis.hvals(storage_key).filter_map { |raw| self.class.deserialize_payload(raw) }.sort_by { |definition| definition[:key] }
end
|
#find_definition(key) ⇒ Object
49
50
51
52
|
# File 'lib/kaal/definition/redis_engine.rb', line 49
def find_definition(key)
raw = @redis.hget(storage_key, key)
deserialize(raw)
end
|
#remove_definition(key) ⇒ Object
43
44
45
46
47
|
# File 'lib/kaal/definition/redis_engine.rb', line 43
def remove_definition(key)
raw = @redis.hget(storage_key, key)
@redis.hdel(storage_key, key)
deserialize(raw)
end
|
#upsert_definition(key:, cron:, enabled: true, source: 'code', metadata: {}) ⇒ Object
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# File 'lib/kaal/definition/redis_engine.rb', line 25
def upsert_definition(key:, cron:, enabled: true, source: 'code', metadata: {})
now = Time.now.utc
existing = find_definition(key)
payload = {
key: key,
cron: cron,
enabled: enabled,
source: source,
metadata: deep_dup(metadata || {}),
created_at: existing ? existing[:created_at] : now,
updated_at: now,
disabled_at: PersistenceHelpers.disabled_at_for(existing, enabled, now)
}
@redis.hset(storage_key, key, JSON.generate(self.class.serialize_payload(payload)))
deep_dup(payload)
end
|