rggen-core 0.25.0 → 0.27.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 57e33c7b563198efa0e1d2c20adcb0b6896d72d4575673c9f64761aeca93779a
4
- data.tar.gz: 61e593cab9704bdc330a3767791afc9e6373020809777c7cd4f67ac18adb7b92
3
+ metadata.gz: 87457243bd057e719ca35386df5b23f6c0cc72a86029e93998b51d8436f0b184
4
+ data.tar.gz: 96a4fd969fd9399e3a1bffdbc9319315bcd9a4df1f45827eb31517eb942bb489
5
5
  SHA512:
6
- metadata.gz: 40b23ff5bd0eca3b9a53cda4cb37a220bd8e7a5648bfce598c1404031bfb43421eda997eb8a7c37868e31418a54c7267d336f72631d29522106c20dc3752433a
7
- data.tar.gz: 6918ad93d019dd22e4af13205eb5c8529b1ae8b7c71cd50352b183ae84d3c5a54682189e606859adcd7e70cd292f42d11b8621997cff95ac2e89e2b47f876d1f
6
+ metadata.gz: ab5f4642ecd2d47c88dfffe5432733c7c91320dace927c84d537cdc12be2e54ab70cf9e4ee32f47bd03f7ec044090f13e1b4a4efab6fa1f2549f6e99d3f05d5d
7
+ data.tar.gz: 1faf35891545834a2ba9df954b15d818c65ea6910859c4987c8e587d495dcfd167fbbb0a5a9206d060fca16c817a004474d721298ac0f6fa9eecbef2dccb04dc
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2017-2021 Taichi Ishitani
3
+ Copyright (c) 2017-2022 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
@@ -37,14 +37,15 @@ $ gem install rggen-core
37
37
 
38
38
  Feedbacks, bug reports, questions and etc. are wellcome! You can post them by using following ways:
39
39
 
