metanorma-plugin-lutaml 0.6.2 → 0.6.4

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: 56a196838fa30ab8585b1834d115bf6ff99b4b81d33176975b75dc7f5c5cd5bd
4
- data.tar.gz: 458ce39ccac1e11b1dee74289e9e85a06a4ec5fa2faceaa78869ca18cc8dae77
3
+ metadata.gz: e52ac2333cb4e251e5d531e8909d1a763a6f05960ad886136741676639235e44
4
+ data.tar.gz: 7f3e2daffb58c5074928121da9f4951f85a704e1cb8d8e666e5cfcfcdff90e7c
5
5
  SHA512:
6
- metadata.gz: 780fa1199a23d199cb8f04d1a1b9b79d416f8aed0a2b442f02baccd370830d76d80fee12c2061e9424c9dd294059f5709b50a0eac7ac9b24fd4b492f54caa839
7
- data.tar.gz: 1582258a02474a3ee351b935afc686a78ed8c82f1cc72efefde7c003110bfaa8fd4189d979b2070e61509d5d4997208b7644daf529c6e221c9e187e4e3def057
6
+ metadata.gz: bc3b7a23fef7ba9b8b7537ea94d5b28c548b0f55409e4dbf6e8cac0d35742d2126d4831a9bc1747647ac5d9e3c3f4f1ed3d4b00eb0ffeeae0251b65d6301833e
7
+ data.tar.gz: e56cad378a1131c70ebc0a47e2d44cbdba2fda3bc4a56f866a4a3e3b45268eeb02fa859e02d48904a8b4b90fe0699fc99c607853e9509b41221953917ed2a0f0
data/Gemfile CHANGED
@@ -6,8 +6,4 @@ git_source(:github) { |repo| "https://github.com/#{repo}" }
6
6
 
7
7
  gemspec
8
8
 
9
- begin
10
- eval_gemfile("Gemfile.devel")
11
- rescue StandardError
12
- nil
13
- end
9
+ eval_gemfile("Gemfile.devel") rescue nil
data/README.adoc CHANGED
@@ -154,11 +154,11 @@ per-block via a separate YAML file.
154
154
 
155
155
  [source,adoc]
156
156
  ----
157
- :lutaml-express-index: schemas_1; schemas_all.yaml;
157
+ :lutaml-express-index: all_schemas; ../schemas_all.yaml;
158
158
 
159
- [lutaml_express,schemas_1,repo,leveloffset=+1,config_yaml=select.yaml]
159
+ [lutaml_express,all_schemas,context,leveloffset=+1,config_yaml=schemas.yaml]
160
160
  ---
161
- {% assign selected = repo.schemas | where: "selected" %}
161
+ {% assign selected = context.schemas | where: "selected" %}
162
162
  {% render "templates/resources/schema" for selected as schema %}
163
163
  ---
164
164
  ----
@@ -178,14 +178,16 @@ schemas:
178
178
  ...
179
179
  ----
180
180
 
181
- And `select.yaml` only selects 2 schemas:
181
+ And `schemas.yaml` only selects 2 schemas:
182
182
 
183
183
  [source,yaml]
184
184
  ----
185
185
  ---
186
186
  schemas:
187
- - action_schema
188
- - application_context_schema
187
+ action_schema:
188
+ anything: ...
189
+ application_context_schema:
190
+ anything: ...
189
191
  ----
190
192
 
191
193
  The resulting block adds the `select` attribute to every schema of the the
@@ -48,7 +48,7 @@ module Metanorma
48
48
  # When we are dealing with a relative path of a template:
49
49
  # ../path/to/file we need to transform it into
50
50
  # the absolute one because `image::` macro wont understand it other way
51
- prefixed_path = File.absolute_path(prefixed_path) if prefixed_path.start_with?("../")
51
+ prefixed_path = File.absolute_path(prefixed_path) if prefixed_path.start_with?('../')
52
52
  full_path = File.expand_path(prefixed_path)
53
53
  "#{$1}#{$2}#{full_path}#{$4}"
54
54
  end
@@ -15,7 +15,7 @@ module Metanorma
15
15
  end
