metanorma-standoc 1.9.0 → 1.10.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.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +3 -13
  3. data/.hound.yml +3 -1
  4. data/.rubocop.yml +4 -8
  5. data/lib/asciidoctor/standoc/base.rb +31 -35
  6. data/lib/asciidoctor/standoc/biblio.rng +1 -0
  7. data/lib/asciidoctor/standoc/blocks.rb +25 -9
  8. data/lib/asciidoctor/standoc/blocks_notes.rb +41 -24
  9. data/lib/asciidoctor/standoc/cleanup.rb +59 -84
  10. data/lib/asciidoctor/standoc/cleanup_block.rb +63 -85
  11. data/lib/asciidoctor/standoc/cleanup_boilerplate.rb +28 -15
  12. data/lib/asciidoctor/standoc/cleanup_footnotes.rb +1 -0
  13. data/lib/asciidoctor/standoc/cleanup_image.rb +71 -0
  14. data/lib/asciidoctor/standoc/cleanup_inline.rb +117 -77
  15. data/lib/asciidoctor/standoc/cleanup_maths.rb +36 -27
  16. data/lib/asciidoctor/standoc/cleanup_ref.rb +31 -15
  17. data/lib/asciidoctor/standoc/cleanup_ref_dl.rb +1 -1
  18. data/lib/asciidoctor/standoc/cleanup_reqt.rb +47 -0
  19. data/lib/asciidoctor/standoc/cleanup_section.rb +77 -135
  20. data/lib/asciidoctor/standoc/cleanup_section_names.rb +75 -0
  21. data/lib/asciidoctor/standoc/cleanup_terms.rb +19 -18
  22. data/lib/asciidoctor/standoc/converter.rb +7 -2
  23. data/lib/asciidoctor/standoc/datamodel/plantuml_renderer.rb +67 -66
  24. data/lib/asciidoctor/standoc/front.rb +35 -18
  25. data/lib/asciidoctor/standoc/front_contributor.rb +70 -45
  26. data/lib/asciidoctor/standoc/inline.rb +45 -34
  27. data/lib/asciidoctor/standoc/isodoc.rng +209 -4
  28. data/lib/asciidoctor/standoc/lists.rb +4 -2
  29. data/lib/asciidoctor/standoc/macros.rb +11 -11
  30. data/lib/asciidoctor/standoc/macros_form.rb +63 -0
  31. data/lib/asciidoctor/standoc/macros_plantuml.rb +19 -21
  32. data/lib/asciidoctor/standoc/macros_terms.rb +33 -23
  33. data/lib/asciidoctor/standoc/ref.rb +87 -112
  34. data/lib/asciidoctor/standoc/ref_date_id.rb +62 -0
  35. data/lib/asciidoctor/standoc/ref_sect.rb +20 -17
  36. data/lib/asciidoctor/standoc/section.rb +3 -1
  37. data/lib/asciidoctor/standoc/term_lookup_cleanup.rb +40 -27
  38. data/lib/asciidoctor/standoc/terms.rb +25 -18
  39. data/lib/asciidoctor/standoc/utils.rb +35 -9
  40. data/lib/asciidoctor/standoc/validate.rb +48 -33
  41. data/lib/metanorma-standoc.rb +0 -1
  42. data/lib/metanorma/standoc/version.rb +1 -1
  43. data/metanorma-standoc.gemspec +4 -4
  44. data/spec/asciidoctor/base_spec.rb +701 -508
  45. data/spec/asciidoctor/blocks_spec.rb +831 -738
  46. data/spec/asciidoctor/cleanup_sections_spec.rb +51 -14
  47. data/spec/asciidoctor/cleanup_spec.rb +889 -682
  48. data/spec/asciidoctor/inline_spec.rb +62 -14
  49. data/spec/asciidoctor/isobib_cache_spec.rb +404 -358
  50. data/spec/asciidoctor/lists_spec.rb +149 -137
  51. data/spec/asciidoctor/macros_plantuml_spec.rb +8 -8
  52. data/spec/asciidoctor/macros_spec.rb +923 -503
  53. data/spec/asciidoctor/macros_yaml2text_spec.rb +1 -1
  54. data/spec/asciidoctor/refs_dl_spec.rb +4 -4
  55. data/spec/asciidoctor/refs_spec.rb +1528 -1533
  56. data/spec/asciidoctor/section_spec.rb +405 -299
  57. data/spec/asciidoctor/table_spec.rb +6 -6
  58. data/spec/asciidoctor/validate_spec.rb +342 -304
  59. data/spec/spec_helper.rb +13 -9
  60. data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec.yml +54 -54
  61. data/spec/vcr_cassettes/isobib_get_123.yml +13 -13
  62. data/spec/vcr_cassettes/isobib_get_123_1.yml +25 -25
  63. data/spec/vcr_cassettes/isobib_get_123_1_fr.yml +37 -37
  64. data/spec/vcr_cassettes/isobib_get_123_2001.yml +12 -12
  65. data/spec/vcr_cassettes/isobib_get_124.yml +13 -13
  66. data/spec/vcr_cassettes/rfcbib_get_rfc8341.yml +14 -14
  67. data/spec/vcr_cassettes/separates_iev_citations_by_top_level_clause.yml +46 -46
  68. metadata +16 -15
  69. data/lib/liquid/custom_blocks/key_iterator.rb +0 -21
  70. data/lib/liquid/custom_blocks/with_json_nested_context.rb +0 -18
  71. data/lib/liquid/custom_blocks/with_yaml_nested_context.rb +0 -19
  72. data/lib/liquid/custom_filters/values.rb +0 -7
