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.
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 +2 -4
  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 +6 -4
  33. data/lib/rggen/core/input_base/input_vaue_parser.rb +2 -12
  34. data/lib/rggen/core/input_base/loader.rb +2 -0
  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 +10 -12
  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 +2 -3
  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: a14b9a75e8720c9efe97e374f71219bd69fc9b3478f4c5efa98260f6750e8a52
4
- data.tar.gz: d7a58cb7347455a062b78b6e5449f1b64c75db787d14d850c59a15d3c748a1eb
3
+ metadata.gz: 86d2fa5fdfb9614f951da1504aba34a38170c0905360b6d18fc494015503a370
4
+ data.tar.gz: 607f2e2c60a1e6680d93d9bdf93110c47b8c20451e7f5d816b3460c42f1be315
5
5
  SHA512:
6
- metadata.gz: a4fda0d86633b41eaccd8495fecc4cbbb63aba08b8a2c557f051969193240f698a5df82b57c6493e378b537f590fb332f6b10540f92022d0e723899ff5377ec6
7
- data.tar.gz: 9536bc34a26b03416162be4c46735eedc8ffad5384f3e19e49a02108161750a5bf4a344bbaa43dab9863d89ddc61b25c43b6743bfebca10ec414e3e29a856500
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