rggen-core 0.33.0 → 0.34.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/README.md +1 -1
  4. data/lib/rggen/core/base/component_factory.rb +2 -2
  5. data/lib/rggen/core/base/feature.rb +5 -4
  6. data/lib/rggen/core/base/feature_variable.rb +112 -0
  7. data/lib/rggen/core/base/internal_struct.rb +2 -2
  8. data/lib/rggen/core/builder/builder.rb +5 -4
  9. data/lib/rggen/core/builder/component_registry.rb +6 -6
  10. data/lib/rggen/core/builder/feature_entry_base.rb +4 -4
  11. data/lib/rggen/core/builder/feature_registry.rb +21 -20
  12. data/lib/rggen/core/builder/general_feature_entry.rb +5 -6
  13. data/lib/rggen/core/builder/input_component_registry.rb +2 -2
  14. data/lib/rggen/core/builder/layer.rb +65 -34
  15. data/lib/rggen/core/builder/list_feature_entry.rb +12 -9
  16. data/lib/rggen/core/builder/loader_registry.rb +4 -4
  17. data/lib/rggen/core/builder/plugin_manager.rb +14 -3
  18. data/lib/rggen/core/builder/simple_feature_entry.rb +5 -6
  19. data/lib/rggen/core/configuration/component_factory.rb +2 -2
  20. data/lib/rggen/core/configuration/feature.rb +0 -2
  21. data/lib/rggen/core/configuration/feature_factory.rb +0 -1
  22. data/lib/rggen/core/configuration/input_data.rb +9 -2
  23. data/lib/rggen/core/configuration/loader.rb +0 -1
  24. data/lib/rggen/core/core_extensions/kernel.rb +1 -1
  25. data/lib/rggen/core/core_extensions/object.rb +0 -7
  26. data/lib/rggen/core/dsl.rb +2 -1
  27. data/lib/rggen/core/exceptions.rb +3 -3
  28. data/lib/rggen/core/input_base/component_factory.rb +10 -7
  29. data/lib/rggen/core/input_base/error.rb +1 -1
  30. data/lib/rggen/core/input_base/feature.rb +63 -72
  31. data/lib/rggen/core/input_base/feature_factory.rb +2 -1
  32. data/lib/rggen/core/input_base/input_data.rb +9 -6
  33. data/lib/rggen/core/input_base/input_vaue_parser.rb +2 -12
  34. data/lib/rggen/core/input_base/loader.rb +7 -1
  35. data/lib/rggen/core/input_base/option_hash_parser.rb +1 -1
  36. data/lib/rggen/core/input_base/property.rb +4 -4
  37. data/lib/rggen/core/input_base/verifier.rb +11 -4
  38. data/lib/rggen/core/options.rb +2 -2
  39. data/lib/rggen/core/output_base/code_generatable.rb +77 -0
  40. data/lib/rggen/core/output_base/feature.rb +16 -86
  41. data/lib/rggen/core/register_map/component_factory.rb +2 -4
  42. data/lib/rggen/core/register_map/feature.rb +0 -1
  43. data/lib/rggen/core/register_map/feature_factory.rb +0 -1
  44. data/lib/rggen/core/register_map/input_data.rb +15 -10
  45. data/lib/rggen/core/utility/attribute_setter.rb +13 -10
  46. data/lib/rggen/core/utility/code_utility/source_file.rb +1 -1
  47. data/lib/rggen/core/utility/code_utility.rb +2 -2
  48. data/lib/rggen/core/utility/regexp_patterns.rb +1 -1
  49. data/lib/rggen/core/version.rb +1 -1
  50. data/lib/rggen/core.rb +7 -7
  51. metadata +7 -11
  52. data/lib/rggen/core/configuration/error.rb +0 -20
  53. data/lib/rggen/core/output_base/code_generator.rb +0 -45
  54. 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: 2aeafc6b9c5006079ba7092d6546ac9218c70ce3a23177cae0dcd5d1d3311077