16
16
 
17
17
  def identify(input)
18
- input.split(/(?=[A-Z])/).map(&:downcase).join("-")
18
+ input.split(/(?=[A-Z])/).map(&:downcase).join('-')
19
19
  end
20
20
  end
21
21
  end
@@ -22,41 +22,35 @@ module Metanorma
22
22
 
23
23
  def full_path(template_path)
24
24
  unless %r{\A[^./][a-zA-Z0-9_/]+\z}.match?(template_path)
25
- raise ::Liquid::FileSystemError,
26
- "Illegal template name '#{template_path}'"
25
+ raise ::Liquid::FileSystemError, "Illegal template name '#{template_path}'"
27
26
  end
28
27
 
29
- result_path = if template_path.include?("/")
30
- roots
31
- .map do |root|
32
- patterns.map do |pattern|
33
- File.join(root, File.dirname(template_path),
34
- pattern % File.basename(template_path))
35
- end
36
- end
37
- .flatten
38
- .find { |path| File.file?(path) }
39
- else
40
- roots
41
- .map do |root|
42
- patterns.map do |pattern|
43
- File.join(root, pattern % template_path)
44
- end
45
- end
46
- .flatten
47
- .find { |path| File.file?(path) }
48
- end
28
+ result_path = if template_path.include?('/')
29
+ roots
30
+ .map do |root|
31
+ patterns.map do |pattern|
32
+ File.join(root, File.dirname(template_path), pattern % File.basename(template_path))
33
+ end
34
+ end
35
+ .flatten
36
+ .find { |path| File.file?(path) }
37
+ else
38
+ roots
39
+ .map do |root|
40
+ patterns.map do |pattern|
41
+ File.join(root, pattern % template_path)
42
+ end
43
+ end
44
+ .flatten
45
+ .find { |path| File.file?(path) }
46
+ end
49
47
 
50
48
  if result_path.nil?
51
- raise ::Liquid::FileSystemError,
52
- "No documents in template path '#{File.expand_path(template_path)}'"
49
+ raise ::Liquid::FileSystemError, "No documents in template path '#{File.expand_path(template_path)}'"
53
50
  end
54
51
 
55
- unless roots.any? do |root|
56
- File.expand_path(result_path).start_with?(File.expand_path(root))
57
- end
58
- raise ::Liquid::FileSystemError,
59
- "Illegal template path '#{File.expand_path(result_path)}'"
52
+ unless roots.any? { |root| File.expand_path(result_path).start_with?(File.expand_path(root)) }
53
+ raise ::Liquid::FileSystemError, "Illegal template path '#{File.expand_path(result_path)}'"
60
54
  end
61
55
 
62
56
  result_path
@@ -16,14 +16,14 @@ module Metanorma
16
16
  REMARKS_ATTRIBUTE = "remarks"
17
17
 
18
18
  def process(document, reader)
19
- r = Asciidoctor::PreprocessorNoIfdefsReader.new(document,
20
- reader.lines)
19
+ r = Asciidoctor::PreprocessorNoIfdefsReader.new(document, reader.lines)
21
20
  input_lines = r.readlines.to_enum
22
21
 
23
22
  has_lutaml = input_lines.any? { |line| lutaml?(line) }
23
+
24
24
  express_indexes = Utils.parse_document_express_indexes(
25
25
  document,
26
- input_lines,
26
+ input_lines
27
27
  )
28
28
 
29
29
  result_content = process_input_lines(
@@ -53,18 +53,18 @@ module Metanorma
53
53
  ::Lutaml::Parser.parse(
54
54
  File.new(
55
55
  Utils.relative_file_path(document, file_path),
56
- encoding: "UTF-8",
57
- ),
56
+ encoding: "UTF-8"
57
+ )
58
58
  )
59
59
  end
60
60
 
61
61
  private
62
62
 
63
63
  def process_input_lines(
64
- document:,
64
+ document:,
65
65
  input_lines:,
66
66
  express_indexes:
67
- )
67
+ )
68
68
 
69
69
  result = []
70
70
  loop do
@@ -73,7 +73,7 @@ module Metanorma
73
73
  document,
