rggen-core 0.28.0 → 0.29.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: 30286c1aefc400e1d6cda52dddc797fca2ad3a35fcf3a43578371a5b9a8fc4b0
4
- data.tar.gz: e7bb012b70a143c1412eab481febce79e7083ab83c22136f3e52540a41e67c69
3
+ metadata.gz: 18a9718f8b5e18dc5fff8f27e29df34c94017f3964cd63d2f6fa09eb5627a7de
4
+ data.tar.gz: 21993e58645d31298ec8a8044f1eb05d436a2a05b10215b8f93f5e91443daf03
5
5
  SHA512:
6
- metadata.gz: a14bd1ce40c782d0628e55f23a6acffa1578598a421bae4a7127c4464800078ac3181504e0a53b829581cfba4820b56fbc07803cf3fe338097479f4d3aca646a
7
- data.tar.gz: 524360603dae2839afe73e23a8c2cbedac3e2373e70a24e671d006977caf08dea6a5813d50a99a1724b3ab1a098b38134b0f653cbde2f9c6ee341d12596a73d0
6
+ metadata.gz: 92e3f06ffd5182911e805c145b08ebea4e74e2e07e618eb7311be527b2abc8e2fdc41b50f82e1565d38798b109d12d325ce15da3262b4ac9aabcad0df077b824
7
+ data.tar.gz: fc15825417a32f84cddcc5b776b24a51c2f2bc495e82001ca3912a4e7f992e5bfa0b366a19d6ae37f080d3bad9258213a8701c9b9c5b8bff1332f0835fde4377
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2017-2022 Taichi Ishitani
3
+ Copyright (c) 2017-2023 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
@@ -45,7 +45,7 @@ Feedbacks, bug reports, questions and etc. are wellcome! You can post them by us
45
45
 
46
46
  ## Copyright & License
