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