Module: ReeMapper
- Includes:
- Ree::PackageDSL
- Defined in:
- lib/ree_lib/packages/ree_mapper/package/ree_mapper.rb
Defined Under Namespace
Modules: DSL
Classes: AbstractType, AbstractWrapper, Any, ArgumentError, Array, Bool, BuildMapperFactory, BuildMapperStrategy, CoercionError, Date, DateTime, DefaultFactory, Error, ErrorWithLocation, Field, FieldsFilter, FilterFieldsContract, Float, HashOutput, Integer, Mapper, MapperFactory, MapperFactoryProxy, MapperStrategy, ObjectOutput, Rational, ReeDtoOutput, StrategyOutput, String, StructOutput, Time, TypeError, UnsupportedTypeError
Class Method Summary
collapse
Class Method Details
.build_mapper_factory(mod) ⇒ Object
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
# File 'lib/ree_lib/packages/ree_mapper/package/ree_mapper.rb', line 86
def self.build_mapper_factory(mod)
pckg_name = ReeString::Underscore.new.call(mod.name)
factory_path = "#{pckg_name}/mapper_factory"
if Ree.irb_mode? && Object.const_defined?("#{mod.name}::MapperFactory") && mod != self
return Object.const_get("#{mod.name}::MapperFactory").new
end
mapper_factory_klass = if package_file_exists?(factory_path) && mod != self
package_require(factory_path)
Object.const_get("#{mod.name}::MapperFactory")
else
ReeMapper::DefaultFactory
end
mapper_factory_klass.new
end
|
.get_mapper_factory(mod) ⇒ Object
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
# File 'lib/ree_lib/packages/ree_mapper/package/ree_mapper.rb', line 56
def self.get_mapper_factory(mod)
if !mod.is_a?(Module)
raise Ree::Error.new("module should be provided", :invalid_dsl_usage)
end
if mod.name.nil?
raise Ree::Error.new("anonymous modules are not supported", :invalid_dsl_usage)
end
if mod.name.split('::').size > 1
raise Ree::Error.new("top level module should be provided", :invalid_dsl_usage)
end
factory = mod.instance_variable_get(:@mapper_factory)
return factory if factory
if !mod.instance_variable_get(:@mapper_semaphore)
mod.instance_variable_set(:@mapper_semaphore, Mutex.new)
end
mod.instance_variable_get(:@mapper_semaphore).synchronize do
factory = self.build_mapper_factory(mod)
mod.instance_variable_set(:@mapper_factory, factory)
end
factory
end
|