47
47
 
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
+ Copyright © 2017-2023 Taichi Ishitani. RgGen::Core is licensed under the [MIT License](https://opensource.org/licenses/MIT), see [LICENSE](LICENSE) for futher details.
49
49
 
50
50
  ## Code of Conduct
51
51
 
@@ -75,9 +75,9 @@ module RgGen
75
75
 
76
76
  def define_proxy_call(receiver, method_name)
77
77
  (@proxy_receivers ||= {})[method_name.to_sym] = receiver
78
- define_singleton_method(method_name) do |*args, &block|
78
+ define_singleton_method(method_name) do |*args, **keywords, &block|
79
79
  name = __method__
80
- @proxy_receivers[name].__send__(name, *args, &block)
80
+ @proxy_receivers[name].__send__(name, *args, **keywords, &block)
81
81
  end
82
82
  end
83
83
  end
@@ -47,6 +47,7 @@ module RgGen
47
47
  end
48
48
 
49
49
  [
50
+ :define_feature,
50
51
  :define_simple_feature,
51
52
  :define_list_feature,
52
53
  :define_list_item_feature
@@ -73,7 +74,7 @@ module RgGen
73
74
  if targets.empty?
74
75
  @component_registries[type]
75
76
  else
76
- @component_registries[type].slice(*targets)
77
+ collect_component_factories(type, targets)
77
78
  end
78
79
  registries.each_value.map(&:build_factory)
79
80
  end
@@ -127,6 +128,14 @@ module RgGen
127
128
  (registries[name] = COMPONENT_REGISTRIES[type].new(name, self))
128
129
  body && Docile.dsl_eval(registries[name], &body) || registries[name]
129
130
  end
131
+
132
+ def collect_component_factories(type, targets)
133
+ unknown_components = targets - @component_registries[type].keys
134
+ unknown_components.empty? ||
135
+ (raise BuilderError.new("unknown component: #{unknown_components.first}"))
136
+
137
+ @component_registries[type].slice(*targets)
138
+ end
130
139
  end
131
140
  end
132
141
  end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RgGen
4
+ module Core
5
+ module Builder
6
+ class FeatureEntryBase
7
+ def initialize(registry, name)
8
+ @registry = registry
9
+ @name = name
10
+ end
11
+
12
+ attr_reader :registry
13
+ attr_reader :name
14
+
15
+ def match_entry_type?(entry_type)
16
+ entry_type == entry_type_name
17
+ end
18
+
19
+ def build_factory(targets)
20
+ @factory.new(name) do |f|
21
+ f.target_features(target_features(targets))
22
+ f.target_feature(target_feature)
23
+ end
24
+ end
25
+
26
+ private
27
+
28
+ def attach_shared_context(context, *targets)
29
+ (context && targets)&.each do |target|
30
+ target.attach_context(context)
31
+ end
32
+ end
33
+
34
+ def target_features(_tergets)
35
+ end
36
+
37
+ def target_feature
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -11,6 +11,10 @@ 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)
16
+ end
17
+
14
18
  def define_simple_feature(name, context = nil, &body)
15
19
  create_new_entry(:simple, name, context, &body)
16
20
  end
@@ -51,21 +55,11 @@ module RgGen
51
55
  end
52
56
  end
53
57
 
54
- def simple_feature?(feature_name)
55
- @feature_entries[feature_name]&.match_entry_type?(:simple) || false
56
- end
57
-
58
- def list_feature?(list_name, feature_name = nil)
59
- return false unless @feature_entries[list_name]&.match_entry_type?(:list)
60
- return true unless feature_name
61
- @feature_entries[list_name].feature?(feature_name)
62
- end
63
-
64
58
  def feature?(feature_or_list_name, feature_name = nil)
65
59
  if feature_name
66
60
  list_feature?(feature_or_list_name, feature_name)
67
61
  else
68
- simple_feature?(feature_or_list_name) || list_feature?(feature_or_list_name)
62
+ @feature_entries.key?(feature_or_list_name)
69
63
  end
70
64
  end
71
65
 
@@ -89,7 +83,9 @@ module RgGen
89
83
  private
90
84
 
91
85
  FEATURE_ENTRIES = {
92
- simple: SimpleFeatureEntry, list: ListFeatureEntry
86
+ general: GeneralFeatureEntry,
87
+ simple: SimpleFeatureEntry,
88
+ list: ListFeatureEntry
93
89
  }.freeze
94
90
 
95
91
  def create_new_entry(type, name, context, &body)
@@ -105,7 +101,7 @@ module RgGen
105
101
  end
106
102
 
107
103
  def enabled_list?(list_name)
108
- return false unless list_feature?(list_name)
104
+ return false unless @feature_entries[list_name]&.match_entry_type?(:list)
109
105
  return true if @enabled_features.empty?
110
106
  return true if @enabled_features.key?(list_name)
111
107
  false
@@ -114,6 +110,11 @@ module RgGen
114
110
  def build_factory(entry)
115
111
  entry.build_factory(@enabled_features[entry.name])
116
112
  end
113
+
114
+ def list_feature?(list_name, feature_name)
115
+ @feature_entries[list_name]&.match_entry_type?(:list) &&
116
+ @feature_entries[list_name]&.feature?(feature_name) || false
117
+ end
117
118
  end
118
119
  end
119
120
  end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RgGen
4
+ module Core
5
+ module Builder
6
+ class GeneralFeatureEntry < FeatureEntryBase
7
+ include Base::SharedContext
8
+
9
+ def setup(base_feature, base_factory, context, &body)
10
+ @feature = Class.new(base_feature)
11
+ @factory = Class.new(base_factory)
12
+ attach_shared_context(context, @feature, @factory, self)
13
+ block_given? && Docile.dsl_eval(self, @name, &body)
14
+ end
15
+
16
+ def define_factory(&body)
17
+ @factory.class_exec(&body)
18
+ end
19
+
20
+ alias_method :factory, :define_factory
21
+
22
+ def define_feature(&body)
23
+ @feature.class_exec(&body)
24
+ end
25
+
26
+ alias_method :feature, :define_feature
27
+
28
+ private
29
+
30
+ def entry_type_name
31
+ :general
32
+ end
33
+
34
+ def target_feature
35
+ @feature
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -53,6 +53,16 @@ module RgGen
53
53
  current_shared_context(false)
54
54
  end
55
55
 
56
+ def define_feature(feature_names, &body)
57
+ Array(feature_names).each do |feature_name|
58
+ do_proxy_call do |proxy|
59
+ proxy.body(body)
60
+ proxy.method_name(__method__)
61
+ proxy.feature_name(feature_name)
62
+ end
63
+ end
64
+ end
65
+
56
66
  def define_simple_feature(feature_names, &body)
57
67
  Array(feature_names).each do |feature_name|
58
68
  do_proxy_call do |proxy|
@@ -3,42 +3,27 @@
3
3
  module RgGen
4
4
  module Core
5
5
  module Builder
6
- class ListFeatureEntry
6
+ class ListFeatureEntry < FeatureEntryBase
7
7
  include Base::SharedContext
8
8
 
9
9
  def initialize(registry, name)
10
- @registry = registry
11
- @name = name
10
+ super(registry, name)
12
11
  @features = {}
13
12
  end
14
13
 
15
- attr_reader :registry
16
- attr_reader :name
17
-
18
14
  def setup(base_feature, base_factory, context, &body)
19
15
  @base_feature = Class.new(base_feature)
20
16
  @factory = Class.new(base_factory)
21
- context && attach_shared_context(context)
17
+ attach_shared_context(context, @base_feature, @factory, self)
22
18
  block_given? && Docile.dsl_eval(self, @name, &body)
23
19
  end
24
20
 
25
- def match_entry_type?(entry_type)
26
- entry_type == :list
27
- end
28
-
29
21
  def define_factory(&body)
30
22
  @factory.class_exec(&body)
31
23
  end
32
24
 
33
25
  alias_method :factory, :define_factory
34
26
 
35
- def build_factory(targets)
36
- @factory.new(@name) do |f|
37
- f.target_features(target_features(targets))
38
- f.target_feature(@default_feature)
39
- end
40
- end
41
-
42
27
  def define_base_feature(&body)
43
28
  body && @base_feature.class_exec(&body)
44
29
  end
@@ -51,7 +36,7 @@ module RgGen
51
36
  if context
52
37
  feature.method_defined?(:shared_context) &&
53
38
  (raise BuilderError.new('shared context has already been set'))
54
- feature.attach_context(context)
39
+ attach_shared_context(context, feature)
55
40
  end
56
41
  body && feature.class_exec(feature_name, &body)
57
42
  end
@@ -83,15 +68,17 @@ module RgGen
83
68
 
84
69
  private
85
70
 
86
- def attach_shared_context(context)
87
- [@factory, @base_feature, self].each do |target|
88
- target.attach_context(context)
89
- end
71
+ def entry_type_name
72
+ :list
90
73
  end
91
74
 
92
75
  def target_features(targets)
93
76
  targets && @features.slice(*targets) || @features
94
77
  end
78
+
79
+ def target_feature
80
+ @default_feature
81
+ end
95
82
  end
96
83
  end
97
84
  end
@@ -3,36 +3,28 @@
3
3
  module RgGen
4
4
  module Core
5
5
  module Builder
6
- class SimpleFeatureEntry
7
- def initialize(registry, name)
8
- @registry = registry
9
- @name = name
10
- end
11
-
12
- attr_reader :registry
13
- attr_reader :name
14
-
6
+ class SimpleFeatureEntry < FeatureEntryBase
15
7
  def setup(base_feature, factory, context, &body)
16
8
  @feature = define_feature(base_feature, context, &body)
17
9
  @factory = factory
18
10
  end
19
11
 
20
- def match_entry_type?(entry_type)
21
- entry_type == :simple
22
- end
12
+ private
23
13
 
24
- def build_factory(_enabled_features)
25
- @factory.new(@name) { |f| f.target_feature(@feature) }
14
+ def entry_type_name
15
+ :simple
26
16
  end
27
17
 
28
- private
29
-
30
18
  def define_feature(base, context, &body)
31
19
  feature = Class.new(base)
32
- context && feature.attach_context(context)
20
+ attach_shared_context(context, feature)
33
21
  block_given? && feature.class_exec(@name, &body)
34
22
  feature
35
23
  end
24
+
25
+ def target_feature
26
+ @feature
27
+ end
36
28
  end
37
29
  end
38
30
  end
@@ -7,6 +7,12 @@ module RgGen
7
7
  end
8
8
 
9
9
  module RaiseError
10
+ private
11
+
12
+ def error_exception
13
+ ConfigurationError
14
+ end
15
+
10
16
  def error(message, input_value = nil)
11
17
  position = input_value.position if input_value.respond_to?(:position)
12
18
  raise ConfigurationError.new(message, position || @position)
@@ -8,7 +8,7 @@ class Object
8
8
  .then { |v| to.instance_variable_set(variable, v) }
9
9
  end
10
10
 
11
- def singleton_exec(*args, &block)
12
- singleton_class.class_exec(*args, &block)
11
+ def singleton_exec(...)
12
+ singleton_class.class_exec(...)
13
13
  end
14
14
  end
@@ -14,6 +14,7 @@ module RgGen
14
14
  :setup_loader,
15
15
  :load_plugin,
16
16
  :define_loader,
17
+ :define_feature,
17
18
  :define_simple_feature,
18
19
  :define_list_feature,
19
20
  :define_list_item_feature,
@@ -18,12 +18,9 @@ module RgGen
18
18
  @default_value
19
19
  end
20
20
 
21
- def allow_options
22
- @allow_options = true
23
- end
24
-
25
- def allow_options?
26
- @allow_options || false
21
+ def value_format(format = nil)
22
+ @value_format = format if format
23
+ @value_format
27
24
  end
28
25
  end
29
26
 
@@ -48,50 +45,39 @@ module RgGen
48
45
  def process_input_value(input_value)
49
46
  if passive_feature_factory?
50
47
  input_value
51
- elsif self.class.allow_options?
52
- process_input_value_with_options(input_value)
53
48
  else
54
- process_input_value_without_options(input_value)
49
+ process_active_input_value(input_value)
55
50
  end
56
51
  end
57
52
 
58
- def process_input_value_with_options(input_value)
59
- value, options =
60
- if string?(input_value)
61
- parse_string_value(input_value)
62
- else
63
- Array(input_value).then { |values| [values.first, values[1..]] }
53
+ def process_active_input_value(input_value)
54
+ parseed_value, options =
55
+ if self.class.value_format
56
+ parse_input_value(input_value, self.class.value_format)
64
57
  end
65
- value = convert_value(value, input_value.position) || value
66
- InputValue.new(value, options || [], input_value.position)
67
- end
68
-
69
- def parse_string_value(input_value)
70
- value, options = split_string(input_value, ':', 2)
71
- [value, parse_option_string(options)]
58
+ override_input_value(input_value, parseed_value, options) || input_value
72
59
  end
73
60
 
74
- def parse_option_string(option_string)
75
- split_string(option_string, /[,\n]/, 0)&.map do |option|
76
- name, value = split_string(option, ':', 2)
77
- value && [name, value] || name
78
- end
79
- end
61
+ VALUE_PARSERS = {
62
+ value_with_options: ValueWithOptionsParser,
63
+ hash_list: HashListParser
64
+ }.freeze
80
65
 
81
- def split_string(string, separator, limit)
82
- string&.split(separator, limit)&.map(&:strip)
66
+ def parse_input_value(input_value, value_format)
67
+ VALUE_PARSERS[value_format].new(error_exception).parse(input_value)
83
68
  end
84
69
 
85
- def process_input_value_without_options(input_value)
86
- value = convert_value(input_value.value, input_value.position)
87
- value && InputValue.new(value, input_value.position) || input_value
70
+ def override_input_value(input_value, parseed_value, options)
71
+ (convert_value(input_value, parseed_value) || parseed_value)
72
+ &.then { |v| InputValue.new(v, options, input_value.position) }
88
73
  end
89
74
 
90
- def convert_value(value, position)
75
+ def convert_value(input_value, parseed_value)
76
+ value = parseed_value || input_value.value
91
77
  if empty_value?(value)
92
- evaluate_defalt_value(position)
78
+ evaluate_defalt_value(input_value.position)
93
79
  else
94
- convert(value, position)
80
+ convert(value, input_value.position)
95
81
  end
96
82
  end
97
83
 
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RgGen
4
+ module Core
5
+ module InputBase
6
+ class HashListParser < InputValueParser
7
+ def parse(input_value)
8
+ list =
9
+ if string?(input_value)
10
+ split_string(input_value, /^\s*$/, 0)
11
+ elsif hash?(input_value) && !input_value.empty?
12
+ [input_value]
13
+ else
14
+ Array(input_value)
15
+ end
16
+ [list.map { |item| parse_hash(item, input_value) }]
17
+ end
18
+
19
+ private
20
+
21
+ def parse_hash(item, input_value)
22
+ if string?(item)
23
+ parse_string_hash(item)
24
+ else
25
+ Hash(item)
26
+ end
27
+ rescue TypeError, ArgumentError
28
+ error "cannot convert #{item.inspect} into hash", input_value
29
+ end
30
+
31
+ def parse_string_hash(item)
32
+ split_string(item, /[,\n]/, 0)
33
+ .to_h { |element| split_string(element, ':', 2) }
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RgGen
4
+ module Core
5
+ module InputBase
6
+ class InputValueParser
7
+ include Utility::TypeChecker
8
+
9
+ def initialize(exception)
10
+ @exception = exception
11
+ end
12
+
13
+ private
14
+
15
+ def split_string(string, separator, limit)
16
+ string&.split(separator, limit)&.map(&:strip)
17
+ end
18
+
19
+ def error(message, input_value = nil)
20
+ position = input_value.position if input_value.respond_to?(:position)
21
+ raise @exception.new(message, position)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -23,16 +23,16 @@ module RgGen
23
23
 
24
24
  def define(feature)
25
25
  feature.class_exec(self) do |property|
26
- define_method(property.name) do |*args, &block|
27
- property.evaluate(self, args, &block)
26
+ define_method(property.name) do |*args, **keywords, &block|
27
+ property.evaluate(self, *args, **keywords, &block)
28
28
  end
29
29
  end
30
30
  end
31
31
 
32
- def evaluate(feature, args, &block)
32
+ def evaluate(feature, *args, **keywords, &block)
33
33
  feature.verify(@options[:verify]) if @options.key?(:verify)
34
34
  if proxy_property?
35
- proxy_property(feature, args, &block)
35
+ proxy_property(feature, *args, **keywords, &block)
36
36
  else
37
37
  default_property(feature)
38
38
  end
@@ -55,7 +55,7 @@ module RgGen
55
55
  ].any?
