metanorma-plugin-datastruct 0.3.1 → 0.3.2

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: 9afcd660bc9aa57c185e892b9654545e5665ca4fd1dfe6766936929e4103788f
4
- data.tar.gz: 027c3feec5d5f497a814aa8a6326b15256055cc18c8e148bd823f9d7b5d8a2e5
3
+ metadata.gz: dab2d2b2496a73636d10696dc5324749bfeb054dbeb5cf5944dac0a857327b17
4
+ data.tar.gz: d4790331414d8f4f3f02a3e14e21be2a2d70c4684df658cc329816a5e02b2709
5
5
  SHA512:
6
- metadata.gz: f1d96b5d3628b6995799de038d408df8c6ae26867fac238166f386c3de63ada247154275e7dd42122a2a8493ca5ef7479ec40581d4bc76aa91e9bcd8c8a7d6fc
7
- data.tar.gz: d131b05dcb593a958d1de557a66ea960a6bf412fbe922ab7c19b054efa2fb5e453d162468d0d6cd41817d8f95099c7947e772189688709ea3889e795335db719
6
+ metadata.gz: abb03b267186c6860c7c99d141e179fc5bd8528fcc031e4117a4395b7a197d0ef2e6dbd3e97c87ab2f38211df1e483832477ea19a743e7253532b8dbeec91192
7
+ data.tar.gz: 8e00dceace62d6c6384d8d8c2576ec7185d0930e7f75ea1f11ba20655a6896cf6bc457a60867c8c96a927a17e839a60ac8a84fb789d0786bef74aeaf3b3daa26
data/Gemfile CHANGED
@@ -6,4 +6,8 @@ git_source(:github) { |repo| "https://github.com/#{repo}" }
6
6
 
7
7
  gemspec
8
8
 
9
- eval_gemfile("Gemfile.devel") rescue nil
9
+ begin
10
+ eval_gemfile("Gemfile.devel")
11
+ rescue StandardError
12
+ nil
13
+ end
data/README.adoc CHANGED
@@ -427,7 +427,7 @@ And the block:
427
427
  Where:
428
428
 
429
429
  * file path is `strings.yaml`
430
- * `limit` - how many items we shoudl take from the array
430
+ * `limit` - how many items we should take from the array
431
431
  * `offset` - zero-based offset of item from which start the loop
432
432
  * `{{item}}` gives the value of item in the array
433
433
 
@@ -578,3 +578,117 @@ Last item is dolor.
578
578
  ------
579
579
 
580
580
  --
