module ArtirixDataModels::DAO

Constants

DELEGATED_METHODS

Attributes

basic_model_dao[R]

Public Class Methods

new(dao_registry: nil, dao_registry_loader: nil, gateway: nil, gateway_factory: nil, ignore_default_gateway: false, model_name: nil, model_class: nil, paths_factory: nil, fake_mode_factory: nil) click to toggle source
# File lib/artirix_data_models/dao.rb, line 50
def initialize(dao_registry: nil,
               dao_registry_loader: nil,
               gateway: nil,
               gateway_factory: nil,
               ignore_default_gateway: false,
               model_name: nil,
               model_class: nil,
               paths_factory: nil,
               fake_mode_factory: nil)

  model_name ||= default_model_name
  model_class ||= default_model_class
  paths_factory ||= default_path_factory
  fake_mode_factory ||= default_fake_mode_factory

  # temporary dao registry to load basic_class only
  create_basic_model_dao dao_registry: dao_registry,
                         dao_registry_loader: dao_registry_loader,
                         fake_mode_factory: fake_mode_factory,
                         gateway: gateway,
                         gateway_factory: gateway_factory,
                         ignore_default_gateway: ignore_default_gateway,
                         model_class: model_class,
                         model_name: model_name,
                         paths_factory: paths_factory

end

Public Instance Methods

create_basic_model_dao(dao_registry:, dao_registry_loader:, fake_mode_factory:, gateway:, gateway_factory:, ignore_default_gateway:, model_class:, model_name:, paths_factory:, **other_basic_model_dao_params) click to toggle source
# File lib/artirix_data_models/dao.rb, line 78
def create_basic_model_dao(dao_registry:,
                           dao_registry_loader:,
                           fake_mode_factory:,
                           gateway:,
                           gateway_factory:,
                           ignore_default_gateway:,
                           model_class:,
                           model_name:,
                           paths_factory:,
                           **other_basic_model_dao_params)

  dr = ArtirixDataModels::WithDAORegistry.loader_or_registry_or_default dao_registry_loader: dao_registry_loader,
                                                                        dao_registry: dao_registry

  basic_model_class = dr.get(:basic_class)

  @basic_model_dao = basic_model_class.new model_name: model_name,
                                           model_class: model_class,
                                           fake_mode_factory: fake_mode_factory,
                                           paths_factory: paths_factory,
                                           gateway: gateway,
                                           gateway_factory: gateway_factory,
                                           dao_registry: dao_registry,
                                           dao_registry_loader: dao_registry_loader,
                                           ignore_default_gateway: ignore_default_gateway,
                                           **other_basic_model_dao_params
end
default_fake_mode_factory() click to toggle source
# File lib/artirix_data_models/dao.rb, line 118
def default_fake_mode_factory
  if defined?(self.class::FakeMode)
    self.class::FakeMode
  else
    FakeModes::Disabled
  end
end
default_model_class() click to toggle source
# File lib/artirix_data_models/dao.rb, line 110
def default_model_class
  defined?(self.class::MODEL_CLASS) ? self.class::MODEL_CLASS : nil
end
default_model_name() click to toggle source
# File lib/artirix_data_models/dao.rb, line 106
def default_model_name
  defined?(self.class::MODEL_NAME) ? self.class::MODEL_NAME : nil
end
default_path_factory() click to toggle source
# File lib/artirix_data_models/dao.rb, line 114
def default_path_factory
  self.class::Paths
end
find(model_pk, cache_adaptor: nil, **extra_options) click to toggle source
# File lib/artirix_data_models/dao.rb, line 166
def find(model_pk, cache_adaptor: nil, **extra_options)
  model = dao_registry.get_model model_name, model_pk
  return model if model.present?

  cache_adaptor ||= cache_model_adaptor_for_find(model_pk, **extra_options)

  model = basic_model_dao.find(model_pk, cache_adaptor: cache_adaptor, **extra_options)

  complete_model model
end
get(model_pk, cache_adaptor: nil, **extra_options) click to toggle source
# File lib/artirix_data_models/dao.rb, line 155
def get(model_pk, cache_adaptor: nil, **extra_options)
  model = dao_registry.get_model model_name, model_pk
  return model if model.present?

  cache_adaptor ||= cache_model_adaptor_for_get(model_pk, **extra_options)

  model = basic_model_dao.get(model_pk, cache_adaptor: cache_adaptor, **extra_options)

  complete_model model