56
56
  end
57
57
 
58
- def proxy_property(feature, args, &block)
58
+ def proxy_property(feature, *args, **keywords, &block)
59
59
  receiver, method =
60
60
  if @costom_property
61
61
  [@costom_property.bind(feature), :call]
@@ -64,7 +64,7 @@ module RgGen
64
64
  else
65
65
  [feature, @options[:forward_to]]
66
66
  end
67
- receiver.__send__(method, *args, &block)
67
+ receiver.__send__(method, *args, **keywords, &block)
68
68
  end
69
69
 
70
70
  def default_property(feature)
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RgGen
4
+ module Core
5
+ module InputBase
6
+ class ValueWithOptionsParser < InputValueParser
7
+ def parse(input_value)
8
+ value, options =
9
+ if string?(input_value)
10
+ parse_string_value(input_value)
11
+ else
12
+ Array(input_value).then { |v| [v.first, v[1..]] }
13
+ end
14
+ [value, options || []]
15
+ end
16
+
17
+ private
18
+
19
+ def parse_string_value(input_value)
20
+ value, option_string = split_string(input_value, ':', 2)
21
+ [value, parse_option_string(option_string)]
22
+ end
23
+
24
+ def parse_option_string(option_string)
25
+ split_string(option_string, /[,\n]/, 0)&.map do |option|
26
+ name_value = split_string(option, ':', 2)
27
+ name_value.size == 2 && name_value || name_value.first
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -55,18 +55,16 @@ module RgGen
55
55
  end
