smart_initializer 0.9.1 → 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -2
- data/Gemfile.lock +53 -56
- data/gemfiles/with_external_deps.gemfile.lock +51 -55
- data/gemfiles/without_external_deps.gemfile.lock +51 -53
- data/lib/smart_core/initializer/attribute/list.rb +19 -20
- data/lib/smart_core/initializer/attribute/value/base.rb +6 -4
- data/lib/smart_core/initializer/constructor/definer.rb +13 -19
- data/lib/smart_core/initializer/dsl.rb +4 -3
- data/lib/smart_core/initializer/extensions/list.rb +11 -14
- data/lib/smart_core/initializer/plugins/abstract.rb +3 -1
- data/lib/smart_core/initializer/plugins/registry.rb +13 -14
- data/lib/smart_core/initializer/plugins/registry_interface.rb +11 -19
- data/lib/smart_core/initializer/settings/auto_cast.rb +6 -12
- data/lib/smart_core/initializer/settings/base.rb +5 -13
- data/lib/smart_core/initializer/settings/strict_options.rb +6 -12
- data/lib/smart_core/initializer/settings/type_system.rb +8 -17
- data/lib/smart_core/initializer/type_system/interop/aliasing/alias_list.rb +18 -21
- data/lib/smart_core/initializer/type_system/registry.rb +22 -24
- data/lib/smart_core/initializer/type_system/registry_interface.rb +15 -22
- data/lib/smart_core/initializer/version.rb +2 -2
- data/smart_initializer.gemspec +6 -6
- metadata +14 -14
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
# @api private
|
4
4
|
# @since 0.1.0
|
5
|
+
# @version 0.10.0
|
5
6
|
# rubocop:disable Metrics/ClassLength
|
6
7
|
class SmartCore::Initializer::Constructor::Definer
|
7
8
|
# @param klass [Class]
|
@@ -9,9 +10,10 @@ class SmartCore::Initializer::Constructor::Definer
|
|
9
10
|
#
|
10
11
|
# @api private
|
11
12
|
# @since 0.1.0
|
13
|
+
# @version 0.10.0
|
12
14
|
def initialize(klass)
|
13
15
|
@klass = klass
|
14
|
-
@lock = SmartCore::Engine::
|
16
|
+
@lock = SmartCore::Engine::ReadWriteLock.new
|
15
17
|
end
|
16
18
|
|
17
19
|
# @param block [Proc]
|
@@ -19,8 +21,9 @@ class SmartCore::Initializer::Constructor::Definer
|
|
19
21
|
#
|
20
22
|
# @api private
|
21
23
|
# @since 0.1.0
|
24
|
+
# @version 0.10.0
|
22
25
|
def define_init_extension(block)
|
23
|
-
|
26
|
+
@lock.write_sync do
|
24
27
|
add_init_extension(build_init_extension(block))
|
25
28
|
end
|
26
29
|
end
|
@@ -37,7 +40,7 @@ class SmartCore::Initializer::Constructor::Definer
|
|
37
40
|
#
|
38
41
|
# @api private
|
39
42
|
# @since 0.1.0
|
40
|
-
# @version 0.
|
43
|
+
# @version 0.10.0
|
41
44
|
def define_parameter(
|
42
45
|
name,
|
43
46
|
type,
|
@@ -48,7 +51,7 @@ class SmartCore::Initializer::Constructor::Definer
|
|
48
51
|
mutable,
|
49
52
|
as
|
50
53
|
)
|
51
|
-
|
54
|
+
@lock.write_sync do
|
52
55
|
attribute = build_param_attribute(
|
53
56
|
name,
|
54
57
|
type,
|
@@ -71,9 +74,9 @@ class SmartCore::Initializer::Constructor::Definer
|
|
71
74
|
#
|
72
75
|
# @api private
|
73
76
|
# @since 0.1.0
|
74
|
-
# @version 0.
|
77
|
+
# @version 0.10.0
|
75
78
|
def define_parameters(*names, mutable:, privacy:)
|
76
|
-
|
79
|
+
@lock.write_sync do
|
77
80
|
names.map do |name|
|
78
81
|
build_param_attribute(
|
79
82
|
name,
|
@@ -107,7 +110,7 @@ class SmartCore::Initializer::Constructor::Definer
|
|
107
110
|
#
|
108
111
|
# @api private
|
109
112
|
# @since 0.1.0
|
110
|
-
# @version 0.
|
113
|
+
# @version 0.10.0
|
111
114
|
def define_option(
|
112
115
|
name,
|
113
116
|
type,
|
@@ -120,7 +123,7 @@ class SmartCore::Initializer::Constructor::Definer
|
|
120
123
|
default,
|
121
124
|
optional
|
122
125
|
)
|
123
|
-
|
126
|
+
@lock.write_sync do
|
124
127
|
attribute = build_option_attribute(
|
125
128
|
name,
|
126
129
|
type,
|
@@ -145,9 +148,9 @@ class SmartCore::Initializer::Constructor::Definer
|
|
145
148
|
#
|
146
149
|
# @api private
|
147
150
|
# @since 0.1.0
|
148
|
-
# @version 0.
|
151
|
+
# @version 0.10.0
|
149
152
|
def define_options(*names, mutable:, privacy:)
|
150
|
-
|
153
|
+
@lock.write_sync do
|
151
154
|
names.map do |name|
|
152
155
|
build_option_attribute(
|
153
156
|
name,
|
@@ -352,14 +355,5 @@ class SmartCore::Initializer::Constructor::Definer
|
|
352
355
|
ERROR_MESSAGE
|
353
356
|
end
|
354
357
|
end
|
355
|
-
|
356
|
-
# @param block [Block]
|
357
|
-
# @return [Any]
|
358
|
-
#
|
359
|
-
# @api private
|
360
|
-
# @since 0.1.0
|
361
|
-
def thread_safe(&block)
|
362
|
-
@lock.synchronize(&block)
|
363
|
-
end
|
364
358
|
end
|
365
359
|
# rubocop:enable Metrics/ClassLength
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
# @api private
|
4
4
|
# @since 0.1.0
|
5
|
+
# @version 0.10.0
|
5
6
|
module SmartCore::Initializer::DSL
|
6
7
|
require_relative 'dsl/inheritance'
|
7
8
|
|
@@ -11,13 +12,13 @@ module SmartCore::Initializer::DSL
|
|
11
12
|
#
|
12
13
|
# @api private
|
13
14
|
# @since 0.1.0
|
15
|
+
# @version 0.10.0
|
14
16
|
def extended(base_klass)
|
15
17
|
base_klass.instance_eval do
|
16
18
|
instance_variable_set(:@__params__, SmartCore::Initializer::Attribute::List.new)
|
17
19
|
instance_variable_set(:@__options__, SmartCore::Initializer::Attribute::List.new)
|
18
20
|
instance_variable_set(:@__init_extensions__, SmartCore::Initializer::Extensions::List.new)
|
19
21
|
instance_variable_set(:@__definer__, SmartCore::Initializer::Constructor::Definer.new(self))
|
20
|
-
instance_variable_set(:@__deflock__, SmartCore::Engine::Lock.new)
|
21
22
|
instance_variable_set(:@__initializer_settings__, SmartCore::Initializer::Settings.new)
|
22
23
|
end
|
23
24
|
base_klass.extend(ClassMethods)
|
@@ -27,20 +28,20 @@ module SmartCore::Initializer::DSL
|
|
27
28
|
|
28
29
|
# @api private
|
29
30
|
# @since 0.1.0
|
31
|
+
# @version 0.10.0
|
30
32
|
module ClassInheritance
|
31
33
|
# @param child_klass [Class]
|
32
34
|
# @return [void]
|
33
35
|
#
|
34
36
|
# @api private
|
35
37
|
# @since 0.1.0
|
36
|
-
# @version 0.
|
38
|
+
# @version 0.10.0
|
37
39
|
def inherited(child_klass)
|
38
40
|
child_klass.instance_exec(__initializer_settings__) do |init_settings|
|
39
41
|
instance_variable_set(:@__params__, SmartCore::Initializer::Attribute::List.new)
|
40
42
|
instance_variable_set(:@__options__, SmartCore::Initializer::Attribute::List.new)
|
41
43
|
instance_variable_set(:@__init_extensions__, SmartCore::Initializer::Extensions::List.new)
|
42
44
|
instance_variable_set(:@__definer__, SmartCore::Initializer::Constructor::Definer.new(self))
|
43
|
-
instance_variable_set(:@__deflock__, SmartCore::Engine::Lock.new)
|
44
45
|
instance_variable_set(:@__initializer_settings__, init_settings.dup)
|
45
46
|
end
|
46
47
|
child_klass.extend(ClassMethods)
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
# @api private
|
4
4
|
# @since 0.1.0
|
5
|
+
# @version 0.10.0
|
5
6
|
class SmartCore::Initializer::Extensions::List
|
6
7
|
# @since 0.1.0
|
7
8
|
include Enumerable
|
@@ -10,9 +11,10 @@ class SmartCore::Initializer::Extensions::List
|
|
10
11
|
#
|
11
12
|
# @api private
|
12
13
|
# @since 0.1.0
|
14
|
+
# @version 0.10.0
|
13
15
|
def initialize
|
14
16
|
@extensions = []
|
15
|
-
@lock = SmartCore::Engine::
|
17
|
+
@lock = SmartCore::Engine::ReadWriteLock.new
|
16
18
|
end
|
17
19
|
|
18
20
|
# @param extension [SmartCore::Initializer::Extensions::Abstract]
|
@@ -20,8 +22,9 @@ class SmartCore::Initializer::Extensions::List
|
|
20
22
|
#
|
21
23
|
# @api private
|
22
24
|
# @since 0.1.0
|
25
|
+
# @version 0.10.0
|
23
26
|
def add(extension)
|
24
|
-
|
27
|
+
@lock.write_sync { extensions << extension }
|
25
28
|
end
|
26
29
|
alias_method :<<, :add
|
27
30
|
|
@@ -30,8 +33,9 @@ class SmartCore::Initializer::Extensions::List
|
|
30
33
|
#
|
31
34
|
# @api private
|
32
35
|
# @since 0.1.0
|
36
|
+
# @version 0.10.0
|
33
37
|
def concat(list)
|
34
|
-
|
38
|
+
@lock.write_sync do
|
35
39
|
list.each { |extension| add(extension.dup) }
|
36
40
|
end
|
37
41
|
end
|
@@ -41,8 +45,9 @@ class SmartCore::Initializer::Extensions::List
|
|
41
45
|
#
|
42
46
|
# @api private
|
43
47
|
# @since 0.1.0
|
48
|
+
# @version 0.10.0
|
44
49
|
def each(&block)
|
45
|
-
|
50
|
+
@lock.read_sync do
|
46
51
|
block_given? ? extensions.each(&block) : extensions.each
|
47
52
|
end
|
48
53
|
end
|
@@ -51,8 +56,9 @@ class SmartCore::Initializer::Extensions::List
|
|
51
56
|
#
|
52
57
|
# @api private
|
53
58
|
# @since 0.1.0
|
59
|
+
# @version 0.10.0
|
54
60
|
def size
|
55
|
-
|
61
|
+
@lock.read_sync { extensions.size }
|
56
62
|
end
|
57
63
|
|
58
64
|
private
|
@@ -62,13 +68,4 @@ class SmartCore::Initializer::Extensions::List
|
|
62
68
|
# @api private
|
63
69
|
# @since 0.1.0
|
64
70
|
attr_reader :extensions
|
65
|
-
|
66
|
-
# @param block [Block]
|
67
|
-
# @return [Any]
|
68
|
-
#
|
69
|
-
# @api private
|
70
|
-
# @since 0.1.0
|
71
|
-
def thread_safe(&block)
|
72
|
-
@lock.synchronize(&block)
|
73
|
-
end
|
74
71
|
end
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
# @api private
|
4
4
|
# @since 0.1.0
|
5
|
+
# @version 0.10.0
|
5
6
|
class SmartCore::Initializer::Plugins::Abstract
|
6
7
|
class << self
|
7
8
|
# @param child_klass [Class]
|
@@ -9,9 +10,10 @@ class SmartCore::Initializer::Plugins::Abstract
|
|
9
10
|
#
|
10
11
|
# @api private
|
11
12
|
# @since 0.1.0
|
13
|
+
# @version 0.10.0
|
12
14
|
def inherited(child_klass)
|
13
15
|
child_klass.instance_variable_set(:@__loaded__, false)
|
14
|
-
child_klass.instance_variable_set(:@__lock__,
|
16
|
+
child_klass.instance_variable_set(:@__lock__, SmartCore::Engine::Lock.new)
|
15
17
|
super
|
16
18
|
end
|
17
19
|
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
# @api private
|
4
4
|
# @since 0.1.0
|
5
|
+
# @version 0.10.0
|
5
6
|
class SmartCore::Initializer::Plugins::Registry
|
6
7
|
# @since 0.1.0
|
7
8
|
include Enumerable
|
@@ -10,9 +11,10 @@ class SmartCore::Initializer::Plugins::Registry
|
|
10
11
|
#
|
11
12
|
# @api private
|
12
13
|
# @since 0.1.0
|
14
|
+
# @version 0.10.0
|
13
15
|
def initialize
|
14
16
|
@plugin_set = {}
|
15
|
-
@access_lock =
|
17
|
+
@access_lock = SmartCore::Engine::ReadWriteLock.new
|
16
18
|
end
|
17
19
|
|
18
20
|
# @param plugin_name [Symbol, String]
|
@@ -20,8 +22,9 @@ class SmartCore::Initializer::Plugins::Registry
|
|
20
22
|
#
|
21
23
|
# @api private
|
22
24
|
# @since 0.1.0
|
25
|
+
# @version 0.10.0
|
23
26
|
def [](plugin_name)
|
24
|
-
|
27
|
+
@access_lock.read_sync { fetch(plugin_name) }
|
25
28
|
end
|
26
29
|
|
27
30
|
# @param plugin_name [Symbol, String]
|
@@ -30,8 +33,9 @@ class SmartCore::Initializer::Plugins::Registry
|
|
30
33
|
#
|
31
34
|
# @api private
|
32
35
|
# @since 0.1.0
|
36
|
+
# @version 0.10.0
|
33
37
|
def register(plugin_name, plugin_module)
|
34
|
-
|
38
|
+
@access_lock.write_sync { apply(plugin_name, plugin_module) }
|
35
39
|
end
|
36
40
|
alias_method :[]=, :register
|
37
41
|
|
@@ -39,16 +43,18 @@ class SmartCore::Initializer::Plugins::Registry
|
|
39
43
|
#
|
40
44
|
# @api private
|
41
45
|
# @since 0.1.0
|
46
|
+
# @version 0.10.0
|
42
47
|
def names
|
43
|
-
|
48
|
+
@access_lock.read_sync { plugin_names }
|
44
49
|
end
|
45
50
|
|
46
51
|
# @return [Hash<String,Class<SmartCore::Initializer::Plugins::Abstract>>]
|
47
52
|
#
|
48
53
|
# @api private
|
49
54
|
# @since 0.1.0
|
55
|
+
# @version 0.10.0
|
50
56
|
def loaded
|
51
|
-
|
57
|
+
@access_lock.read_sync { loaded_plugins }
|
52
58
|
end
|
53
59
|
|
54
60
|
# @param block [Block]
|
@@ -56,8 +62,9 @@ class SmartCore::Initializer::Plugins::Registry
|
|
56
62
|
#
|
57
63
|
# @api private
|
58
64
|
# @since 0.1.0
|
65
|
+
# @version 0.10.0
|
59
66
|
def each(&block)
|
60
|
-
|
67
|
+
@access_lock.read_sync { iterate(&block) }
|
61
68
|
end
|
62
69
|
|
63
70
|
private
|
@@ -74,14 +81,6 @@ class SmartCore::Initializer::Plugins::Registry
|
|
74
81
|
# @since 0.1.0
|
75
82
|
attr_reader :access_lock
|
76
83
|
|
77
|
-
# @return [void]
|
78
|
-
#
|
79
|
-
# @api private
|
80
|
-
# @since 0.1.0
|
81
|
-
def thread_safe
|
82
|
-
access_lock.synchronize { yield if block_given? }
|
83
|
-
end
|
84
|
-
|
85
84
|
# @return [Array<String>]
|
86
85
|
#
|
87
86
|
# @api private
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
# @api private
|
4
4
|
# @since 0.1.0
|
5
|
+
# @version 0.10.0
|
5
6
|
module SmartCore::Initializer::Plugins::RegistryInterface
|
6
7
|
class << self
|
7
8
|
# @param base_module [Class, Module]
|
@@ -9,12 +10,13 @@ module SmartCore::Initializer::Plugins::RegistryInterface
|
|
9
10
|
#
|
10
11
|
# @api private
|
11
12
|
# @since 0.1.0
|
13
|
+
# @version 0.10.0
|
12
14
|
def extended(base_module)
|
13
15
|
base_module.instance_variable_set(
|
14
16
|
:@plugin_registry, SmartCore::Initializer::Plugins::Registry.new
|
15
17
|
)
|
16
18
|
base_module.instance_variable_set(
|
17
|
-
:@access_lock, SmartCore::Engine::
|
19
|
+
:@access_lock, SmartCore::Engine::ReadWriteLock.new
|
18
20
|
)
|
19
21
|
end
|
20
22
|
end
|
@@ -24,24 +26,27 @@ module SmartCore::Initializer::Plugins::RegistryInterface
|
|
24
26
|
#
|
25
27
|
# @api public
|
26
28
|
# @since 0.1.0
|
29
|
+
# @version 0.10.0
|
27
30
|
def load(plugin_name)
|
28
|
-
|
31
|
+
@access_lock.read_sync { plugin_registry[plugin_name].load! }
|
29
32
|
end
|
30
33
|
|
31
34
|
# @return [Array<String>]
|
32
35
|
#
|
33
36
|
# @api public
|
34
37
|
# @since 0.1.0
|
38
|
+
# @version 0.10.0
|
35
39
|
def loaded_plugins
|
36
|
-
|
40
|
+
@access_lock.read_sync { plugin_registry.loaded.keys }
|
37
41
|
end
|
38
42
|
|
39
43
|
# @return [Array<String>]
|
40
44
|
#
|
41
45
|
# @api public
|
42
46
|
# @since 0.1.0
|
47
|
+
# @version 0.10.0
|
43
48
|
def names
|
44
|
-
|
49
|
+
@access_lock.read_sync { plugin_registry.names }
|
45
50
|
end
|
46
51
|
|
47
52
|
# @param plugin_name [Symbol, String]
|
@@ -49,8 +54,9 @@ module SmartCore::Initializer::Plugins::RegistryInterface
|
|
49
54
|
#
|
50
55
|
# @api private
|
51
56
|
# @since 0.1.0
|
57
|
+
# @version 0.10.0
|
52
58
|
def register_plugin(plugin_name, plugin_module)
|
53
|
-
|
59
|
+
@access_lock.write_sync { plugin_registry[plugin_name] = plugin_module }
|
54
60
|
end
|
55
61
|
|
56
62
|
private
|
@@ -60,18 +66,4 @@ module SmartCore::Initializer::Plugins::RegistryInterface
|
|
60
66
|
# @api private
|
61
67
|
# @since 0.1.0
|
62
68
|
attr_reader :plugin_registry
|
63
|
-
|
64
|
-
# @return [SmartCore::Engine::Lock]
|
65
|
-
#
|
66
|
-
# @api private
|
67
|
-
# @since 0.1.0
|
68
|
-
attr_reader :access_lock
|
69
|
-
|
70
|
-
# @return [void]
|
71
|
-
#
|
72
|
-
# @api private
|
73
|
-
# @since 0.1.0
|
74
|
-
def thread_safe
|
75
|
-
access_lock.synchronize { yield if block_given? }
|
76
|
-
end
|
77
69
|
end
|
@@ -2,23 +2,16 @@
|
|
2
2
|
|
3
3
|
# @api private
|
4
4
|
# @since 0.8.0
|
5
|
+
# @version 0.10.0
|
5
6
|
class SmartCore::Initializer::Settings::AutoCast < SmartCore::Initializer::Settings::Base
|
6
|
-
# @return [void]
|
7
|
-
#
|
8
|
-
# @api private
|
9
|
-
# @since 0.8.0
|
10
|
-
def initialize
|
11
|
-
@value = nil
|
12
|
-
@lock = SmartCore::Engine::Lock.new
|
13
|
-
end
|
14
|
-
|
15
7
|
# @return [Boolean]
|
16
8
|
#
|
17
9
|
# @api private
|
18
10
|
# @since 0.8.0
|
11
|
+
# @version 0.10.0
|
19
12
|
def resolve
|
20
|
-
|
21
|
-
@value == nil ? SmartCore::Initializer::Configuration[:auto_cast] : @value
|
13
|
+
@lock.read_sync do
|
14
|
+
(@value == nil) ? SmartCore::Initializer::Configuration[:auto_cast] : @value
|
22
15
|
end
|
23
16
|
end
|
24
17
|
|
@@ -27,8 +20,9 @@ class SmartCore::Initializer::Settings::AutoCast < SmartCore::Initializer::Setti
|
|
27
20
|
#
|
28
21
|
# @api private
|
29
22
|
# @since 0.8.0
|
23
|
+
# @version 0.10.0
|
30
24
|
def assign(value)
|
31
|
-
|
25
|
+
@lock.write_sync do
|
32
26
|
raise(
|
33
27
|
SmartCore::Initializer::SettingArgumentError,
|
34
28
|
":auto_cast setting should be a type of boolean (got: `#{value.class}`)"
|
@@ -2,14 +2,16 @@
|
|
2
2
|
|
3
3
|
# @api private
|
4
4
|
# @since 0.8.0
|
5
|
+
# @version 0.10.0
|
5
6
|
class SmartCore::Initializer::Settings::Base
|
6
7
|
# @return [void]
|
7
8
|
#
|
8
9
|
# @api private
|
9
10
|
# @since 0.8.0
|
11
|
+
# @version 0.10.0
|
10
12
|
def initialize
|
11
13
|
@value = nil
|
12
|
-
@lock = SmartCore::Engine::
|
14
|
+
@lock = SmartCore::Engine::ReadWriteLock.new
|
13
15
|
end
|
14
16
|
|
15
17
|
# @!method resolve
|
@@ -28,22 +30,12 @@ class SmartCore::Initializer::Settings::Base
|
|
28
30
|
#
|
29
31
|
# @api private
|
30
32
|
# @since 0.8.0
|
33
|
+
# @version 0.10.0
|
31
34
|
def dup
|
32
|
-
|
35
|
+
@lock.write_sync do
|
33
36
|
self.class.new.tap do |duplicate|
|
34
37
|
duplicate.instance_variable_set(:@value, @value)
|
35
38
|
end
|
36
39
|
end
|
37
40
|
end
|
38
|
-
|
39
|
-
private
|
40
|
-
|
41
|
-
# @param block [Block]
|
42
|
-
# @return [Any]
|
43
|
-
#
|
44
|
-
# @api private
|
45
|
-
# @since 0.8.0
|
46
|
-
def thread_safe(&block)
|
47
|
-
@lock.synchronize(&block)
|
48
|
-
end
|
49
41
|
end
|
@@ -2,23 +2,16 @@
|
|
2
2
|
|
3
3
|
# @api private
|
4
4
|
# @since 0.8.0
|
5
|
+
# @version 0.10.0
|
5
6
|
class SmartCore::Initializer::Settings::StrictOptions < SmartCore::Initializer::Settings::Base
|
6
|
-
# @return [void]
|
7
|
-
#
|
8
|
-
# @api private
|
9
|
-
# @since 0.8.0
|
10
|
-
def initialize
|
11
|
-
@value = nil
|
12
|
-
@lock = SmartCore::Engine::Lock.new
|
13
|
-
end
|
14
|
-
|
15
7
|
# @return [Boolean]
|
16
8
|
#
|
17
9
|
# @api private
|
18
10
|
# @since 0.8.0
|
11
|
+
# @version 0.10.0
|
19
12
|
def resolve
|
20
|
-
|
21
|
-
@value == nil ? SmartCore::Initializer::Configuration[:strict_options] : @value
|
13
|
+
@lock.read_sync do
|
14
|
+
(@value == nil) ? SmartCore::Initializer::Configuration[:strict_options] : @value
|
22
15
|
end
|
23
16
|
end
|
24
17
|
|
@@ -27,8 +20,9 @@ class SmartCore::Initializer::Settings::StrictOptions < SmartCore::Initializer::
|
|
27
20
|
#
|
28
21
|
# @api private
|
29
22
|
# @since 0.8.0
|
23
|
+
# @version 0.10.0
|
30
24
|
def assign(value)
|
31
|
-
|
25
|
+
@lock.write_sync do
|
32
26
|
raise(
|
33
27
|
SmartCore::Initializer::SettingArgumentError,
|
34
28
|
":strict_options setting should be a type of boolean (got: `#{value.class}`)"
|
@@ -2,24 +2,15 @@
|
|
2
2
|
|
3
3
|
# @api private
|
4
4
|
# @since 0.1.0
|
5
|
-
# @version 0.
|
5
|
+
# @version 0.10.0
|
6
6
|
class SmartCore::Initializer::Settings::TypeSystem < SmartCore::Initializer::Settings::Base
|
7
|
-
# @return [void]
|
8
|
-
#
|
9
|
-
# @api private
|
10
|
-
# @since 0.1.0
|
11
|
-
# @version 0.8.0
|
12
|
-
def initialize
|
13
|
-
@value = nil
|
14
|
-
@lock = SmartCore::Engine::Lock.new
|
15
|
-
end
|
16
|
-
|
17
7
|
# @return [Any]
|
18
8
|
#
|
19
9
|
# @api private
|
20
10
|
# @since 0.1.0
|
11
|
+
# @version 0.10.0
|
21
12
|
def generic_type_object
|
22
|
-
|
13
|
+
@lock.read_sync do
|
23
14
|
SmartCore::Initializer::TypeSystem.resolve(resolve).generic_type_object
|
24
15
|
end
|
25
16
|
end
|
@@ -28,10 +19,10 @@ class SmartCore::Initializer::Settings::TypeSystem < SmartCore::Initializer::Set
|
|
28
19
|
#
|
29
20
|
# @api private
|
30
21
|
# @since 0.1.0
|
31
|
-
# @version 0.
|
22
|
+
# @version 0.10.0
|
32
23
|
def resolve
|
33
|
-
|
34
|
-
@value == nil ? SmartCore::Initializer::Configuration[:default_type_system] : @value
|
24
|
+
@lock.read_sync do
|
25
|
+
(@value == nil) ? SmartCore::Initializer::Configuration[:default_type_system] : @value
|
35
26
|
end
|
36
27
|
end
|
37
28
|
|
@@ -40,9 +31,9 @@ class SmartCore::Initializer::Settings::TypeSystem < SmartCore::Initializer::Set
|
|
40
31
|
#
|
41
32
|
# @api private
|
42
33
|
# @since 0.1.0
|
43
|
-
# @version 0.
|
34
|
+
# @version 0.10.0
|
44
35
|
def assign(value)
|
45
|
-
|
36
|
+
@lock.write_sync do
|
46
37
|
# NOTE: type system existence validation
|
47
38
|
SmartCore::Initializer::TypeSystem.resolve(value)
|
48
39
|
@value = value
|
@@ -2,32 +2,36 @@
|
|
2
2
|
|
3
3
|
# @api private
|
4
4
|
# @since 0.1.0
|
5
|
+
# @version 0.10.0
|
5
6
|
class SmartCore::Initializer::TypeSystem::Interop::Aliasing::AliasList
|
6
7
|
# @param interop_klass [Class<SmartCore::Initializer::TypeSystem::Interop>]
|
7
8
|
# @return [void]
|
8
9
|
#
|
9
10
|
# @api private
|
10
11
|
# @since 0.1.0
|
12
|
+
# @version 0.10.0
|
11
13
|
def initialize(interop_klass)
|
12
14
|
@interop_klass = interop_klass
|
13
15
|
@list = {}
|
14
|
-
@lock = SmartCore::Engine::
|
16
|
+
@lock = SmartCore::Engine::ReadWriteLock.new
|
15
17
|
end
|
16
18
|
|
17
19
|
# @return [Array<String>]
|
18
20
|
#
|
19
21
|
# @api private
|
20
22
|
# @since 0.1.0
|
23
|
+
# @version 0.10.0
|
21
24
|
def keys
|
22
|
-
|
25
|
+
@lock.read_sync { registered_aliases }
|
23
26
|
end
|
24
27
|
|
25
28
|
# @return [Hash<String,Any>]
|
26
29
|
#
|
27
30
|
# @api private
|
28
31
|
# @since 0.1.0
|
32
|
+
# @version 0.10.0
|
29
33
|
def to_h
|
30
|
-
|
34
|
+
@lock.read_sync { transform_to_hash }
|
31
35
|
end
|
32
36
|
alias_method :to_hash, :to_h
|
33
37
|
|
@@ -37,9 +41,10 @@ class SmartCore::Initializer::TypeSystem::Interop::Aliasing::AliasList
|
|
37
41
|
#
|
38
42
|
# @api private
|
39
43
|
# @since 0.1.0
|
44
|
+
# @version 0.10.0
|
40
45
|
def associate(alias_name, type)
|
41
46
|
interop_klass.prevent_incompatible_type!(type)
|
42
|
-
|
47
|
+
@lock.write_sync { set_alias(alias_name, type) }
|
43
48
|
end
|
44
49
|
|
45
50
|
# @param alias_name [String, Symbol]
|
@@ -47,8 +52,9 @@ class SmartCore::Initializer::TypeSystem::Interop::Aliasing::AliasList
|
|
47
52
|
#
|
48
53
|
# @api private
|
49
54
|
# @since 0.1.0
|
55
|
+
# @version 0.10.0
|
50
56
|
def resolve(alias_name)
|
51
|
-
|
57
|
+
@lock.read_sync { get_alias(alias_name) }
|
52
58
|
end
|
53
59
|
|
54
60
|
private
|
@@ -65,15 +71,6 @@ class SmartCore::Initializer::TypeSystem::Interop::Aliasing::AliasList
|
|
65
71
|
# @since 0.1.0
|
66
72
|
attr_reader :interop_klass
|
67
73
|
|
68
|
-
# @param block [Block]
|
69
|
-
# @return [Any]
|
70
|
-
#
|
71
|
-
# @api private
|
72
|
-
# @since 0.1.0
|
73
|
-
def thread_safe(&block)
|
74
|
-
@lock.synchronize(&block)
|
75
|
-
end
|
76
|
-
|
77
74
|
# @param alias_name [String, Symbol]
|
78
75
|
# @param type [Any]
|
79
76
|
# @return [void]
|
@@ -97,16 +94,16 @@ class SmartCore::Initializer::TypeSystem::Interop::Aliasing::AliasList
|
|
97
94
|
#
|
98
95
|
# @api private
|
99
96
|
# @since 0.1.0
|
97
|
+
# @version 0.10.0
|
100
98
|
def get_alias(alias_name)
|
101
99
|
alias_name = normalized_alias(alias_name)
|
102
100
|
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
end
|
101
|
+
raise(
|
102
|
+
SmartCore::Initializer::TypeAliasNotFoundError,
|
103
|
+
"Alias with name `#{alias_name}` not found."
|
104
|
+
) unless list.key?(alias_name)
|
105
|
+
|
106
|
+
list.fetch(alias_name)
|
110
107
|
end
|
111
108
|
|
112
109
|
# @param alias_name [String, Symbol]
|