@@ -0,0 +1,75 @@
1
+ module Asciidoctor
2
+ module Standoc
3
+ module Cleanup
4
+ def get_or_make_title(node)
5
+ unless node.at("./title")
6
+ if node.children.empty?
7
+ node << "<title/>"
8
+ else
9
+ node.children.first.previous = "<title/>"
10
+ end
11
+ end
12
+ node.at("./title")
13
+ end
14
+
15
+ def replace_title(doc, xpath, text, first = false)
16
+ return unless text
17
+
18
+ doc.xpath(xpath).each_with_index do |node, i|
19
+ next if first && !i.zero?
20
+
21
+ title = get_or_make_title(node)
22
+ fn = title.xpath("./fn")
23
+ fn.each(&:remove)
24
+ title.content = text
25
+ fn.each { |n| title << n }
26
+ end
27
+ end
28
+
29
+ def sections_names_cleanup(xml)
30
+ replace_title(xml, "//clause[@type = 'scope']", @i18n&.scope)
31
+ replace_title(xml, "//preface//abstract", @i18n&.abstract)
32
+ replace_title(xml, "//foreword", @i18n&.foreword)
33
+ replace_title(xml, "//introduction", @i18n&.introduction)
34
+ replace_title(xml, "//acknowledgements", @i18n&.acknowledgements)
35
+ section_names_refs_cleanup(xml)
36
+ section_names_terms_cleanup(xml)
37
+ end
38
+
39
+ def section_names_refs_cleanup(xml)
40
+ replace_title(xml, "//references[@normative = 'true']",
41
+ @i18n&.normref, true)
42
+ replace_title(xml, "//references[@normative = 'false']",
43
+ @i18n&.bibliography, true)
44
+ end
45
+
46
+ NO_SYMABBR = "[.//definitions[not(@type)]]".freeze
47
+ SYMABBR = "[.//definitions[@type = 'symbols']]"\
48
+ "[.//definitions[@type = 'abbreviated_terms']]".freeze
49
+ SYMnoABBR = "[.//definitions[@type = 'symbols']]"\
50
+ "[not(.//definitions[@type = 'abbreviated_terms'])]".freeze
51
+ ABBRnoSYM = "[.//definitions[@type = 'abbreviated_terms']]"\
52
+ "[not(.//definitions[@type = 'symbols'])]".freeze
53
+
54
+ def section_names_terms_cleanup(x)
55
+ replace_title(x, "//definitions[@type = 'symbols']", @i18n&.symbols)
56
+ replace_title(x, "//definitions[@type = 'abbreviated_terms']",
57
+ @i18n&.abbrev)
58
+ replace_title(x, "//definitions[not(@type)]", @i18n&.symbolsabbrev)
59
+ replace_title(x, "//terms#{SYMnoABBR} | //clause[.//terms]#{SYMnoABBR}",
60
+ @i18n&.termsdefsymbols, true)
61
+ replace_title(x, "//terms#{ABBRnoSYM} | //clause[.//terms]#{ABBRnoSYM}",
62
+ @i18n&.termsdefabbrev, true)
63
+ replace_title(x, "//terms#{SYMABBR} | //clause[.//terms]#{SYMABBR}",
64
+ @i18n&.termsdefsymbolsabbrev, true)
65
+ replace_title(x, "//terms#{NO_SYMABBR} | //clause[.//terms]#{NO_SYMABBR}",
66
+ @i18n&.termsdefsymbolsabbrev, true)
67
+ replace_title(
68
+ x,
69
+ "//terms[not(.//definitions)] | //clause[.//terms][not(.//definitions)]",
70
+ @i18n&.termsdef, true
71
+ )
72
+ end
73
+ end
74
+ end
75
+ end
@@ -60,15 +60,15 @@ module Asciidoctor
60
60
 