56
56
  end
57
57
 
58
- def register(node, object)
59
- obj =
60
- if override_object?(node)
61
- file = node.filename
62
- line = node.start_line + 1
63
- column = node.start_column + 1
64
- position = Position.new(file, line, column)
65
- InputValue.new(object, position)
66
- else
67
- object
68
- end
69
- super(node, obj)
58
+ def accept(node)
59
+ object = super
60
+ if override_object?(node)
61
+ file = node.filename
62
+ line = node.start_line + 1
63
+ column = node.start_column + 1
64
+ InputValue.new(object, Position.new(file, line, column))
65
+ else
66
+ object
67
+ end
70
68
  end
71
69
 
72
70
  private
@@ -100,10 +98,9 @@ module RgGen
100
98
  return result if ::Psych::VERSION >= '3.2.0'
101
99
 
102
100
  if result.match_class?(Hash)
103
- keys = result.keys
104
- keys.each do |key|
105
- result[key.to_sym] = symbolize_names(result.delete(key))
106
- end
101
+ result
102
+ .transform_keys!(&:to_sym)
103
+ .transform_values!(&method(:symbolize_names))
107
104
  elsif result.match_class?(Array)
108
105
  result.map! { |value| symbolize_names(value) }
109
106
  end
@@ -7,6 +7,12 @@ module RgGen
7
7
  end
