rggen-core 0.33.1 → 0.34.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/LICENSE +1 -1
- data/README.md +1 -1
- data/lib/rggen/core/base/component_factory.rb +2 -2
- data/lib/rggen/core/base/feature.rb +5 -4
- data/lib/rggen/core/base/feature_variable.rb +112 -0
- data/lib/rggen/core/base/internal_struct.rb +2 -2
- data/lib/rggen/core/builder/builder.rb +5 -4
- data/lib/rggen/core/builder/component_registry.rb +6 -6
- data/lib/rggen/core/builder/feature_entry_base.rb +4 -4
- data/lib/rggen/core/builder/feature_registry.rb +21 -20
- data/lib/rggen/core/builder/general_feature_entry.rb +5 -6
- data/lib/rggen/core/builder/input_component_registry.rb +2 -2
- data/lib/rggen/core/builder/layer.rb +65 -34
- data/lib/rggen/core/builder/list_feature_entry.rb +12 -9
- data/lib/rggen/core/builder/loader_registry.rb +4 -4
- data/lib/rggen/core/builder/plugin_manager.rb +14 -3
- data/lib/rggen/core/builder/simple_feature_entry.rb +5 -6
- data/lib/rggen/core/configuration/component_factory.rb +2 -2
- data/lib/rggen/core/configuration/feature.rb +0 -2
- data/lib/rggen/core/configuration/feature_factory.rb +0 -1
- data/lib/rggen/core/configuration/input_data.rb +2 -4
- data/lib/rggen/core/configuration/loader.rb +0 -1
- data/lib/rggen/core/core_extensions/kernel.rb +1 -1
- data/lib/rggen/core/core_extensions/object.rb +0 -7
- data/lib/rggen/core/dsl.rb +2 -1
- data/lib/rggen/core/exceptions.rb +3 -3
- data/lib/rggen/core/input_base/component_factory.rb +10 -7
- data/lib/rggen/core/input_base/error.rb +1 -1
- data/lib/rggen/core/input_base/feature.rb +63 -72
- data/lib/rggen/core/input_base/feature_factory.rb +2 -1
- data/lib/rggen/core/input_base/input_data.rb +6 -4
- data/lib/rggen/core/input_base/input_vaue_parser.rb +2 -12
- data/lib/rggen/core/input_base/loader.rb +2 -0
- data/lib/rggen/core/input_base/option_hash_parser.rb +1 -1
- data/lib/rggen/core/input_base/property.rb +4 -4
- data/lib/rggen/core/input_base/verifier.rb +11 -4
- data/lib/rggen/core/options.rb +2 -2
- data/lib/rggen/core/output_base/code_generatable.rb +77 -0
- data/lib/rggen/core/output_base/feature.rb +16 -86
- data/lib/rggen/core/register_map/component_factory.rb +2 -4
- data/lib/rggen/core/register_map/feature.rb +0 -1
- data/lib/rggen/core/register_map/feature_factory.rb +0 -1
- data/lib/rggen/core/register_map/input_data.rb +10 -12
- data/lib/rggen/core/utility/attribute_setter.rb +13 -10
- data/lib/rggen/core/utility/code_utility/source_file.rb +1 -1
- data/lib/rggen/core/utility/code_utility.rb +2 -2
- data/lib/rggen/core/utility/regexp_patterns.rb +1 -1
- data/lib/rggen/core/version.rb +1 -1
- data/lib/rggen/core.rb +2 -3
- metadata +7 -11
- data/lib/rggen/core/configuration/error.rb +0 -20
- data/lib/rggen/core/output_base/code_generator.rb +0 -45
- data/lib/rggen/core/register_map/error.rb +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 86d2fa5fdfb9614f951da1504aba34a38170c0905360b6d18fc494015503a370
|
4
|
+
data.tar.gz: 607f2e2c60a1e6680d93d9bdf93110c47b8c20451e7f5d816b3460c42f1be315
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 34cb517f2fd07a2da84be0f9987d783cd4402b82c84f553de23b595bf81691cfae8e2870e95c3cc6e550dd74ab326f717951bf3453ddbf961c8e4f4fca1d4a6a
|
7
|
+
data.tar.gz: 3d2c506953dceb732293a141f6b33e78d5bcf38ea72fab8babe38f0097ec79c1fe8f44410417015a3a07c28f1423bacc4550522e7873e7587ed82215e2043389
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -44,7 +44,7 @@ Feedbacks, bug reports, questions and etc. are wellcome! You can post them by us
|
|
44
44
|
|
45
45
|
## Copyright & License
|
46
46
|
|
47
|
-
Copyright © 2017-
|
47
|
+
Copyright © 2017-2025 Taichi Ishitani. RgGen::Core is licensed under the [MIT License](https://opensource.org/licenses/MIT), see [LICENSE](LICENSE) for futher details.
|
48
48
|
|
49
49
|
## Code of Conduct
|
50
50
|
|
@@ -41,10 +41,10 @@ module RgGen
|
|
41
41
|
@root_factory
|
42
42
|
end
|
43
43
|
|
44
|
-
def create_component(parent, sources, &
|
44
|
+
def create_component(parent, sources, &)
|
45
45
|
actual_sources = Array(select_actual_sources(*sources))
|
46
46
|
create_component?(*actual_sources) &&
|
47
|
-
@target_component.new(parent, component_name, layer, *actual_sources, &
|
47
|
+
@target_component.new(parent, component_name, layer, *actual_sources, &)
|
48
48
|
end
|
49
49
|
|
50
50
|
def select_actual_sources(*_sources)
|
@@ -4,6 +4,7 @@ module RgGen
|
|
4
4
|
module Core
|
5
5
|
module Base
|
6
6
|
class Feature
|
7
|
+
extend FeatureVariable
|
7
8
|
extend InternalStruct
|
8
9
|
extend SharedContext
|
9
10
|
extend Forwardable
|
@@ -36,12 +37,12 @@ module RgGen
|
|
36
37
|
|
37
38
|
private
|
38
39
|
|
39
|
-
def define_helpers(&
|
40
|
-
singleton_class.class_exec(&
|
40
|
+
def define_helpers(&)
|
41
|
+
singleton_class.class_exec(&)
|
41
42
|
end
|
42
43
|
|
43
|
-
def available?(&
|
44
|
-
define_method(:available?, &
|
44
|
+
def available?(&)
|
45
|
+
define_method(:available?, &)
|
45
46
|
end
|
46
47
|
end
|
47
48
|
|
@@ -0,0 +1,112 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RgGen
|
4
|
+
module Core
|
5
|
+
module Base
|
6
|
+
module FeatureVariable
|
7
|
+
module IncludeMethods
|
8
|
+
private
|
9
|
+
|
10
|
+
def feaure_scala_variable_get(name)
|
11
|
+
self.class.feaure_scala_variable_get(name)
|
12
|
+
end
|
13
|
+
|
14
|
+
def feature_array_variable_get(name)
|
15
|
+
self.class.feature_array_variable_get(name)
|
16
|
+
end
|
17
|
+
|
18
|
+
def feature_hash_variable_get(name)
|
19
|
+
self.class.feature_hash_variable_get(name)
|
20
|
+
end
|
21
|
+
|
22
|
+
def feature_hash_array_variable_get(name)
|
23
|
+
self.class.feature_hash_array_variable_get(name)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.extended(klass)
|
28
|
+
klass.include(IncludeMethods)
|
29
|
+
end
|
30
|
+
|
31
|
+
def feaure_scala_variable_get(name)
|
32
|
+
if instance_variable_defined?(name)
|
33
|
+
instance_variable_get(name)
|
34
|
+
else
|
35
|
+
parent_feature_variable_get(__method__, name)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def feature_array_variable_get(name)
|
40
|
+
parent = parent_feature_variable_get(__method__, name)
|
41
|
+
own = instance_variable_get(name)
|
42
|
+
|
43
|
+
if [parent, own] in [Array, Array]
|
44
|
+
[*parent, *own]
|
45
|
+
else
|
46
|
+
parent || own
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def feature_hash_variable_get(name)
|
51
|
+
parent = parent_feature_variable_get(__method__, name)
|
52
|
+
own = instance_variable_get(name)
|
53
|
+
|
54
|
+
if [parent, own] in [Hash, Hash]
|
55
|
+
parent.merge(own)
|
56
|
+
else
|
57
|
+
parent || own
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def feature_hash_array_variable_get(name)
|
62
|
+
parent = parent_feature_variable_get(__method__, name)
|
63
|
+
own = instance_variable_get(name)
|
64
|
+
|
65
|
+
if [parent, own] in [Hash, Hash]
|
66
|
+
parent
|
67
|
+
.merge(own) { |_, parent_val, own_val| [*parent_val, *own_val] }
|
68
|
+
else
|
69
|
+
parent || own
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
def feature_array_variable_push(name, value)
|
76
|
+
array =
|
77
|
+
instance_variable_get(name) ||
|
78
|
+
instance_variable_set(name, [])
|
79
|
+
array << value
|
80
|
+
end
|
81
|
+
|
82
|
+
def feature_hash_variable_store(name, key, value)
|
83
|
+
hash =
|
84
|
+
instance_variable_get(name) ||
|
85
|
+
instance_variable_set(name, {})
|
86
|
+
hash[key] = value
|
87
|
+
end
|
88
|
+
|
89
|
+
def feature_hash_array_variable_update(name, method, key, value)
|
90
|
+
hash =
|
91
|
+
instance_variable_get(name) ||
|
92
|
+
instance_variable_set(name, Hash.new { |h, k| h[k] = [] })
|
93
|
+
hash[key].__send__(method, value)
|
94
|
+
end
|
95
|
+
|
96
|
+
def feature_hash_array_variable_push(name, key, value)
|
97
|
+
feature_hash_array_variable_update(name, :push, key, value)
|
98
|
+
end
|
99
|
+
|
100
|
+
def feature_hash_array_variable_prepend(name, key, value)
|
101
|
+
feature_hash_array_variable_update(name, :prepend, key, value)
|
102
|
+
end
|
103
|
+
|
104
|
+
def parent_feature_variable_get(method, name)
|
105
|
+
return unless superclass.respond_to?(method, true)
|
106
|
+
|
107
|
+
superclass.__send__(method, name)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
@@ -6,8 +6,8 @@ module RgGen
|
|
6
6
|
module InternalStruct
|
7
7
|
private
|
8
8
|
|
9
|
-
def define_struct(name, members, &
|
10
|
-
struct = Struct.new(*members, &
|
9
|
+
def define_struct(name, members, &)
|
10
|
+
struct = Struct.new(*members, &)
|
11
11
|
define_method(name) { struct }
|
12
12
|
private name
|
13
13
|
end
|
@@ -14,12 +14,12 @@ module RgGen
|
|
14
14
|
|
15
15
|
attr_reader :plugin_manager
|
16
16
|
|
17
|
-
def input_component_registry(name, &
|
18
|
-
component_registry(:input, name, &
|
17
|
+
def input_component_registry(name, &)
|
18
|
+
component_registry(:input, name, &)
|
19
19
|
end
|
20
20
|
|
21
|
-
def output_component_registry(name, &
|
22
|
-
component_registry(:output, name, &
|
21
|
+
def output_component_registry(name, &)
|
22
|
+
component_registry(:output, name, &)
|
23
23
|
end
|
24
24
|
|
25
25
|
[
|
@@ -95,6 +95,7 @@ module RgGen
|
|
95
95
|
def_delegator :plugin_manager, :load_plugin
|
96
96
|
def_delegator :plugin_manager, :load_plugins
|
97
97
|
def_delegator :plugin_manager, :setup_plugin
|
98
|
+
def_delegator :plugin_manager, :update_plugin
|
98
99
|
|
99
100
|
private
|
100
101
|
|
@@ -10,14 +10,14 @@ module RgGen
|
|
10
10
|
@entries = []
|
11
11
|
end
|
12
12
|
|
13
|
-
def register_component(layers = nil, &
|
13
|
+
def register_component(layers = nil, &)
|
14
14
|
Array(layers || @builder.register_map_layers).each do |layer|
|
15
|
-
@entries << create_new_entry(layer, &
|
15
|
+
@entries << create_new_entry(layer, &)
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
def register_global_component(&
|
20
|
-
@entries << create_new_entry(nil, &
|
19
|
+
def register_global_component(&)
|
20
|
+
@entries << create_new_entry(nil, &)
|
21
21
|
end
|
22
22
|
|
23
23
|
def build_factory
|
@@ -26,9 +26,9 @@ module RgGen
|
|
26
26
|
|
27
27
|
private
|
28
28
|
|
29
|
-
def create_new_entry(layer, &
|
29
|
+
def create_new_entry(layer, &)
|
30
30
|
entry = ComponentEntry.new(@component_name, layer)
|
31
|
-
Docile.dsl_eval(entry, layer, &
|
31
|
+
Docile.dsl_eval(entry, layer, &)
|
32
32
|
add_feature_registry(layer, entry.feature_registry)
|
33
33
|
entry
|
34
34
|
end
|
@@ -12,8 +12,8 @@ module RgGen
|
|
12
12
|
attr_reader :registry
|
13
13
|
attr_reader :name
|
14
14
|
|
15
|
-
def
|
16
|
-
eval_body(&body)
|
15
|
+
def eval_bodies(bodies)
|
16
|
+
bodies.each { |body| eval_body(&body) }
|
17
17
|
end
|
18
18
|
|
19
19
|
def match_entry_type?(entry_type)
|
@@ -35,8 +35,8 @@ module RgGen
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
-
def eval_body(&
|
39
|
-
block_given? && Docile.dsl_eval(self, @name, &
|
38
|
+
def eval_body(&)
|
39
|
+
block_given? && Docile.dsl_eval(self, @name, &)
|
40
40
|
end
|
41
41
|
|
42
42
|
def target_features(_tergets)
|
@@ -11,36 +11,36 @@ module RgGen
|
|
11
11
|
@enabled_features = {}
|
12
12
|
end
|
13
13
|
|
14
|
-
def define_feature(name, context
|
15
|
-
create_new_entry(:general, name, context,
|
14
|
+
def define_feature(name, context, bodies)
|
15
|
+
create_new_entry(:general, name, context, bodies)
|
16
16
|
end
|
17
17
|
|
18
|
-
def define_simple_feature(name, context
|
19
|
-
create_new_entry(:simple, name, context,
|
18
|
+
def define_simple_feature(name, context, bodies)
|
19
|
+
create_new_entry(:simple, name, context, bodies)
|
20
20
|
end
|
21
21
|
|
22
|
-
def define_list_feature(list_name, context
|
23
|
-
create_new_entry(:list, list_name, context,
|
22
|
+
def define_list_feature(list_name, context, bodies)
|
23
|
+
create_new_entry(:list, list_name, context, bodies)
|
24
24
|
end
|
25
25
|
|
26
|
-
def define_list_item_feature(list_name, feature_name, context
|
27
|
-
list_item_entry(list_name).define_feature(feature_name, context,
|
26
|
+
def define_list_item_feature(list_name, feature_name, context, bodies)
|
27
|
+
list_item_entry(list_name).define_feature(feature_name, context, bodies)
|
28
28
|
end
|
29
29
|
|
30
|
-
def modify_feature(name,
|
31
|
-
modify_entry(:general, name,
|
30
|
+
def modify_feature(name, bodies)
|
31
|
+
modify_entry(:general, name, bodies)
|
32
32
|
end
|
33
33
|
|
34
|
-
def modify_simple_feature(name,
|
35
|
-
modify_entry(:simple, name,
|
34
|
+
def modify_simple_feature(name, bodies)
|
35
|
+
modify_entry(:simple, name, bodies)
|
36
36
|
end
|
37
37
|
|
38
|
-
def modify_list_feature(list_name,
|
39
|
-
modify_entry(:list, list_name,
|
38
|
+
def modify_list_feature(list_name, bodies)
|
39
|
+
modify_entry(:list, list_name, bodies)
|
40
40
|
end
|
41
41
|
|
42
|
-
def modify_list_item_feature(list_name, feature_name,
|
43
|
-
list_item_entry(list_name).modify_feature(feature_name,
|
42
|
+
def modify_list_item_feature(list_name, feature_name, bodies)
|
43
|
+
list_item_entry(list_name).modify_feature(feature_name, bodies)
|
44
44
|
end
|
45
45
|
|
46
46
|
def enable(list_name = nil, feature_names)
|
@@ -102,17 +102,18 @@ module RgGen
|
|
102
102
|
list: ListFeatureEntry
|
103
103
|
}.freeze
|
104
104
|
|
105
|
-
def create_new_entry(type, name, context,
|
105
|
+
def create_new_entry(type, name, context, bodies)
|
106
106
|
entry = FEATURE_ENTRIES[type].new(self, name)
|
107
|
-
entry.setup(@base_feature, @factory, context
|
107
|
+
entry.setup(@base_feature, @factory, context)
|
108
|
+
entry.eval_bodies(bodies)
|
108
109
|
@feature_entries[name] = entry
|
109
110
|
end
|
110
111
|
|
111
|
-
def modify_entry(type, name,
|
112
|
+
def modify_entry(type, name, bodies)
|
112
113
|
entry = @feature_entries[name]
|
113
114
|
entry&.match_entry_type?(type) ||
|
114
115
|
(raise BuilderError.new("unknown feature: #{name}"))
|
115
|
-
entry.
|
116
|
+
entry.eval_bodies(bodies)
|
116
117
|
end
|
117
118
|
|
118
119
|
def list_item_entry(list_name)
|
@@ -6,21 +6,20 @@ module RgGen
|
|
6
6
|
class GeneralFeatureEntry < FeatureEntryBase
|
7
7
|
include Base::SharedContext
|
8
8
|
|
9
|
-
def setup(base_feature, base_factory, context
|
9
|
+
def setup(base_feature, base_factory, context)
|
10
10
|
@feature = Class.new(base_feature)
|
11
11
|
@factory = Class.new(base_factory)
|
12
12
|
attach_shared_context(context, @feature, @factory, self)
|
13
|
-
eval_body(&body)
|
14
13
|
end
|
15
14
|
|
16
|
-
def define_factory(&
|
17
|
-
@factory.class_exec(&
|
15
|
+
def define_factory(&)
|
16
|
+
@factory.class_exec(&)
|
18
17
|
end
|
19
18
|
|
20
19
|
alias_method :factory, :define_factory
|
21
20
|
|
22
|
-
def define_feature(&
|
23
|
-
@feature.class_exec(&
|
21
|
+
def define_feature(&)
|
22
|
+
@feature.class_exec(&)
|
24
23
|
end
|
25
24
|
|
26
25
|
alias_method :feature, :define_feature
|
@@ -23,9 +23,9 @@ module RgGen
|
|
23
23
|
block_given? && yield(@loader_registries[loader_type])
|
24
24
|
end
|
25
25
|
|
26
|
-
def define_value_extractor(loader_type, layers = nil, value, &
|
26
|
+
def define_value_extractor(loader_type, layers = nil, value, &)
|
27
27
|
@loader_registries[loader_type]
|
28
|
-
.define_value_extractor(layers, value, &
|
28
|
+
.define_value_extractor(layers, value, &)
|
29
29
|
end
|
30
30
|
|
31
31
|
def build_factory
|
@@ -5,28 +5,50 @@ module RgGen
|
|
5
5
|
module Builder
|
6
6
|
class Layer
|
7
7
|
class Proxy
|
8
|
-
def initialize(
|
9
|
-
@
|
10
|
-
@feature_name = feature_name
|
8
|
+
def initialize(**proxy_config)
|
9
|
+
@proxy_config = proxy_config
|
11
10
|
end
|
12
11
|
|
13
|
-
|
14
|
-
|
12
|
+
def feature_name
|
13
|
+
@proxy_config[:feature_name]
|
14
|
+
end
|
15
|
+
|
16
|
+
def list_name
|
17
|
+
@proxy_config[:list_name]
|
18
|
+
end
|
15
19
|
|
16
20
|
def register_execution(registry, &body)
|
17
|
-
@executions ||= []
|
18
|
-
@executions <<
|
21
|
+
@executions ||= Hash.new { |h, k| h[k] = [] }
|
22
|
+
@executions[registry] << body
|
19
23
|
end
|
20
24
|
|
21
|
-
def execute(layer, method_name, &
|
22
|
-
Docile.dsl_eval(layer, &
|
25
|
+
def execute(layer, method_name, &)
|
26
|
+
Docile.dsl_eval(layer, &)
|
23
27
|
return unless @executions
|
24
28
|
|
25
|
-
args =
|
26
|
-
@executions.each do |
|
27
|
-
|
29
|
+
args = execution_args(layer)
|
30
|
+
@executions.each do |(registry, bodies)|
|
31
|
+
registry.__send__(method_name, *args, bodies)
|
28
32
|
end
|
29
33
|
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def execution_args(layer)
|
38
|
+
args = []
|
39
|
+
[:list_name, :feature_name, :use_shared_context].each do |key|
|
40
|
+
next unless @proxy_config.key?(key)
|
41
|
+
|
42
|
+
args <<
|
43
|
+
if key != :use_shared_context
|
44
|
+
@proxy_config[key]
|
45
|
+
elsif @proxy_config[key]
|
46
|
+
layer.shared_context
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
args
|
51
|
+
end
|
30
52
|
end
|
31
53
|
|
32
54
|
def initialize(name)
|
@@ -39,12 +61,19 @@ module RgGen
|
|
39
61
|
define_proxy_call(name)
|
40
62
|
end
|
41
63
|
|
42
|
-
def
|
64
|
+
def component(name, &)
|
65
|
+
registory =
|
66
|
+
@feature_registries
|
67
|
+
.fetch(name) { raise BuilderError.new("unknown component: #{name}") }
|
68
|
+
block_given? && @proxy.register_execution(registory, &)
|
69
|
+
end
|
70
|
+
|
71
|
+
def shared_context(&)
|
43
72
|
return unless @proxy
|
44
73
|
|
45
74
|
if block_given?
|
46
75
|
context = current_shared_context(true)
|
47
|
-
context.singleton_exec(&
|
76
|
+
context.singleton_exec(&)
|
48
77
|
end
|
49
78
|
|
50
79
|
current_shared_context(false)
|
@@ -54,51 +83,53 @@ module RgGen
|
|
54
83
|
@feature_registries.key?(component_name)
|
55
84
|
end
|
56
85
|
|
57
|
-
def define_feature(feature_names, &
|
86
|
+
def define_feature(feature_names, &)
|
58
87
|
Array(feature_names).each do |feature_name|
|
59
|
-
do_proxy_call(__method__,
|
88
|
+
do_proxy_call(__method__, feature_name:, use_shared_context: true, &)
|
60
89
|
end
|
61
90
|
end
|
62
91
|
|
63
|
-
def modify_feature(feature_names, &
|
92
|
+
def modify_feature(feature_names, &)
|
64
93
|
Array(feature_names).each do |feature_name|
|
65
|
-
do_proxy_call(__method__,
|
94
|
+
do_proxy_call(__method__, feature_name:, &)
|
66
95
|
end
|
67
96
|
end
|
68
97
|
|
69
|
-
def define_simple_feature(feature_names, &
|
98
|
+
def define_simple_feature(feature_names, &)
|
70
99
|
Array(feature_names).each do |feature_name|
|
71
|
-
do_proxy_call(__method__,
|
100
|
+
do_proxy_call(__method__, feature_name:, use_shared_context: true, &)
|
72
101
|
end
|
73
102
|
end
|
74
103
|
|
75
|
-
def modify_simple_feature(feature_names, &
|
104
|
+
def modify_simple_feature(feature_names, &)
|
76
105
|
Array(feature_names).each do |feature_name|
|
77
|
-
do_proxy_call(__method__,
|
106
|
+
do_proxy_call(__method__, feature_name:, &)
|
78
107
|
end
|
79
108
|
end
|
80
109
|
|
81
|
-
def define_list_feature(list_names, &
|
110
|
+
def define_list_feature(list_names, &)
|
82
111
|
Array(list_names).each do |list_name|
|
83
|
-
do_proxy_call(__method__, list_name
|
112
|
+
do_proxy_call(__method__, list_name:, use_shared_context: true, &)
|
84
113
|
end
|
85
114
|
end
|
86
115
|
|
87
|
-
def modify_list_feature(list_names, &
|
116
|
+
def modify_list_feature(list_names, &)
|
88
117
|
Array(list_names).each do |list_name|
|
89
|
-
do_proxy_call(__method__, list_name
|
118
|
+
do_proxy_call(__method__, list_name:, &)
|
90
119
|
end
|
91
120
|
end
|
92
121
|
|
93
|
-
def define_list_item_feature(list_name, feature_names, &
|
122
|
+
def define_list_item_feature(list_name, feature_names, &)
|
94
123
|
Array(feature_names).each do |feature_name|
|
95
|
-
do_proxy_call(
|
124
|
+
do_proxy_call(
|
125
|
+
__method__, list_name:, feature_name:, use_shared_context: true, &
|
126
|
+
)
|
96
127
|
end
|
97
128
|
end
|
98
129
|
|
99
|
-
def modify_list_item_feature(list_name, feature_names, &
|
130
|
+
def modify_list_item_feature(list_name, feature_names, &)
|
100
131
|
Array(feature_names).each do |feature_name|
|
101
|
-
do_proxy_call(__method__, list_name
|
132
|
+
do_proxy_call(__method__, list_name:, feature_name:, &)
|
102
133
|
end
|
103
134
|
end
|
104
135
|
|
@@ -126,13 +157,13 @@ module RgGen
|
|
126
157
|
|
127
158
|
def define_proxy_call(name)
|
128
159
|
define_singleton_method(name) do |&body|
|
129
|
-
|
160
|
+
component(__method__, &body)
|
130
161
|
end
|
131
162
|
end
|
132
163
|
|
133
|
-
def do_proxy_call(method_name,
|
134
|
-
@proxy = Proxy.new(
|
135
|
-
@proxy.execute(self, method_name, &
|
164
|
+
def do_proxy_call(method_name, **proxy_config, &)
|
165
|
+
@proxy = Proxy.new(**proxy_config)
|
166
|
+
@proxy.execute(self, method_name, &)
|
136
167
|
remove_instance_variable(:@proxy)
|
137
168
|
end
|
138
169
|
|
@@ -7,19 +7,18 @@ module RgGen
|
|
7
7
|
include Base::SharedContext
|
8
8
|
|
9
9
|
def initialize(registry, name)
|
10
|
-
super
|
10
|
+
super
|
11
11
|
@features = {}
|
12
12
|
end
|
13
13
|
|
14
|
-
def setup(base_feature, base_factory, context
|
14
|
+
def setup(base_feature, base_factory, context)
|
15
15
|
@base_feature = Class.new(base_feature)
|
16
16
|
@factory = Class.new(base_factory)
|
17
17
|
attach_shared_context(context, @base_feature, @factory, self)
|
18
|
-
eval_body(&body)
|
19
18
|
end
|
20
19
|
|
21
|
-
def define_factory(&
|
22
|
-
@factory.class_exec(&
|
20
|
+
def define_factory(&)
|
21
|
+
@factory.class_exec(&)
|
23
22
|
end
|
24
23
|
|
25
24
|
alias_method :factory, :define_factory
|
@@ -30,22 +29,22 @@ module RgGen
|
|
30
29
|
|
31
30
|
alias_method :base_feature, :define_base_feature
|
32
31
|
|
33
|
-
def define_feature(feature_name, context
|
32
|
+
def define_feature(feature_name, context, bodies)
|
34
33
|
feature = @features[feature_name] = Class.new(@base_feature)
|
35
34
|
if context
|
36
35
|
feature.method_defined?(:shared_context) &&
|
37
36
|
(raise BuilderError.new('shared context has already been set'))
|
38
37
|
attach_shared_context(context, feature)
|
39
38
|
end
|
40
|
-
|
39
|
+
eval_feature_bodies(feature, feature_name, bodies)
|
41
40
|
end
|
42
41
|
|
43
42
|
alias_method :feature, :define_feature
|
44
43
|
|
45
|
-
def modify_feature(feature_name,
|
44
|
+
def modify_feature(feature_name, bodies)
|
46
45
|
@features.key?(feature_name) ||
|
47
46
|
(raise BuilderError.new("unknown feature: #{feature_name}"))
|
48
|
-
|
47
|
+
eval_feature_bodies(@features[feature_name], feature_name, bodies)
|
49
48
|
end
|
50
49
|
|
51
50
|
def define_default_feature(&body)
|
@@ -84,6 +83,10 @@ module RgGen
|
|
84
83
|
def target_feature
|
85
84
|
@default_feature
|
86
85
|
end
|
86
|
+
|
87
|
+
def eval_feature_bodies(feature, feature_name, bodies)
|
88
|
+
bodies.each { |body| feature.class_exec(feature_name, &body) }
|
89
|
+
end
|
87
90
|
end
|
88
91
|
end
|
89
92
|
end
|
@@ -18,8 +18,8 @@ module RgGen
|
|
18
18
|
@loaders.concat(Array(loaders))
|
19
19
|
end
|
20
20
|
|
21
|
-
def define_value_extractor(layers = nil, value, &
|
22
|
-
@extractors << create_extractor(layers, value, &
|
21
|
+
def define_value_extractor(layers = nil, value, &)
|
22
|
+
@extractors << create_extractor(layers, value, &)
|
23
23
|
end
|
24
24
|
|
25
25
|
def ignore_value(layers = nil, value)
|
@@ -38,8 +38,8 @@ module RgGen
|
|
38
38
|
|
39
39
|
private
|
40
40
|
|
41
|
-
def create_extractor(layers, value, &
|
42
|
-
Class.new(Core::InputBase::InputValueExtractor, &
|
41
|
+
def create_extractor(layers, value, &)
|
42
|
+
Class.new(Core::InputBase::InputValueExtractor, &).new(layers, value)
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|