61
61
  def term_children_cleanup(xmldoc)
62
62
  xmldoc.xpath("//term").each do |t|
63
- t.xpath("./termnote").each { |n| t << n.remove }
64
- t.xpath("./termexample").each { |n| t << n.remove }
65
- t.xpath("./termsource").each { |n| t << n.remove }
63
+ %w(termnote termexample termsource).each do |w|
64
+ t.xpath("./#{w}").each { |n| t << n.remove }
65
+ end
66
66
  end
67
- end
67
+ end
68
68
 
69
69
  def termdef_from_termbase(xmldoc)
70
70
  xmldoc.xpath("//term").each do |x|
71
- if c = x.at("./origin/termref") and !x.at("./definition")
71
+ if (c = x.at("./origin/termref")) && !x.at("./definition")
72
72
  x.at("./origin").previous = fetch_termbase(c["base"], c.text)
73
73
  end
74
74
  end
@@ -93,33 +93,34 @@ module Asciidoctor
93
93
  termdomain1_cleanup(xmldoc)
94
94
  termnote_example_cleanup(xmldoc)
95
95
  termdef_subclause_cleanup(xmldoc)
96
- term_children_cleanup(xmldoc)
96
+ term_children_cleanup(xmldoc)
97
97
  termdocsource_cleanup(xmldoc)
98
- end
98
+ end
99
99
 
100
100
  # Indices sort after letter but before any following
101
101
  # letter (x, x_m, x_1, xa); we use colon to force that sort order.
102
102
  # Numbers sort *after* letters; we use thorn to force that sort order.
103
- def symbol_key(x)
104
- key = x.dup
103
+ def symbol_key(sym)
104
+ key = sym.dup
105
105
  key.traverse do |n|
106
106
  next unless n.name == "math"
107
+
107
108
  n.replace(grkletters(MathML2AsciiMath.m2a(n.to_xml)))
108
109
  end
109
110
  ret = Nokogiri::XML(key.to_xml)
110
- HTMLEntities.new.decode(ret.text.downcase).
111
- gsub(/[\[\]\{\}<>\(\)]/, "").gsub(/\s/m, "").
112
- gsub(/[[:punct:]]|[_^]/, ":\\0").gsub(/`/, "").
113
- gsub(/[0-9]+/, "þ\\0")
111
+ HTMLEntities.new.decode(ret.text.downcase)
112
+ .gsub(/[\[\]{}<>()]/, "").gsub(/\s/m, "")
113
+ .gsub(/[[:punct:]]|[_^]/, ":\\0").gsub(/`/, "")
114
+ .gsub(/[0-9]+/, "þ\\0")
114
115
  end
115
-
116
+
116
117
  def grkletters(x)