8
8
 
9
9
  module RaiseError
10
+ private
11
+
12
+ def error_exception
13
+ RegisterMapError
14
+ end
15
+
10
16
  def error(message, input_value = nil)
11
17
  position = input_value.position if input_value.respond_to?(:position)
12
18
  raise RegisterMapError.new(message, position || @position)
@@ -4,6 +4,8 @@ module RgGen
4
4
  module Core
5
5
  module Utility
6
6
  module CodeUtility
7
+ MacroDefinition = Struct.new(:name, :value)
8
+
7
9
  class SourceFile
8
10
  include CodeUtility
9
11
 
@@ -43,6 +45,15 @@ module RgGen
43
45
  include_files([file])
44
46
  end
45
47
 
48
+ def macro_definitions(macros)
49
+ @macro_definitions ||= []
50
+ @macro_definitions.concat(Array(macros))
51
+ end
52
+
53
+ def macro_definition(macro)
54
+ macro_definitions([macro])
55
+ end
56
+
46
57
  def body(&block)
47
58
  @bodies ||= []
48
59
  @bodies << block
@@ -65,6 +76,7 @@ module RgGen
65
76
  @file_header,
66
77
  include_guard_header,
67
78
  include_file_block,
79
+ macro_definition_block,
68
80
  *Array(@bodies),