74
74
  input_lines,
75
75
  express_indexes,
76
- ),
76
+ )
77
77
  )
78
78
  end
79
79
  result
@@ -99,7 +99,7 @@ module Metanorma
99
99
  index_names: index_names,
100
100
  context_name: context_name,
101
101
  options: options,
102
- indexes: express_indexes,
102
+ indexes: express_indexes
103
103
  )
104
104
  end
105
105
 
@@ -118,36 +118,63 @@ module Metanorma
118
118
  # TODO: decide how to handle expressir multiply file parse as one
119
119
  # object and lutaml
120
120
 
121
- # Does this condition ever happen? That is only if the `lutaml-express-index` condition is not set
122
- if indexes[path]
123
- indexes[path][:serialized_hash] ||= indexes[path][:wrapper].to_liquid
124
- else
121
+ # Does this condition ever happen? That is only if the
122
+ # `lutaml-express-index` condition is not set
123
+ unless indexes[path]
124
+
125
+ full_path = Utils.relative_file_path(document, path)
126
+ unless File.file?(full_path)
127
+ raise StandardError.new(
128
+ "Unable to load EXPRESS index for `#{path}`, " \
129
+ "please define it at `:lutaml-express-index:` or specify " \
130
+ "the full path."
131
+ )
132
+ end
125
133
  wrapper = load_lutaml_file(document, path)
126
134
  indexes[path] = {
127
135
  wrapper: wrapper,
128
- serialized_hash: wrapper.to_liquid,
136
+ serialized_hash: wrapper.to_liquid
129
137
  }
138
+ else
139
+ indexes[path][:serialized_hash] ||= indexes[path][:wrapper].to_liquid
130
140
  end
131
141
 
132
142
  indexes[path]
133
143
  end
134
144
  end
135
145
 
136
- def parse_yaml_config_file(document, file_path)
137
- return nil if file_path.nil?
146
+ def read_config_yaml_file(document, file_path)
147
+ return {} if file_path.nil?
138
148
 
139
149
  relative_file_path = Utils.relative_file_path(document, file_path)
140
- YAML.safe_load(File.read(relative_file_path, encoding: "UTF-8"))
150
+ config_yaml = YAML.safe_load(
151
+ File.read(relative_file_path, encoding: "UTF-8")
152
+ )
153
+
154
+ options = {}
155
+ if config_yaml["schemas"]
156
+ unless config_yaml["schemas"].is_a?(Hash)
157
+ raise StandardError.new(
158
+ "[lutaml_express] attribute `config_yaml` must point to a YAML " \
159
+ "file that has the `schema` key containing a hash."
160
+ )
161
+ end
162
+
163
+ options["selected_schemas"] = config_yaml["schemas"].keys
164
+ end
165
+
166
+ options
141
167
  end
142
168
 
143
- def decorate_schema_object(schema:, document:, indexes:, index_names:,
144
- selected:, options:)
169
+ def decorate_schema_object(schema:, document:, indexes:, index_names:, selected:, options:)
145
170
  # Mark a schema as "selected" with `.selected`
146
171
  schema["selected"] = true if selected
147
172
 
148
173
  # Provide pretty-formatted code under `.formatted`
149
- _, index_found_value = indexes.detect do |_k, _v|
150
- _
174
+ index_found_key, index_found_value = indexes.detect do |k,v|
175
+ found = v[:wrapper].original_document.schemas.detect do |s|
176
+ s.id == schema["id"]
177
+ end
151
178
  end
152
179
 
153
180
  schema["formatted"] = index_found_value[:wrapper].original_document.schemas.detect do |s|
@@ -159,46 +186,44 @@ selected:, options:)
159
186
  schema,
160
187
  options.merge(
161
188
  "relative_path_prefix" =>
162
- Utils.relative_file_path(document,
163
- File.dirname(schema["file"])),
164
- ),
189
+ Utils.relative_file_path(document, File.dirname(schema["file"]))
190
+ )
165
191
  ) || {}
166
192
  end
167
193
 