4
- data.tar.gz: 4619ca5a98de243ba83a1181d50d0588818c3d8c28b8d46e41c9af7b50f3c711
3
+ metadata.gz: 86d2fa5fdfb9614f951da1504aba34a38170c0905360b6d18fc494015503a370
4
+ data.tar.gz: 607f2e2c60a1e6680d93d9bdf93110c47b8c20451e7f5d816b3460c42f1be315
5
5
  SHA512:
6
- metadata.gz: 4dd425f916899d6432598ee00ba5b03f859108bb30f50782fdd66c9fa52b13ea7d2aa33200375e63dc166e9bda63bd607e14a8da7852d11dfa0d26d729631e3c
7
- data.tar.gz: a258aa368135ae231c015c13a6892fc7e3520aeec5e12296f834ca26278beb3cc61b3e4d48f0ee64d56e1dad64faa02159c220f55ce93dbbb41ad98b17cc5dc2
6
+ metadata.gz: 34cb517f2fd07a2da84be0f9987d783cd4402b82c84f553de23b595bf81691cfae8e2870e95c3cc6e550dd74ab326f717951bf3453ddbf961c8e4f4fca1d4a6a
7
+ data.tar.gz: 3d2c506953dceb732293a141f6b33e78d5bcf38ea72fab8babe38f0097ec79c1fe8f44410417015a3a07c28f1423bacc4550522e7873e7587ed82215e2043389
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2017-2024 Taichi Ishitani
3
+ Copyright (c) 2017-2025 Taichi Ishitani
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
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-2024 Taichi Ishitani. RgGen::Core is licensed under the [MIT License](https://opensource.org/licenses/MIT), see [LICENSE](LICENSE) for futher details.
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, &block)
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, &block)
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(&body)
40
- singleton_class.class_exec(&body)
40
+ def define_helpers(&)
41
+ singleton_class.class_exec(&)
41
42
  end
42
43
 
43
- def available?(&body)
44
- define_method(:available?, &body)
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, &body)
10
- struct = Struct.new(*members, &body)
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, &body)
18
- component_registry(:input, name, &body)
17
+ def input_component_registry(name, &)
18
+ component_registry(:input, name, &)
19
19
  end
20
20
 
21
- def output_component_registry(name, &body)
22
- component_registry(:output, name, &body)
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, &block)
13
+ def register_component(layers = nil, &)
14
14
  Array(layers || @builder.register_map_layers).each do |layer|
15
- @entries << create_new_entry(layer, &block)
15
+ @entries << create_new_entry(layer, &)
16
16
  end
17
17
  end
18
18
 
19
- def register_global_component(&block)
20
- @entries << create_new_entry(nil, &block)
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, &block)
29
+ def create_new_entry(layer, &)
30
30
  entry = ComponentEntry.new(@component_name, layer)
31
- Docile.dsl_eval(entry, layer, &block)
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 modify(&body)
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(&body)
39
- block_given? && Docile.dsl_eval(self, @name, &body)
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 = nil, &body)
15
- create_new_entry(:general, name, context, &body)
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 = nil, &body)
19
- create_new_entry(:simple, name, context, &body)
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 = nil, &body)
23
- create_new_entry(:list, list_name, context, &body)
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 = nil, &body)
27
- list_item_entry(list_name).define_feature(feature_name, context, &body)
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, &body)
31
- modify_entry(:general, name, &body)
30
+ def modify_feature(name, bodies)
31
+ modify_entry(:general, name, bodies)
32
32
  end
33
33
 
34
- def modify_simple_feature(name, &body)
35
- modify_entry(:simple, name, &body)
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, &body)
39
- modify_entry(:list, list_name, &body)
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, &body)
43
- list_item_entry(list_name).modify_feature(feature_name, &body)
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, &body)
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, &body)
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, &body)
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.modify(&body)
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, &body)
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(&body)
17
- @factory.class_exec(&body)
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(&body)
23
- @feature.class_exec(&body)
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, &body)
26
+ def define_value_extractor(loader_type, layers = nil, value, &)
27
27
  @loader_registries[loader_type]
