rggen-core 0.25.0 → 0.27.0

Sign up to get free protection for your applications and to get access to all the features.
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