40
- * [GitHub Issue Tracker](https://github.com/rggen/rggen-core/issues)
40
+ * [GitHub Issue Tracker](https://github.com/rggen/rggen/issues)
41
+ * [GitHub Discussions](https://github.com/rggen/rggen/discussions)
41
42
  * [Chat Room](https://gitter.im/rggen/rggen)
42
43
  * [Mailing List](https://groups.google.com/d/forum/rggen)
43
44
  * [Mail](mailto:rggen@googlegroups.com)
44
45
 
45
46
  ## Copyright & License
46
47
 
47
- Copyright © 2017-2021 Taichi Ishitani. RgGen::Core is licensed under the [MIT License](https://opensource.org/licenses/MIT), see [LICENSE](LICENSE) for futher details.
48
+ Copyright © 2017-2022 Taichi Ishitani. RgGen::Core is licensed under the [MIT License](https://opensource.org/licenses/MIT), see [LICENSE](LICENSE) for futher details.
48
49
 
49
50
  ## Code of Conduct
50
51
 
@@ -27,7 +27,7 @@ module RgGen
27
27
  if root_factory?
28
28
  [nil, preprocess(args)]
29
29
  else
30
- [args.first, preprocess(args[1..-1])]
30
+ [args.first, preprocess(args[1..])]
31
31
  end
32
32
  create_component(parent, sources) do |component|
33
33
  build_component(parent, component, sources)
@@ -24,11 +24,10 @@ module RgGen
24
24
 
25
25
  [
26
26
  :register_loader, :register_loaders,
27
- :define_value_extractor, :ignore_value, :ignore_values
27
+ :setup_loader, :define_value_extractor
28
28
  ].each do |method_name|
29
29
  define_method(method_name) do |component, *args, &block|
30
- @component_registries[:input][component]
31
- .__send__(__method__, *args, &block)
30
+ @component_registries[:input][component].__send__(__method__, *args, &block)
32
31
  end
33
32
  end
34
33
 
@@ -61,12 +60,8 @@ module RgGen
61
60
  @layers[layer].enable(*args)
62
61
  end
63
62
 
64
- def disable_all
65
- @layers.each_value(&:disable)
66
- end
67
-
68
- def disable(layer, *args)
69
- @layers.key?(layer) && @layers[layer].disable(*args)
63
+ def enable_all
64
+ @layers.each_value(&:enable_all)
70
65
  end
71
66
 
72
67
  def build_factory(type, component)
@@ -94,7 +89,7 @@ module RgGen
94
89
 
95
90
  def_delegator :plugin_manager, :load_plugin
96
91
  def_delegator :plugin_manager, :load_plugins
97
- def_delegator :plugin_manager, :register_plugin
92
+ def_delegator :plugin_manager, :setup_plugin
98
93
 
99
94
  private
100
95
 
@@ -42,7 +42,7 @@ module RgGen
42
42
  factories =
43
43
  @entries
44
44
  .map(&:build_factory)
45
- .map { |f| [f.layer, f] }.to_h
45
+ .to_h { |f| [f.layer, f] }
46
46
  factories.each_value { |f| f.component_factories factories }
47
47
  factories.values
48
48
  end
@@ -28,68 +28,61 @@ module RgGen
28
28
 
29
29
  def enable(feature_or_list_names, feature_names = nil)
30
30
  if feature_names
31
- @enabled_features[feature_or_list_names]
32
- &.merge!(Array(feature_names))
31
+ list_name = feature_or_list_names
32
+ (@enabled_features[list_name] ||= []).merge!(Array(feature_names))
33
33
  else
34
34
  Array(feature_or_list_names).each do |name|
35
- @enabled_features[name] ||= []
35
+ @enabled_features.key?(name) || (@enabled_features[name] = nil)
36
36
  end
37
37
  end
38
38
  end
39
39
 
40
- def enabled_features(list_name = nil)
41
- if list_name
42
- @enabled_features[list_name] || []
43
- else
44
- @enabled_features.keys
45
- end
46
- end
47
-
48
- def disable(feature_or_list_names = nil, feature_names = nil)
49
- if feature_names
50
- @enabled_features[feature_or_list_names]
51
- &.delete_if { |key, _| Array(feature_names).include?(key) }
52
- elsif feature_or_list_names
53
- Array(feature_or_list_names)
54
- .each(&@enabled_features.method(:delete))
55
- else
56
- @enabled_features.clear
57
- end
40
+ def enable_all
41
+ @enabled_features.clear
58
42
  end
59
43
 
60
44
  def delete(feature_or_list_names = nil, feature_names = nil)
61
45
  if feature_names
62
46
  @feature_entries[feature_or_list_names]&.delete(feature_names)
63
47
  elsif feature_or_list_names
64
- Array(feature_or_list_names)
65
- .each(&@feature_entries.method(:delete))
48
+ Array(feature_or_list_names).each(&@feature_entries.method(:delete))
66
49
  else
67
50
  @feature_entries.clear
68
51
  end
69
52
  end
70
53
 
71
54
  def simple_feature?(feature_name)
72
- enabled_feature?(feature_name, :simple)
55
+ @feature_entries[feature_name]&.match_entry_type?(:simple) || false
73
56
  end
74
57
 
75
58
  def list_feature?(list_name, feature_name = nil)
76
- return false unless enabled_feature?(list_name, :list)
59
+ return false unless @feature_entries[list_name]&.match_entry_type?(:list)
77
60
  return true unless feature_name
78
- enabled_list_item_feature?(list_name, feature_name)
61
+ @feature_entries[list_name].feature?(feature_name)
79
62
  end
80
63
 
81
64
  def feature?(feature_or_list_name, feature_name = nil)
82
65
  if feature_name
83
66
  list_feature?(feature_or_list_name, feature_name)
84
67
  else
85
- simple_feature?(feature_or_list_name) ||
86
- list_feature?(feature_or_list_name)
68
+ simple_feature?(feature_or_list_name) || list_feature?(feature_or_list_name)
69
+ end
70
+ end
71
+
72
+ def enabled_features(list_name = nil)
73
+ if list_name
74
+ enabled_list_features(list_name)
75
+ else
76
+ @enabled_features.empty? && @feature_entries.keys ||
77
+ @enabled_features.keys & @feature_entries.keys
87
78
  end
88
79
  end
89
80
 
90
81
  def build_factories
82
+ target_features =
83
+ (@enabled_features.empty? && @feature_entries || @enabled_features).keys
91
84
  @feature_entries
92
- .slice(*@enabled_features.keys)
85
+ .slice(*target_features)
93
86
  .transform_values(&method(:build_factory))
94
87
  end
95
88
 
@@ -105,16 +98,17 @@ module RgGen
105
98
  @feature_entries[name] = entry
106
99
  end
107
100
 
108
- def enabled_feature?(name, entry_type)
109
- return false unless @feature_entries[name]
110
- &.match_entry_type?(entry_type)
111
- @enabled_features.key?(name)
101
+ def enabled_list_features(list_name)
102
+ return [] unless enabled_list?(list_name)
103
+ features = @feature_entries[list_name].features
104
+ (@enabled_features[list_name] || features) & features
112
105
  end
113
106
 
114
- def enabled_list_item_feature?(list_name, feature_name)
115
- return false unless @feature_entries[list_name]
116
- .feature?(feature_name)
117
- @enabled_features[list_name].include?(feature_name)
107
+ def enabled_list?(list_name)
108
+ return false unless list_feature?(list_name)
109
+ return true if @enabled_features.empty?
110
+ return true if @enabled_features.key?(list_name)
111
+ false
118
112
  end
119
113
 
120
114
  def build_factory(entry)
@@ -6,45 +6,26 @@ module RgGen
6
6
  class InputComponentRegistry < ComponentRegistry
7
7
  def initialize(name, builder)
8
8
  super
9
- @loader_registries = {}
9
+ @loader_registries = Hash.new do |h, k|
10
+ h[k] = LoaderRegistry.new
11
+ end
10
12
  end
11
13
 
12
14
  def register_loader(loader_type, loader)
13
- loader_registry(loader_type).register_loader(loader)
15
+ @loader_registries[loader_type].register_loader(loader)
14
16
  end
15
17
 
16
18
  def register_loaders(loader_type, loaders)
17
- loader_registry(loader_type).register_loaders(loaders)
19
+ @loader_registries[loader_type].register_loaders(loaders)
18
20
  end
19
21
 
20
- def define_value_extractor(loader_type, layers_or_value, value = nil, &body)
21
- layers, value =
22
- if value
23
- [layers_or_value, value]
24
- else
25
- [nil, layers_or_value]
26
- end
27
- loader_registry(loader_type).define_value_extractor(layers, value, &body)
28
- end
29
-
30
- def ignore_value(loader_type, layers_or_value, value = nil)
31
- layers, value =
32
- if value
33
- [layers_or_value, value]
34
- else
35
- [nil, layers_or_value]
36
- end
37
- loader_registry(loader_type).ignore_value(layers, value)
22
+ def setup_loader(loader_type)
23
+ block_given? && yield(@loader_registries[loader_type])
38
24
  end
39
25
 
40
- def ignore_values(loader_type, layers_or_values, values = nil)
41
- layers, values =
42
- if values
43
- [layers_or_values, values]
44
- else
45
- [nil, layers_or_values]
46
- end
47
- loader_registry(loader_type).ignore_values(layers, values)
26
+ def define_value_extractor(loader_type, layers_or_value, value = nil, &body)
27
+ @loader_registries[loader_type]
28
+ .define_value_extractor(layers_or_value, value, &body)
48
29
  end
49
30
 
50
31
  def build_factory
@@ -55,10 +36,6 @@ module RgGen
55
36
 
56
37
  private
57
38
 
58
- def loader_registry(loader_type)
59
- @loader_registries[loader_type] ||= LoaderRegistry.new
60
- end
61
-
62
39
  def build_loaders
63
40
  @loader_registries.values.flat_map(&:create_loaders)
64
41
  end
@@ -90,10 +90,8 @@ module RgGen
90
90
  end
91
91
  end
92
92
 
93
- def disable(feature_or_list_names = nil, feature_names = nil)
94
- @feature_registries.each_value do |registry|
95
- registry.disable(*[feature_or_list_names, feature_names].compact)
96
- end
93
+ def enable_all
94
+ @feature_registries.each_value(&:enable_all)
97
95
  end
98
96
 
99
97
  def delete(feature_or_list_names = nil, feature_names = nil)
@@ -32,9 +32,9 @@ module RgGen
32
32
 
33
33
  alias_method :factory, :define_factory
34
34
 
35
- def build_factory(enabled_features)
35
+ def build_factory(targets)
36
36
  @factory.new(@name) do |f|
37
- f.target_features(target_features(enabled_features))
37
+ f.target_features(target_features(targets))
38
38
  f.target_feature(@default_feature)
39
39
  end
40
40
  end
@@ -77,6 +77,10 @@ module RgGen
77
77
  @features.key?(feature)
78
78
  end
79
79
 
80
+ def features
81
+ @features.keys
82
+ end
83
+
80
84
  private
81
85
 
82
86
  def attach_shared_context(context)
@@ -85,8 +89,8 @@ module RgGen
85
89
  end
86
90
  end
87
91
 
88
- def target_features(enabled_features)
89
- @features.slice(*enabled_features)
92
+ def target_features(targets)
93
+ targets && @features.slice(*targets) || @features
90
94
  end
91
95
  end
92
96
  end
@@ -11,22 +11,25 @@ module RgGen
11
11
  end
12
12
 
13
13
  def register_loader(loader)
14
- register_loaders([loader])
14
+ @loaders << loader
15
15
  end
16
16
 
17
17
  def register_loaders(loaders)
18
18
  @loaders.concat(Array(loaders))
19
19
  end
20
20
 
21
- def define_value_extractor(layers, value, &body)
21
+ def define_value_extractor(layers_or_value, value = nil, &body)
22
+ value, layers = [value, layers_or_value].compact
22
23
  @extractors << create_extractor(layers, value, &body)
23
24
  end
24
25
 
25
- def ignore_value(layers, value)
26
+ def ignore_value(layers_or_value, value = nil)
27
+ value, layers = [value, layers_or_value].compact
26
28
  ignore_values(layers, [value])
27
29
  end
28
30
 
29
- def ignore_values(layers, values)
31
+ def ignore_values(layers_or_values, values = nil)
32
+ values, layers = [values, layers_or_values].compact
30
33
  [layers].flatten.each do |layer|
31
34
  (@ignore_values[layer] ||= []).concat(Array(values))
32
35
  end
@@ -3,22 +3,65 @@
3
3
  module RgGen
4
4
  module Core
5
5
  module Builder
6
- class PluginRegistry
7
- def initialize(plugin_module, &block)
8
- @plugin_module = plugin_module
9
- @block = block
6
+ DEFAULT_PLUGSINS = 'rggen/default'
7
+
8
+ class PluginInfo
9
+ attr_reader :path
10
+ attr_reader :gemname
11
+ attr_reader :version
12
+
13
+ def self.parse(path_or_name, version)
14
+ info = new
15
+ info.parse(path_or_name.to_s.strip, version)
16
+ info
10
17
  end
11
18
 
12
- def default_setup(builder)
13
- @plugin_module.plugin_spec.activate(builder)
19
+ def parse(path_or_name, version)
20
+ @name, @path, @gemname, @version =
21
+ if plugin_path?(path_or_name)
22
+ [nil, path_or_name, *find_gemspec_by_path(path_or_name)]
23
+ else
24
+ [
25
+ path_or_name, get_plugin_path(path_or_name),
26
+ get_gemname(path_or_name), version
27
+ ]
28
+ end
14
29
  end
15
30
 
16
- def optional_setup(builder)
17
- @block && @plugin_module.instance_exec(builder, &@block)
31
+ def to_s
32
+ if @name && @version
33
+ "#{@name} (#{@version})"
34
+ elsif @name
35
+ @name
36
+ else
37
+ @path
38
+ end
18
39
  end
19
40
 
20
- def version_info
21
- @plugin_module.plugin_spec.version_info
41
+ private
42
+
43
+ def plugin_path?(path_or_name)
44
+ path_or_name == DEFAULT_PLUGSINS || File.ext(path_or_name) == 'rb'
45
+ end
46
+
47
+ def find_gemspec_by_path(path)
48
+ Gem::Specification
49
+ .each.find { |spec| match_gemspec_path?(spec, path) }
50
+ .yield_self { |spec| spec && [spec.name, spec.version] }
51
+ end
52
+
53
+ def match_gemspec_path?(gemspec, path)
54
+ gemspec.full_require_paths.any?(&path.method(:start_with?))
55
+ end
56
+
57
+ def get_plugin_path(name)
58
+ base_name, sub_name = name.split('/', 2)
59
+ base_name = base_name.sub(/^rggen[-_]/, '').tr('-', '_')
60
+ File.join(*['rggen', base_name, sub_name].compact)
61
+ end
62
+
63
+ def get_gemname(name)
64
+ name.split('/', 2).first
22
65
  end
23
66
  end
24
67
 
@@ -28,34 +71,31 @@ module RgGen
28
71
  @plugins = []
29
72
  end
30
73
 
31
- def load_plugin(setup_path_or_name)
32
- setup_path_or_name = setup_path_or_name.to_s.strip
33
- setup_path =
34
- if setup_file_directly_given?(setup_path_or_name)
35
- setup_path_or_name
36
- else
37
- get_setup_path(setup_path_or_name)
38
- end
39
- read_setup_file(setup_path, setup_path_or_name)
74
+ def load_plugin(path_or_name, version = nil)
75
+ info = PluginInfo.parse(path_or_name, version)
76
+ read_plugin_file(info)
40
77
  end
41
78
 
42
79
  def load_plugins(plugins, no_default_plugins, activation = true)
43
80
  RgGen.builder(@builder)
44
- merge_plugins(plugins, no_default_plugins).each(&method(:load_plugin))
81
+ merge_plugins(plugins, no_default_plugins)
82
+ .each { |plugin| load_plugin(*plugin) }
45
83
  activation && activate_plugins
46
84
  end
47
85
 
48
- def register_plugin(plugin_module, &block)
49
- plugin?(plugin_module) ||
50
- (raise Core::PluginError.new('no plugin spec is given'))
51
- @plugins << PluginRegistry.new(plugin_module, &block)
86
+ def setup_plugin(plugin_name, &block)
87
+ @plugins << PluginSpec.new(plugin_name, &block)
52
88
  end
53
89
 
54
- def activate_plugins(**options)
55
- options[:no_default_setup] ||
56
- @plugins.each { |plugin| plugin.default_setup(@builder) }
57
- options[:no_optional_setup] ||
58
- @plugins.each { |plugin| plugin.optional_setup(@builder) }
90
+ def activate_plugins
91
+ @plugins.each { |plugin| plugin.activate(@builder) }
92
+ @plugins.each { |plugin| plugin.activate_additionally(@builder) }
93
+ end
94
+
95
+ def activate_plugin_by_name(plugin_name)
96
+ target_plugin = @plugins.find { |plugin| plugin.name == plugin_name }
97
+ target_plugin&.activate(@builder)
98
+ target_plugin&.activate_additionally(@builder)
59
99
  end
60
100
 
61
101
  def version_info
@@ -64,27 +104,11 @@ module RgGen
64
104
 
65
105
  private
66
106
 
67
- def setup_file_directly_given?(setup_path_or_name)
68
- File.ext(setup_path_or_name) == 'rb' ||
69
- File.basename(setup_path_or_name, '.*') == 'setup'
70
- end
71
-
72
- def get_setup_path(name)
73
- base, sub_directory = name.split('/', 2)
74
- base = base.sub(/^rggen[-_]/, '').tr('-', '_')
75
- File.join(*['rggen', base, sub_directory, 'setup'].compact)
76
- end
77
-
78
- def read_setup_file(setup_path, setup_path_or_name)
79
- require setup_path
107
+ def read_plugin_file(info)
108
+ info.gemname && gem(info.gemname, info.version)
109
+ require info.path
80
110
  rescue ::LoadError
81
- message =
82
- if setup_path_or_name == setup_path
83
- "cannot load such plugin: #{setup_path_or_name}"
84
- else
85
- "cannot load such plugin: #{setup_path_or_name} (#{setup_path})"
86
- end
87
- raise Core::PluginError.new(message)
111
+ raise Core::PluginError.new("cannot load such plugin: #{info}")
88
112
  end
89
113
 
90
114
  def merge_plugins(plugins, no_default_plugins)
@@ -95,8 +119,6 @@ module RgGen
95
119
  ]
96
120
  end
97
121
 
98
- DEFAULT_PLUGSINS = 'rggen/setup'
99
-
100
122
  def default_plugins(no_default_plugins)
101
123
  load_default_plugins?(no_default_plugins) && DEFAULT_PLUGSINS || nil
102
124
  end
@@ -110,11 +132,9 @@ module RgGen
110
132
 
111
133
  def plugins_from_env
112
134
  ENV['RGGEN_PLUGINS']
113
- &.split(':')&.map(&:strip)&.reject(&:empty?)
114
- end
115
-
116
- def plugin?(plugin_module)
117
- plugin_module.respond_to?(:plugin_spec) && plugin_module.plugin_spec
135
+ &.split(':')
136
+ &.reject(&:blank?)
137
+ &.map { |entry| entry.split(',', 2) }
118
138
  end
119
139
  end
120
140
  end
@@ -4,14 +4,16 @@ module RgGen
4
4
  module Core
5
5
  module Builder
6
6
  class PluginSpec
7
- def initialize(name, plugin_module)
7
+ def initialize(name)
8
8
  @name = name
9
- @plugin_module = plugin_module
10
9
  @component_registrations = []
11
10
  @loader_registrations = []
12
11
  @files = []
12
+ block_given? && yield(self)
13
13
  end
14
14
 
15
+ attr_reader :name
16
+
15
17
  def version(value = nil)
16
18
  @version = value if value
17
19
  version_value
@@ -25,13 +27,8 @@ module RgGen
25
27
  @component_registrations << [component, layers, body]
26
28
  end
27
29
 
28
- def register_loader(component, loader_type, loader)
29
- @loader_registrations << [component, loader_type, loader]
30
- end
31
-
32
- def register_loaders(component, loader_type, loaders)
33
- Array(loaders)
34
- .each { |loader| register_loader(component, loader_type, loader) }
30
+ def setup_loader(component, loader_type, &body)
31
+ @loader_registrations << [component, loader_type, body]
35
32
  end
36
33
 
37
34
  def register_files(files)
@@ -41,23 +38,26 @@ module RgGen
41
38
 
42
39
  alias_method :files, :register_files
43
40
 
41
+ def addtional_setup(&body)
42
+ @addtional_setup = body
43
+ end
44
+
44
45
  def activate(builder)
45
46
  activate_components(builder)
46
47
  activate_loaders(builder)
47
48
  load_files
48
49
  end
49
50
 
51
+ def activate_additionally(builder)
52
+ @addtional_setup&.call(builder)
53
+ end
54
+
50
55
  private
51
56
 
52
57
  DEFAULT_VERSION = '0.0.0'
53
58
 
54
59
  def version_value
55
- @version || const_version || DEFAULT_VERSION
56
- end
57
-
58
- def const_version
59
- @plugin_module.const_defined?(:VERSION) &&
60
- @plugin_module.const_get(:VERSION)
60
+ @version || DEFAULT_VERSION
61
61
  end
62
62
 
63
63
  def activate_components(builder)
@@ -69,8 +69,10 @@ module RgGen
69
69
  end
70
70
 
71
71
  def activate_loaders(builder)
72
- @loader_registrations.each do |component, loader_type, loader|
73
- builder.register_loader(component, loader_type, loader)
72
+ @loader_registrations.each do |component, loader_type, body|
73
+ builder
74
+ .input_component_registry(component)
75
+ .setup_loader(loader_type, &body)
74
76
  end
75
77
  end
76
78
 
@@ -11,17 +11,17 @@ module RgGen
11
11
  :input_component_registry,
12
12
  :output_component_registry,
13
13
  :register_loader,
14
+ :setup_loader,
15
+ :load_plugin,
14
16
  :define_loader,
15
17
  :define_simple_feature,
16
18
  :define_list_feature,
17
19
  :define_list_item_feature,
18
20
  :define_value_extractor,
19
21
  :enable,
20
- :disable_all,
21
- :disable,
22
+ :enable_all,
22
23
  :delete,
23
- :register_plugin,
24
- :load_plugin
24
+ :setup_plugin
25
25
  ].each do |method_name|
26
26
  def_delegator :'RgGen.builder', method_name
27
27
  end
@@ -3,6 +3,7 @@
3
3
  require 'facets/array/merge'
4
4
  require 'facets/file/ext'
5
5
  require 'facets/hash/except' if RUBY_VERSION < '3.0.0'
6
+ require 'facets/kernel/blank'
6
7
  require 'facets/pathname/to_path'
7
8
  require 'facets/module/attr_setter'
8
9
  require 'facets/module/lastname'
@@ -45,9 +45,7 @@ module RgGen
45
45
  end
46
46
 
47
47
  def load_file(file)
48
- build_by_block(&instance_eval(<<~BODY, file, 1))
49
- -> { #{File.binread(file)} } # -> { File.binread(file) }
50
- BODY
48
+ build_by_block { instance_eval(File.binread(file), file, 1) }
51
49
  end
52
50
 
53
51
  private
@@ -42,11 +42,9 @@ module RgGen
42
42
  end
43
43
 
44
44
  def format_sub_layer(read_data, input_data, layer, file)
45
- format_sub_layer_data(read_data, layer, file)
46
- &.flat_map { |sub_layer, data_array| [sub_layer].product(data_array) }
47
- &.each do |(sub_layer, data)|
48
- format(data, input_data.child(sub_layer), sub_layer, file)
49
- end
45
+ format_sub_layer_data(read_data, layer, file)&.each do |(sub_layer, data)|
46
+ format(data, input_data.child(sub_layer), sub_layer, file)
47
+ end
50
48
  end
51
49
 
52
50
  def format_layer_data(_read_data, _layer, _file)
@@ -6,22 +6,13 @@ module RgGen
6
6
  module YAMLLoader
7
7
  private
8
8
 
9
- if RUBY_VERSION >= '2.6.0'
10
- def yaml_safe_load(yaml, file)
11
- YAML.safe_load(
12
- yaml,
13
- permitted_classes: [Symbol], aliases: true, filename: file,
14
- symbolize_names: true
15
- )
16
- end
17
- else
18
- def yaml_safe_load(yaml, file)
19
- YAML.safe_load(yaml, [Symbol], [], true, file, symbolize_names: true)
20
- end
21
- end
22
-
23
9
  def load_yaml(file)
24
- yaml_safe_load(File.binread(file), file)
10
+ yaml = File.binread(file)
11
+ YAML.safe_load(
12
+ yaml,
13
+ permitted_classes: [Symbol], aliases: true,
14
+ filename: file, symbolize_names: true
15
+ )
25
16
  end
26
17
  end
27
18
  end
@@ -109,9 +109,9 @@ module RgGen
109
109
  end
110
110
 
111
111
  Options.add_option(:plugins) do |option|
112
- option.long_option '--plugin PLUGIN'
112
+ option.long_option '--plugin PLUGIN[:VERSION]'
113
113
  option.default { [] }
114
- option.action { |value, options| options[:plugins] << value }
114
+ option.action { |value, options| options[:plugins] << value.split(':', 2) }
115
115
  option.description 'Load a RgGen plugin ' \
116
116
  "(name of plugin/path to 'setup.rb' file)"
117
117
  end
@@ -32,7 +32,7 @@ module RgGen
32
32
 
33
33
  def create_directory(path)
34
34
  directory = path.dirname
35
- directory.directory? || directory.mkpath
35
+ directory.directory? || FileUtils.mkpath(directory)
36
36
  end
37
37
  end
38
38
  end
@@ -47,12 +47,12 @@ module RgGen
47
47
  end
48
48
 
49
49
  def format_array_sub_layer_data(read_data, layer, file)
50
- read_data.each_with_object({}) do |data, sub_layer_data|
50
+ read_data.each_with_object([]) do |data, sub_layer_data|
51
51
  format_hash_sub_layer_data(data, layer, file, sub_layer_data)
52
52
  end
53
53
  end
54
54
 
55
- def format_hash_sub_layer_data(read_data, layer, file, sub_layer_data = {})
55
+ def format_hash_sub_layer_data(read_data, layer, file, sub_layer_data = [])
56
56
  convert_to_hash(read_data, file)
57
57
  .slice(*SUB_LAYER_KEYS[layer])
58
58
  .each { |k, v| merge_sub_layer_data(sub_layer_data, layer, k, v) }
@@ -61,9 +61,10 @@ module RgGen
61
61
 
62
62
  def merge_sub_layer_data(sub_layer_data, layer, key, value)
63
63
  if SUB_LAYER_KEY_MAP[layer].key?(key)
64
- (sub_layer_data[SUB_LAYER_KEY_MAP[layer][key]] ||= []).concat(value)
64
+ sub_layer_data
65
+ .concat([SUB_LAYER_KEY_MAP[layer][key]].product(value))
65
66
  else
66
- (sub_layer_data[key] ||= []) << value
67
+ sub_layer_data << [key, value]
67
68
  end
68
69
  end
69
70
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  module RgGen
4
4
  module Core
5
- VERSION = '0.25.0'
5
+ VERSION = '0.27.0'
6
6
  MAJOR, MINOR, PATCH = VERSION.split('.').map(&:to_i)
7
7
  end
8
8
  end
data/lib/rggen/core.rb CHANGED
@@ -105,7 +105,6 @@ require_relative 'core/builder/plugin_manager'
105
105
  require_relative 'core/builder/builder'
106
106
  require_relative 'core/builder'
107
107
 
108
- require_relative 'core/plugin'
109
108
  require_relative 'core/printers'
110
109
  require_relative 'core/options'
111
110
  require_relative 'core/dsl'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rggen-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.25.0
4
+ version: 0.27.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taichi Ishitani
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-02-28 00:00:00.000000000 Z
11
+ date: 2022-07-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: docile
@@ -165,7 +165,6 @@ files:
165
165
  - lib/rggen/core/output_base/raise_error.rb
166
166
  - lib/rggen/core/output_base/source_file_component_factory.rb
167
167
  - lib/rggen/core/output_base/template_engine.rb
168
- - lib/rggen/core/plugin.rb
169
168
  - lib/rggen/core/printers.rb
170
169
  - lib/rggen/core/register_map.rb
171
170
  - lib/rggen/core/register_map/component.rb
@@ -193,8 +192,9 @@ homepage: https://github.com/rggen/rggen-core
193
192
  licenses:
194
193
  - MIT
195
194
  metadata:
196
- bug_tracker_uri: https://github.com/rggen/rggen-core/issues
195
+ bug_tracker_uri: https://github.com/rggen/rggen/issues
197
196
  mailing_list_uri: https://groups.google.com/d/forum/rggen
197
+ rubygems_mfa_required: 'true'
198
198
  source_code_uri: https://github.com/rggen/rggen-core
199
199
  wiki_uri: https://github.com/rggen/rggen/wiki
200
200
  post_install_message:
@@ -205,15 +205,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
205
205
  requirements:
206
206
  - - ">="
207
207
  - !ruby/object:Gem::Version
208
- version: '2.5'
208
+ version: '2.6'
209
209
  required_rubygems_version: !ruby/object:Gem::Requirement
210
210
  requirements:
211
211
  - - ">="
212
212
  - !ruby/object:Gem::Version
213
213
  version: '0'
214
214
  requirements: []
215
- rubygems_version: 3.2.3
215
+ rubygems_version: 3.3.3
216
216
  signing_key:
217
217
  specification_version: 4
218
- summary: rggen-core-0.25.0
218
+ summary: rggen-core-0.27.0
219
219
  test_files: []
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RgGen
4
- module Core
5
- module Plugin
6
- attr_reader :plugin_spec
7
-
8
- private
9
-
10
- def setup_plugin(name)
11
- @plugin_spec = Builder::PluginSpec.new(name, self)
12
- block_given? && yield(@plugin_spec)
13
- end
14
- end
15
- end
16
- end