117
118
  x.gsub(/\b(alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega)\b/i, "&\\1;")
118
119
  end
119
120
 
120
- def extract_symbols_list(dl)
121
+ def extract_symbols_list(dlist)
121
122
  dl_out = []
122
- dl.xpath("./dt | ./dd").each do |dtd|
123
+ dlist.xpath("./dt | ./dd").each do |dtd|
123
124
  if dtd.name == "dt"
124
125
  dl_out << { dt: dtd.remove, key: symbol_key(dtd) }
125
126
  else
@@ -128,7 +129,7 @@ module Asciidoctor
128
129
  end
129
130
  dl_out
130
131
  end
131
-
132
+
132
133
  def symbols_cleanup(docxml)
133
134
  docxml.xpath("//definitions/dl").each do |dl|
134
135
  dl_out = extract_symbols_list(dl)
@@ -136,7 +137,7 @@ module Asciidoctor
136
137
  dl.children = dl_out.map { |d| d[:dt].to_s + d[:dd].to_s }.join("\n")
137
138
  end
138
139
  docxml
139
- end
140
+ end
140
141
  end
141
142
  end
142
143
  end
@@ -41,6 +41,11 @@ module Asciidoctor
41
41
  inline_macro Asciidoctor::Standoc::IndexRangeInlineMacro
42
42
  inline_macro Asciidoctor::Standoc::AddMacro
43
43
  inline_macro Asciidoctor::Standoc::DelMacro
44
+ inline_macro Asciidoctor::Standoc::FormInputMacro
45
+ inline_macro Asciidoctor::Standoc::FormLabelMacro
46
+ inline_macro Asciidoctor::Standoc::FormTextareaMacro
47
+ inline_macro Asciidoctor::Standoc::FormSelectMacro
48
+ inline_macro Asciidoctor::Standoc::FormOptionMacro
44
49
  block Asciidoctor::Standoc::ToDoAdmonitionBlock
45
50
  treeprocessor Asciidoctor::Standoc::ToDoInlineAdmonitionBlock
46
51
  block Asciidoctor::Standoc::PlantUMLBlockMacro
@@ -78,8 +83,8 @@ module Asciidoctor
78
83
  attr_accessor :_file
79
84
  end
80
85
 
81
- def self.inherited(k)
82
- k._file = caller_locations.first.absolute_path
86
+ def self.inherited(konv) # rubocop:disable Lint/MissingSuper
87
+ konv._file = caller_locations(1..1).first.absolute_path
83
88
  end
84
89
 
85
90
  # path to isodoc assets in child gems
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'erb'
3
+ require "erb"
4
4
 
5
5
  module Asciidoctor
6
6
  module Datamodel
7
7
  class PlantumlRenderer
8
- TEMPLATES_PATH = File.expand_path('../views/datamodel', __dir__).freeze
8
+ TEMPLATES_PATH = File.expand_path("../views/datamodel", __dir__).freeze
9
9
 
10
10
  attr_reader :yml, :plantuml_path
11
11
 
@@ -15,23 +15,23 @@ module Asciidoctor
15
15
  end
16
16
 
17
17
  def join_as_plantuml(*ary)
18
- ary.compact.join("\n").sub(/\s+\Z/, '')
18
+ ary.compact.join("\n").sub(/\s+\Z/, "")
19
19
  end
20
20
 
21
21
  def render
22
22
  ERB.new(
23
23
  File.read(
24
- File.join(TEMPLATES_PATH, 'plantuml_representation.adoc.erb')
24
+ File.join(TEMPLATES_PATH, "plantuml_representation.adoc.erb")
25
25
  )
26
26
  ).result(binding)
27
27
  end
28
28
 
29
29
  def diagram_caption
30
- yml['caption']
30
+ yml["caption"]
31
31
  end
32
32
 
33
33
  def imports_yml_to_plantuml
34
- return if empty?(yml, 'imports')
34
+ return if empty?(yml, "imports")
35
35
 
36
36
  <<~TEMPLATE