581
+
582
+
583
+ === Multiple contexts
584
+
585
+ Multiple contexts can be defined in a single block.
586
+
587
+ EXAMPLE:
588
+ --
589
+ Given:
590
+
591
+ strings1.yaml
592
+ [source,yaml]
593
+ ----
594
+ ---
595
+ foo: bar
596
+ dead: beef
597
+ ----
598
+
599
+ strings2.yaml
600
+ [source,yaml]
601
+ ----
602
+ ---
603
+ hello: world
604
+ color: red
605
+ shape: square
606
+ ----
607
+
608
+ And the block:
609
+ [source,asciidoc]
610
+ ------
611
+ [yaml2text,data1=strings1.yaml,data2=strings2.yaml]
612
+ ----
613
+ I'm heading to the {{data1.foo}} for {{data1.dead}}.
614
+
615
+ This is hello {{data2.hello}}.
616
+ The color is {{data2.color}} and the shape is {{data2.shape}}.
617
+
618
+ ----
619
+ ------
620
+
621
+ The file path is `strings1.yaml`, and context name is `data1`.
622
+ `{{data1.foo}}` evaluates to the value of the key `foo` in `data1`.
623
+
624
+ The file path is `strings2.yaml`, and context name is `data2`.
625
+ `{{data2.hello}}` evaluates to the value of the key `hello` in `data2`.
626
+
627
+ Will render as:
628
+ [source,asciidoc]
629
+ ----
630
+ I'm heading to the bar for beef.
631
+
632
+ This is hello world.
633
+ The color is red and the shape is square.
634
+ ----
635
+
636
+ --
637
+
638
+
639
+ === Multiple contexts with mixed json files and yaml files (data2text)
640
+
641
+ Multiple contexts can be mixed with json files and yaml files by using
642
+ `data2text`.
643
+
644
+ EXAMPLE:
645
+ --
646
+ Given:
647
+
648
+ strings1.json
649
+ [source,json]
650
+ ----
651
+ {
652
+ "foo": "bar",
653
+ "dead": "beef"
654
+ }
655
+ ----
656
+
657
+ strings2.yaml
658
+ [source,yaml]
659
+ ----
660
+ ---
661
+ hello: world
662
+ color: red
663
+ shape: square
664
+ ----
665
+
666
+ And the block:
667
+ [source,asciidoc]
668
+ ------
669
+ [data2text,my_json=strings1.json,my_yaml=strings2.yaml]
670
+ ----
671
+ I'm heading to the {{my_json.foo}} for {{my_json.dead}}.
672
+
673
+ This is hello {{my_yaml.hello}}.
674
+ The color is {{my_yaml.color}} and the shape is {{my_yaml.shape}}.
675
+
676
+ ----
677
+ ------
678
+
679
+ The file path is `strings1.json`, and context name is `my_json`.
680
+ `{{my_json.foo}}` evaluates to the value of the key `foo` in `my_json`.
681
+
682
+ The file path is `strings2.yaml`, and context name is `my_yaml`.
683
+ `{{my_yaml.hello}}` evaluates to the value of the key `hello` in `my_yaml`.
684
+
685
+ Will render as:
686
+ [source,asciidoc]
687
+ ----
688
+ I'm heading to the bar for beef.
689
+
690
+ This is hello world.
691
+ The color is red and the shape is square.
692
+ ----
693
+
694
+ --
@@ -6,9 +6,13 @@ module Liquid
6
6
  @context_name, @var_name = markup.split(",").map(&:strip)
7
7
  end
8
8
 
9
- def render(context)
9
+ def render(context) # rubocop:disable Metrics/MethodLength
10
10
  res = ""
11
- iterator = context[@context_name].is_a?(Hash) ? context[@context_name].keys : context[@context_name]
11
+ iterator = if context[@context_name].is_a?(Hash)
12
+ context[@context_name].keys
13
+ else
14
+ context[@context_name]
15
+ end
12
16
  iterator.each.with_index do |key, index|
13
17
  context["index"] = index
14
18
  context[@var_name] = key
@@ -9,7 +9,7 @@ module Liquid
9
9
  def render(context)
10
10
  context_file = context[@context_file_variable].to_s.strip
11
11
  context[@context_name] = JSON.parse(
12
- File.read(context_file, encoding: "utf-8")
12
+ File.read(context_file, encoding: "utf-8"),
13
13
  )
14
14
  super
15
15
  end
@@ -12,7 +12,7 @@ module Liquid
12
12
  File.read(context_file, encoding: "utf-8"),
13
13
  permitted_classes: [Date, Time],
14
14
  permitted_symbols: [],
15
- aliases: true
15
+ aliases: true,
16
16
  )
17
17
  super
18
18
  end
@@ -91,7 +91,7 @@ module Metanorma
91
91
  block_match)
92
92
  end
93
93
 
94
- def collect_internal_block_lines(document, input_lines, end_mark)
94
+ def collect_internal_block_lines(document, input_lines, end_mark) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
95
95
  current_block = []
96
96
  nested_marks = []
97
97
  while (block_line = input_lines.next) != end_mark
@@ -105,7 +105,9 @@ module Metanorma
105
105
  end
106
106
 
107
107
  if nested_marks.include?(block_line)
108
- current_block.push("{% endwith_#{data_file_type}_nested_context %}")
108
+ current_block.push(
109
+ "{% endwith_#{data_file_type}_nested_context %}",
110
+ )
109
111
  next nested_marks.delete(block_line)
110
112
  end