69
81
  include_guard_footer
70
82
  ].compact
@@ -94,6 +106,19 @@ module RgGen
94
106
  end
95
107
  end
96
108
 
109
+ def macro_definition_block
110
+ @macro_definitions && lambda do
111
+ keyword = self.class.define_keyword
112
+ @macro_definitions.flat_map do |macro|
113
+ if macro.value.nil?
114
+ [keyword, space, macro.name, nl]
115
+ else
116
+ [keyword, space, macro.name, space, macro.value, nl]
117
+ end
118
+ end
119
+ end
120
+ end
121
+
97
122
  def include_guard_footer
98
123
  @guard_macro && (-> { self.class.endif_keyword })
99
124
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module RgGen
4
4
  module Core
5
- VERSION = '0.28.0'
5
+ VERSION = '0.29.0'
6
6
  MAJOR, MINOR, PATCH = VERSION.split('.').map(&:to_i)
7
7
  end
8
8
  end
data/lib/rggen/core.rb CHANGED
@@ -52,6 +52,9 @@ require_relative 'core/input_base/input_matcher'
52
52
  require_relative 'core/input_base/verifier'
53
53
  require_relative 'core/input_base/property'
54
54
  require_relative 'core/input_base/feature'
55
+ require_relative 'core/input_base/input_vaue_parser'
56
+ require_relative 'core/input_base/value_with_options_parser'
57
+ require_relative 'core/input_base/hash_list_parser'
55
58
  require_relative 'core/input_base/feature_factory'