37
37
  '******* IMPORTS ******************************************************
@@ -40,7 +40,7 @@ module Asciidoctor
40
40
  end
41
41
 
42
42
  def class_defs_yml_to_plantuml
43
- return if empty?(yml, 'classes') && empty?(yml, 'enums')
43
+ return if empty?(yml, "classes") && empty?(yml, "enums")
44
44
 
45
45
  <<~TEMPLATE
46
46
  '******* CLASS DEFINITIONS ********************************************
@@ -52,7 +52,7 @@ module Asciidoctor
52
52
  end
53
53
 
54
54
  def class_groups_yml_to_plantuml
55
- return if empty?(yml, 'groups')
55
+ return if empty?(yml, "groups")
56
56
 
57
57
  <<~TEMPLATE
58
58
  '******* CLASS GROUPS *************************************************
@@ -63,7 +63,7 @@ module Asciidoctor
63
63
  end
64
64
 
65
65
  def class_relations_yml_to_plantuml
66
- return if empty?(yml, 'classes') && empty?(yml, 'relations')
66
+ return if empty?(yml, "classes") && empty?(yml, "relations")
67
67
 
68
68
  <<~TEMPLATE
69
69
  '******* CLASS RELATIONS **********************************************
@@ -75,7 +75,7 @@ module Asciidoctor
75
75
  end
76
76
 
77
77
  def diagram_options_yml_to_plantuml
78
- return if empty?(yml, 'diagram_options')
78
+ return if empty?(yml, "diagram_options")
79
79
 
80
80
  <<~TEMPLATE
81
81
  '******* DIAGRAM SPECIFIC CONFIG **************************************
@@ -86,7 +86,7 @@ module Asciidoctor
86
86
  end
87
87
 
88
88
  def bottom_yml_to_plantuml
89
- return if empty?(yml, 'bottom')
89
+ return if empty?(yml, "bottom")
90
90
 
91
91
  <<~TEMPLATE
92
92
  '******* BOTTOM OVERRIDE CONFIG **************************************
@@ -95,7 +95,7 @@ module Asciidoctor
95
95
  end
96
96
 
97
97
  def fidelity_yml_to_plantuml
98
- return if empty?(yml, 'fidelity')
98
+ return if empty?(yml, "fidelity")
99
99
 
100
100
  <<~TEMPLATE
101
101
  '******* FIDELITY *****************************************************
@@ -133,7 +133,7 @@ module Asciidoctor
133
133
 
134
134
  attributes.map do |(attr_name, attr_hash)|
135
135
  attribute_to_plantuml(attr_name, attr_hash)
136
- end.join('').sub(/\n\Z/, '')
136
+ end.join("").sub(/\n\Z/, "")
137
137
  end
138
138
 
139
139
  def attribute_to_plantuml(attr_name, attr_hash)
@@ -143,9 +143,10 @@ module Asciidoctor
143
143
  end
144
144
 
145
145
  def attribute_cardinality_plantuml(cardinality, with_bracket = true)
146
- return '' if cardinality.nil? ||
147
- (cardinality['min'] == cardinality['max'] &&
148
- cardinality['min'] == 1)
146
+ return "" if cardinality.nil? ||
147
+ (cardinality["min"] == cardinality["max"] &&
148
+ cardinality["min"] == 1)
149
+
149
150
  card = "#{cardinality['min']}..#{cardinality['max']}"
150
151
  return card unless with_bracket
151
152
 
@@ -172,7 +173,7 @@ module Asciidoctor
172
173
  def classes_to_relations_plantuml(classes)
173
174
  output_ary = classes.map do |(class_name, class_hash)|
174
175
  class_hash ||= {}
175
- relations = class_hash['relations']
176
+ relations = class_hash["relations"]
176
177
  relations_to_plantuml(class_name, relations)
177
178
  end
178
179
 
@@ -183,9 +184,9 @@ module Asciidoctor
183
184
  return unless relations
184
185
 
185
186
  output_ary = relations.map do |relation|