168
- def render_template(document:, lines:, context_name:, index_names:,
169
- options:, indexes:)
170
- config_yaml_path = options.delete("config_yaml")
171
- config_yaml = if config_yaml_path
172
- parse_yaml_config_file(document, config_yaml_path)
173
- else
174
- {}
175
- end
194
+ def render_template(document:, lines:, context_name:, index_names:, options:, indexes:)
176
195
 
177
- selected_schemas = config_yaml["schemas"]
196
+ config_yaml_path = options.delete("config_yaml")
197
+ config = read_config_yaml_file(document, config_yaml_path)
198
+ selected_schemas = config["selected_schemas"]
178
199
 
179
200
  gather_context_items(
180
201
  index_names: index_names,
181
202
  document: document,
182
- indexes: indexes,
203
+ indexes: indexes
183
204
  ).map do |items|
205
+
184
206
  serialized_hash = items[:serialized_hash]
185
207
 
186
- serialized_hash["schemas"]&.map! do |schema|
187
- decorate_schema_object(
188
- schema: schema,
189
- document: document,
190
- index_names: index_names,
191
- indexes: indexes,
192
- selected: selected_schemas && selected_schemas.include?(schema["id"]),
193
- options: options,
194
- )
208
+ if serialized_hash["schemas"]
209
+ serialized_hash["schemas"].map! do |schema|
210
+
211
+ decorate_schema_object(
212
+ schema: schema,
213
+ document: document,
214
+ index_names: index_names,
215
+ indexes: indexes,
216
+ selected: selected_schemas && selected_schemas.include?(schema["id"]),
217
+ options: options
218
+ )
219
+ end
195
220
  end
196
221
 
197
222
  render_block(
198
223
  document: document,
199
224
  block_lines: lines,
200
225
  context_items: serialized_hash,
201
- context_name: context_name,
226
+ context_name: context_name
202
227
  )
203
228
  end.flatten
204
229
  rescue StandardError => e
@@ -221,8 +246,8 @@ options:, indexes:)
221
246
  key,
222
247
  val&.map do |remark|
223
248
  Metanorma::Plugin::Lutaml::ExpressRemarksDecorator
224
- .call(remark, options)
225
- end,
249
+ .call(remark, options)
250
+ end
226
251
  ]
227
252
  end
228
253
 
@@ -9,7 +9,7 @@ module Metanorma
9
9
  # @example [lutaml_uml_attributes_table,path/to/lutaml,EntityName]
10
10
  class LutamlUmlAttributesTablePreprocessor < LutamlUmlClassPreprocessor
11
11
  MACRO_REGEXP =
12
- /\[lutaml_uml_attributes_table,([^,]+),?([^,]+),?(.+?)?\]/.freeze
12
+ /\[lutaml_uml_attributes_table,([^,]+),?([^,]+),?(.+?)?\]/
13
13
 
14
14
  # rubocop:disable Layout/IndentHeredoc
15
15
  def template(options)
@@ -15,7 +15,7 @@ module Metanorma
15
15
  # @example [lutaml_uml_class,path/to/lutaml,EntityName]
16
16
  class LutamlUmlClassPreprocessor < ::Asciidoctor::Extensions::Preprocessor
17
17
  MACRO_REGEXP =
18
- /\[lutaml_uml_class,([^,]+),?([^,]+),?(.+?)?\]/.freeze
18
+ /\[lutaml_uml_class,([^,]+),?([^,]+),?(.+?)?\]/
19
19
 
20
20
  def get_macro_regexp
21
21
  self.class.const_get(:MACRO_REGEXP)
@@ -109,9 +109,9 @@ module Metanorma
109
109
 
110
110
  <<~TEMPLATE
111
111
  {% if definition.keyword == 'enumeration' %}
112
- #{"#{equalsigns(depth)} Enumeration: {{ definition.name }}" unless skip_headers}
112
+ #{equalsigns(depth) + ' Enumeration: {{ definition.name }}' unless skip_headers}
113
113
  {% else %}
114
- #{"#{equalsigns(depth)} Class: {{ definition.name }}" unless skip_headers}
114
+ #{equalsigns(depth) + ' Class: {{ definition.name }}' unless skip_headers}
115
115
  {% endif %}
