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, DbLoadCompiler, 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



92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/ree_lib/packages/ree_mapper/package/ree_mapper.rb', line 92

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

.db_load_performance_mode?Boolean

Defensive read: an older ree gem without the flag means the mode is off

Returns:

  • (Boolean)


58
59
60
# File 'lib/ree_lib/packages/ree_mapper/package/ree_mapper.rb', line 58

def self.db_load_performance_mode?
  Ree.respond_to?(:db_load_performance_mode?) && Ree.db_load_performance_mode?
end

.get_mapper_factory(mod) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/ree_lib/packages/ree_mapper/package/ree_mapper.rb', line 62

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