rggen-core 0.35.0 → 0.36.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 (33) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/README.md +3 -3
  4. data/lib/rggen/core/base/component.rb +2 -2
  5. data/lib/rggen/core/base/component_factory.rb +4 -4
  6. data/lib/rggen/core/base/feature_factory.rb +4 -4
  7. data/lib/rggen/core/builder/builder.rb +20 -6
  8. data/lib/rggen/core/builder/component_registry.rb +4 -0
  9. data/lib/rggen/core/builder/feature_registry.rb +41 -34
  10. data/lib/rggen/core/builder/input_component_registry.rb +2 -3
  11. data/lib/rggen/core/builder/layer.rb +4 -0
  12. data/lib/rggen/core/builder/list_feature_entry.rb +1 -1
  13. data/lib/rggen/core/builder/loader_registry.rb +6 -6
  14. data/lib/rggen/core/builder/plugin_manager.rb +11 -6
  15. data/lib/rggen/core/configuration/json_loader.rb +0 -4
  16. data/lib/rggen/core/configuration/toml_loader.rb +0 -4
  17. data/lib/rggen/core/configuration/yaml_loader.rb +0 -4
  18. data/lib/rggen/core/dsl.rb +1 -0
  19. data/lib/rggen/core/generator.rb +2 -0
  20. data/lib/rggen/core/input_base/feature_factory.rb +4 -5
  21. data/lib/rggen/core/input_base/input_data.rb +3 -2
  22. data/lib/rggen/core/input_base/input_value.rb +4 -4
  23. data/lib/rggen/core/input_base/json_loader.rb +2 -3
  24. data/lib/rggen/core/input_base/toml_loader.rb +2 -3
  25. data/lib/rggen/core/input_base/yaml_loader.rb +5 -83
  26. data/lib/rggen/core/output_base/template_engine.rb +2 -2
  27. data/lib/rggen/core/register_map/input_data.rb +1 -0
  28. data/lib/rggen/core/register_map/json_loader.rb +0 -4
  29. data/lib/rggen/core/register_map/toml_loader.rb +0 -4
  30. data/lib/rggen/core/register_map/yaml_loader.rb +0 -4
  31. data/lib/rggen/core/version.rb +1 -1
  32. data/lib/rggen/core.rb +3 -4
  33. metadata +19 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ad164f2506fbd5c91ea5a9340bc69e6fd492b628b38e12a87de290bea0ab6596
4
- data.tar.gz: a57b33a6aff4642c98397bbcf6cf1d680cf899cfe83d0eca0dc552b085771ada
3
+ metadata.gz: 307421fc81ca655e7025cfcb8374ef8d896d5000ed64a738523b876a8b09e471
4
+ data.tar.gz: 87b69bd57fb525e5e1782b0c257d7a8b020647fe2cd90dcefac9dccf5f9d3c62
5
5
  SHA512:
6
- metadata.gz: a6829f31ec7048843959afa0a84ef5980cc9a4bb8c4d792b631c658ea782ce8433fe46b9cc0cb76310c61b0a5aeaeb44757c845e87ed8a541f75033ba915d27f
7
- data.tar.gz: f204f714996fac3302b7638bbdc7e7f83a3a4921e13ebec6c195a09dfdcddc9e1dcfb73cb9b310e092b6c26773de04ffdd3cd61a2b70c2750175412be88e1fd5
6
+ metadata.gz: 5ead051d4fb49347d039fa862d8e01237d154b3fdffea3dde316e818b176f3ff0460159f4e94c349beaaac05df0f8afb504157d1ff7126cab416b2f2a651e924
7
+ data.tar.gz: f5830b7b5ac206bf9af38d53583b8cc3b0ad7a45f8b74f3197399263588512d9bbe9eaba14031fac324711d85dfd628c6e98cdebe3236df12bf2b801c15953f4
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2017-2025 Taichi Ishitani
3
+ Copyright (c) 2017-2026 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
@@ -2,7 +2,7 @@
2
2
  [![CI](https://github.com/rggen/rggen-core/workflows/CI/badge.svg)](https://github.com/rggen/rggen-core/actions?query=workflow%3ACI)
3
3
  [![Maintainability](https://qlty.sh/badges/40f53c48-7f4c-4094-9907-2736e69527b3/maintainability.svg)](https://qlty.sh/gh/rggen/projects/rggen-core)
4
4
  [![codecov](https://codecov.io/gh/rggen/rggen-core/branch/master/graph/badge.svg)](https://codecov.io/gh/rggen/rggen-core)
5
- [![Gitter](https://badges.gitter.im/rggen/rggen.svg)](https://gitter.im/rggen/rggen?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
5
+ [![Discord](https://img.shields.io/discord/1406572699467124806?style=flat&logo=discord)](https://discord.com/invite/KWya83ZZxr)
6
6
 
7
7
  # RgGen::Core
8
8
 
@@ -38,13 +38,13 @@ Feedbacks, bug reports, questions and etc. are wellcome! You can post them by us
38
38
 
39
39
  * [GitHub Issue Tracker](https://github.com/rggen/rggen/issues)
40
40
  * [GitHub Discussions](https://github.com/rggen/rggen/discussions)
41
- * [Chat Room](https://gitter.im/rggen/rggen)
41
+ * [Discord](https://discord.com/invite/KWya83ZZxr)
42
42
  * [Mailing List](https://groups.google.com/d/forum/rggen)
43
43
  * [Mail](mailto:rggen@googlegroups.com)
44
44
 
45
45
  ## Copyright & License
46
46
 
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.
47
+ Copyright © 2017-2026 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
 
@@ -4,7 +4,7 @@ module RgGen
4
4
  module Core
5
5
  module Base
6
6
  class Component
7
- def initialize(parent, base_name, layer, *args)
7
+ def initialize(parent, base_name, layer, ...)
8
8
  @parent = parent
9
9
  @base_name = base_name
10
10
  @layer = layer
@@ -13,7 +13,7 @@ module RgGen
13
13
  @features = {}
14
14
  @depth = (parent&.depth || 0) + 1
15
15
  @component_index = parent&.children&.size || 0
16
- post_initialize(*args)
16
+ post_initialize(...)
17
17
  block_given? && yield(self)
18
18
  end
19
19
 
@@ -87,12 +87,12 @@ module RgGen
87
87
  def finalize(_component)
88
88
  end
89
89
 
90
- def create_feature(component, factory, *args)
91
- factory.create(component, *args)
90
+ def create_feature(component, factory, ...)
91
+ factory.create(component, ...)
92
92
  end
93
93
 
94
- def create_child(component, *args)
95
- find_child_factory(*args).create(component, *args)
94
+ def create_child(component, ...)
95
+ find_child_factory(...).create(component, ...)
96
96
  end
97
97
  end
98
98
  end
@@ -14,8 +14,8 @@ module RgGen
14
14
  attr_setter :target_feature
15
15
  attr_setter :target_features
16
16
 
17
- def create_feature(component, *args)
18
- klass, sub_feature_name = select_feature(*args)
17
+ def create_feature(component, ...)
18
+ klass, sub_feature_name = select_feature(...)
19
19
  klass.new(@feature_name, sub_feature_name, component) do |feature|
20
20
  feature.available? || break
21
21
  block_given? && yield(feature)
@@ -25,8 +25,8 @@ module RgGen
25
25
 
26
26
  private
27
27
 
28
- def select_feature(*args)
29
- key = @target_features && target_feature_key(*args)
28
+ def select_feature(...)
29
+ key = @target_features && target_feature_key(...)
30
30
  feature = (key && @target_features[key]) || @target_feature
31
31
  [feature, key]
32
32
  end
@@ -61,14 +61,28 @@ module RgGen
61
61
  end
62
62
  end
63
63
 
64
- def enable(layer, *args)
65
- @layers[layer].enable(*args)
64
+ def enable(layer, ...)
65
+ @layers[layer].enable(...)
66
66
  end
67
67
 
68
68
  def enable_all
69
69
  @layers.each_value(&:enable_all)
70
70
  end
71
71
 
72
+ def disable_all
73
+ @layers.each_value(&:disable_all)
74
+ end
75
+
76
+ def disable_unused_output_features(used_writers)
77
+ return if used_writers.empty?
78
+
79
+ @component_registries[:output].each do |name, registry|
80
+ next if used_writers.include?(name)
81
+
82
+ registry.disable_all_features
83
+ end
84
+ end
85
+
72
86
  def build_factory(type, component)
73
87
  @component_registries[type][component].build_factory
74
88
  end
@@ -78,13 +92,13 @@ module RgGen
78
92
  if targets.empty?
79
93
  @component_registries[type]
80
94
  else
81
- collect_component_factories(type, targets)
95
+ collect_component_registries(type, targets)
82
96
  end
83
97
  registries.each_value.map(&:build_factory)
84
98
  end
85
99
 
86
- def delete(layer, *args)
87
- @layers.key?(layer) && @layers[layer].delete(*args)
100
+ def delete(layer, ...)
101
+ @layers.key?(layer) && @layers[layer].delete(...)
88
102
  end
89
103
 
90
104
  def register_input_components
@@ -134,7 +148,7 @@ module RgGen
134
148
  body && Docile.dsl_eval(registries[name], &body) || registries[name]
135
149
  end
136
150
 
137
- def collect_component_factories(type, targets)
151
+ def collect_component_registries(type, targets)
138
152
  unknown_components = targets - @component_registries[type].keys
139
153
  unknown_components.empty? ||
140
154
  (raise BuilderError.new("unknown component: #{unknown_components.first}"))
@@ -24,6 +24,10 @@ module RgGen
24
24
  build_factories.first.tap(&:root_factory)
25
25
  end
26
26
 
27
+ def disable_all_features
28
+ @entries.each { |entry| entry.feature_registry&.disable_all }
29
+ end
30
+
27
31
  private
28
32
 
29
33
  def create_new_entry(layer, &)
@@ -43,21 +43,35 @@ module RgGen
43
43
  list_item_entry(list_name).modify_feature(feature_name, bodies)
44
44
  end
45
45
 
46
- def enable(list_name = nil, feature_names)
47
- if list_name
48
- (@enabled_features[list_name] ||= []).merge!(Array(feature_names))
49
- else
50
- Array(feature_names).each do |name|
51
- @enabled_features.key?(name) || (@enabled_features[name] = nil)
46
+ def enable(list_name_or_feature_names, feature_names = nil)
47
+ feature_names, list_name =
48
+ [feature_names, list_name_or_feature_names].compact
49
+ Array(list_name || feature_names)
50
+ .each { |name| @enabled_features[name] ||= [] }
51
+
52
+ return unless list_name
53
+
54
+ @enabled_features[list_name].merge!(Array(feature_names))
55
+ end
56
+
57
+ def enable_all
58
+ disable_all
59
+ @feature_entries.each do |name, entry|
60
+ if entry.match_entry_type?(:list)
61
+ enable(name, entry.features)
62
+ else
63
+ enable(name)
52
64
  end
53
65
  end
54
66
  end
55
67
 
56
- def enable_all
68
+ def disable_all
57
69
  @enabled_features.clear
58
70
  end
59
71
 
60
- def delete(list_name = nil, feature_names)
72
+ def delete(list_name_or_feature_names, feature_names = nil)
73
+ feature_names, list_name =
74
+ [feature_names, list_name_or_feature_names].compact
61
75
  if list_name
62
76
  @feature_entries[list_name]&.delete(feature_names)
63
77
  else
@@ -67,9 +81,12 @@ module RgGen
67
81
 
68
82
  def delete_all
69
83
  @feature_entries.clear
84
+ @enabled_features.clear
70
85
  end
71
86
 
72
- def feature?(list_name = nil, feature_name)
87
+ def feature?(list_name_or_feature_name, feature_name = nil)
88
+ feature_name, list_name =
89
+ [feature_name, list_name_or_feature_name].compact
73
90
  if list_name
74
91
  list_feature?(list_name, feature_name)
75
92
  else
@@ -78,19 +95,16 @@ module RgGen
78
95
  end
79
96
 
80
97
  def enabled_features(list_name = nil)
81
- if list_name
82
- enabled_list_features(list_name)
83
- else
84
- @enabled_features.empty? && @feature_entries.keys ||
85
- @enabled_features.keys & @feature_entries.keys
98
+ if !list_name
99
+ @enabled_features.keys.select { |name| feature?(name) }
100
+ elsif enabled_list?(list_name)
101
+ @enabled_features[list_name] & @feature_entries[list_name].features
86
102
  end
87
103
  end
88
104
 
89
105
  def build_factories
90
- target_features =
91
- (@enabled_features.empty? && @feature_entries || @enabled_features).keys
92
106
  @feature_entries
93
- .slice(*target_features)
107
+ .slice(*@enabled_features.keys)
94
108
  .transform_values(&method(:build_factory))
95
109
  end
96
110
 
@@ -118,32 +132,25 @@ module RgGen
118
132
 
119
133
  def list_item_entry(list_name)
120
134
  entry = @feature_entries[list_name]
121
- entry&.match_entry_type?(:list) ||
122
- (raise BuilderError.new("unknown feature: #{list_name}"))
123
- entry
135
+ return entry if entry&.match_entry_type?(:list)
136
+
137
+ raise BuilderError.new("unknown feature: #{list_name}")
124
138
  end
125
139
 
126
- def enabled_list_features(list_name)
127
- return [] unless enabled_list?(list_name)
128
- features = @feature_entries[list_name].features
129
- (@enabled_features[list_name] || features) & features
140
+ def list_feature?(list_name, feature_name)
141
+ entry = @feature_entries[list_name]
142
+ return false unless entry
143
+
144
+ entry.match_entry_type?(:list) && entry.feature?(feature_name)
130
145
  end
131
146
 
132
- def enabled_list?(list_name)
133
- return false unless @feature_entries[list_name]&.match_entry_type?(:list)
134
- return true if @enabled_features.empty?
135
- return true if @enabled_features.key?(list_name)
136
- false
147
+ def enabled_list?(name)
148
+ @feature_entries[name]&.match_entry_type?(:list) && @enabled_features.key?(name)
137
149
  end
138
150
 
139
151
  def build_factory(entry)
140
152
  entry.build_factory(@enabled_features[entry.name])
141
153
  end
142
-
143
- def list_feature?(list_name, feature_name)
144
- @feature_entries[list_name]&.match_entry_type?(:list) &&
145
- @feature_entries[list_name]&.feature?(feature_name) || false
146
- end
147
154
  end
148
155
  end
149
156
  end
@@ -23,9 +23,8 @@ 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, &)
27
- @loader_registries[loader_type]
28
- .define_value_extractor(layers, value, &)
26
+ def define_value_extractor(loader_type, ...)
27
+ @loader_registries[loader_type].define_value_extractor(...)
29
28
  end
30
29
 
31
30
  def build_factory
@@ -143,6 +143,10 @@ module RgGen
143
143
  @feature_registries.each_value(&:enable_all)
144
144
  end
145
145
 
146
+ def disable_all
147
+ @feature_registries.each_value(&:disable_all)
148
+ end
149
+
146
150
  def delete(...)
147
151
  @feature_registries.each_value do |registry|
148
152
  registry.delete(...)
@@ -77,7 +77,7 @@ module RgGen
77
77
  end
78
78
 
79
79
  def target_features(targets)
80
- targets && @features.slice(*targets) || @features
80
+ @features.slice(*targets)
81
81
  end
82
82
 
83
83
  def target_feature
@@ -18,20 +18,20 @@ module RgGen
18
18
  @loaders.concat(Array(loaders))
19
19
  end
20
20
 
21
- def define_value_extractor(layers = nil, value, &)
21
+ def define_value_extractor(layers_or_value, value = nil, &)
22
+ value, layers = [value, layers_or_value].compact
22
23
  @extractors << create_extractor(layers, value, &)
23
24
  end
24
25
 
25
- def ignore_value(layers = nil, value)
26
- ignore_values(layers, [value])
27
- end
28
-
29
- def ignore_values(layers = nil, values)
26
+ def ignore_values(layers_or_values, values = nil)
27
+ values, layers = [values, layers_or_values].compact
30
28
  [layers].flatten.each do |layer|
31
29
  (@ignore_values[layer] ||= []).concat(Array(values))
32
30
  end
33
31
  end
34
32
 
33
+ alias_method :ignore_value, :ignore_values
34
+
35
35
  def create_loaders
36
36
  @loaders.map { |loader| loader.new(@extractors, @ignore_values) }
37
37
  end
@@ -137,9 +137,12 @@ module RgGen
137
137
  end
138
138
 
139
139
  def find_gemspec_by_name(name, version)
140
- Gem::Specification
141
- .find_all_by_name(name, version)
142
- .find { |s| !s.has_conflicts? }
140
+ specs = Gem::Specification.find_all_by_name(name, version)
141
+
142
+ spec = specs.find(&:activated?)
143
+ return spec if spec
144
+
145
+ specs.find { |spec| !spec.has_conflicts? }
143
146
  end
144
147
 
145
148
  def find_gemspec_by_path(path)
@@ -167,10 +170,12 @@ module RgGen
167
170
  end
168
171
 
169
172
  def plugins_from_env
173
+ return unless ENV.key?('RGGEN_PLUGINS')
174
+
170
175
  ENV['RGGEN_PLUGINS']
171
- &.split(':')
172
- &.reject(&:blank?)
173
- &.map { |entry| entry.split(',', 2) }
176
+ .split(':')
177
+ .reject(&:blank?)
178
+ .map { |entry| entry.split(',', 2) }
174
179
  end
175
180
 
176
181
  def do_normal_activation
@@ -8,10 +8,6 @@ module RgGen
8
8
  include InputBase::JSONLoader
9
9
 
10
10
  support_types [:json]
11
-
12
- def read_file(file)
13
- load_json(file)
14
- end
15
11
  end
16
12
  end
17
13
  end
@@ -8,10 +8,6 @@ module RgGen
8
8
  include InputBase::TOMLLoader
9
9
 
10
10
  support_types [:toml]
11
-
12
- def read_file(file)
13
- load_toml(file)
14
- end
15
11
  end
16
12
  end
17
13
  end
@@ -8,10 +8,6 @@ module RgGen
8
8
  include InputBase::YAMLLoader
9
9
 
10
10
  support_types [:yaml, :yml]
11
-
12
- def read_file(file)
13
- load_yaml(file)
14
- end
15
11
  end
16
12
  end
17
13
  end
@@ -25,6 +25,7 @@ module RgGen
25
25
  :define_value_extractor,
26
26
  :enable,
27
27
  :enable_all,
28
+ :disable_all,
28
29
  :delete,
29
30
  :setup_plugin,
30
31
  :update_plugin
@@ -17,6 +17,8 @@ module RgGen
17
17
 
18
18
  def load_plugins(builder, options)
19
19
  builder.load_plugins(options[:plugins], options[:no_default_plugins])
20
+ builder.enable_all
21
+ builder.disable_unused_output_features(options[:enable])
20
22
  end
21
23
 
22
24
  def load_configuration(builder, file)
@@ -52,10 +52,7 @@ module RgGen
52
52
  end
53
53
 
54
54
  def process_active_input_value(input_value)
55
- parsed_value, options =
56
- if self.class.value_format
57
- parse_input_value(input_value, self.class.value_format)
58
- end
55
+ parsed_value, options = parse_input_value(input_value, self.class.value_format)
59
56
  override_input_value(input_value, parsed_value, options) || input_value
60
57
  end
61
58
 
@@ -66,13 +63,15 @@ module RgGen
66
63
  }.freeze
67
64
 
68
65
  def parse_input_value(input_value, value_format)
66
+ return unless value_format
67
+
69
68
  format, options = value_format
70
69
  VALUE_PARSERS[format].new(**options).parse(input_value)
71
70
  end
72
71
 
73
72
  def override_input_value(input_value, parsed_value, options)
74
73
  (convert_value(input_value, parsed_value) || parsed_value)
75
- &.then { |v| InputValue.new(v, options, input_value.position) }
74
+ &.then { |v| InputValue.new(v, input_value.position, options) }
76
75
  end
77
76
 
78
77
  def convert_value(input_value, parsed_value)
@@ -24,7 +24,8 @@ module RgGen
24
24
  assign_value(symbolized_name, value, position)
25
25
  end
26
26
 
27
- def []=(value_name, position = nil, value)
27
+ def []=(value_name, value_and_position)
28
+ value, position = value_and_position
28
29
  value(value_name, value, position)
29
30
  end
30
31
 
@@ -48,7 +49,7 @@ module RgGen
48
49
  end
49
50
 
50
51
  def load_file(file)
51
- build_by_block { instance_eval(File.binread(file), file, 1) }
52
+ build_by_block { instance_eval(File.read(file), file, 1) }
52
53
  end
53
54
 
54
55
  private
@@ -4,12 +4,12 @@ module RgGen
4
4
  module Core
5
5
  module InputBase
6
6
  class InputValue < ::SimpleDelegator
7
- NoValue = Object.new
7
+ NO_VALUE = Object.new.freeze
8
8
 
9
- def initialize(value, options = NoValue, position)
9
+ def initialize(value, position, options = NO_VALUE)
10
10
  super((value.is_a?(String) && value.strip) || value)
11
- @options = options
12
11
  @position = position
12
+ @options = options
13
13
  end
14
14
 
15
15
  alias_method :value, :__getobj__
@@ -33,7 +33,7 @@ module RgGen
33
33
  end
34
34
 
35
35
  def with_options?
36
- !@options.equal?(NoValue)
36
+ !@options.equal?(NO_VALUE)
37
37
  end
38
38
 
39
39
  def available?
@@ -6,9 +6,8 @@ module RgGen
6
6
  module JSONLoader
7
7
  private
8
8
 
9
- def load_json(file)
10
- json = File.binread(file)
11
- JSON.parse(json, symbolize_names: true)
9
+ def read_file(file)
10
+ JSON.load_file(file, symbolize_names: true)
12
11
  end
13
12
  end
14
13
  end
@@ -6,9 +6,8 @@ module RgGen
6
6
  module TOMLLoader
7
7
  private
8
8
 
9
- def load_toml(file)
10
- toml = File.binread(file)
11
- Tomlrb.parse(toml, symbolize_keys: true)
9
+ def read_file(file)
10
+ Tomlrb.load_file(file, symbolize_keys: true)
12
11
  end
13
12
  end
14
13
  end
@@ -4,91 +4,13 @@ module RgGen
4
4
  module Core
5
5
  module InputBase
6
6
  module YAMLLoader
7
- Position = Struct.new(:file, :line, :column) do
8
- def to_s
9
- "file #{file} line #{line} column #{column}"
10
- end
11
- end
12
-
13
- module PsychExtension
14
- refine ::Psych::Nodes::Node do
15
- attr_accessor :filename
16
-
17
- attr_writer :mapping_key
18
-
19
- def mapping_key?
20
- @mapping_key || false
21
- end
22
- end
23
- end
24
-
25
- using PsychExtension
26
-
27
- class TreeBuilder < ::Psych::TreeBuilder
28
- def initialize(filename)
29
- super()
30
- @filename = filename
31
- end
32
-
33
- def set_start_location(node)
34
- super
35
- node.filename = @filename
36
- end
37
-
38
- def scalar(value, anchor, tag, plain, quated, style)
39
- node = super
40
- node.mapping_key = mapping_key?
41
- node
42
- end
43
-
44
- private
45
-
46
- def mapping_key?
47
- @last.mapping? && @last.children.size.odd?
48
- end
49
- end
50
-
51
- class Visitor < ::Psych::Visitors::ToRuby
52
- def initialize(scalar_scanner, class_loader)
53
- super(scalar_scanner, class_loader, symbolize_names: true)
54
- end
55
-
56
- def accept(node)
57
- object = super
58
- if override_object?(node)
59
- file = node.filename
60
- line = node.start_line + 1
61
- column = node.start_column + 1
62
- InputValue.new(object, Position.new(file, line, column))
63
- else
64
- object
65
- end
66
- end
67
-
68
- private
69
-
70
- def override_object?(node)
71
- node.mapping? || node.sequence? || (node.scalar? && !node.mapping_key?)
72
- end
73
- end
74
-
75
7
  private
76
8
 
77
- def load_yaml(file)
78
- parse_yaml(File.binread(file), file)
79
- .then { |result| to_ruby(result) }
80
- end
81
-
82
- def parse_yaml(yaml, file)
83
- parser = ::Psych::Parser.new(TreeBuilder.new(file))
84
- parser.parse(yaml, file)
85
- parser.handler.root.children.first
86
- end
87
-
88
- def to_ruby(result)
89
- cl = ::Psych::ClassLoader::Restricted.new(['Symbol'], [])
90
- ss = ::Psych::ScalarScanner.new(cl)
91
- Visitor.new(ss, cl).accept(result)
9
+ def read_file(file)
10
+ YPS.load_file(
11
+ file,
12
+ aliases: true, symbolize_names: true, freeze: true, value_class: InputValue
13
+ )
92
14
  end
93
15
  end
94
16
  end
@@ -17,8 +17,8 @@ module RgGen
17
17
  private
18
18
 
19
19
  def template(path)
20
- @templates ||= {}
21
- (@templates[path] ||= parse_template(path))
20
+ @templates ||= Hash.new { |h, k| h[k] = parse_template(k) }
21
+ @templates[path]
22
22
  end
23
23
  end
24
24
  end
@@ -40,6 +40,7 @@ module RgGen
40
40
 
41
41
  def initialize(layer, valid_value_list, configuration)
42
42
  extend(LAYER_EXTENSIONS[layer])
43
+
43
44
  @configuration = configuration
44
45
  super(layer, valid_value_list)
45
46
  end
@@ -8,10 +8,6 @@ module RgGen
8
8
  include InputBase::JSONLoader
9
9
 
10
10
  support_types [:json]
11
-
12
- def read_file(file)
13
- load_json(file)
14
- end
15
11
  end
16
12
  end
17
13
  end
@@ -8,10 +8,6 @@ module RgGen
8
8
  include InputBase::TOMLLoader
9
9
 
10
10
  support_types [:toml]
11
-
12
- def read_file(file)
13
- load_toml(file)
14
- end
15
11
  end
16
12
  end
17
13
  end
@@ -8,10 +8,6 @@ module RgGen
8
8
  include InputBase::YAMLLoader
9
9
 
10
10
  support_types [:yaml, :yml]
11
-
12
- def read_file(file)
13
- load_yaml(file)
14
- end
15
11
  end
16
12
  end
17
13
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module RgGen
4
4
  module Core
5
- VERSION = '0.35.0'
5
+ VERSION = '0.36.0'
6
6
  MAJOR, MINOR, PATCH = VERSION.split('.').map(&:to_i)
7
7
  end
8
8
  end
data/lib/rggen/core.rb CHANGED
@@ -8,10 +8,9 @@ require 'forwardable'
8
8
  require 'optparse'
9
9
  require 'pathname'
10
10
  require 'singleton'
11
-
12
- autoload :JSON, 'json'
13
- autoload :Psych, 'yaml'
14
- autoload :Tomlrb, 'tomlrb'
11
+ require 'json'
12
+ require 'tomlrb'
13
+ require 'yps'
15
14
 
16
15
  require_relative 'core/version'
17
16
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rggen-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.35.0
4
+ version: 0.36.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taichi Ishitani
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-02-19 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: docile
@@ -71,6 +71,20 @@ dependencies:
71
71
  - - ">="
72
72
  - !ruby/object:Gem::Version
73
73
  version: '2.0'
74
+ - !ruby/object:Gem::Dependency
75
+ name: yps
76
+ requirement: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: 1.0.0
81
+ type: :runtime
82
+ prerelease: false
83
+ version_requirements: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: 1.0.0
74
88
  description: Core library of RgGen tool.
75
89
  email:
76
90
  - rggen@googlegroups.com
@@ -198,14 +212,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
198
212
  requirements:
199
213
  - - ">="
200
214
  - !ruby/object:Gem::Version
201
- version: 3.1.0
215
+ version: 3.2.0
202
216
  required_rubygems_version: !ruby/object:Gem::Requirement
203
217
  requirements:
204
218
  - - ">="
205
219
  - !ruby/object:Gem::Version
206
220
  version: '0'
207
221
  requirements: []
208
- rubygems_version: 3.6.2
222
+ rubygems_version: 4.0.3
209
223
  specification_version: 4
210
- summary: rggen-core-0.35.0
224
+ summary: rggen-core-0.36.0
211
225
  test_files: []