186
- source = class_name || relation['source']
187
+ source = class_name || relation["source"]
187
188
  relation_to_plantuml(source,
188
- relation['target'],
189
+ relation["target"],
189
190
  relation)
190
191
  end
191
192
 
@@ -194,41 +195,41 @@ module Asciidoctor
194
195
 
195
196
  def relation_arrow(relationship, relation)
196
197
  [
197
- relationship_type_to_plantuml('source',
198
- relationship['source']['type']),
199
- (relation['direction']).to_s,
200
- relationship_type_to_plantuml('target',
201
- relationship['target']['type'])
202
- ].compact.join('-')
198
+ relationship_type_to_plantuml("source",
199
+ relationship["source"]["type"]),
200
+ (relation["direction"]).to_s,
201
+ relationship_type_to_plantuml("target",
202
+ relationship["target"]["type"]),
203
+ ].compact.join("-")
203
204
  end
204
205
 
205
206
  def relation_label(action)
206
- return '' unless action
207
+ return "" unless action
207
208
 
208
- case action['direction']
209
- when 'source'
209
+ case action["direction"]
210
+ when "source"
210
211
  " : < #{action['verb']}"
211
- when 'target'
212
+ when "target"
212
213
  " : #{action['verb']} >"
213
214
  else
214
- ''
215
+ ""
215
216
  end
216
217
  end
217
218
 
218
219
  def source_arrow_end(source, relationship)
219
220
  source_attribute = relationship_cardinality_to_plantuml(
220
- relationship['source']['attribute']
221
+ relationship["source"]["attribute"]
221
222
  )
222
- [source, source_attribute].join(' ')
223
+ [source, source_attribute].join(" ")
223
224
  end
224
225
 
225
226
  def target_arrow_end(target, relationship, action)
226
227
  target_attribute = relationship_cardinality_to_plantuml(
227
- relationship['target']['attribute']
228
+ relationship["target"]["attribute"]
228
229
  )
229
230
  [
230
- [target_attribute, target].join(' '),
231
- relation_label(action)
231
+ [target_attribute, target].join(" "),
232
+ relation_label(action),
232
233
  ].join
233
234
  end
234
235
 
@@ -239,9 +240,9 @@ module Asciidoctor
239
240
  end
240
241
 
241
242
  def relation_to_plantuml(source, target, relation)
242
- relationship = relation['relationship'] || {}
243
- relationship['source'] ||= {}
244
- relationship['target'] ||= {}
243
+ relationship = relation["relationship"] || {}
244
+ relationship["source"] ||= {}
245
+ relationship["target"] ||= {}
245
246
  relation_output_lines(source, target, relation, relationship)
246
247
  end
247
248
 
@@ -249,22 +250,22 @@ module Asciidoctor
249
250
  output_lines = [
250
251
  source_arrow_end(source, relationship),
251
252
  relation_arrow(relationship, relation),
252
- target_arrow_end(target, relationship, relation['action']),
253
- relation_association(source, target, relationship['association'])
254
- ].join(' ')
253
+ target_arrow_end(target, relationship, relation["action"]),
254
+ relation_association(source, target, relationship["association"]),
255
+ ].join(" ")
255
256
 
256
257
  join_as_plantuml(*output_lines)
257
258
  end
258
259
 
259
260
  def relationship_type_to_plantuml(relation_end, relationship_type)
260
- is_source = (relation_end == 'source')
261
+ is_source = (relation_end == "source")
261
262
  mappings = {
262
- 'direct' => is_source ? '<' : '>',
263
- 'inheritance' => is_source ? '<|' : '|>',
264
- 'composition' => '*',
265
- 'aggregation' => 'o'
263
+ "direct" => is_source ? "<" : ">",
264
+ "inheritance" => is_source ? "<|" : "|>",
265
+ "composition" => "*",
266
+ "aggregation" => "o",
266
267
  }
267
- mappings.fetch(relationship_type, '')
268
+ mappings.fetch(relationship_type, "")
268
269
  end
269
270
 
270
271
  def relationship_cardinality_to_plantuml(attribute)
