Class: EntityCache
- Inherits:
-
Object
show all
- Includes:
- Log::Dependency
- Defined in:
- lib/entity_cache/log.rb,
lib/entity_cache/error.rb,
lib/entity_cache/record.rb,
lib/entity_cache/defaults.rb,
lib/entity_cache/substitute.rb,
lib/entity_cache/controls/id.rb,
lib/entity_cache/entity_cache.rb,
lib/entity_cache/controls/time.rb,
lib/entity_cache/controls/entity.rb,
lib/entity_cache/controls/record.rb,
lib/entity_cache/controls/subject.rb,
lib/entity_cache/controls/version.rb,
lib/entity_cache/storage/temporary.rb,
lib/entity_cache/storage/persistent.rb,
lib/entity_cache/storage/persistent/none.rb,
lib/entity_cache/storage/temporary/build.rb,
lib/entity_cache/controls/persist_interval.rb,
lib/entity_cache/controls/storage/temporary.rb,
lib/entity_cache/controls/storage/persistent.rb,
lib/entity_cache/storage/persistent/telemetry.rb,
lib/entity_cache/storage/persistent/substitute.rb,
lib/entity_cache/storage/temporary/scope/error.rb,
lib/entity_cache/storage/temporary/scope/shared.rb,
lib/entity_cache/storage/temporary/scope/defaults.rb,
lib/entity_cache/storage/temporary/scope/exclusive.rb
Defined Under Namespace
Modules: Controls, Defaults, Storage, Substitute
Classes: Log, Record
Constant Summary
collapse
- Error =
Class.new(RuntimeError)
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Instance Attribute Details
#persist_interval ⇒ Object
Returns the value of attribute persist_interval.
6
7
8
|
# File 'lib/entity_cache/entity_cache.rb', line 6
def persist_interval
@persist_interval
end
|
Class Method Details
.build(subject, scope: nil, persistent_store: nil, persist_interval: nil, session: nil) ⇒ Object
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
# File 'lib/entity_cache/entity_cache.rb', line 12
def self.build(subject, scope: nil, persistent_store: nil, persist_interval: nil, session: nil)
unless persistent_store.nil? == persist_interval.nil?
raise Error, "Must specify both the persistent store and persist interval, or neither"
end
persistent_store ||= Defaults.persistent_store
instance = new
instance.persist_interval = persist_interval
Clock::UTC.configure instance
Storage::Temporary.configure(instance, subject, scope: scope)
persistent_store.configure(instance, subject, session: session)
instance
end
|
Instance Method Details
#get(id) ⇒ Object
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
# File 'lib/entity_cache/entity_cache.rb', line 30
def get(id)
logger.trace { "Reading cache (ID: #{id.inspect})" }
record = temporary_store.get id
record ||= restore id
if record.nil?
logger.info { "Cache miss (ID: #{id.inspect})" }
return nil
end
logger.info { "Cache hit (ID: #{id.inspect}, Entity Class: #{record.entity.class.name}, Version: #{record.version.inspect}, Time: #{record.time})" }
record
end
|
#put(id, entity, version, persisted_version = nil, persisted_time = nil, time: nil) ⇒ Object
46
47
48
49
50
51
52
53
54
|
# File 'lib/entity_cache/entity_cache.rb', line 46
def put(id, entity, version, persisted_version=nil, persisted_time=nil, time: nil)
time ||= clock.iso8601(precision: 5)
record = Record.new(id, entity, version, time, persisted_version, persisted_time)
put_record(record)
record
end
|
#put_record(record) ⇒ Object
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
# File 'lib/entity_cache/entity_cache.rb', line 56
def put_record(record)
logger.trace { "Writing cache (ID: #{record.id}, Entity Class: #{record.entity.class.name}, Version: #{record.version.inspect}, Time: #{record.time}, Persistent Version: #{record.persisted_version.inspect}, Persistent Time: #{record.persisted_time.inspect})" }
if persist_interval && record.versions_since_persisted >= persist_interval
persisted_time = clock.iso8601(precision: 5)
persistent_store.put record.id, record.entity, record.version, persisted_time
record.persisted_version = record.version
record.persisted_time = persisted_time
end
logger.info { "Cache written (ID: #{record.id}, Entity Class: #{record.entity.class.name}, Version: #{record.version.inspect}, Time: #{record.time}, Persistent Version: #{record.persisted_version.inspect}, Persistent Time: #{record.persisted_time.inspect})" }
temporary_store.put record
end
|
#restore(id) ⇒ Object
73
74
75
76
77
78
79
80
81
82
|
# File 'lib/entity_cache/entity_cache.rb', line 73
def restore(id)
entity, persisted_version, persisted_time = persistent_store.get(id)
return nil if entity.nil?
version = persisted_version
time = persisted_time
put(id, entity, version, persisted_version, persisted_time, time: time)
end
|