111
113
  current_block.push(block_line)
@@ -127,9 +129,16 @@ module Metanorma
127
129
  TEMPLATE
128
130
  end
129
131
 
130
- def parse_template(document, current_block, block_match)
131
- transformed_liquid_lines = current_block
132
- .map(&method(:transform_line_liquid))
132
+ def parse_template(document, current_block, block_match) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
133
+ transformed_liquid_lines = current_block.map do |x|
134
+ transform_line_liquid(x)
135
+ end
136
+
137
+ if block_match[1].include?("=")
138
+ return content_from_multiple_contexts(
139
+ document, block_match, transformed_liquid_lines
140
+ )
141
+ end
133
142
 
134
143
  context_items = if block_match[1].start_with?("#")
135
144
  content_from_anchor(document, block_match[1][1..-1])
@@ -139,17 +148,37 @@ module Metanorma
139
148
 
140
149
  return if context_items.nil?
141
150
 
151
+ contexts = { block_match[2].strip => context_items }
152
+
142
153
  parse_context_block(document: document,
143
154
  context_lines: transformed_liquid_lines,
144
- context_items: context_items,
145
- context_name: block_match[2].strip)
155
+ contexts: contexts)
146
156
  rescue StandardError => e
147
157
  ::Metanorma::Util.log("Failed to parse #{config[:block_name]} \
148
158
  block: #{e.message}", :error)
149
159
  []
150
160
  end
151
161
 
152
- def transform_line_liquid(line)
162
+ def content_from_multiple_contexts(document, block_match, # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
163
+ transformed_liquid_lines)
164
+ contexts = {}
165
+ (1..block_match.size - 1).each do |i|
166
+ context_and_path = block_match[i].strip
167
+ context_name, path = context_and_path.split("=")
168
+ context_items = content_from_file(document, path)
169
+ contexts[context_name] = context_items
170
+ end
171
+
172
+ parse_context_block(document: document,
173
+ context_lines: transformed_liquid_lines,
174
+ contexts: contexts)
175
+ rescue StandardError => e
176
+ ::Metanorma::Util.log("Failed to parse #{config[:block_name]} \
177
+ block: #{e.message}", :error)
178
+ []
179
+ end
180
+
181
+ def transform_line_liquid(line) # rubocop:disable Metrics/MethodLength
153
182
  if line.match?(BLOCK_START_REGEXP)
154
183
  line.gsub!(BLOCK_START_REGEXP, '{% keyiterator \1, \2 %}')
155
184
  end
@@ -166,28 +195,23 @@ module Metanorma
166
195
  '{% assign custom_value = \1 | values %}{{custom_value\2}}')
167
196
  end
168
197
 
169
- def parse_context_block(context_lines:,
170
- context_items:,
171
- context_name:,
172
- document:)
198
+ def parse_context_block(context_lines:, contexts:, document:)
173
199
  render_result, errors = render_liquid_string(
174
200
  template_string: context_lines.join("\n"),
175
- context_items: context_items,
176
- context_name: context_name,
201
+ contexts: contexts,
177
202
  document: document,
178
203
  )
179
204
  notify_render_errors(document, errors)
180
205
  render_result.split("\n")
181
206
  end
182
207
 
183
- def render_liquid_string(template_string:, context_items:,
184
- context_name:, document:)
208
+ def render_liquid_string(template_string:, contexts:, document:)
185
209
  liquid_template = Liquid::Template.parse(template_string)
186
210
  # Allow includes for the template
187
211
  liquid_template.registers[:file_system] =
188
212
  ::Liquid::LocalFileSystem.new(relative_file_path(document, ""))
189
213
  rendered_string = liquid_template
190
- .render(context_name => context_items,
214
+ .render(contexts,
191
215
  strict_variables: true,
192
216
  error_mode: :warn)
193
217
  [rendered_string, liquid_template.errors]
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json"
4
+ require "yaml"
5
+
6
+ module Metanorma
7
+ module Plugin
8
+ module Datastruct
9
+ module Content
10
+ protected
11
+
12
+ # https://ruby-doc.org/stdlib-2.5.1/libdoc/psych/rdoc/Psych.html#method-c-safe_load
13
+ def yaml_content_from_file(document, file_path) # rubocop:disable Metrics/MethodLength
14
+ resolved_file_path = relative_file_path(document, file_path)
15
+
16
+ unless File.exist?(resolved_file_path)
17
+ ::Metanorma::Util.log(
18
+ "YAML file referenced in [yaml2text] block not found: " \
19
+ "#{resolved_file_path}", :error
20
+ )
21
+ return
22
+ end
23
+
24
+ YAML.safe_load(
25
+ File.read(resolved_file_path, encoding: "UTF-8"),
26
+ permitted_classes: [Date, Time],
27
+ permitted_symbols: [],
28
+ aliases: true,
29
+ )
30
+ end
31
+
32
+ def yaml_content_from_anchor(document, anchor)
33
+ YAML.safe_load(
34
+ document.attributes["source_blocks"][anchor],
35
+ permitted_classes: [Date, Time],
36
+ permitted_symbols: [],
37
+ aliases: true,
38
+ )
39
+ end
40
+
41
+ def json_content_from_file(document, file_path)
42
+ JSON.parse(File.read(relative_file_path(document, file_path),
43
+ encoding: "UTF-8"))
44
+ end
45
+
46
+ def json_content_from_anchor(document, anchor)
47
+ JSON.parse(document.attributes["source_blocks"][anchor])
48
+ end
49
+
50
+ def content_from_file(document, file_path)
51
+ if json_file?(file_path)
52
+ json_content_from_file(document, file_path)
53
+ else
54
+ yaml_content_from_file(document, file_path)
55
+ end
56
+ end
57
+
58
+ def content_from_anchor(document, anchor)
59
+ if json_content?(document.attributes["source_blocks"][anchor])
60
+ json_content_from_anchor(document, anchor)
61
+ else
62
+ yaml_content_from_anchor(document, anchor)
63
+ end
64
+ end
65
+
66
+ def json_file?(file_path)
67
+ file_path.end_with?(".json")
68
+ end
69
+
70
+ def json_content?(content)
71
+ content.start_with?("{", "[")
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "content"
4
+ require "metanorma/plugin/datastruct/base_structured_text_preprocessor"
5
+
6
+ module Metanorma
7
+ module Plugin
8
+ module Datastruct
9
+ class Data2TextPreprocessor < BaseStructuredTextPreprocessor
10
+ include Content
11
+ # search document for block `data2text`
12
+ # after that take template from block and read file into this template
13
+ # example:
14
+ # [data2text,my_yaml=foobar.yaml,my_json=foobar.json]
15
+ # ----
16
+ # === {foobar.name}
17
+ # {foobar.desc}
18
+ #
19
+ # {my_json.symbol}:: {my_json.symbol_def}
20
+ # ----
21
+ #
22
+ # with content of `foobar.yaml` file equal to:
23
+ # - name: spaghetti
24
+ # desc: wheat noodles of 9mm diameter
25
+ #
26
+ # and content of `foobar.json` file equal to:
27
+ # {
28
+ # "symbol": "SPAG",
29
+ # "symbol_def": "the situation is message like spaghetti",
30
+ # }
31
+ #
32
+ # will produce:
33
+ # === spaghetti
34
+ # wheat noodles of 9mm diameter
35
+ #
36
+ # SPAG:: the situation is message like spaghetti
37
+
38
+ def initialize(config = {})
39
+ super
40
+ @config[:block_name] = "data2text"
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -1,16 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "json"
3
+ require_relative "content"
4
4
  require "metanorma/plugin/datastruct/base_structured_text_preprocessor"
5
5
 
6
6
  module Metanorma
7
7
  module Plugin
8
8
  module Datastruct
9
9
  class Json2TextPreprocessor < BaseStructuredTextPreprocessor
10
- # search document for block `yaml2text`
10
+ include Content
11
+ # search document for block `json2text`
11
12
  # after that take template from block and read file into this template
12
13
  # example:
13
- # [yaml2text,foobar.yaml]
14
+ # [json2text,foobar.json]
14
15
  # ----
15
16
  # === {item.name}
16
17
  # {item.desc}
@@ -18,33 +19,24 @@ module Metanorma
18
19
  # {item.symbol}:: {item.symbol_def}
19
20
  # ----
20
21
  #
21
- # with content of `foobar.yaml` file equal to:
22
- # - name: spaghetti
23
- # desc: wheat noodles of 9mm diameter
24
- # symbol: SPAG
25
- # symbol_def: the situation is message like spaghetti at a kid's
22
+ # with content of `foobar.json` file equal to:
23
+ # {
24
+ # "name": "spaghetti",
25
+ # "desc": "wheat noodles of 9mm diameter".
26
+ # "symbol": "SPAG",
27
+ # "symbol_def": "the situation is message like spaghetti",
28
+ # }
26
29
  #
27
30
  # will produce:
28
31
  # === spaghetti
29
32
  # wheat noodles of 9mm diameter
30
33
  #
31
- # SPAG:: the situation is message like spaghetti at a kid's meal
34
+ # SPAG:: the situation is message like spaghetti
32
35
 
33
36
  def initialize(config = {})
34
37
  super
35
38
  @config[:block_name] = "json2text"
36
39
  end
37
-
38
- protected
39
-
40
- def content_from_file(document, file_path)
41
- JSON.parse(File.read(relative_file_path(document, file_path),
42
- encoding: "UTF-8"))
43
- end
44
-
45
- def content_from_anchor(document, anchor)
46
- JSON.parse(document.attributes["source_blocks"][anchor])
47
- end
48
40
  end
49
41
  end
50
42
  end
@@ -27,7 +27,7 @@ module Metanorma
27
27
  new(document, input_lines).extract
28
28
  end
29
29
 
30
- def extract
30
+ def extract # rubocop:disable Metrics/AbcSize
31
31
  lines = @input_lines.to_enum
32
32
 
33
33
  loop do
@@ -1,7 +1,7 @@
1
1
  module Metanorma
2
2
  module Plugin
3
3
  module Datastruct
4
- VERSION = "0.3.1".freeze
4
+ VERSION = "0.3.2".freeze
5
5
  end
6
6
  end
7
7
  end
@@ -1,12 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "yaml"
3
+ require_relative "content"
4
4
  require "metanorma/plugin/datastruct/base_structured_text_preprocessor"
5
5
 
6
6
  module Metanorma
7
7
  module Plugin
8
8
  module Datastruct
9
9
  class Yaml2TextPreprocessor < BaseStructuredTextPreprocessor
10
+ include Content
10
11
  # search document for block `yaml2text`
11
12
  # after that take template from block and read file into this template
12
13
  # example:
@@ -34,34 +35,6 @@ module Metanorma
34
35
  super
35
36
  @config[:block_name] = "yaml2text"
36
37
  end
37
-
38
- protected
39
-
40
- # https://ruby-doc.org/stdlib-2.5.1/libdoc/psych/rdoc/Psych.html#method-c-safe_load
41
- def content_from_file(document, file_path)
42
- resolved_file_path = relative_file_path(document, file_path)
43
-
44
- unless File.exist?(resolved_file_path)
45
- ::Metanorma::Util.log("YAML file referenced in [yaml2text] block not found: #{resolved_file_path}", :error)
46
- return
47
- end
48
-
49
- YAML.safe_load(
50
- File.read(resolved_file_path, encoding: "UTF-8"),
51
- permitted_classes: [Date, Time],
52
- permitted_symbols: [],
53
- aliases: true,
54
- )
55
- end
56
-
57
- def content_from_anchor(document, anchor)
58
- YAML.safe_load(
59
- document.attributes["source_blocks"][anchor],
60
- permitted_classes: [Date, Time],
61
- permitted_symbols: [],
62
- aliases: true,
63
- )
64
- end
65
38
  end
66
39
  end
67
40
  end
@@ -1,6 +1,7 @@
1
1
  require "metanorma/plugin/datastruct/version"
2
2
  require "metanorma/plugin/datastruct/json2_text_preprocessor"
3
3
  require "metanorma/plugin/datastruct/yaml2_text_preprocessor"
4
+ require "metanorma/plugin/datastruct/data2_text_preprocessor"
4
5
 
5
6
  module Metanorma
6
7
  module Plugin
@@ -15,7 +15,8 @@ Gem::Specification.new do |spec|
15
15
  spec.license = "BSD-2-Clause"
16
16
 
17
17
  # Specify which files should be added to the gem when it is released.
18
- # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
18
+ # The `git ls-files -z` loads the files in the RubyGem that have been added
19
+ # into git.
19
20
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
20
21
  `git ls-files -z`.split("\x0").reject do |f|
21
22
  f.match(%r{^(test|spec|features)/})
@@ -25,6 +26,8 @@ Gem::Specification.new do |spec|
25
26
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
26
27
  spec.require_paths = ["lib"]
27
28
 
29
+ spec.required_ruby_version = ">= 2.7.0" # rubocop:disable Gemspec/RequiredRubyVersion
30
+
28
31
  spec.add_dependency "asciidoctor", "~> 2.0.0"
29
32
  spec.add_dependency "isodoc"
30
33
  spec.add_dependency "relaton-cli"
@@ -35,7 +38,8 @@ Gem::Specification.new do |spec|
35
38
  spec.add_development_dependency "metanorma-standoc"
36
39
  spec.add_development_dependency "rake", "~> 13"
37
40
  spec.add_development_dependency "rspec", "~> 3.6"
38
- spec.add_development_dependency "rubocop", "= 0.54.0"
41
+ spec.add_development_dependency "rubocop", "~> 1.58"
42
+ spec.add_development_dependency "rubocop-performance", "~> 1.19"
39
43
  spec.add_development_dependency "simplecov", "~> 0.15"
40
44
  spec.add_development_dependency "timecop", "~> 0.9"
41
45
  spec.add_development_dependency "vcr", "~> 6.1.0"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metanorma-plugin-datastruct
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-03-06 00:00:00.000000000 Z
11
+ date: 2025-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asciidoctor
@@ -140,16 +140,30 @@ dependencies:
140
140
  name: rubocop
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - '='
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '1.58'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
144
151
  - !ruby/object:Gem::Version
145
- version: 0.54.0
152
+ version: '1.58'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rubocop-performance
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '1.19'
146
160
  type: :development
147
161
  prerelease: false
148
162
  version_requirements: !ruby/object:Gem::Requirement
149
163
  requirements:
150
- - - '='
164
+ - - "~>"
151
165
  - !ruby/object:Gem::Version
152
- version: 0.54.0
166
+ version: '1.19'
153
167
  - !ruby/object:Gem::Dependency
154
168
  name: simplecov
155
169
  requirement: !ruby/object:Gem::Requirement
@@ -247,6 +261,8 @@ files:
247
261
  - lib/liquid/custom_filters/values.rb
248
262
  - lib/metanorma-plugin-datastruct.rb
249
263
  - lib/metanorma/plugin/datastruct/base_structured_text_preprocessor.rb
264
+ - lib/metanorma/plugin/datastruct/content.rb
265
+ - lib/metanorma/plugin/datastruct/data2_text_preprocessor.rb
250
266
  - lib/metanorma/plugin/datastruct/json2_text_preprocessor.rb
251
267
  - lib/metanorma/plugin/datastruct/source_extractor.rb
252
268
  - lib/metanorma/plugin/datastruct/version.rb
@@ -265,7 +281,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
265
281
  requirements:
266
282
  - - ">="
267
283
  - !ruby/object:Gem::Version
268
- version: '0'
284
+ version: 2.7.0
269
285
  required_rubygems_version: !ruby/object:Gem::Requirement
270
286
  requirements:
271
287
  - - ">="