smart_initializer 0.1.0.alpha4 → 0.3.2
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 +23 -0
- data/Gemfile.lock +63 -43
- data/README.md +184 -26
- 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 +41 -35
- data/lib/smart_core/initializer/attribute.rb +12 -4
- 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 +21 -8
- data/lib/smart_core/initializer/constructor/definer.rb +34 -11
- data/lib/smart_core/initializer/dsl.rb +27 -7
- data/lib/smart_core/initializer/errors.rb +44 -0
- data/lib/smart_core/initializer/functionality.rb +37 -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 +68 -17
- data/lib/smart_core/initializer/attribute/init_extension.rb +0 -4
- 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
|
@@ -72,8 +72,8 @@ class SmartCore::Initializer::Constructor
|
|
72
72
|
#
|
73
73
|
# @api private
|
74
74
|
# @since 0.1.0
|
75
|
+
# rubocop:disable Metrics/AbcSize
|
75
76
|
def prevent_attribute_insufficiency
|
76
|
-
required_options = klass.__options__.reject(&:has_default?).map(&:name)
|
77
77
|
required_parameter_count = klass.__params__.size
|
78
78
|
|
79
79
|
raise(
|
@@ -82,13 +82,23 @@ class SmartCore::Initializer::Constructor
|
|
82
82
|
"(given #{parameters.size}, expected #{required_parameter_count})"
|
83
83
|
) unless parameters.size == required_parameter_count
|
84
84
|
|
85
|
-
|
85
|
+
required_options = klass.__options__.reject(&:has_default?).map(&:name)
|
86
|
+
missing_options = required_options.reject { |option| options.key?(option) }
|
86
87
|
|
87
88
|
raise(
|
88
89
|
SmartCore::Initializer::OptionArgumentError,
|
89
90
|
"Missing options: #{missing_options.join(', ')}"
|
90
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?
|
91
100
|
end
|
101
|
+
# rubocop:enable Metrics/AbcSize
|
92
102
|
|
93
103
|
# @return [Any]
|
94
104
|
#
|
@@ -107,10 +117,10 @@ class SmartCore::Initializer::Constructor
|
|
107
117
|
parameter_definitions = Hash[klass.__params__.zip(parameters)]
|
108
118
|
|
109
119
|
parameter_definitions.each_pair do |attribute, parameter_value|
|
110
|
-
|
120
|
+
if !attribute.type.valid?(parameter_value) && attribute.cast?
|
121
|
+
parameter_value = attribute.type.cast(parameter_value)
|
122
|
+
end
|
111
123
|
|
112
|
-
# TODO: fail with SmartCore::Initializer::ArgumentError
|
113
|
-
# (isntead of SmartCore::Types::TypeError)
|
114
124
|
attribute.type.validate!(parameter_value)
|
115
125
|
|
116
126
|
final_value = attribute.finalizer.call(parameter_value, instance)
|
@@ -123,19 +133,22 @@ class SmartCore::Initializer::Constructor
|
|
123
133
|
#
|
124
134
|
# @api private
|
125
135
|
# @since 0.1.0
|
136
|
+
# rubocop:disable Metrics/AbcSize
|
126
137
|
def initialize_options(instance)
|
127
138
|
klass.__options__.each do |attribute|
|
128
139
|
option_value = options.fetch(attribute.name) { attribute.default }
|
129
|
-
option_value = attribute.type.cast(option_value) if attribute.cast?
|
130
140
|
|
131
|
-
|
132
|
-
|
141
|
+
if !attribute.type.valid?(option_value) && attribute.cast?
|
142
|
+
option_value = attribute.type.cast(option_value)
|
143
|
+
end
|
144
|
+
|
133
145
|
attribute.type.validate!(option_value)
|
134
146
|
|
135
147
|
final_value = attribute.finalizer.call(option_value, instance)
|
136
148
|
instance.instance_variable_set("@#{attribute.name}", final_value)
|
137
149
|
end
|
138
150
|
end
|
151
|
+
# rubocop:enable Metrics/AbcSize
|
139
152
|
|
140
153
|
# @param instance [Any]
|
141
154
|
# @return [void]
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
# @api private
|
4
4
|
# @since 0.1.0
|
5
|
+
# rubocop:disable Metrics/ClassLength
|
5
6
|
class SmartCore::Initializer::Constructor::Definer
|
6
7
|
# @param klass [Class]
|
7
8
|
# @return [void]
|
@@ -25,7 +26,8 @@ class SmartCore::Initializer::Constructor::Definer
|
|
25
26
|
end
|
26
27
|
|
27
28
|
# @param name [String, Symbol]
|
28
|
-
# @param type [String, Symbol,
|
29
|
+
# @param type [String, Symbol, Any]
|
30
|
+
# @param type_system [String, Symbol]
|
29
31
|
# @param privacy [String, Symbol]
|
30
32
|
# @param finalize [String, Symbol, Proc]
|
31
33
|
# @param cast [Boolean]
|
@@ -34,9 +36,17 @@ class SmartCore::Initializer::Constructor::Definer
|
|
34
36
|
#
|
35
37
|
# @api private
|
36
38
|
# @since 0.1.0
|
37
|
-
def define_parameter(name, type, privacy, finalize, cast, dynamic_options)
|
39
|
+
def define_parameter(name, type, type_system, privacy, finalize, cast, dynamic_options)
|
38
40
|
thread_safe do
|
39
|
-
attribute = build_attribute(
|
41
|
+
attribute = build_attribute(
|
42
|
+
name,
|
43
|
+
type,
|
44
|
+
type_system,
|
45
|
+
privacy,
|
46
|
+
finalize,
|
47
|
+
cast,
|
48
|
+
dynamic_options
|
49
|
+
)
|
40
50
|
prevent_option_overlap(attribute)
|
41
51
|
add_parameter(attribute)
|
42
52
|
end
|
@@ -52,7 +62,8 @@ class SmartCore::Initializer::Constructor::Definer
|
|
52
62
|
names.map do |name|
|
53
63
|
build_attribute(
|
54
64
|
name,
|
55
|
-
|
65
|
+
klass.__initializer_settings__.generic_type_object,
|
66
|
+
klass.__initializer_settings__.type_system,
|
56
67
|
SmartCore::Initializer::Attribute::Parameters::DEFAULT_PRIVACY_MODE,
|
57
68
|
SmartCore::Initializer::Attribute::Parameters::DEFAULT_FINALIZER,
|
58
69
|
SmartCore::Initializer::Attribute::Parameters::DEFAULT_CAST_BEHAVIOUR,
|
@@ -67,7 +78,8 @@ class SmartCore::Initializer::Constructor::Definer
|
|
67
78
|
end
|
68
79
|
|
69
80
|
# @param name [String, Symbol]
|
70
|
-
# @param type [String, Symbol,
|
81
|
+
# @param type [String, Symbol, Any]
|
82
|
+
# @param type_system [String, Symbol]
|
71
83
|
# @param privacy [String, Symbol]
|
72
84
|
# @param finalize [String, Symbol, Proc]
|
73
85
|
# @param cast [Boolean]
|
@@ -76,9 +88,17 @@ class SmartCore::Initializer::Constructor::Definer
|
|
76
88
|
#
|
77
89
|
# @api private
|
78
90
|
# @since 0.1.0
|
79
|
-
def define_option(name, type, privacy, finalize, cast, dynamic_options)
|
91
|
+
def define_option(name, type, type_system, privacy, finalize, cast, dynamic_options)
|
80
92
|
thread_safe do
|
81
|
-
attribute = build_attribute(
|
93
|
+
attribute = build_attribute(
|
94
|
+
name,
|
95
|
+
type,
|
96
|
+
type_system,
|
97
|
+
privacy,
|
98
|
+
finalize,
|
99
|
+
cast,
|
100
|
+
dynamic_options
|
101
|
+
)
|
82
102
|
prevent_parameter_overlap(attribute)
|
83
103
|
add_option(attribute)
|
84
104
|
end
|
@@ -94,7 +114,8 @@ class SmartCore::Initializer::Constructor::Definer
|
|
94
114
|
names.map do |name|
|
95
115
|
build_attribute(
|
96
116
|
name,
|
97
|
-
|
117
|
+
klass.__initializer_settings__.generic_type_object,
|
118
|
+
klass.__initializer_settings__.type_system,
|
98
119
|
SmartCore::Initializer::Attribute::Parameters::DEFAULT_PRIVACY_MODE,
|
99
120
|
SmartCore::Initializer::Attribute::Parameters::DEFAULT_FINALIZER,
|
100
121
|
SmartCore::Initializer::Attribute::Parameters::DEFAULT_CAST_BEHAVIOUR,
|
@@ -117,7 +138,8 @@ class SmartCore::Initializer::Constructor::Definer
|
|
117
138
|
attr_reader :klass
|
118
139
|
|
119
140
|
# @param name [String, Symbol]
|
120
|
-
# @param type [String, Symbol,
|
141
|
+
# @param type [String, Symbol, Any]
|
142
|
+
# @param type_system [String, Symbol]
|
121
143
|
# @param privacy [String, Symbol]
|
122
144
|
# @param finalize [String, Symbol, Proc]
|
123
145
|
# @param cast [Boolean]
|
@@ -126,9 +148,9 @@ class SmartCore::Initializer::Constructor::Definer
|
|
126
148
|
#
|
127
149
|
# @api private
|
128
150
|
# @since 0.1.0
|
129
|
-
def build_attribute(name, type, privacy, finalize, cast, dynamic_options)
|
151
|
+
def build_attribute(name, type, type_system, privacy, finalize, cast, dynamic_options)
|
130
152
|
SmartCore::Initializer::Attribute::Factory.create(
|
131
|
-
name, type, privacy, finalize, cast, dynamic_options
|
153
|
+
name, type, type_system, privacy, finalize, cast, dynamic_options
|
132
154
|
)
|
133
155
|
end
|
134
156
|
|
@@ -207,3 +229,4 @@ class SmartCore::Initializer::Constructor::Definer
|
|
207
229
|
@lock.synchronize(&block)
|
208
230
|
end
|
209
231
|
end
|
232
|
+
# rubocop:enable Metrics/ClassLength
|
@@ -18,6 +18,7 @@ module SmartCore::Initializer::DSL
|
|
18
18
|
instance_variable_set(:@__init_extensions__, SmartCore::Initializer::Extensions::List.new)
|
19
19
|
instance_variable_set(:@__definer__, SmartCore::Initializer::Constructor::Definer.new(self))
|
20
20
|
instance_variable_set(:@__deflock__, SmartCore::Engine::Lock.new)
|
21
|
+
instance_variable_set(:@__initializer_settings__, SmartCore::Initializer::Settings.new)
|
21
22
|
end
|
22
23
|
base_klass.extend(ClassMethods)
|
23
24
|
base_klass.singleton_class.prepend(ClassInheritance)
|
@@ -32,16 +33,19 @@ module SmartCore::Initializer::DSL
|
|
32
33
|
#
|
33
34
|
# @api private
|
34
35
|
# @since 0.1.0
|
36
|
+
# @version 0.3.2
|
35
37
|
def inherited(child_klass)
|
36
|
-
child_klass.
|
38
|
+
child_klass.instance_exec(__initializer_settings__) do |init_settings|
|
37
39
|
instance_variable_set(:@__params__, SmartCore::Initializer::Attribute::List.new)
|
38
40
|
instance_variable_set(:@__options__, SmartCore::Initializer::Attribute::List.new)
|
39
41
|
instance_variable_set(:@__init_extensions__, SmartCore::Initializer::Extensions::List.new)
|
40
42
|
instance_variable_set(:@__definer__, SmartCore::Initializer::Constructor::Definer.new(self))
|
41
43
|
instance_variable_set(:@__deflock__, SmartCore::Engine::Lock.new)
|
44
|
+
instance_variable_set(:@__initializer_settings__, init_settings.dup)
|
42
45
|
end
|
43
46
|
child_klass.extend(ClassMethods)
|
44
47
|
SmartCore::Initializer::DSL::Inheritance.inherit(base: self, child: child_klass)
|
48
|
+
child_klass.singleton_class.prepend(ClassInheritance)
|
45
49
|
super
|
46
50
|
end
|
47
51
|
end
|
@@ -81,6 +85,14 @@ module SmartCore::Initializer::DSL
|
|
81
85
|
@__definer__
|
82
86
|
end
|
83
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
|
+
|
84
96
|
# @param arguments [Array]
|
85
97
|
# @param block [Block]
|
86
98
|
# @return [Any]
|
@@ -92,7 +104,7 @@ module SmartCore::Initializer::DSL
|
|
92
104
|
end
|
93
105
|
|
94
106
|
# @param name [String, Symbol]
|
95
|
-
# @param type [String, Symbol,
|
107
|
+
# @param type [String, Symbol, Any]
|
96
108
|
# @option cast [Boolean]
|
97
109
|
# @option privacy [String, Symbol]
|
98
110
|
# @option finalize [String, Symbol, Proc]
|
@@ -103,13 +115,16 @@ module SmartCore::Initializer::DSL
|
|
103
115
|
# @since 0.1.0
|
104
116
|
def param(
|
105
117
|
name,
|
106
|
-
type =
|
118
|
+
type = __initializer_settings__.generic_type_object,
|
107
119
|
privacy: SmartCore::Initializer::Attribute::Parameters::DEFAULT_PRIVACY_MODE,
|
108
120
|
finalize: SmartCore::Initializer::Attribute::Parameters::DEFAULT_FINALIZER,
|
109
121
|
cast: SmartCore::Initializer::Attribute::Parameters::DEFAULT_CAST_BEHAVIOUR,
|
122
|
+
type_system: __initializer_settings__.type_system,
|
110
123
|
**dynamic_options
|
111
124
|
)
|
112
|
-
__definer__.define_parameter(
|
125
|
+
__definer__.define_parameter(
|
126
|
+
name, type, type_system, privacy, finalize, cast, dynamic_options
|
127
|
+
)
|
113
128
|
end
|
114
129
|
|
115
130
|
# @param names [Array<String, Symbol>]
|
@@ -122,10 +137,11 @@ module SmartCore::Initializer::DSL
|
|
122
137
|
end
|
123
138
|
|
124
139
|
# @param name [String, Symbol]
|
125
|
-
# @param type [String, Symbol,
|
140
|
+
# @param type [String, Symbol, Any]
|
126
141
|
# @option cast [Boolean]
|
127
142
|
# @option privacy [String, Symbol]
|
128
143
|
# @option finalize [String, Symbol, Proc]
|
144
|
+
# @option type_system [String, Symbol]
|
129
145
|
# @param dynamic_options [Hash<Symbol,Any>]
|
130
146
|
# @return [void]
|
131
147
|
#
|
@@ -133,13 +149,16 @@ module SmartCore::Initializer::DSL
|
|
133
149
|
# @since 0.1.0
|
134
150
|
def option(
|
135
151
|
name,
|
136
|
-
type =
|
152
|
+
type = __initializer_settings__.generic_type_object,
|
137
153
|
privacy: SmartCore::Initializer::Attribute::Parameters::DEFAULT_PRIVACY_MODE,
|
138
154
|
finalize: SmartCore::Initializer::Attribute::Parameters::DEFAULT_FINALIZER,
|
139
155
|
cast: SmartCore::Initializer::Attribute::Parameters::DEFAULT_CAST_BEHAVIOUR,
|
156
|
+
type_system: __initializer_settings__.type_system,
|
140
157
|
**dynamic_options
|
141
158
|
)
|
142
|
-
__definer__.define_option(
|
159
|
+
__definer__.define_option(
|
160
|
+
name, type, type_system, privacy, finalize, cast, dynamic_options
|
161
|
+
)
|
143
162
|
end
|
144
163
|
|
145
164
|
# @param names [Array<String, Symbol>]
|
@@ -159,5 +178,6 @@ module SmartCore::Initializer::DSL
|
|
159
178
|
def ext_init(&block)
|
160
179
|
__definer__.define_init_extension(block)
|
161
180
|
end
|
181
|
+
alias_method :extend_initialization_flow, :ext_init
|
162
182
|
end
|
163
183
|
end
|
@@ -32,4 +32,48 @@ module SmartCore::Initializer
|
|
32
32
|
# @api public
|
33
33
|
# @since 0.1.0
|
34
34
|
NoTypeAliasError = Class.new(Error)
|
35
|
+
|
36
|
+
# @api public
|
37
|
+
# @since 0.1.0
|
38
|
+
PluginError = Class.new(Error)
|
39
|
+
|
40
|
+
# @api public
|
41
|
+
# @since 0.1.0
|
42
|
+
UnresolvedPluginDependencyError = Class.new(PluginError)
|
43
|
+
|
44
|
+
# @api public
|
45
|
+
# @since 0.1.0
|
46
|
+
AlreadyRegisteredPluginError = Class.new(PluginError)
|
47
|
+
|
48
|
+
# @api public
|
49
|
+
# @since 0.1.0
|
50
|
+
UnregisteredPluginError = Class.new(PluginError)
|
51
|
+
|
52
|
+
# @api public
|
53
|
+
# @since 0.1.0
|
54
|
+
TypeSystemError = Class.new(Error)
|
55
|
+
|
56
|
+
# @api public
|
57
|
+
# @since 0.1.0
|
58
|
+
TypeAliasNotFoundError = Class.new(TypeSystemError)
|
59
|
+
|
60
|
+
# @api public
|
61
|
+
# @since 0.1.0
|
62
|
+
IncorrectTypeSystemInteropError = Class.new(TypeSystemError)
|
63
|
+
|
64
|
+
# @api public
|
65
|
+
# @since 0.1.0
|
66
|
+
IncorrectTypeObjectError = Class.new(TypeSystemError)
|
67
|
+
|
68
|
+
# @api public
|
69
|
+
# @since 0.1.0
|
70
|
+
UnsupportedTypeSystemError = Class.new(TypeSystemError)
|
71
|
+
|
72
|
+
# @api public
|
73
|
+
# @since 0.1.0
|
74
|
+
UnsupportedTypeOperationError = Class.new(TypeSystemError)
|
75
|
+
|
76
|
+
# @api public
|
77
|
+
# @since 0.1.0
|
78
|
+
TypeCastingUnsupportedError = Class.new(UnsupportedTypeOperationError)
|
35
79
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# @api private
|
4
|
+
# @since 0.3.0
|
5
|
+
module SmartCore::Initializer::Functionality
|
6
|
+
# @return [NilClass]
|
7
|
+
#
|
8
|
+
# @api private
|
9
|
+
# @since 0.3.0
|
10
|
+
INITIAL_TYPE_SYSTEM = nil
|
11
|
+
|
12
|
+
class << self
|
13
|
+
# @option type_system [String, Symbol, NilClass]
|
14
|
+
# @return [Module]
|
15
|
+
#
|
16
|
+
# @api private
|
17
|
+
# @since 0.3.0
|
18
|
+
def includable_module(type_system: INITIAL_TYPE_SYSTEM)
|
19
|
+
Module.new.tap do |extension|
|
20
|
+
extension.singleton_class.define_method(:included) do |base_klass|
|
21
|
+
base_klass.include(::SmartCore::Initializer)
|
22
|
+
base_klass.__initializer_settings__.type_system = type_system
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# @param base_klass [Class]
|
28
|
+
# @return [void]
|
29
|
+
#
|
30
|
+
# @api private
|
31
|
+
# @since 0.3.0
|
32
|
+
def seed_to(base_klass)
|
33
|
+
base_klass.extend(SmartCore::Initializer::DSL)
|
34
|
+
base_klass.include(SmartCore::Initializer::InstanceAttributeAccessing)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|