Class: EntityCache
- Inherits:
-
Object
- Object
- EntityCache
- Includes:
- Configure, Dependency, Log::Dependency
- Defined in:
- lib/entity_cache/log.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/store/external.rb,
lib/entity_cache/store/internal.rb,
lib/entity_cache/controls/entity.rb,
lib/entity_cache/controls/record.rb,
lib/entity_cache/record/log_text.rb,
lib/entity_cache/controls/subject.rb,
lib/entity_cache/controls/version.rb,
lib/entity_cache/record/destructure.rb,
lib/entity_cache/record/transformer.rb,
lib/entity_cache/store/external/null.rb,
lib/entity_cache/store/internal/build.rb,
lib/entity_cache/controls/store/external.rb,
lib/entity_cache/controls/store/internal.rb,
lib/entity_cache/store/external/telemetry.rb,
lib/entity_cache/controls/persist_interval.rb,
lib/entity_cache/store/external/substitute.rb,
lib/entity_cache/store/internal/substitute.rb,
lib/entity_cache/store/internal/scope/global.rb,
lib/entity_cache/store/internal/scope/thread.rb,
lib/entity_cache/controls/store/external/write.rb,
lib/entity_cache/store/internal/build/defaults.rb,
lib/entity_cache/store/internal/scope/exclusive.rb,
lib/entity_cache/controls/store/external/example.rb,
lib/entity_cache/controls/store/external/not_implemented.rb
Direct Known Subclasses
Defined Under Namespace
Modules: Controls, Defaults, Store, Substitute Classes: Log, Record
Instance Attribute Summary collapse
Class Method Summary collapse
Instance Method Summary collapse
- #configure(subject:, scope: nil, persist_interval: nil, external_store: nil, external_store_session: nil) ⇒ Object
- #get(id) ⇒ Object
- #persist?(version, last_persisted_version) ⇒ Boolean
- #put(id, entity, version, time: nil, persisted_version: nil, persisted_time: nil) ⇒ Object
- #restore(id) ⇒ Object
Instance Attribute Details
#persist_interval ⇒ Object
9 10 11 |
# File 'lib/entity_cache/entity_cache.rb', line 9 def persist_interval @persist_interval ||= Defaults.persist_interval end |
Class Method Details
.build(subject, scope: nil, persist_interval: nil, external_store: nil, external_store_session: nil) ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/entity_cache/entity_cache.rb', line 17 def self.build(subject, scope: nil, persist_interval: nil, external_store: nil, external_store_session: nil) instance = new instance.configure( subject: subject, scope: scope, persist_interval: persist_interval, external_store: external_store, external_store_session: external_store_session ) instance end |
Instance Method Details
#configure(subject:, scope: nil, persist_interval: nil, external_store: nil, external_store_session: nil) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/entity_cache/entity_cache.rb', line 31 def configure(subject:, scope: nil, persist_interval: nil, external_store: nil, external_store_session: nil) external_store ||= Store::External::Null unless persist_interval.nil? self.persist_interval = persist_interval end Store::Internal.configure(self, subject, scope: scope) external_store.configure(self, subject, session: external_store_session) Clock::UTC.configure(self) end |
#get(id) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/entity_cache/entity_cache.rb', line 45 def get(id) logger.trace(tag: :get) { "Get entity (ID: #{id.inspect})" } record = internal_store.get(id) if record.nil? record = restore(id) end if record.nil? logger.info(tags: [:get, :miss]) { "Cache miss getting entity (ID: #{id.inspect}, #{Record::LogText.get(record)})" } else logger.info(tag: [:get, :hit]) { "Get entity done (ID: #{id.inspect}, #{Record::LogText.get(record)})" } end record end |
#persist?(version, last_persisted_version) ⇒ Boolean
117 118 119 120 121 122 123 |
# File 'lib/entity_cache/entity_cache.rb', line 117 def persist?(version, last_persisted_version) last_persisted_version ||= -1 difference = version - last_persisted_version difference >= persist_interval end |
#put(id, entity, version, time: nil, persisted_version: nil, persisted_time: nil) ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/entity_cache/entity_cache.rb', line 63 def put(id, entity, version, time: nil, persisted_version: nil, persisted_time: nil) time ||= clock.now updated_external_store = false record = Record.build(id, entity, version, time) logger.trace(tag: :put) { "Put entity (ID: #{id.inspect}, #{Record::LogText.get(record)}, Persist Interval: #{persist_interval.inspect})" } if persist?(version, persisted_version) external_store.put(id, entity, version, time) persisted_version = version persisted_time = time updated_external_store = true end record.persisted_version = persisted_version record.persisted_time = persisted_time internal_store.put(record) logger.info(tag: :put) { "Put entity done (ID: #{id.inspect}, #{Record::LogText.get(record)}, Persist Interval: #{persist_interval.inspect}, Updated External Store: #{updated_external_store})" } record end |
#restore(id) ⇒ Object
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/entity_cache/entity_cache.rb', line 90 def restore(id) logger.trace(tag: :restore) { "Restoring entity (ID: #{id.inspect})" } entity, version, time = external_store.get(id) if entity.nil? logger.debug(tag: :restore) { "Could not restore entity. No entity record. (ID: #{id.inspect})" } return nil end record = Record.build( id, entity, version, time, persisted_version: version, persisted_time: time ) internal_store.put(record) logger.debug(tag: :restore) { "Restored entity (ID: #{id.inspect}, #{Record::LogText.get(record)})" } record end |