116
116
 
117
117
  #{equalsigns(depth + 1)} Description
@@ -16,7 +16,7 @@ module Metanorma
16
16
  class LutamlUmlDatamodelDescriptionPreprocessor <
17
17
  ::Asciidoctor::Extensions::Preprocessor
18
18
  MACRO_REGEXP =
19
- /\[lutaml_uml_datamodel_description,([^,]+),?(.+)?\]/.freeze
19
+ /\[lutaml_uml_datamodel_description,([^,]+),?(.+)?\]/
20
20
  LIQUID_INCLUDE_PATH = File.join(
21
21
  Gem.loaded_specs["metanorma-plugin-lutaml"].full_gem_path,
22
22
  "lib", "metanorma", "plugin", "lutaml", "liquid_templates"
@@ -92,7 +92,7 @@ module Metanorma
92
92
  def fill_in_entities_refs_attributes(document, lutaml_document_wrapper,
93
93
  options)
94
94
  lutaml_document = lutaml_document_wrapper.original_document
95
- options.fetch(RENDER_STYLE_ATTRIBUTE, "default")
95
+ render_style = options.fetch(RENDER_STYLE_ATTRIBUTE, "default")
96
96
  all_children_packages = lutaml_document.packages
97
97
  .map(&:children_packages).flatten
98
98
  package_flat_packages = lambda do |pks|
@@ -31,7 +31,7 @@ module Metanorma
31
31
  # Allow includes for the template
32
32
  include_paths = [
33
33
  Utils.relative_file_path(document, ""),
34
- include_path,
34
+ include_path
35
35
  ].compact
36
36
 
37
37
  liquid_template.registers[:file_system] =
@@ -54,8 +54,8 @@ module Metanorma
54
54
  end
55
55
  end
56
56
 
57
- def load_express_repositories(path:, cache_path:, document:,
58
- force_read: false)
57
+ def load_express_repositories(path:, cache_path:, document:, force_read: false)
58
+
59
59
  cache_full_path = cache_path &&
60
60
  Utils.relative_file_path(document, cache_path)
61
61
 
@@ -72,11 +72,12 @@ force_read: false)
72
72
  save_express_repo_to_cache(
73
73
  cache_full_path,
74
74
  lutaml_wrapper.original_document,
75
- document,
75
+ document
76
76
  )
77
77
  end
78
78
 
79
79
  lutaml_wrapper
80
+
80
81
  rescue Expressir::Error
81
82
  FileUtils.rm_rf(cache_full_path)
82
83
 
@@ -84,8 +85,9 @@ force_read: false)
84
85
  path: path,
85
86
  cache_path: cache_path,
86
87
  document: document,
87
- force_read: true,
88
+ force_read: true
88
89
  )
90
+
89
91
  rescue StandardError => e
90
92
  document.logger.warn("Failed to load #{full_path}: #{e.message}")
91
93
  raise e
@@ -131,6 +133,7 @@ force_read: false)
131
133
  File.new(Utils.relative_file_path(document, path),
132
134
  encoding: "UTF-8")
133
135
  end
136
+
134
137
  ::Lutaml::Parser.parse(files_to_load)
135
138
  end
136
139
 
@@ -156,13 +159,13 @@ force_read: false)
156
159
  lutaml_expressir_wrapper = load_express_repositories(
157
160
  path: path,
158
161
  cache_path: cache,
159
- document: document,
162
+ document: document
160
163
  )
161
164
 
162
165
  if lutaml_expressir_wrapper
163
166
  express_indexes[name] = {
164
167
  wrapper: lutaml_expressir_wrapper,
165
- serialized_hash: nil,
168
+ serialized_hash: nil
166
169
  }
167
170
  end
168
171
  end
@@ -1,7 +1,7 @@
1
1
  module Metanorma
2
2
  module Plugin
3
3
  module Lutaml
4
- VERSION = "0.6.2".freeze
4
+ VERSION = "0.6.4".freeze
5
5
  end
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metanorma-plugin-lutaml
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 0.6.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-05-07 00:00:00.000000000 Z
11
+ date: 2024-05-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asciidoctor