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