class ArtirixDataModels::DAORegistry::IdentityMap
Public Class Methods
new(dao_registry_loader: nil, dao_registry: nil)
click to toggle source
# File lib/artirix_data_models/dao_registry.rb, line 168 def initialize(dao_registry_loader: nil, dao_registry: nil) set_dao_registry_and_loader dao_registry_loader, dao_registry @identity_map = {} end
Public Instance Methods
get(key, override_dao_registry: nil)
click to toggle source
# File lib/artirix_data_models/dao_registry.rb, line 187 def get(key, override_dao_registry: nil) override_dao_registry ||= self dao_registry.get key, override_dao_registry: override_dao_registry end
get_model(model_dao_name, primary_key)
click to toggle source
# File lib/artirix_data_models/dao_registry.rb, line 220 def get_model(model_dao_name, primary_key) model_dao_name = model_dao_name.to_s primary_key = primary_key.to_s return nil unless model_dao_name.present? && primary_key.present? @identity_map[model_dao_name] ||= {} val = @identity_map[model_dao_name][primary_key] if val.nil? log "get model #{model_dao_name}:#{primary_key} NOT PRESENT" else log "get model #{model_dao_name}:#{primary_key} PRESENT!!!!!" end val end
method_missing(method_name, *arguments, &block)
click to toggle source
# File lib/artirix_data_models/dao_registry.rb, line 183 def method_missing(method_name, *arguments, &block) dao_registry.send method_name, *arguments, &block end
register_model(model)
click to toggle source
IDENTITY MAP FOR MODELS #
# File lib/artirix_data_models/dao_registry.rb, line 196 def register_model(model) model_dao_name, primary_key = keys_from_model(model, action: :register) return self unless model_dao_name.present? && primary_key.present? log "register model #{model_dao_name}:#{primary_key}" @identity_map[model_dao_name] ||= {} @identity_map[model_dao_name][primary_key] = model self end
respond_to_missing?(method_name, include_private = false)
click to toggle source
# File lib/artirix_data_models/dao_registry.rb, line 179 def respond_to_missing?(method_name, include_private = false) dao_registry.respond_to? method_name, include_private end
unload_model(model)
click to toggle source
# File lib/artirix_data_models/dao_registry.rb, line 208 def unload_model(model) model_dao_name, primary_key = keys_from_model(model, action: :unload) return self unless model_dao_name.present? && primary_key.present? log "unload model #{model_dao_name}:#{primary_key}" @identity_map[model_dao_name] ||= {} @identity_map[model_dao_name].delete primary_key self end
Private Instance Methods
keys_from_model(model, action: :use)
click to toggle source
# File lib/artirix_data_models/dao_registry.rb, line 242 def keys_from_model(model, action: :use) model_dao_name = model.try :model_dao_name primary_key = model.try :primary_key if model_dao_name.blank? ArtirixDataModels.logger.error("model does not have a `model_dao_name` #{model}: we cannot #{action} it") end if primary_key.blank? ArtirixDataModels.logger.error("model does not have a `primary_key` #{model}: we cannot #{action} it") end [model_dao_name.to_s, primary_key.to_s] end
log(msg)
click to toggle source
# File lib/artirix_data_models/dao_registry.rb, line 238 def log(msg) ArtirixDataModels.logger.debug "DAO-REGISTRY-IDENTITY-MAP #{object_id} => #{msg}" end