ree_lib 1.0.99 → 1.0.100

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c38ef2b4a8178ef5e2f9121bc05c4758e73a441878ca88191b7c14da82f204ed
4
- data.tar.gz: 67f4d77cbe85db2de4cc2bd939444166d1a32d568fe9ec2ab164f976c35a079d
3
+ metadata.gz: 436304224d3a8af781f3fe62abf15b08d1843205b69a709bf2bbd441c31e246e
4
+ data.tar.gz: 2cdb3e48efa52939a43178dd9cae363cdbdbd1bef33509d359e13db0f6c1d017
5
5
  SHA512:
6
- metadata.gz: b579b5d1208625e01e8dc5fcfc354e5a18399bb8121339f4ffda0d049371e0118c60185a6ca974b92cac5a0f4910666d3cec163e85f4d464f39ff300f03295ea
7
- data.tar.gz: 5667a2a347f98ac1dd903dd63d08a78f688c93419ac3661ab0edd0bdb355edf27e8d31d4c44a814f0be232ac4b60865b3bd1fb4cd73db99d91a3d924cf7a7a23
6
+ metadata.gz: fe254bd39aaae6cd9c3c9d902dcdc48e3ae2c83d6fd1a868aedef47e80209fe6ff51f17c186d8ffe41d3d6e8486c24847ed7cf10670f5c1ac08756f508b5f712
7
+ data.tar.gz: c9e0f059aea5fd18804149e6e153f58934db60b57de76e3abd421a7f87fb4c28b8f5b8445523cc39a32df293c54584a6853020de12f4a0822a41049e55de218e
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ree_lib (1.0.99)
4
+ ree_lib (1.0.100)
5
5
  bigdecimal (~> 3.1.6)
6
6
  binding_of_caller (~> 1.0.0)
7
7
  i18n (~> 1.14.1)
@@ -10,19 +10,50 @@ class ReeMapper::BuildMapperFactory
10
10
  link 'ree_mapper/mapper_strategy', -> { MapperStrategy }
11
11
  end
12
12
 
13
+ SEMAPHORE = Mutex.new
14
+
13
15
  contract(ArrayOf[MapperStrategy] => SubclassOf[MapperFactory])
14
16
  def call(strategies:)
15
- module_name = get_caller.class.to_s.split("::").first
16
- mod = Object.const_get(module_name)
17
+ mod = if get_caller.is_a?(Module)
18
+ get_caller
19
+ else
20
+ name = get_caller.class.to_s.split("::").first
21
+ Object.const_get(name)
22
+ end
23
+
24
+ klass = nil
25
+
26
+ SEMAPHORE.synchronize do
27
+ if klass = mod.instance_variable_get(:@mapper_factory)
28
+ klass.instance_eval do
29
+ @strategies = strategies
30
+ end
31
+ else
32
+ klass = Class.new(ReeMapper::MapperFactory)
33
+
34
+ klass.instance_eval do
35
+ @types = {}
36
+ @wrappers = {}
37
+ @strategies = strategies
38
+ end
39
+
40
+ mod.instance_variable_set(:@mapper_factory, klass)
41
+ end
42
+
43
+ register_default_types(klass)
44
+ end
17
45
 
18
- klass = Class.new(ReeMapper::MapperFactory)
19
- mod.instance_variable_set(:@mapper_factory, klass)
46
+ klass
47
+ end
48
+
49
+ private
20
50
 
21
- klass.instance_eval {
22
- @types = {}
23
- @wrappers = {}
24
- @strategies = strategies
25
- }
51
+ def register_default_types(klass)
52
+ types = klass.instance_variable_get(:@types)
53
+ strategies = klass.instance_variable_get(:@strategies)
54
+
55
+ return if !types.empty?
56
+ return if strategies.empty?
26
57
 
27
58
  klass.register_type(:bool, ReeMapper::Bool.new)
28
59
  klass.register_type(:date_time, ReeMapper::DateTime.new)
@@ -35,7 +66,5 @@ class ReeMapper::BuildMapperFactory
35
66
  klass.register_type(:rational, ReeMapper::Rational.new)
36
67
 
37
68
  klass.register_wrapper(:array, ReeMapper::Array)
38
-
39
- klass
40
69
  end
41
70
  end
@@ -72,6 +72,8 @@ module ReeMapper
72
72
 
73
73
  private
74
74
 
75
+ require_relative "./ree_mapper/functions/build_mapper_factory"
76
+
75
77
  def self.build_mapper_factory(mod)
76
78
  pckg_name = ReeString::Underscore.new.call(mod.name)
77
79
  factory_path = "#{pckg_name}/mapper_factory"
@@ -80,6 +82,9 @@ module ReeMapper
80
82
  return Object.const_get("#{mod.name}::MapperFactory").new
81
83
  end
82
84
 
85
+ factory = ReeMapper::BuildMapperFactory.new
86
+ factory.set_caller(mod).call(strategies: [])
87
+
83
88
  mapper_factory_klass = if package_file_exists?(factory_path) && mod != self
84
89
  package_require(factory_path)
85
90
  Object.const_get("#{mod.name}::MapperFactory")
@@ -1,3 +1,12 @@
1
1
  RSpec.configure do |config|
2
2
  config.extend Ree::RSpecLinkDSL
3
+
4
+ config.before :each do
5
+ reset_mapper_factory(self)
6
+ end
3
7
  end
8
+
9
+ def reset_mapper_factory(mod)
10
+ mod = Object.const_get(self.class.to_s.split("::").first)
11
+ mod.instance_variable_set(:@mapper_factory, nil)
12
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ReeLib
4
- VERSION = "1.0.99"
4
+ VERSION = "1.0.100"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ree_lib
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.99
4
+ version: 1.0.100
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruslan Gatiyatov