end
get_full(model_pk, model_to_reload: nil, cache_adaptor: nil, **extra_options) click to toggle source
# File lib/artirix_data_models/dao.rb, line 145
def get_full(model_pk, model_to_reload: nil, cache_adaptor: nil, **extra_options)
  # we do not check in the registry, since it could be a reload
  model_to_reload ||= new_model_with_pk(model_pk)
  cache_adaptor ||= cache_model_adaptor_for_get_full(model_pk, model_to_reload: model_to_reload, **extra_options)

  model = basic_model_dao.get_full(model_pk, model_to_reload: model_to_reload, cache_adaptor: cache_adaptor, **extra_options)

  complete_model model
end
get_some(model_pks, cache_adaptor: nil, **extra_options) click to toggle source
# File lib/artirix_data_models/dao.rb, line 177
def get_some(model_pks, cache_adaptor: nil, **extra_options)
  registered = Array(model_pks).map do |model_pk|
    [
      model_pk,
      dao_registry.get_model(model_name, model_pk)
    ]
  end.to_h

  return registered.values if registered.values.all?(&:present?)

  # load only the missing
  missing_pks = registered.select { |_k, v| v.blank? }.keys

  cache_adaptor ||= cache_model_adaptor_for_get_some(missing_pks, **extra_options)

  models = basic_model_dao.get_some(missing_pks, cache_adaptor: cache_adaptor, **extra_options)

  Array(models).each do |model|
    complete_model model
  end

  list = registered.values.compact.concat(models)

  # reorder with the same order of the model_pks
  # (if for any reason it does not have a primary key or if it is not in the list, then use -1 so they are at the start)
  list.sort_by { |m| pk = m.try :primary_key; model_pks.index(pk) || -1 }
end
in_fake_mode() { || ... } click to toggle source
# File lib/artirix_data_models/dao.rb, line 126
def in_fake_mode
  return unless block_given?

  begin
    basic_model_dao.force_fake_enabled
    yield
  ensure
    basic_model_dao.remove_force_fake
  end
end
reload(model) click to toggle source

DELEGATE TO BASIC_MODEL_DAO #

# File lib/artirix_data_models/dao.rb, line 141
def reload(model)
  get_full model.primary_key, model_to_reload: model
end

Private Instance Methods

cache_model_adaptor_for_find(model_pk, **extra_options) click to toggle source
# File lib/artirix_data_models/dao.rb, line 215
def cache_model_adaptor_for_find(model_pk, **extra_options)
  cache_model_adaptor_for_get model_pk, **extra_options
end
cache_model_adaptor_for_get(model_pk, **extra_options) click to toggle source
# File lib/artirix_data_models/dao.rb, line 219
def cache_model_adaptor_for_get(model_pk, **extra_options)
  ArtirixDataModels::CachedActionAdaptor::Get.new(dao_name: model_name, model_pk: model_pk, **extra_options)
end
cache_model_adaptor_for_get_full(model_pk, model_to_reload: nil, **extra_options) click to toggle source
# File lib/artirix_data_models/dao.rb, line 223
def cache_model_adaptor_for_get_full(model_pk, model_to_reload: nil, **extra_options)
  ArtirixDataModels::CachedActionAdaptor::GetFull.new(dao_name: model_name, model: model_to_reload, model_pk: model_pk, **extra_options)
end
cache_model_adaptor_for_get_some(model_pks, **extra_options) click to toggle source
# File lib/artirix_data_models/dao.rb, line 227
def cache_model_adaptor_for_get_some(model_pks, **extra_options)
  ArtirixDataModels::CachedActionAdaptor::GetSome.new(dao_name: model_name, model_pks: model_pks, **extra_options)
end
complete_model(model) click to toggle source
# File lib/artirix_data_models/dao.rb, line 231
def complete_model(model)
  if model
    dao_registry.register_model model
    model.try :set_dao_registry_loader, dao_registry_loader
  end

  model
end
new_model_with_pk(model_pk) click to toggle source
# File lib/artirix_data_models/dao.rb, line 207
def new_model_with_pk(model_pk)
  model_class.new.tap do |m|
    if model_class.try(:primary_key_attribute).present? && m.respond_to?(:set_primary_key)
      m.set_primary_key model_pk
    end
  end
end