smart_initializer 0.1.0.alpha3 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -1
- data/.travis.yml +36 -5
- data/CHANGELOG.md +19 -0
- data/Gemfile.lock +63 -43
- data/README.md +227 -11
- data/Rakefile +1 -1
- data/bin/rspec +54 -0
- data/gemfiles/with_external_deps.gemfile +7 -0
- data/gemfiles/with_external_deps.gemfile.lock +102 -0
- data/gemfiles/without_external_deps.gemfile +5 -0
- data/gemfiles/without_external_deps.gemfile.lock +100 -0
- data/lib/smart_core/initializer.rb +44 -34
- data/lib/smart_core/initializer/attribute.rb +12 -5
- data/lib/smart_core/initializer/attribute/factory.rb +47 -27
- data/lib/smart_core/initializer/attribute/parameters.rb +12 -4
- data/lib/smart_core/initializer/configuration.rb +33 -0
- data/lib/smart_core/initializer/constructor.rb +35 -8
- data/lib/smart_core/initializer/{attribute → constructor}/definer.rb +64 -12
- data/lib/smart_core/initializer/dsl.rb +49 -10
- data/lib/smart_core/initializer/dsl/inheritance.rb +1 -0
- data/lib/smart_core/initializer/errors.rb +44 -0
- data/lib/smart_core/initializer/extensions.rb +9 -0
- data/lib/smart_core/initializer/extensions/abstract.rb +8 -0
- data/lib/smart_core/initializer/extensions/ext_init.rb +31 -0
- data/lib/smart_core/initializer/extensions/list.rb +74 -0
- data/lib/smart_core/initializer/functionality.rb +36 -0
- data/lib/smart_core/initializer/instance_attribute_accessing.rb +51 -0
- data/lib/smart_core/initializer/plugins.rb +17 -0
- data/lib/smart_core/initializer/plugins/abstract.rb +55 -0
- data/lib/smart_core/initializer/plugins/access_mixin.rb +47 -0
- data/lib/smart_core/initializer/plugins/registry.rb +166 -0
- data/lib/smart_core/initializer/plugins/registry_interface.rb +77 -0
- data/lib/smart_core/initializer/plugins/thy_types.rb +30 -0
- data/lib/smart_core/initializer/plugins/thy_types/errors.rb +11 -0
- data/lib/smart_core/initializer/plugins/thy_types/thy_types.rb +23 -0
- data/lib/smart_core/initializer/plugins/thy_types/thy_types/abstract_factory.rb +78 -0
- data/lib/smart_core/initializer/plugins/thy_types/thy_types/operation.rb +12 -0
- data/lib/smart_core/initializer/plugins/thy_types/thy_types/operation/base.rb +9 -0
- data/lib/smart_core/initializer/plugins/thy_types/thy_types/operation/cast.rb +21 -0
- data/lib/smart_core/initializer/plugins/thy_types/thy_types/operation/valid.rb +16 -0
- data/lib/smart_core/initializer/plugins/thy_types/thy_types/operation/validate.rb +19 -0
- data/lib/smart_core/initializer/settings.rb +49 -0
- data/lib/smart_core/initializer/settings/duplicator.rb +20 -0
- data/lib/smart_core/initializer/settings/type_system.rb +69 -0
- data/lib/smart_core/initializer/type_system.rb +16 -0
- data/lib/smart_core/initializer/type_system/interop.rb +103 -0
- data/lib/smart_core/initializer/type_system/interop/abstract_factory.rb +70 -0
- data/lib/smart_core/initializer/type_system/interop/aliasing.rb +72 -0
- data/lib/smart_core/initializer/type_system/interop/aliasing/alias_list.rb +141 -0
- data/lib/smart_core/initializer/type_system/interop/operation.rb +30 -0
- data/lib/smart_core/initializer/type_system/registry.rb +174 -0
- data/lib/smart_core/initializer/type_system/registry_interface.rb +102 -0
- data/lib/smart_core/initializer/type_system/smart_types.rb +48 -0
- data/lib/smart_core/initializer/type_system/smart_types/abstract_factory.rb +72 -0
- data/lib/smart_core/initializer/type_system/smart_types/operation.rb +13 -0
- data/lib/smart_core/initializer/type_system/smart_types/operation/base.rb +8 -0
- data/lib/smart_core/initializer/type_system/smart_types/operation/cast.rb +16 -0
- data/lib/smart_core/initializer/type_system/smart_types/operation/valid.rb +16 -0
- data/lib/smart_core/initializer/type_system/smart_types/operation/validate.rb +16 -0
- data/lib/smart_core/initializer/version.rb +2 -1
- data/smart_initializer.gemspec +13 -9
- metadata +73 -17
- data/lib/smart_core/initializer/type_aliasing.rb +0 -50
- data/lib/smart_core/initializer/type_aliasing/alias_list.rb +0 -101
@@ -43,12 +43,18 @@ class SmartCore::Initializer::Attribute::Parameters
|
|
43
43
|
# @since 0.1.0
|
44
44
|
attr_reader :name
|
45
45
|
|
46
|
-
# @return [SmartCore::
|
46
|
+
# @return [SmartCore::Initializer::TypeSystem::Interop]
|
47
47
|
#
|
48
48
|
# @api private
|
49
49
|
# @since 0.1.0
|
50
50
|
attr_reader :type
|
51
51
|
|
52
|
+
# @return [Class<SmartCore::Initilizer::TypeSystem::Interop>]
|
53
|
+
#
|
54
|
+
# @api private
|
55
|
+
# @since 0.1.0
|
56
|
+
attr_reader :type_system
|
57
|
+
|
52
58
|
# @return [Symbol]
|
53
59
|
#
|
54
60
|
# @api private
|
@@ -76,7 +82,8 @@ class SmartCore::Initializer::Attribute::Parameters
|
|
76
82
|
attr_reader :dynamic_options
|
77
83
|
|
78
84
|
# @param name [Symbol]
|
79
|
-
# @param type [SmartCore::
|
85
|
+
# @param type [SmartCore::Initializer::TypeSystem::Interop]
|
86
|
+
# @param type_system [Class<SmartCore::Initializer::TypeSystem::Interop>]
|
80
87
|
# @param privacy [Symbol]
|
81
88
|
# @param finalizer [SmartCore::Initializer::Attribute::AnonymousBlock/InstanceMethod]
|
82
89
|
# @param cast [Boolean]
|
@@ -86,9 +93,10 @@ class SmartCore::Initializer::Attribute::Parameters
|
|
86
93
|
#
|
87
94
|
# @api private
|
88
95
|
# @since 0.1.0
|
89
|
-
def initialize(name, type, privacy, finalizer, cast, dynamic_options)
|
96
|
+
def initialize(name, type, type_system, privacy, finalizer, cast, dynamic_options)
|
90
97
|
@name = name
|
91
98
|
@type = type
|
99
|
+
@type_system = type_system
|
92
100
|
@privacy = privacy
|
93
101
|
@finalizer = finalizer
|
94
102
|
@cast = cast
|
@@ -116,6 +124,6 @@ class SmartCore::Initializer::Attribute::Parameters
|
|
116
124
|
ERROR_MESSAGE
|
117
125
|
end
|
118
126
|
|
119
|
-
|
127
|
+
default_value.is_a?(Proc) ? default_value.call : default_value
|
120
128
|
end
|
121
129
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'qonfig'
|
4
|
+
|
5
|
+
# @api public
|
6
|
+
# @since 0.1.0
|
7
|
+
module SmartCore::Initializer::Configuration
|
8
|
+
# @since 0.1.0
|
9
|
+
include Qonfig::Configurable
|
10
|
+
|
11
|
+
# @api public
|
12
|
+
# @since 0.1.0
|
13
|
+
extend SmartCore::Initializer::Plugins::AccessMixin
|
14
|
+
|
15
|
+
class << self
|
16
|
+
# @param setting_key [String, Symbol]
|
17
|
+
# @return [Qonfig::Settings, Any]
|
18
|
+
#
|
19
|
+
# @api private
|
20
|
+
# @since 0.1.0
|
21
|
+
def [](setting_key)
|
22
|
+
config[setting_key]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# @since 0.1.0
|
27
|
+
configuration do
|
28
|
+
setting :default_type_system, :smart_types
|
29
|
+
validate :default_type_system do |value|
|
30
|
+
SmartCore::Initializer::TypeSystem.resolve(value) rescue false
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -3,6 +3,8 @@
|
|
3
3
|
# @api private
|
4
4
|
# @since 0.1.0
|
5
5
|
class SmartCore::Initializer::Constructor
|
6
|
+
require_relative 'constructor/definer'
|
7
|
+
|
6
8
|
# @param klass [Class<SmartCore::Initializer>]
|
7
9
|
# @param arguments [Array<Any>]
|
8
10
|
# @param block [Proc, NilClass]
|
@@ -27,6 +29,7 @@ class SmartCore::Initializer::Constructor
|
|
27
29
|
initialize_parameters(instance)
|
28
30
|
initialize_options(instance)
|
29
31
|
process_original_initializer(instance)
|
32
|
+
process_init_extensions(instance)
|
30
33
|
end
|
31
34
|
end
|
32
35
|
|
@@ -69,8 +72,8 @@ class SmartCore::Initializer::Constructor
|
|
69
72
|
#
|
70
73
|
# @api private
|
71
74
|
# @since 0.1.0
|
75
|
+
# rubocop:disable Metrics/AbcSize
|
72
76
|
def prevent_attribute_insufficiency
|
73
|
-
required_options = klass.__options__.reject(&:has_default?).map(&:name)
|
74
77
|
required_parameter_count = klass.__params__.size
|
75
78
|
|
76
79
|
raise(
|
@@ -79,13 +82,23 @@ class SmartCore::Initializer::Constructor
|
|
79
82
|
"(given #{parameters.size}, expected #{required_parameter_count})"
|
80
83
|
) unless parameters.size == required_parameter_count
|
81
84
|
|
82
|
-
|
85
|
+
required_options = klass.__options__.reject(&:has_default?).map(&:name)
|
86
|
+
missing_options = required_options.reject { |option| options.key?(option) }
|
83
87
|
|
84
88
|
raise(
|
85
89
|
SmartCore::Initializer::OptionArgumentError,
|
86
90
|
"Missing options: #{missing_options.join(', ')}"
|
87
91
|
) if missing_options.any?
|
92
|
+
|
93
|
+
possible_options = klass.__options__.map(&:name)
|
94
|
+
unknown_options = options.keys - possible_options
|
95
|
+
|
96
|
+
raise(
|
97
|
+
SmartCore::Initializer::OptionArgumentError,
|
98
|
+
"Unknown options: #{unknown_options.join(', ')}"
|
99
|
+
) if unknown_options.any?
|
88
100
|
end
|
101
|
+
# rubocop:enable Metrics/AbcSize
|
89
102
|
|
90
103
|
# @return [Any]
|
91
104
|
#
|
@@ -104,10 +117,10 @@ class SmartCore::Initializer::Constructor
|
|
104
117
|
parameter_definitions = Hash[klass.__params__.zip(parameters)]
|
105
118
|
|
106
119
|
parameter_definitions.each_pair do |attribute, parameter_value|
|
107
|
-
|
120
|
+
if !attribute.type.valid?(parameter_value) && attribute.cast?
|
121
|
+
parameter_value = attribute.type.cast(parameter_value)
|
122
|
+
end
|
108
123
|
|
109
|
-
# TODO: fail with SmartCore::Initializer::ArgumentError
|
110
|
-
# (isntead of SmartCore::Types::TypeError)
|
111
124
|
attribute.type.validate!(parameter_value)
|
112
125
|
|
113
126
|
final_value = attribute.finalizer.call(parameter_value, instance)
|
@@ -120,19 +133,22 @@ class SmartCore::Initializer::Constructor
|
|
120
133
|
#
|
121
134
|
# @api private
|
122
135
|
# @since 0.1.0
|
136
|
+
# rubocop:disable Metrics/AbcSize
|
123
137
|
def initialize_options(instance)
|
124
138
|
klass.__options__.each do |attribute|
|
125
139
|
option_value = options.fetch(attribute.name) { attribute.default }
|
126
|
-
option_value = attribute.type.cast(option_value) if attribute.cast?
|
127
140
|
|
128
|
-
|
129
|
-
|
141
|
+
if !attribute.type.valid?(option_value) && attribute.cast?
|
142
|
+
option_value = attribute.type.cast(option_value)
|
143
|
+
end
|
144
|
+
|
130
145
|
attribute.type.validate!(option_value)
|
131
146
|
|
132
147
|
final_value = attribute.finalizer.call(option_value, instance)
|
133
148
|
instance.instance_variable_set("@#{attribute.name}", final_value)
|
134
149
|
end
|
135
150
|
end
|
151
|
+
# rubocop:enable Metrics/AbcSize
|
136
152
|
|
137
153
|
# @param instance [Any]
|
138
154
|
# @return [void]
|
@@ -143,6 +159,17 @@ class SmartCore::Initializer::Constructor
|
|
143
159
|
instance.send(:initialize, *arguments, &block)
|
144
160
|
end
|
145
161
|
|
162
|
+
# @param instance [Any]
|
163
|
+
# @return [void]
|
164
|
+
#
|
165
|
+
# @api private
|
166
|
+
# @since 0.1.0
|
167
|
+
def process_init_extensions(instance)
|
168
|
+
klass.__init_extensions__.each do |extension|
|
169
|
+
extension.call(instance)
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
146
173
|
# @param arguments [Array<Any>]
|
147
174
|
# @return [Array<Array<Any>,Hash<Symbol,Any>>]
|
148
175
|
#
|
@@ -2,7 +2,8 @@
|
|
2
2
|
|
3
3
|
# @api private
|
4
4
|
# @since 0.1.0
|
5
|
-
|
5
|
+
# rubocop:disable Metrics/ClassLength
|
6
|
+
class SmartCore::Initializer::Constructor::Definer
|
6
7
|
# @param klass [Class]
|
7
8
|
# @return [void]
|
8
9
|
#
|
@@ -13,8 +14,20 @@ class SmartCore::Initializer::Attribute::Definer
|
|
13
14
|
@lock = SmartCore::Engine::Lock.new
|
14
15
|
end
|
15
16
|
|
17
|
+
# @param block [Proc]
|
18
|
+
# @return [void]
|
19
|
+
#
|
20
|
+
# @api private
|
21
|
+
# @since 0.1.0
|
22
|
+
def define_init_extension(block)
|
23
|
+
thread_safe do
|
24
|
+
add_init_extension(build_init_extension(block))
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
16
28
|
# @param name [String, Symbol]
|
17
|
-
# @param type [String, Symbol,
|
29
|
+
# @param type [String, Symbol, Any]
|
30
|
+
# @param type_system [String, Symbol]
|
18
31
|
# @param privacy [String, Symbol]
|
19
32
|
# @param finalize [String, Symbol, Proc]
|
20
33
|
# @param cast [Boolean]
|
@@ -23,9 +36,17 @@ class SmartCore::Initializer::Attribute::Definer
|
|
23
36
|
#
|
24
37
|
# @api private
|
25
38
|
# @since 0.1.0
|
26
|
-
def define_parameter(name, type, privacy, finalize, cast, dynamic_options)
|
39
|
+
def define_parameter(name, type, type_system, privacy, finalize, cast, dynamic_options)
|
27
40
|
thread_safe do
|
28
|
-
attribute = build_attribute(
|
41
|
+
attribute = build_attribute(
|
42
|
+
name,
|
43
|
+
type,
|
44
|
+
type_system,
|
45
|
+
privacy,
|
46
|
+
finalize,
|
47
|
+
cast,
|
48
|
+
dynamic_options
|
49
|
+
)
|
29
50
|
prevent_option_overlap(attribute)
|
30
51
|
add_parameter(attribute)
|
31
52
|
end
|
@@ -41,7 +62,8 @@ class SmartCore::Initializer::Attribute::Definer
|
|
41
62
|
names.map do |name|
|
42
63
|
build_attribute(
|
43
64
|
name,
|
44
|
-
|
65
|
+
klass.__initializer_settings__.generic_type_object,
|
66
|
+
klass.__initializer_settings__.type_system,
|
45
67
|
SmartCore::Initializer::Attribute::Parameters::DEFAULT_PRIVACY_MODE,
|
46
68
|
SmartCore::Initializer::Attribute::Parameters::DEFAULT_FINALIZER,
|
47
69
|
SmartCore::Initializer::Attribute::Parameters::DEFAULT_CAST_BEHAVIOUR,
|
@@ -56,7 +78,8 @@ class SmartCore::Initializer::Attribute::Definer
|
|
56
78
|
end
|
57
79
|
|
58
80
|
# @param name [String, Symbol]
|
59
|
-
# @param type [String, Symbol,
|
81
|
+
# @param type [String, Symbol, Any]
|
82
|
+
# @param type_system [String, Symbol]
|
60
83
|
# @param privacy [String, Symbol]
|
61
84
|
# @param finalize [String, Symbol, Proc]
|
62
85
|
# @param cast [Boolean]
|
@@ -65,9 +88,17 @@ class SmartCore::Initializer::Attribute::Definer
|
|
65
88
|
#
|
66
89
|
# @api private
|
67
90
|
# @since 0.1.0
|
68
|
-
def define_option(name, type, privacy, finalize, cast, dynamic_options)
|
91
|
+
def define_option(name, type, type_system, privacy, finalize, cast, dynamic_options)
|
69
92
|
thread_safe do
|
70
|
-
attribute = build_attribute(
|
93
|
+
attribute = build_attribute(
|
94
|
+
name,
|
95
|
+
type,
|
96
|
+
type_system,
|
97
|
+
privacy,
|
98
|
+
finalize,
|
99
|
+
cast,
|
100
|
+
dynamic_options
|
101
|
+
)
|
71
102
|
prevent_parameter_overlap(attribute)
|
72
103
|
add_option(attribute)
|
73
104
|
end
|
@@ -83,7 +114,8 @@ class SmartCore::Initializer::Attribute::Definer
|
|
83
114
|
names.map do |name|
|
84
115
|
build_attribute(
|
85
116
|
name,
|
86
|
-
|
117
|
+
klass.__initializer_settings__.generic_type_object,
|
118
|
+
klass.__initializer_settings__.type_system,
|
87
119
|
SmartCore::Initializer::Attribute::Parameters::DEFAULT_PRIVACY_MODE,
|
88
120
|
SmartCore::Initializer::Attribute::Parameters::DEFAULT_FINALIZER,
|
89
121
|
SmartCore::Initializer::Attribute::Parameters::DEFAULT_CAST_BEHAVIOUR,
|
@@ -106,7 +138,8 @@ class SmartCore::Initializer::Attribute::Definer
|
|
106
138
|
attr_reader :klass
|
107
139
|
|
108
140
|
# @param name [String, Symbol]
|
109
|
-
# @param type [String, Symbol,
|
141
|
+
# @param type [String, Symbol, Any]
|
142
|
+
# @param type_system [String, Symbol]
|
110
143
|
# @param privacy [String, Symbol]
|
111
144
|
# @param finalize [String, Symbol, Proc]
|
112
145
|
# @param cast [Boolean]
|
@@ -115,12 +148,21 @@ class SmartCore::Initializer::Attribute::Definer
|
|
115
148
|
#
|
116
149
|
# @api private
|
117
150
|
# @since 0.1.0
|
118
|
-
def build_attribute(name, type, privacy, finalize, cast, dynamic_options)
|
151
|
+
def build_attribute(name, type, type_system, privacy, finalize, cast, dynamic_options)
|
119
152
|
SmartCore::Initializer::Attribute::Factory.create(
|
120
|
-
name, type, privacy, finalize, cast, dynamic_options
|
153
|
+
name, type, type_system, privacy, finalize, cast, dynamic_options
|
121
154
|
)
|
122
155
|
end
|
123
156
|
|
157
|
+
# @param block [Proc]
|
158
|
+
# @return [SmartCore::Initializer::Extensions::ExtInit]
|
159
|
+
#
|
160
|
+
# @api private
|
161
|
+
# @since 0.1.0
|
162
|
+
def build_init_extension(block)
|
163
|
+
SmartCore::Initializer::Extensions::ExtInit.new(block)
|
164
|
+
end
|
165
|
+
|
124
166
|
# @param parameter [SmartCore::Initializer::Attribute]
|
125
167
|
# @return [void]
|
126
168
|
#
|
@@ -143,6 +185,15 @@ class SmartCore::Initializer::Attribute::Definer
|
|
143
185
|
klass.send(option.privacy, option.name)
|
144
186
|
end
|
145
187
|
|
188
|
+
# @param extension [SmartCore::Initializer::Extensions::ExtInit]
|
189
|
+
# @return [void]
|
190
|
+
#
|
191
|
+
# @api private
|
192
|
+
# @since 0.1.0
|
193
|
+
def add_init_extension(extension)
|
194
|
+
klass.__init_extensions__ << extension
|
195
|
+
end
|
196
|
+
|
146
197
|
# @param parameter [SmartCore::Initializer::Attribute]
|
147
198
|
# @return [void]
|
148
199
|
#
|
@@ -178,3 +229,4 @@ class SmartCore::Initializer::Attribute::Definer
|
|
178
229
|
@lock.synchronize(&block)
|
179
230
|
end
|
180
231
|
end
|
232
|
+
# rubocop:enable Metrics/ClassLength
|
@@ -13,10 +13,12 @@ module SmartCore::Initializer::DSL
|
|
13
13
|
# @since 0.1.0
|
14
14
|
def extended(base_klass)
|
15
15
|
base_klass.instance_eval do
|
16
|
-
instance_variable_set(:@__params__,
|
16
|
+
instance_variable_set(:@__params__, SmartCore::Initializer::Attribute::List.new)
|
17
17
|
instance_variable_set(:@__options__, SmartCore::Initializer::Attribute::List.new)
|
18
|
-
instance_variable_set(:@
|
18
|
+
instance_variable_set(:@__init_extensions__, SmartCore::Initializer::Extensions::List.new)
|
19
|
+
instance_variable_set(:@__definer__, SmartCore::Initializer::Constructor::Definer.new(self))
|
19
20
|
instance_variable_set(:@__deflock__, SmartCore::Engine::Lock.new)
|
21
|
+
instance_variable_set(:@__initializer_settings__, SmartCore::Initializer::Settings.new)
|
20
22
|
end
|
21
23
|
base_klass.extend(ClassMethods)
|
22
24
|
base_klass.singleton_class.prepend(ClassInheritance)
|
@@ -31,15 +33,19 @@ module SmartCore::Initializer::DSL
|
|
31
33
|
#
|
32
34
|
# @api private
|
33
35
|
# @since 0.1.0
|
36
|
+
# @version 0.3.1
|
34
37
|
def inherited(child_klass)
|
35
38
|
child_klass.instance_eval do
|
36
|
-
instance_variable_set(:@__params__,
|
39
|
+
instance_variable_set(:@__params__, SmartCore::Initializer::Attribute::List.new)
|
37
40
|
instance_variable_set(:@__options__, SmartCore::Initializer::Attribute::List.new)
|
38
|
-
instance_variable_set(:@
|
41
|
+
instance_variable_set(:@__init_extensions__, SmartCore::Initializer::Extensions::List.new)
|
42
|
+
instance_variable_set(:@__definer__, SmartCore::Initializer::Constructor::Definer.new(self))
|
39
43
|
instance_variable_set(:@__deflock__, SmartCore::Engine::Lock.new)
|
44
|
+
instance_variable_set(:@__initializer_settings__, __initializer_settings__.dup)
|
40
45
|
end
|
41
46
|
child_klass.extend(ClassMethods)
|
42
47
|
SmartCore::Initializer::DSL::Inheritance.inherit(base: self, child: child_klass)
|
48
|
+
child_klass.singleton_class.prepend(ClassInheritance)
|
43
49
|
super
|
44
50
|
end
|
45
51
|
end
|
@@ -63,6 +69,14 @@ module SmartCore::Initializer::DSL
|
|
63
69
|
@__options__
|
64
70
|
end
|
65
71
|
|
72
|
+
# @return [SmartCore::Initializer::Extentions::List]
|
73
|
+
#
|
74
|
+
# @api private
|
75
|
+
# @since 0.1.0
|
76
|
+
def __init_extensions__
|
77
|
+
@__init_extensions__
|
78
|
+
end
|
79
|
+
|
66
80
|
# @return [SmartCore::Initializer::Attribute::Definer]
|
67
81
|
#
|
68
82
|
# @api private
|
@@ -71,6 +85,14 @@ module SmartCore::Initializer::DSL
|
|
71
85
|
@__definer__
|
72
86
|
end
|
73
87
|
|
88
|
+
# @return [SmartCore::Initializer::Settings]
|
89
|
+
#
|
90
|
+
# @api private
|
91
|
+
# @since 0.1.0
|
92
|
+
def __initializer_settings__
|
93
|
+
@__initializer_settings__
|
94
|
+
end
|
95
|
+
|
74
96
|
# @param arguments [Array]
|
75
97
|
# @param block [Block]
|
76
98
|
# @return [Any]
|
@@ -82,7 +104,7 @@ module SmartCore::Initializer::DSL
|
|
82
104
|
end
|
83
105
|
|
84
106
|
# @param name [String, Symbol]
|
85
|
-
# @param type [String, Symbol,
|
107
|
+
# @param type [String, Symbol, Any]
|
86
108
|
# @option cast [Boolean]
|
87
109
|
# @option privacy [String, Symbol]
|
88
110
|
# @option finalize [String, Symbol, Proc]
|
@@ -93,13 +115,16 @@ module SmartCore::Initializer::DSL
|
|
93
115
|
# @since 0.1.0
|
94
116
|
def param(
|
95
117
|
name,
|
96
|
-
type =
|
118
|
+
type = __initializer_settings__.generic_type_object,
|
97
119
|
privacy: SmartCore::Initializer::Attribute::Parameters::DEFAULT_PRIVACY_MODE,
|
98
120
|
finalize: SmartCore::Initializer::Attribute::Parameters::DEFAULT_FINALIZER,
|
99
121
|
cast: SmartCore::Initializer::Attribute::Parameters::DEFAULT_CAST_BEHAVIOUR,
|
122
|
+
type_system: __initializer_settings__.type_system,
|
100
123
|
**dynamic_options
|
101
124
|
)
|
102
|
-
__definer__.define_parameter(
|
125
|
+
__definer__.define_parameter(
|
126
|
+
name, type, type_system, privacy, finalize, cast, dynamic_options
|
127
|
+
)
|
103
128
|
end
|
104
129
|
|
105
130
|
# @param names [Array<String, Symbol>]
|
@@ -112,10 +137,11 @@ module SmartCore::Initializer::DSL
|
|
112
137
|
end
|
113
138
|
|
114
139
|
# @param name [String, Symbol]
|
115
|
-
# @param type [String, Symbol,
|
140
|
+
# @param type [String, Symbol, Any]
|
116
141
|
# @option cast [Boolean]
|
117
142
|
# @option privacy [String, Symbol]
|
118
143
|
# @option finalize [String, Symbol, Proc]
|
144
|
+
# @option type_system [String, Symbol]
|
119
145
|
# @param dynamic_options [Hash<Symbol,Any>]
|
120
146
|
# @return [void]
|
121
147
|
#
|
@@ -123,13 +149,16 @@ module SmartCore::Initializer::DSL
|
|
123
149
|
# @since 0.1.0
|
124
150
|
def option(
|
125
151
|
name,
|
126
|
-
type =
|
152
|
+
type = __initializer_settings__.generic_type_object,
|
127
153
|
privacy: SmartCore::Initializer::Attribute::Parameters::DEFAULT_PRIVACY_MODE,
|
128
154
|
finalize: SmartCore::Initializer::Attribute::Parameters::DEFAULT_FINALIZER,
|
129
155
|
cast: SmartCore::Initializer::Attribute::Parameters::DEFAULT_CAST_BEHAVIOUR,
|
156
|
+
type_system: __initializer_settings__.type_system,
|
130
157
|
**dynamic_options
|
131
158
|
)
|
132
|
-
__definer__.define_option(
|
159
|
+
__definer__.define_option(
|
160
|
+
name, type, type_system, privacy, finalize, cast, dynamic_options
|
161
|
+
)
|
133
162
|
end
|
134
163
|
|
135
164
|
# @param names [Array<String, Symbol>]
|
@@ -140,5 +169,15 @@ module SmartCore::Initializer::DSL
|
|
140
169
|
def options(*names)
|
141
170
|
__definer__.define_options(*names)
|
142
171
|
end
|
172
|
+
|
173
|
+
# @param block [Block]
|
174
|
+
# @return [void]
|
175
|
+
#
|
176
|
+
# @api public
|
177
|
+
# @since 0.1.0
|
178
|
+
def ext_init(&block)
|
179
|
+
__definer__.define_init_extension(block)
|
180
|
+
end
|
181
|
+
alias_method :extend_initialization_flow, :ext_init
|
143
182
|
end
|
144
183
|
end
|