smart_core 0.4.0 → 0.5.0
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 +2 -2
- data/.travis.yml +3 -3
- data/CHANGELOG.md +3 -0
- data/Gemfile +0 -3
- data/README.md +5 -33
- data/Rakefile +2 -0
- data/lib/smart_core/container/command_definer.rb +117 -0
- data/lib/smart_core/container/command_set.rb +82 -0
- data/lib/smart_core/container/commands/base.rb +12 -0
- data/lib/smart_core/container/commands/namespace.rb +53 -0
- data/lib/smart_core/container/commands/register.rb +63 -0
- data/lib/smart_core/container/commands.rb +9 -0
- data/lib/smart_core/container/definition_dsl.rb +66 -0
- data/lib/smart_core/container/dependency.rb +44 -0
- data/lib/smart_core/container/dependency_builder.rb +48 -0
- data/lib/smart_core/container/dependency_compatability/abstract.rb +59 -0
- data/lib/smart_core/container/dependency_compatability/command_set.rb +35 -0
- data/lib/smart_core/container/dependency_compatability/registry.rb +37 -0
- data/lib/smart_core/container/dependency_compatability.rb +9 -0
- data/lib/smart_core/container/dependency_resolver.rb +16 -0
- data/lib/smart_core/container/entity.rb +26 -0
- data/lib/smart_core/container/exceptions.rb +31 -0
- data/lib/smart_core/container/key_guard.rb +31 -0
- data/lib/smart_core/container/memoized_dependency.rb +28 -0
- data/lib/smart_core/container/mixin.rb +82 -0
- data/lib/smart_core/container/namespace.rb +51 -0
- data/lib/smart_core/container/registry.rb +227 -0
- data/lib/smart_core/container/registry_builder.rb +18 -0
- data/lib/smart_core/container.rb +123 -0
- data/lib/smart_core/exceptions.rb +23 -0
- data/lib/smart_core/initializer/attribute/builder.rb +99 -0
- data/lib/smart_core/initializer/attribute/value_finalizer/lambda.rb +32 -0
- data/lib/smart_core/initializer/attribute/value_finalizer/method.rb +32 -0
- data/lib/smart_core/initializer/attribute/value_finalizer.rb +24 -0
- data/lib/smart_core/initializer/attribute.rb +123 -0
- data/lib/smart_core/initializer/attribute_definer.rb +162 -0
- data/lib/smart_core/{operation → initializer}/attribute_set.rb +17 -17
- data/lib/smart_core/initializer/exceptions.rb +47 -0
- data/lib/smart_core/initializer/extension.rb +39 -0
- data/lib/smart_core/initializer/extension_definer.rb +62 -0
- data/lib/smart_core/initializer/extension_set.rb +75 -0
- data/lib/smart_core/{operation → initializer}/initialization_dsl.rb +82 -42
- data/lib/smart_core/initializer/instance_attribute_accessing.rb +49 -0
- data/lib/smart_core/initializer/instance_builder.rb +164 -0
- data/lib/smart_core/initializer/type.rb +49 -0
- data/lib/smart_core/initializer/type_set.rb +52 -0
- data/lib/smart_core/initializer.rb +89 -0
- data/lib/smart_core/injector.rb +6 -0
- data/lib/smart_core/operation/exceptions.rb +4 -20
- data/lib/smart_core/operation/instance_builder.rb +16 -124
- data/lib/smart_core/operation/state.rb +7 -0
- data/lib/smart_core/operation/step.rb +43 -0
- data/lib/smart_core/operation/step_set.rb +73 -0
- data/lib/smart_core/operation/success.rb +11 -0
- data/lib/smart_core/operation.rb +10 -12
- data/lib/smart_core/schema.rb +6 -0
- data/lib/smart_core/validator/commands.rb +2 -0
- data/lib/smart_core/validator/exceptions.rb +1 -1
- data/lib/smart_core/version.rb +1 -1
- data/lib/smart_core.rb +5 -0
- data/smart_core.gemspec +14 -14
- metadata +57 -15
- data/lib/smart_core/operation/attribute.rb +0 -66
- data/lib/smart_core/operation/attribute_definer.rb +0 -160
@@ -1,58 +1,58 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
# @api private
|
4
|
-
# @since 0.
|
5
|
-
class SmartCore::
|
6
|
-
# @since 0.
|
4
|
+
# @since 0.5.0
|
5
|
+
class SmartCore::Initializer::AttributeSet
|
6
|
+
# @since 0.5.0
|
7
7
|
include Enumerable
|
8
8
|
|
9
|
-
# @return [Hash<Symbol, SmartCore::
|
9
|
+
# @return [Hash<Symbol, SmartCore::Initializer::Attribute>]
|
10
10
|
#
|
11
11
|
# @api private
|
12
|
-
# @since 0.
|
12
|
+
# @since 0.5.0
|
13
13
|
attr_reader :attributes
|
14
14
|
|
15
15
|
# @return [void]
|
16
16
|
#
|
17
17
|
# @api private
|
18
|
-
# @since 0.
|
18
|
+
# @since 0.5.0
|
19
19
|
def initialize
|
20
20
|
@attributes = {}
|
21
21
|
@access_lock = Mutex.new
|
22
22
|
end
|
23
23
|
|
24
|
-
# @param attribute [SmartCore::
|
24
|
+
# @param attribute [SmartCore::Initializer::Attribute]
|
25
25
|
# @return [void]
|
26
26
|
#
|
27
27
|
# @api private
|
28
|
-
# @since 0.
|
28
|
+
# @since 0.5.0
|
29
29
|
def add_attribute(attribute)
|
30
30
|
thread_safe { attributes[attribute.name] = attribute }
|
31
31
|
end
|
32
32
|
alias_method :<<, :add_attribute
|
33
33
|
|
34
|
-
# @param attribute_set [SmartCore::
|
34
|
+
# @param attribute_set [SmartCore::Initializer::AttributeSet]
|
35
35
|
# @return [void]
|
36
36
|
#
|
37
37
|
# @api private
|
38
|
-
# @sinec 0.
|
38
|
+
# @sinec 0.5.0
|
39
39
|
def concat(attribute_set)
|
40
40
|
thread_safe { attributes.merge!(attribute_set.dup.attributes) }
|
41
41
|
end
|
42
42
|
|
43
|
-
# @param attribute [SmartCore::
|
43
|
+
# @param attribute [SmartCore::Initializer::Attribute]
|
44
44
|
# @return [Boolean]
|
45
45
|
#
|
46
46
|
# @api private
|
47
|
-
# @since 0.
|
47
|
+
# @since 0.5.0
|
48
48
|
def conflicts_with?(attribute)
|
49
49
|
thread_safe { attributes.key?(attribute.name) }
|
50
50
|
end
|
51
51
|
|
52
|
-
# @return [SmartCore::
|
52
|
+
# @return [SmartCore::Initializer::AttributeSet]
|
53
53
|
#
|
54
54
|
# @api private
|
55
|
-
# @since 0.
|
55
|
+
# @since 0.5.0
|
56
56
|
def dup
|
57
57
|
thread_safe do
|
58
58
|
self.class.new.tap do |duplicate|
|
@@ -66,7 +66,7 @@ class SmartCore::Operation::AttributeSet
|
|
66
66
|
# @return [Integer]
|
67
67
|
#
|
68
68
|
# @api private
|
69
|
-
# @since 0.
|
69
|
+
# @since 0.5.0
|
70
70
|
def size
|
71
71
|
thread_safe { attributes.size }
|
72
72
|
end
|
@@ -74,7 +74,7 @@ class SmartCore::Operation::AttributeSet
|
|
74
74
|
# @return [Enumerable]
|
75
75
|
#
|
76
76
|
# @api private
|
77
|
-
# @since 0.
|
77
|
+
# @since 0.5.0
|
78
78
|
def each(&block)
|
79
79
|
thread_safe { block_given? ? attributes.each_value(&block) : attributes.each_value }
|
80
80
|
end
|
@@ -85,7 +85,7 @@ class SmartCore::Operation::AttributeSet
|
|
85
85
|
# @return [Any]
|
86
86
|
#
|
87
87
|
# @api private
|
88
|
-
# @since 0.
|
88
|
+
# @since 0.5.0
|
89
89
|
def thread_safe(&block)
|
90
90
|
@access_lock.synchronize(&block)
|
91
91
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SmartCore::Initializer
|
4
|
+
# @api public
|
5
|
+
# @since 0.5.0
|
6
|
+
Error = Class.new(SmartCore::Error)
|
7
|
+
|
8
|
+
# @api public
|
9
|
+
# @since 0.5.0
|
10
|
+
ArgumentError = Class.new(SmartCore::ArgumentError)
|
11
|
+
|
12
|
+
# @api public
|
13
|
+
# @since 0.5.0
|
14
|
+
IncompatibleFinalizerTypeError = Class.new(ArgumentError)
|
15
|
+
|
16
|
+
# @api public
|
17
|
+
# @since 0.5.0
|
18
|
+
ParameterError = Class.new(ArgumentError)
|
19
|
+
|
20
|
+
# @api public
|
21
|
+
# @since 0.5.0
|
22
|
+
ParamOverlapError = Class.new(ParameterError)
|
23
|
+
|
24
|
+
# @api public
|
25
|
+
# @since 0.5.0
|
26
|
+
OptionError = Class.new(ArgumentError)
|
27
|
+
|
28
|
+
# @api public
|
29
|
+
# @since 0.5.0
|
30
|
+
OptionOverlapError = Class.new(OptionError)
|
31
|
+
|
32
|
+
# @api public
|
33
|
+
# @since 0.5.0
|
34
|
+
IncorrectAttributeNameError = Class.new(Error)
|
35
|
+
|
36
|
+
# @api public
|
37
|
+
# @since 0.5.0
|
38
|
+
UnregisteredTypeError = Class.new(Error)
|
39
|
+
|
40
|
+
# @api public
|
41
|
+
# @since 0.5.0
|
42
|
+
UnsupportedAttributePrivacyError = Class.new(Error)
|
43
|
+
|
44
|
+
# @api public
|
45
|
+
# @since 0.5.0
|
46
|
+
TypeError = Class.new(ArgumentError)
|
47
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# @api private
|
4
|
+
# @since 0.5.0
|
5
|
+
class SmartCore::Initializer::Extension
|
6
|
+
# @param additional_initialization_flow [Proc]
|
7
|
+
# @return [void]
|
8
|
+
#
|
9
|
+
# @api private
|
10
|
+
# @since 0.5.0
|
11
|
+
def initialize(additional_initialization_flow)
|
12
|
+
@additional_initialization_flow = additional_initialization_flow
|
13
|
+
end
|
14
|
+
|
15
|
+
# @param instance [Object]
|
16
|
+
# @return [void]
|
17
|
+
#
|
18
|
+
# @api private
|
19
|
+
# @since 0.5.0
|
20
|
+
def call(instance)
|
21
|
+
additional_initialization_flow.call(instance)
|
22
|
+
end
|
23
|
+
|
24
|
+
# @return [void]
|
25
|
+
#
|
26
|
+
# @api private
|
27
|
+
# @since 0.5.0
|
28
|
+
def dup
|
29
|
+
self.class.new(additional_initialization_flow)
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
# @return [Proc]
|
35
|
+
#
|
36
|
+
# @api private
|
37
|
+
# @since 0.5.0
|
38
|
+
attr_reader :additional_initialization_flow
|
39
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# @api private
|
4
|
+
# @since 0.5.0
|
5
|
+
class SmartCore::Initializer::ExtensionDefiner
|
6
|
+
# @param processed_klass [Class]
|
7
|
+
# @return [void]
|
8
|
+
#
|
9
|
+
# @api private
|
10
|
+
# @since 0.5.0
|
11
|
+
def initialize(processed_klass)
|
12
|
+
@processed_klass = processed_klass
|
13
|
+
@definition_lock = Mutex.new
|
14
|
+
end
|
15
|
+
|
16
|
+
# @param raw_extension [Proc]
|
17
|
+
# @return [void]
|
18
|
+
#
|
19
|
+
# @api private
|
20
|
+
# @since 0.5.0
|
21
|
+
def append_extension(raw_extension)
|
22
|
+
thread_safe do
|
23
|
+
extension = build_extension(raw_extension)
|
24
|
+
extend_initialization_flow(extension)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
# @return [Class]
|
31
|
+
#
|
32
|
+
# @api private
|
33
|
+
# @since 0.5.0
|
34
|
+
attr_reader :processed_klass
|
35
|
+
|
36
|
+
# @param raw_extension [Proc]
|
37
|
+
# @return [SmartCore::Initializar::Extension]
|
38
|
+
#
|
39
|
+
# @api private
|
40
|
+
# @since 0.5.0
|
41
|
+
def build_extension(raw_extension)
|
42
|
+
SmartCore::Initializer::Extension.new(raw_extension)
|
43
|
+
end
|
44
|
+
|
45
|
+
# @param extension [SmartCore::Initializer::Extension]
|
46
|
+
# @return [void]
|
47
|
+
#
|
48
|
+
# @api private
|
49
|
+
# @since 0.5.0
|
50
|
+
def extend_initialization_flow(extension)
|
51
|
+
processed_klass.__initialization_extensions__ << extension
|
52
|
+
end
|
53
|
+
|
54
|
+
# @param block [Proc]
|
55
|
+
# @return [void]
|
56
|
+
#
|
57
|
+
# @api private
|
58
|
+
# @since 0.5.0
|
59
|
+
def thread_safe(&block)
|
60
|
+
@definition_lock.synchronize(&block)
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# @api private
|
4
|
+
# @since 0.5.0
|
5
|
+
class SmartCore::Initializer::ExtensionSet
|
6
|
+
# @since 0.5.0
|
7
|
+
include Enumerable
|
8
|
+
|
9
|
+
# @return [Array<SmartCore::Initializer::InitializationExtension>]
|
10
|
+
#
|
11
|
+
# @api private
|
12
|
+
# @since 0.5.0
|
13
|
+
attr_reader :extensions
|
14
|
+
|
15
|
+
# @return [void]
|
16
|
+
#
|
17
|
+
# @api private
|
18
|
+
# @since 0.5.0
|
19
|
+
def initialize
|
20
|
+
@extensions = []
|
21
|
+
@access_lock = Mutex.new
|
22
|
+
end
|
23
|
+
|
24
|
+
# @param extension [SmartCore::Initializer::InitializationExtension]
|
25
|
+
# @return [void]
|
26
|
+
#
|
27
|
+
# @api private
|
28
|
+
# @since 0.5.0
|
29
|
+
def add_extension(extension)
|
30
|
+
thread_safe { extensions << extension }
|
31
|
+
end
|
32
|
+
alias_method :<<, :add_extension
|
33
|
+
|
34
|
+
# @return [SmartCore::Initializer::ExtensionSet]
|
35
|
+
#
|
36
|
+
# @api private
|
37
|
+
# @since 0.5.0
|
38
|
+
def dup
|
39
|
+
thread_safe do
|
40
|
+
self.class.new.tap do |duplicate|
|
41
|
+
extensions.each do |extension|
|
42
|
+
duplicate.add_extension(extension.dup)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# @return [Enumerable]
|
49
|
+
#
|
50
|
+
# @api private
|
51
|
+
# @since 0.5.0
|
52
|
+
def each(&block)
|
53
|
+
thread_safe { block_given? ? extensions.each(&block) : extensions.each }
|
54
|
+
end
|
55
|
+
|
56
|
+
# @param extension_set [SmartCore::Initializer::ExtensionSet]
|
57
|
+
# @return [void]
|
58
|
+
#
|
59
|
+
# @api private
|
60
|
+
# @since 0.5.0
|
61
|
+
def concat(extension_set)
|
62
|
+
thread_safe { extensions.concat(extension_set.dup.extensions) }
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
# @param block [Proc]
|
68
|
+
# @return [Any]
|
69
|
+
#
|
70
|
+
# @api private
|
71
|
+
# @since 0.5.0
|
72
|
+
def thread_safe(&block)
|
73
|
+
@access_lock.synchronize(&block)
|
74
|
+
end
|
75
|
+
end
|
@@ -1,36 +1,46 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
module SmartCore::Initializer
|
4
4
|
# @api private
|
5
|
-
# @since 0.
|
5
|
+
# @since 0.5.0
|
6
6
|
module InitializationDSL
|
7
7
|
class << self
|
8
8
|
# @param base_klass [Class]
|
9
9
|
# @return [void]
|
10
10
|
#
|
11
11
|
# @api private
|
12
|
-
# @since 0.
|
12
|
+
# @since 0.5.0
|
13
13
|
def included(base_klass) # rubocop:disable Metrics/AbcSize
|
14
|
-
|
15
|
-
base_klass.
|
16
|
-
|
14
|
+
# rubocop:disable Metrics/LineLength
|
15
|
+
base_klass.instance_variable_set(:@__initialization_extension_definer__, ExtensionDefiner.new(base_klass))
|
16
|
+
base_klass.instance_variable_set(:@__initialization_extensions__, ExtensionSet.new)
|
17
17
|
base_klass.instance_variable_set(:@__attr_definer__, AttributeDefiner.new(base_klass))
|
18
18
|
base_klass.instance_variable_set(:@__params__, AttributeSet.new)
|
19
19
|
base_klass.instance_variable_set(:@__options__, AttributeSet.new)
|
20
|
+
# rubocop:enable Metrics/LineLength
|
21
|
+
|
22
|
+
base_klass.extend(ClassMethods)
|
23
|
+
base_klass.extend(DSLMethods)
|
24
|
+
base_klass.singleton_class.prepend(InitializationMethods)
|
20
25
|
|
21
26
|
base_klass.singleton_class.prepend(Module.new do
|
22
27
|
# @param child_klass [Class]
|
23
28
|
# @return [void]
|
24
29
|
#
|
25
30
|
# @api private
|
26
|
-
# @since 0.
|
27
|
-
def inherited(child_klass)
|
28
|
-
|
29
|
-
|
31
|
+
# @since 0.5.0
|
32
|
+
def inherited(child_klass) # rubocop:disable Metrics/AbcSize
|
33
|
+
# rubocop:disable Metrics/LineLength
|
34
|
+
child_klass.instance_variable_set(:@__initialization_extension_definer__, ExtensionDefiner.new(child_klass))
|
35
|
+
child_klass.instance_variable_set(:@__initialization_extensions__, ExtensionSet.new)
|
30
36
|
child_klass.instance_variable_set(:@__attr_definer__, AttributeDefiner.new(child_klass))
|
31
37
|
child_klass.instance_variable_set(:@__params__, AttributeSet.new)
|
32
38
|
child_klass.instance_variable_set(:@__options__, AttributeSet.new)
|
39
|
+
# rubocop:enable Metrics/LineLength
|
40
|
+
|
41
|
+
child_klass.singleton_class.prepend(InitializationMethods)
|
33
42
|
|
43
|
+
child_klass.__initialization_extensions__.concat(__initialization_extensions__)
|
34
44
|
child_klass.__params__.concat(__params__)
|
35
45
|
child_klass.__options__.concat(__options__)
|
36
46
|
|
@@ -41,14 +51,14 @@ class SmartCore::Operation
|
|
41
51
|
end
|
42
52
|
|
43
53
|
# @api private
|
44
|
-
# @since 0.
|
54
|
+
# @since 0.5.0
|
45
55
|
module InitializationMethods
|
46
56
|
# @param parameters [Any]
|
47
57
|
# @param options [Hash<Symbol,Any>]
|
48
58
|
# @return [Any]
|
49
59
|
#
|
50
60
|
# @api public
|
51
|
-
# @since 0.
|
61
|
+
# @since 0.5.0
|
52
62
|
def new(*parameters, **options)
|
53
63
|
allocate.tap do |object|
|
54
64
|
InstanceBuilder.call(object, self, parameters, options)
|
@@ -57,22 +67,67 @@ class SmartCore::Operation
|
|
57
67
|
end
|
58
68
|
|
59
69
|
# @api private
|
60
|
-
# @since 0.
|
70
|
+
# @since 0.5.0
|
71
|
+
module ClassMethods
|
72
|
+
# @return [SmartCore::Initializer::AttributeSet]
|
73
|
+
#
|
74
|
+
# @api private
|
75
|
+
# @since 0.5.0
|
76
|
+
def __params__
|
77
|
+
@__params__
|
78
|
+
end
|
79
|
+
|
80
|
+
# @return [SmartCore::Initializer::AttributeSet]
|
81
|
+
#
|
82
|
+
# @api private
|
83
|
+
# @since 0.5.0
|
84
|
+
def __options__
|
85
|
+
@__options__
|
86
|
+
end
|
87
|
+
|
88
|
+
# @return [SmartCore::Initializer::AttributeDefiner]
|
89
|
+
#
|
90
|
+
# @api private
|
91
|
+
# @since 0.5.0
|
92
|
+
def __attr_definer__
|
93
|
+
@__attr_definer__
|
94
|
+
end
|
95
|
+
|
96
|
+
# @return [SmartCore::Initializer::ExtensionSet]
|
97
|
+
#
|
98
|
+
# @api private
|
99
|
+
# @since 0.5.0
|
100
|
+
def __initialization_extensions__
|
101
|
+
@__initialization_extensions__
|
102
|
+
end
|
103
|
+
|
104
|
+
# @return [SmartCore::Initializer::ExtensionDefiner]
|
105
|
+
#
|
106
|
+
# @api private
|
107
|
+
# @since 0.5.0
|
108
|
+
def __initialization_extension_definer__
|
109
|
+
@__initialization_extension_definer__
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
# @api private
|
114
|
+
# @since 0.5.0
|
61
115
|
module DSLMethods
|
62
116
|
# @param param_name [String, Symbol]
|
117
|
+
# @param options [Hash<Symbol,Any>]
|
63
118
|
# @return [void]
|
64
119
|
#
|
65
120
|
# @api public
|
66
|
-
# @since 0.
|
67
|
-
def param(param_name)
|
68
|
-
__attr_definer__.define_param(param_name)
|
121
|
+
# @since 0.5.0
|
122
|
+
def param(param_name, type = :__any__, **options)
|
123
|
+
__attr_definer__.define_param(param_name, type, **options)
|
69
124
|
end
|
70
125
|
|
71
126
|
# @param param_names [Array<String, Symbol>]
|
72
127
|
# @return [void]
|
73
128
|
#
|
74
129
|
# @api public
|
75
|
-
# @since 0.
|
130
|
+
# @since 0.5.0
|
76
131
|
def params(*param_names)
|
77
132
|
__attr_definer__.define_params(*param_names)
|
78
133
|
end
|
@@ -82,42 +137,27 @@ class SmartCore::Operation
|
|
82
137
|
# @return [void]
|
83
138
|
#
|
84
139
|
# @api public
|
85
|
-
# @since 0.
|
86
|
-
def option(option_name, **options)
|
87
|
-
__attr_definer__.define_option(option_name, **options)
|
140
|
+
# @since 0.5.0
|
141
|
+
def option(option_name, type = :__any__, **options)
|
142
|
+
__attr_definer__.define_option(option_name, type, **options)
|
88
143
|
end
|
89
144
|
|
90
145
|
# @param option_names [Array<String, Symbol>]
|
91
146
|
# @return [void]
|
92
147
|
#
|
93
148
|
# @api public
|
94
|
-
# @since 0.
|
149
|
+
# @since 0.5.0
|
95
150
|
def options(*option_names)
|
96
151
|
__attr_definer__.define_options(*option_names)
|
97
152
|
end
|
98
153
|
|
99
|
-
# @
|
100
|
-
#
|
101
|
-
# @api private
|
102
|
-
# @since 0.2.0
|
103
|
-
def __params__
|
104
|
-
@__params__
|
105
|
-
end
|
106
|
-
|
107
|
-
# @return [SmartCore::Operation::AttributeSet]
|
108
|
-
#
|
109
|
-
# @api private
|
110
|
-
# @since 0.2.0
|
111
|
-
def __options__
|
112
|
-
@__options__
|
113
|
-
end
|
114
|
-
|
115
|
-
# @return [SmartCore::Operation::AttributeDefiner]
|
154
|
+
# @param block [Proc]
|
155
|
+
# @return [void]
|
116
156
|
#
|
117
|
-
# @api
|
118
|
-
# @since 0.
|
119
|
-
def
|
120
|
-
|
157
|
+
# @api public
|
158
|
+
# @since 0.5.0
|
159
|
+
def extend_initialization_flow(&block)
|
160
|
+
__initialization_extension_definer__.append_extension(block)
|
121
161
|
end
|
122
162
|
end
|
123
163
|
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# @api private
|
4
|
+
# @since 0.5.0
|
5
|
+
module SmartCore::Initializer::InstanceAttributeAccessing
|
6
|
+
# @return [Hash<Symbol,Any>]
|
7
|
+
#
|
8
|
+
# @api public
|
9
|
+
# @since 0.5.0
|
10
|
+
def params
|
11
|
+
__collect_params__
|
12
|
+
end
|
13
|
+
|
14
|
+
# @return [Hash<Symbol,Any>]
|
15
|
+
#
|
16
|
+
# @api public
|
17
|
+
# @since 0.5.0
|
18
|
+
def options
|
19
|
+
__collect_options__
|
20
|
+
end
|
21
|
+
|
22
|
+
# @return [Hash<Symbol,Any>]
|
23
|
+
#
|
24
|
+
# @api public
|
25
|
+
# @since 0.5.0
|
26
|
+
def attributes
|
27
|
+
__collect_params__.merge(__collect_options__)
|
28
|
+
end
|
29
|
+
|
30
|
+
# @return [Hash<Symbol,Any>]
|
31
|
+
#
|
32
|
+
# @api private
|
33
|
+
# @since 0.5.0
|
34
|
+
def __collect_params__
|
35
|
+
self.class.__params__.each_with_object({}) do |param, memo|
|
36
|
+
memo[param.name] = instance_variable_get("@#{param.name}")
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# @return [Hash<Symbol,Any>]
|
41
|
+
#
|
42
|
+
# @api private
|
43
|
+
# @since 0.5.0
|
44
|
+
def __collect_options__
|
45
|
+
self.class.__options__.each_with_object({}) do |option, memo|
|
46
|
+
memo[option.name] = instance_variable_get("@#{option.name}")
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|