Class: ArtirixDataModels::DAORegistry

Inherits:
Object
  • Object
show all
Defined in:
lib/artirix_data_models/dao_registry.rb

Defined Under Namespace

Classes: IdentityMap, LoaderNotFound

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeDAORegistry

singleton instance



16
17
18
19
20
21
22
# File 'lib/artirix_data_models/dao_registry.rb', line 16

def initialize
  @_repository         = {}
  @_persistent_loaders = {}
  @_transient_loaders  = {}

  setup_config
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args, &block) ⇒ Object



35
36
37
38
39
40
41
# File 'lib/artirix_data_models/dao_registry.rb', line 35

def method_missing(method, *args, &block)
  if exist?(method)
    get(method)
  else
    super
  end
end

Class Method Details

.instanceObject



3
4
5
# File 'lib/artirix_data_models/dao_registry.rb', line 3

def self.instance
  @__instance ||= new
end

.instance=(x) ⇒ Object



7
8
9
# File 'lib/artirix_data_models/dao_registry.rb', line 7

def self.instance=(x)
  @__instance = x
end

.mark_as_main_registryObject



11
12
13
# File 'lib/artirix_data_models/dao_registry.rb', line 11

def self.mark_as_main_registry
  ArtirixDataModels::DAORegistry.instance = self.instance
end

Instance Method Details

#aggregations_factoryObject



31
32
33
# File 'lib/artirix_data_models/dao_registry.rb', line 31

def aggregations_factory
  get :aggregations_factory
end

#exist?(key) ⇒ Boolean

Returns:

  • (Boolean)


47
48
49
50
# File 'lib/artirix_data_models/dao_registry.rb', line 47

def exist?(key)
  key = key.to_sym
  @_repository.key?(key) || @_persistent_loaders.key?(key) || @_transient_loaders.key?(key)
end

#get(key, override_dao_registry: nil) ⇒ Object



52
53
54
55
56
57
58
59
# File 'lib/artirix_data_models/dao_registry.rb', line 52

def get(key, override_dao_registry: nil)
  x = @_repository[key.to_sym] || call_loader(key)
  if x.present? && override_dao_registry.present? && x.respond_to?(:set_dao_registry)
    x.set_dao_registry override_dao_registry
  end

  x
end

#get_model(_model_dao_name, _primary_key) ⇒ Object



106
107
108
109
# File 'lib/artirix_data_models/dao_registry.rb', line 106

def get_model(_model_dao_name, _primary_key)
  # DO NOTHING
  nil
end

#register_model(_model) ⇒ Object

IDENTITY MAP compatible



96
97
98
99
# File 'lib/artirix_data_models/dao_registry.rb', line 96

def register_model(_model)
  # DO NOTHING
  self
end

#respond_to_missing?(method, _ = false) ⇒ Boolean

Returns:

  • (Boolean)


43
44
45
# File 'lib/artirix_data_models/dao_registry.rb', line 43

def respond_to_missing?(method, _ = false)
  exist?(method) || super
end

#set_loaderObject



85
86
87
88
89
90
91
92
93
94
95
# File 'lib/artirix_data_models/dao_registry.rb', line 85

def set_persistent_loader(key, loader = nil, &block)
  key = key.to_sym

  if block
    @_persistent_loaders[key] = block
  elsif loader.respond_to? :call
    @_persistent_loaders[key] = loader
  else
    raise ArgumentError, "no block and no loader given for key #{key}"
  end
end

#set_persistent_loader(key, loader = nil, &block) ⇒ Object



73
74
75
76
77
78
79
80
81
82
83
# File 'lib/artirix_data_models/dao_registry.rb', line 73

def set_persistent_loader(key, loader = nil, &block)
  key = key.to_sym

  if block
    @_persistent_loaders[key] = block
  elsif loader.respond_to? :call
    @_persistent_loaders[key] = loader
  else
    raise ArgumentError, "no block and no loader given for key #{key}"
  end
end

#set_transient_loader(key, loader = nil, &block) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
# File 'lib/artirix_data_models/dao_registry.rb', line 61

def set_transient_loader(key, loader = nil, &block)
  key = key.to_sym

  if block
    @_transient_loaders[key] = block
  elsif loader.respond_to? :call
    @_transient_loaders[key] = loader
  else
    raise ArgumentError, "no block and no loader given for key #{key}"
  end
end

#setup_configObject



24
25
26
27
28
29
# File 'lib/artirix_data_models/dao_registry.rb', line 24

def setup_config
  set_persistent_loader(:aggregations_factory) { ArtirixDataModels::AggregationsFactory.new }
  set_persistent_loader(:basic_class) { ArtirixDataModels::BasicModelDAO }
  set_persistent_loader(:gateway) { ArtirixDataModels::DataGateway.new }
  set_persistent_loader(:model_fields) { ArtirixDataModels::ModelFieldsDAO.new gateway: get(:gateway) }
end

#unload_model(_model) ⇒ Object



101
102
103
104
# File 'lib/artirix_data_models/dao_registry.rb', line 101

def unload_model(_model)
  # DO NOTHING
  self
end

#with_identity_mapObject

IDENTITY MAP #



91
92
93
# File 'lib/artirix_data_models/dao_registry.rb', line 91

def with_identity_map
  IdentityMap.new dao_registry: self
end