28
- .define_value_extractor(layers, value, &body)
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(list_name, feature_name)
9
- @list_name = list_name
10
- @feature_name = feature_name
8
+ def initialize(**proxy_config)
9
+ @proxy_config = proxy_config
11
10
  end
12
11
 
13
- attr_reader :list_name
14
- attr_reader :feature_name
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 << { registry: registry, body: body }
21
+ @executions ||= Hash.new { |h, k| h[k] = [] }
22
+ @executions[registry] << body
19
23
  end
20
24
 
21
- def execute(layer, method_name, &body)
22
- Docile.dsl_eval(layer, &body)
25
+ def execute(layer, method_name, &)
26
+ Docile.dsl_eval(layer, &)
23
27
  return unless @executions
24
28
 
25
- args = [list_name, feature_name, layer.shared_context].compact
26
- @executions.each do |execution|
27
- execution[:registry].__send__(method_name, *args, &execution[:body])
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 shared_context(&body)
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(&body)
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, &body)
86
+ def define_feature(feature_names, &)
58
87
  Array(feature_names).each do |feature_name|
59
- do_proxy_call(__method__, nil, feature_name, &body)
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, &body)
92
+ def modify_feature(feature_names, &)
64
93
  Array(feature_names).each do |feature_name|
65
- do_proxy_call(__method__, nil, feature_name, &body)
94
+ do_proxy_call(__method__, feature_name:, &)
66
95
  end
67
96
  end
68
97
 
69
- def define_simple_feature(feature_names, &body)
98
+ def define_simple_feature(feature_names, &)
70
99
  Array(feature_names).each do |feature_name|
71
- do_proxy_call(__method__, nil, feature_name, &body)
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, &body)
104
+ def modify_simple_feature(feature_names, &)
76
105
  Array(feature_names).each do |feature_name|
77
- do_proxy_call(__method__, nil, feature_name, &body)
106
+ do_proxy_call(__method__, feature_name:, &)
78
107
  end
79
108
  end
80
109
 
81
- def define_list_feature(list_names, &body)
110
+ def define_list_feature(list_names, &)
82
111
  Array(list_names).each do |list_name|
83
- do_proxy_call(__method__, list_name, nil, &body)
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, &body)
116
+ def modify_list_feature(list_names, &)
88
117
  Array(list_names).each do |list_name|
89
- do_proxy_call(__method__, list_name, nil, &body)
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, &body)
122
+ def define_list_item_feature(list_name, feature_names, &)
94
123
  Array(feature_names).each do |feature_name|
95
- do_proxy_call(__method__, list_name, feature_name, &body)
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, &body)
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, feature_name, &body)
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
- @proxy.register_execution(@feature_registries[__method__], &body)
160
+ component(__method__, &body)
130
161
  end
131
162
  end
132
163
 
133
- def do_proxy_call(method_name, list_name, feature_name, &body)
134
- @proxy = Proxy.new(list_name, feature_name)
135
- @proxy.execute(self, method_name, &body)
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(registry, name)
10
+ super
11
11
  @features = {}
12
12
  end
13
13
 
14
- def setup(base_feature, base_factory, context, &body)
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(&body)
22
- @factory.class_exec(&body)
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 = nil, &body)
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
- body && feature.class_exec(feature_name, &body)
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, &body)
44
+ def modify_feature(feature_name, bodies)
46
45
  @features.key?(feature_name) ||
47
46
  (raise BuilderError.new("unknown feature: #{feature_name}"))
48
- body && @features[feature_name].class_exec(feature_name, &body)
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, &body)
22
- @extractors << create_extractor(layers, value, &body)
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, &body)
42
- Class.new(Core::InputBase::InputValueExtractor, &body).new(layers, value)
41
+ def create_extractor(layers, value, &)
42
+ Class.new(Core::InputBase::InputValueExtractor, &).new(layers, value)
43
43
  end
44
44
  end
45
45
  end