class EntityCache
Constants
- Record
Attributes
persist_interval[W]
Public Class Methods
build(entity_class, specifier=nil, scope: nil, persist_interval: nil, external_store: nil, external_store_session: nil)
click to toggle source
# File lib/entity_cache/entity_cache.rb, line 28 def self.build(entity_class, specifier=nil, scope: nil, persist_interval: nil, external_store: nil, external_store_session: nil) subject = Subject.build({ :entity_class => entity_class, :specifier => specifier }) instance = new(subject) instance.configure( subject: subject, scope: scope, persist_interval: persist_interval, external_store: external_store, external_store_session: external_store_session ) instance end
Public Instance Methods
configure(subject:, scope: nil, persist_interval: nil, external_store: nil, external_store_session: nil)
click to toggle source
# File lib/entity_cache/entity_cache.rb, line 47 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
entity_class()
click to toggle source
# File lib/entity_cache/entity_cache.rb, line 14 def entity_class subject.entity_class end
get(id)
click to toggle source
# File lib/entity_cache/entity_cache.rb, line 61 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(tags: [:get, :hit]) { "Get entity done (ID: #{id.inspect}, #{Record::LogText.get(record)})" } end record end
persist?(version, last_persisted_version)
click to toggle source
# File lib/entity_cache/entity_cache.rb, line 133 def persist?(version, last_persisted_version) last_persisted_version ||= -1 difference = version - last_persisted_version difference >= persist_interval end
persist_interval()
click to toggle source
# File lib/entity_cache/entity_cache.rb, line 10 def persist_interval @persist_interval ||= Defaults.persist_interval end
put(id, entity, version, time: nil, persisted_version: nil, persisted_time: nil)
click to toggle source
# File lib/entity_cache/entity_cache.rb, line 79 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)
click to toggle source
# File lib/entity_cache/entity_cache.rb, line 106 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
specifier()
click to toggle source
# File lib/entity_cache/entity_cache.rb, line 18 def specifier subject.specifier end