@@ -273,12 +274,12 @@ module Asciidoctor
273
274
  return unless attribute_name
274
275
 
275
276
  attribute_hash = attribute[attribute_name] || {}
276
- card = attribute_cardinality(attribute_hash['cardinality'])
277
+ card = attribute_cardinality(attribute_hash["cardinality"])
277
278
  "\"+#{attribute_name}#{card}\""
278
279
  end
279
280
 
280
281
  def attribute_cardinality(attribute_cardinality)
281
- cardinality = ''
282
+ cardinality = ""
282
283
  if attribute_cardinality
283
284
  cardinality = attribute_cardinality_plantuml(
284
285
  attribute_cardinality,
@@ -308,7 +309,7 @@ module Asciidoctor
308
309
  end
309
310
 
310
311
  def model_stereotype_to_plantuml(model_stereotype)
311
- return '' unless model_stereotype
312
+ return "" unless model_stereotype
312
313
 
313
314
  " <<#{model_stereotype}>>"
314
315
  end
@@ -325,7 +326,7 @@ module Asciidoctor
325
326
  groups ||= []
326
327
  return if groups.empty?
327
328
 
328
- groups.reduce('') do |output, group|
329
+ groups.reduce("") do |output, group|
329
330
  output += "\ntogether {\n"
330
331
  group.each do |class_name|
331
332
  output += "\nclass #{class_name}\n"
@@ -350,9 +351,9 @@ module Asciidoctor
350
351
  end
351
352
 
352
353
  def format_hidden_class(accum, fidelity_classes, class_hash)
353
- return accum if class_hash['relations'].nil?
354
+ return accum if class_hash["relations"].nil?
354
355
 
355
- class_hash['relations'].each_with_object(accum) do |relation, acc|
356
+ class_hash["relations"].each_with_object(accum) do |relation, acc|
356
357
  format_source_target_relation(relation, fidelity_classes, acc)
357
358
  format_association_relation(relation, fidelity_classes, acc)
358
359
  end
@@ -367,36 +368,36 @@ module Asciidoctor
367
368
  end
368
369
 
369
370
  def format_association_relation(relation, fidelity_classes, acc)
370
- return unless relation['relationship'] &&
371
- relation['relationship']['association']
371
+ return unless relation["relationship"] &&
372
+ relation["relationship"]["association"]
372
373
 
373
- association = relation['relationship']['association']
374
+ association = relation["relationship"]["association"]
374
375
  return unless association && !fidelity_classes.key?(association)
375
376
 
376
377
  acc.merge!(association => true)
377
378
  end
378
379
 
379
380
  def hide_other_classes(fidelity)
380
- return '' if fidelity.nil? || fidelity['classes'].nil?
381
+ return "" if fidelity.nil? || fidelity["classes"].nil?
381
382
 
382
- output = ''
383
- hidden_classes = fidelity['classes']
384
- .reduce({}) do |acc, (_class_name, class_hash)|
385
- format_hidden_class(acc, fidelity['classes'], class_hash)
383
+ output = ""
384
+ hidden_classes = fidelity["classes"]
385
+ .reduce({}) do |acc, (_class_name, class_hash)|
386
+ format_hidden_class(acc, fidelity["classes"], class_hash)
386
387
  end
387
388
 
388
- hidden_classes.keys.each do |hidden_class_name|
389
+ hidden_classes.each_key do |hidden_class_name|
389
390
  output += "\nhide #{hidden_class_name}\n"
390
391
  end
391
392
  output
392
393
  end
393
394
 
394
395
  def fidelity_to_plantuml(fidelity)
395
- return '' if fidelity.nil?
396
+ return "" if fidelity.nil?
396
397
 
397
- output = ''
398
- output += hide_other_classes(fidelity) if fidelity['hideOtherClasses']
399
- output += "\nhide members\n" if fidelity['hideMembers']
398
+ output = ""
399
+ output += hide_other_classes(fidelity) if fidelity["hideOtherClasses"]
400
+ output += "\nhide members\n" if fidelity["hideMembers"]
400
401
  output
401
402
  end
402
403