56
59
 
57
60
  require_relative 'core/configuration/input_data'
@@ -99,6 +102,8 @@ require_relative 'core/builder/component_registry'
99
102
  require_relative 'core/builder/loader_registry'
100
103
  require_relative 'core/builder/input_component_registry'
101
104
  require_relative 'core/builder/output_component_registry'
105
+ require_relative 'core/builder/feature_entry_base'
106
+ require_relative 'core/builder/general_feature_entry'
102
107
  require_relative 'core/builder/simple_feature_entry'
103
108
  require_relative 'core/builder/list_feature_entry'
104
109
  require_relative 'core/builder/feature_registry'
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.28.0
4
+ version: 0.29.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: 2022-10-10 00:00:00.000000000 Z
11
+ date: 2023-01-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: docile
@@ -111,7 +111,9 @@ files:
111
111
  - lib/rggen/core/builder/builder.rb
112
112
  - lib/rggen/core/builder/component_entry.rb
113
113
  - lib/rggen/core/builder/component_registry.rb
114
+ - lib/rggen/core/builder/feature_entry_base.rb
114
115
  - lib/rggen/core/builder/feature_registry.rb
116
+ - lib/rggen/core/builder/general_feature_entry.rb
115
117
  - lib/rggen/core/builder/input_component_registry.rb
116
118
  - lib/rggen/core/builder/layer.rb
117
119
  - lib/rggen/core/builder/list_feature_entry.rb
@@ -144,14 +146,17 @@ files:
144
146
  - lib/rggen/core/input_base/component_factory.rb
145
147
  - lib/rggen/core/input_base/feature.rb
146
148
  - lib/rggen/core/input_base/feature_factory.rb
149
+ - lib/rggen/core/input_base/hash_list_parser.rb
147
150
  - lib/rggen/core/input_base/input_data.rb
148
151
  - lib/rggen/core/input_base/input_matcher.rb
149
152
  - lib/rggen/core/input_base/input_value.rb
150
153
  - lib/rggen/core/input_base/input_value_extractor.rb
154
+ - lib/rggen/core/input_base/input_vaue_parser.rb
151
155
  - lib/rggen/core/input_base/json_loader.rb
152
156
  - lib/rggen/core/input_base/loader.rb
153
157
  - lib/rggen/core/input_base/property.rb
154
158
  - lib/rggen/core/input_base/toml_loader.rb
159
+ - lib/rggen/core/input_base/value_with_options_parser.rb
155
160
  - lib/rggen/core/input_base/verifier.rb
156
161
  - lib/rggen/core/input_base/yaml_loader.rb
157
162
  - lib/rggen/core/options.rb
@@ -207,15 +212,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
207
212
  requirements:
208
213
  - - ">="
209
214
  - !ruby/object:Gem::Version
210
- version: '2.6'
215
+ version: '2.7'
211
216
  required_rubygems_version: !ruby/object:Gem::Requirement
212
217
  requirements:
213
218
  - - ">="
214
219
  - !ruby/object:Gem::Version
215
220
  version: '0'
216
221
  requirements: []
217
- rubygems_version: 3.3.7
222
+ rubygems_version: 3.4.1
218
223
  signing_key:
219
224
  specification_version: 4
220
- summary: rggen-core-0.28.0
225
+ summary: rggen-core-0.29.0
221
226
  test_files: []