dcc 0.2.0 → 0.2.1

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 (167) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +19 -0
  3. data/.github/workflows/release.yml +28 -0
  4. data/.gitignore +4 -0
  5. data/.rubocop_todo.yml +560 -10
  6. data/CHANGELOG.adoc +34 -1
  7. data/CONTRIBUTING.adoc +8 -1
  8. data/Gemfile +5 -7
  9. data/README.adoc +162 -7
  10. data/dcc.gemspec +8 -2
  11. data/docs/schema-versions.adoc +20 -7
  12. data/examples/build_minimal_dcc.rb +0 -0
  13. data/examples/convert_all_formats.rb +2 -1
  14. data/examples/parse_and_inspect.rb +0 -0
  15. data/examples/quantity_math_demo.rb +7 -7
  16. data/examples/validate_full.rb +1 -1
  17. data/lib/dcc/base/calibration_laboratory.rb +2 -1
  18. data/lib/dcc/base/condition.rb +5 -2
  19. data/lib/dcc/base/core_data.rb +8 -3
  20. data/lib/dcc/base/formula.rb +3 -3
  21. data/lib/dcc/base/identification.rb +6 -3
  22. data/lib/dcc/base/mathml.rb +33 -0
  23. data/lib/dcc/base/quantity.rb +2 -1
  24. data/lib/dcc/base/resp_person.rb +4 -2
  25. data/lib/dcc/base/text.rb +1 -1
  26. data/lib/dcc/base.rb +2 -1
  27. data/lib/dcc/builder/dsl.rb +1 -1
  28. data/lib/dcc/builder/session.rb +16 -14
  29. data/lib/dcc/builder.rb +3 -3
  30. data/lib/dcc/cli/cli.rb +36 -18
  31. data/lib/dcc/cli/formatters.rb +35 -7
  32. data/lib/dcc/cli.rb +1 -1
  33. data/lib/dcc/context_configuration.rb +2 -1
  34. data/lib/dcc/context_options.rb +4 -2
  35. data/lib/dcc/convert/csv.rb +27 -9
  36. data/lib/dcc/convert/html.rb +26 -110
  37. data/lib/dcc/convert/json.rb +10 -7
  38. data/lib/dcc/convert/liquid_filters.rb +58 -0
  39. data/lib/dcc/convert/result.rb +1 -1
  40. data/lib/dcc/convert/templates/report.liquid +250 -0
  41. data/lib/dcc/convert/yaml.rb +1 -1
  42. data/lib/dcc/convert.rb +1 -0
  43. data/lib/dcc/diff/change.rb +1 -1
  44. data/lib/dcc/diff/result.rb +8 -4
  45. data/lib/dcc/diff.rb +43 -11
  46. data/lib/dcc/error.rb +7 -0
  47. data/lib/dcc/extract/file.rb +3 -4
  48. data/lib/dcc/extract/ring.rb +1 -1
  49. data/lib/dcc/extract.rb +1 -1
  50. data/lib/dcc/i18n/text_lookup.rb +8 -4
  51. data/lib/dcc/i18n.rb +1 -1
  52. data/lib/dcc/inspect/report.rb +51 -14
  53. data/lib/dcc/inspect.rb +1 -1
  54. data/lib/dcc/migrate/route.rb +44 -0
  55. data/lib/dcc/migrate/v2_to_v3.rb +445 -0
  56. data/lib/dcc/migrate.rb +130 -26
  57. data/lib/dcc/plugin/base.rb +64 -0
  58. data/lib/dcc/plugin/registry.rb +7 -2
  59. data/lib/dcc/plugin.rb +6 -2
  60. data/lib/dcc/quantity_format/formatter.rb +16 -10
  61. data/lib/dcc/quantity_format.rb +1 -1
  62. data/lib/dcc/quantity_math/quantity.rb +1 -1
  63. data/lib/dcc/quantity_math/real.rb +6 -6
  64. data/lib/dcc/quantity_math.rb +1 -1
  65. data/lib/dcc/schema/version.rb +2 -2
  66. data/lib/dcc/server/app.html +282 -0
  67. data/lib/dcc/server/app.rb +171 -87
  68. data/lib/dcc/server/demo_cert.xml +244 -0
  69. data/lib/dcc/server/storage/entry.rb +1 -1
  70. data/lib/dcc/server/storage/memory.rb +3 -2
  71. data/lib/dcc/server/storage.rb +1 -1
  72. data/lib/dcc/server.rb +1 -1
  73. data/lib/dcc/si/base/complex.rb +1 -1
  74. data/lib/dcc/si/base/complex_list_xml_list.rb +1 -1
  75. data/lib/dcc/si/base/constant.rb +1 -1
  76. data/lib/dcc/si/base/coverage_interval.rb +36 -0
  77. data/lib/dcc/si/base/coverage_interval_mu.rb +1 -1
  78. data/lib/dcc/si/base/expanded_mu.rb +1 -1
  79. data/lib/dcc/si/base/expanded_unc.rb +34 -0
  80. data/lib/dcc/si/base/expanded_unc_xml_list.rb +3 -2
  81. data/lib/dcc/si/base/hybrid.rb +3 -2
  82. data/lib/dcc/si/base/measurement_uncertainty_univariate.rb +1 -1
  83. data/lib/dcc/si/base/real.rb +13 -3
  84. data/lib/dcc/si/base/real_list_xml_list.rb +5 -3
  85. data/lib/dcc/si/base/si_list.rb +3 -2
  86. data/lib/dcc/si/base/standard_mu.rb +1 -1
  87. data/lib/dcc/si/base.rb +5 -2
  88. data/lib/dcc/si/v1/coverage_interval.rb +8 -0
  89. data/lib/dcc/si/v1/expanded_unc.rb +1 -16
  90. data/lib/dcc/si/v1/measurement_uncertainty_univariate.rb +2 -1
  91. data/lib/dcc/si/v1.rb +5 -2
  92. data/lib/dcc/si/v2/coverage_interval.rb +8 -0
  93. data/lib/dcc/si/v2/coverage_interval_mu_xml_list.rb +4 -2
  94. data/lib/dcc/si/v2/expanded_mu_xml_list.rb +2 -1
  95. data/lib/dcc/si/v2/expanded_unc.rb +8 -0
  96. data/lib/dcc/si/v2/measurement_uncertainty_univariate.rb +2 -1
  97. data/lib/dcc/si/v2.rb +8 -3
  98. data/lib/dcc/signature/result.rb +2 -2
  99. data/lib/dcc/signature/signer.rb +31 -18
  100. data/lib/dcc/signature/verifier.rb +23 -21
  101. data/lib/dcc/signature.rb +1 -1
  102. data/lib/dcc/transform/result.rb +1 -1
  103. data/lib/dcc/transform/xslt.rb +22 -12
  104. data/lib/dcc/transform.rb +5 -4
  105. data/lib/dcc/type/base64_binary.rb +5 -3
  106. data/lib/dcc/type/decimal_xml_list.rb +99 -13
  107. data/lib/dcc/type/iso_country_code.rb +3 -2
  108. data/lib/dcc/type/iso_language_code.rb +3 -2
  109. data/lib/dcc/type/schema_version.rb +3 -2
  110. data/lib/dcc/type/si_unit.rb +3 -2
  111. data/lib/dcc/type_guards.rb +3 -3
  112. data/lib/dcc/v2/calibration_laboratory.rb +2 -1
  113. data/lib/dcc/v2/condition.rb +22 -1
  114. data/lib/dcc/v2/configuration.rb +1 -1
  115. data/lib/dcc/v2/digital_calibration_certificate.rb +2 -1
  116. data/lib/dcc/v2/identification.rb +14 -1
  117. data/lib/dcc/v2/mathml.rb +8 -0
  118. data/lib/dcc/v2/measurement_meta_data_list.rb +2 -1
  119. data/lib/dcc/v2/quantity.rb +4 -2
  120. data/lib/dcc/v2.rb +4 -2
  121. data/lib/dcc/v3/calibration_laboratory.rb +2 -1
  122. data/lib/dcc/v3/configuration.rb +1 -1
  123. data/lib/dcc/v3/digital_calibration_certificate.rb +2 -1
  124. data/lib/dcc/v3/mathml.rb +8 -0
  125. data/lib/dcc/v3/measurement_meta_data_list.rb +2 -1
  126. data/lib/dcc/v3/quantity.rb +4 -2
  127. data/lib/dcc/v3.rb +12 -2
  128. data/lib/dcc/validate/business_rules.rb +23 -9
  129. data/lib/dcc/validate/issue.rb +2 -1
  130. data/lib/dcc/validate/result.rb +6 -4
  131. data/lib/dcc/validate/schematron/profile.rb +73 -18
  132. data/lib/dcc/validate/schematron/rule.rb +13 -3
  133. data/lib/dcc/validate/schematron/rules/administrative_data_completeness.rb +11 -4
  134. data/lib/dcc/validate/schematron/rules/base.rb +1 -2
  135. data/lib/dcc/validate/schematron/rules/date_range_check.rb +11 -5
  136. data/lib/dcc/validate/schematron/rules/id_refid_linking.rb +0 -3
  137. data/lib/dcc/validate/schematron/rules/influence_conditions_placement.rb +22 -12
  138. data/lib/dcc/validate/schematron/rules/iso_code_validation.rb +31 -14
  139. data/lib/dcc/validate/schematron/rules/language_code_dedup.rb +12 -5
  140. data/lib/dcc/validate/schematron/rules/non_si_declaration.rb +7 -4
  141. data/lib/dcc/validate/schematron/rules/release_format_check.rb +7 -4
  142. data/lib/dcc/validate/schematron/rules/schema_version_check.rb +13 -9
  143. data/lib/dcc/validate/schematron/rules/uncertainty_consistency.rb +39 -10
  144. data/lib/dcc/validate/schematron/rules/unit_format_check.rb +2 -3
  145. data/lib/dcc/validate/schematron/rules/used_methods_placement.rb +15 -10
  146. data/lib/dcc/validate/schematron/rules/used_software_placement.rb +15 -10
  147. data/lib/dcc/validate/schematron/rules/xml_list_spacing.rb +4 -3
  148. data/lib/dcc/validate/schematron/rules.rb +28 -14
  149. data/lib/dcc/validate/schematron.rb +1 -1
  150. data/lib/dcc/validate/xsd.rb +9 -3
  151. data/lib/dcc/validate.rb +1 -1
  152. data/lib/dcc/version.rb +1 -1
  153. data/lib/dcc/versioned_parser.rb +1 -1
  154. data/lib/dcc.rb +55 -7
  155. data/sample_dcc.xml +140 -0
  156. data/web/index.html +12 -0
  157. data/web/package-lock.json +1599 -0
  158. data/web/package.json +22 -0
  159. data/web/src/App.vue +349 -0
  160. data/web/src/lib/builder.ts +171 -0
  161. data/web/src/lib/dcc.ts +338 -0
  162. data/web/src/lib/units.json +5581 -0
  163. data/web/src/main.ts +5 -0
  164. data/web/src/style.css +27 -0
  165. data/web/tsconfig.json +15 -0
  166. data/web/vite.config.ts +14 -0
  167. metadata +125 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 20194e78152501f174cc4043818c81319b23e7daf7cd18ab37277ea2cf1d8efe
4
- data.tar.gz: a26781f5b6c988f2fa45b90c5ebc288e858513fc3e4a88d7a726df15269879c0
3
+ metadata.gz: 8fd7d7c99a99c2c731f5ba45311efdc2a5289f40b84868017aae775596f99052
4
+ data.tar.gz: 91eb8fe3f98be477dcc166df3e34ce16d804bd0c025740681d0d3f1ba54ecffa
5
5
  SHA512:
6
- metadata.gz: 19c04dbb79e6b417827093efe6f3304c88bf7bb8d4ff504669f19b33e4f0b78491f48675d4db885d84abf03feff78e7a51ac4f989f418a8ed0065a9d223fb1e9
7
- data.tar.gz: 5b92f29ff4422d1f9c73ac60a7e2b1b6a2eb5c8405cd0e755ad38699df56c8327ef6325c3ef19b5f761b5bed836ffdf5fea284e9624c2dc8baa9eea1626c2684
6
+ metadata.gz: 75a3b13cf4ab4a57a23d053339827eb9d34d23137afc7410e046b0db77aea50f46093bf3702c0a42db5fa790602dda39fd1a76492cef5072c3eda60f95491bcc
7
+ data.tar.gz: 34917d4371a984e8a6ed7b31ebda92d5f590297e9f85b58408a5285081f32227e26eff91ea2805ff3762aa4705894c2370fee58971a40332fcc2e6082e5613d8
@@ -0,0 +1,19 @@
1
+ # Auto-generated by Cimas: Do not edit it manually!
2
+ # See https://github.com/metanorma/cimas
3
+ name: rake
4
+
5
+ permissions:
6
+ contents: write
7
+ packages: write
8
+
9
+ on:
10
+ push:
11
+ branches: [ master, main ]
12
+ tags: [ v* ]
13
+ pull_request:
14
+
15
+ jobs:
16
+ rake:
17
+ uses: metanorma/ci/.github/workflows/generic-rake.yml@main
18
+ secrets:
19
+ pat_token: ${{ secrets.LUTAML_CI_PAT_TOKEN }}
@@ -0,0 +1,28 @@
1
+ # Auto-generated by Cimas: Do not edit it manually!
2
+ # See https://github.com/metanorma/cimas
3
+ name: release
4
+
5
+ permissions:
6
+ contents: write
7
+ packages: write
8
+ id-token: write
9
+
10
+ on:
11
+ workflow_dispatch:
12
+ inputs:
13
+ next_version:
14
+ description: |
15
+ Next release version. Possible values: x.y.z, major, minor, patch (or pre|rc|etc).
16
+ Also, you can pass 'skip' to skip 'git tag' and do 'gem push' for the current version
17
+ required: true
18
+ default: 'skip'
19
+ repository_dispatch:
20
+ types: [ do-release ]
21
+
22
+ jobs:
23
+ release:
24
+ uses: relaton/support/.github/workflows/release.yml@main
25
+ with:
26
+ next_version: ${{ github.event.inputs.next_version }}
27
+ secrets:
28
+ rubygems-api-key: ${{ secrets.LUTAML_CI_RUBYGEMS_API_KEY }}
data/.gitignore CHANGED
@@ -14,3 +14,7 @@
14
14
  # Local scratchpads
15
15
  TODO.scratch/
16
16
  *.gem
17
+
18
+ # Web (npm)
19
+ web/node_modules/
20
+ web/dist/
data/.rubocop_todo.yml CHANGED
@@ -1,10 +1,560 @@
1
- # This configuration was generated by
2
- # `rubocop --auto-gen-config`
3
- # on 2026-07-21 using RuboCop version 1.21+.
4
- # The point is for the user to remove these records
5
- # one by one as the offenses are removed from the code base.
6
- # Note that changes in the inspected code, or installation of new
7
- # versions of RuboCop, may require this file to be generated again.
8
-
9
- # Offense count: 0
10
- # Initially empty; populated by `rubocop --auto-gen-config`.
1
+ # Deliberate deferrals. Every entry records debt we chose not to pay in the
2
+ # CI-green PR, and why. Remove entries as the offenses get fixed.
3
+ #
4
+ # This file is hand-maintained. Do not regenerate it with
5
+ # `rubocop --auto-gen-config` — that drops the reasons and silently widens
6
+ # the exclusions to whatever happens to be broken that day.
7
+ #
8
+ # Per-file `Exclude:` is preferred over `Enabled: false` throughout: it
9
+ # freezes the offenses that exist today while keeping the rule live for every
10
+ # new file.
11
+
12
+ # ---------------------------------------------------------------------------
13
+ # Architectural: compact module style
14
+ # ---------------------------------------------------------------------------
15
+
16
+ # The library namespaces every model compactly (`module Dcc::V3`), and the
17
+ # inherited oss-guides config enforces `nested`. Converting the 116 files to
18
+ # nested style changes constant lookup and would collide with every open
19
+ # branch, so it is its own PR.
20
+ #
21
+ # This cop accounts for 372 offenses on its own. Beyond its 116, enabling it
22
+ # makes RuboCop emit 256 phantom Layout offenses against the compact-module
23
+ # files: 231 Layout/IndentationWidth plus a few Layout/TrailingWhitespace,
24
+ # Layout/ArgumentAlignment, Layout/LineLength, Style/StringLiterals and
25
+ # Lint/RedundantSafeNavigation. Those are not real — RuboCop reports trailing
26
+ # whitespace on lines that have none, and `rubocop -a --only
27
+ # Layout/IndentationWidth` finds nothing to correct. All 256 vanish when this
28
+ # cop is off, which is why it is disabled outright rather than excluded.
29
+ Style/ClassAndModuleChildren:
30
+ Enabled: false
31
+
32
+ # ---------------------------------------------------------------------------
33
+ # Line length
34
+ # ---------------------------------------------------------------------------
35
+
36
+ # 107 lines over the 80-column limit, in 53 files. RuboCop cannot fix these:
37
+ # `rubocop -a` corrects 0 of the 107, so every one is a manual rewrap. That
38
+ # would put 53 more files into a PR that has to merge ahead of nine open
39
+ # branches. Frozen per file; new files still have to stay under 80.
40
+ Layout/LineLength:
41
+ Exclude:
42
+ - 'dcc.gemspec'
43
+ - 'examples/parse_and_inspect.rb'
44
+ - 'lib/dcc.rb'
45
+ - 'lib/dcc/base/comment.rb'
46
+ - 'lib/dcc/base/xml_blob.rb'
47
+ - 'lib/dcc/builder/session.rb'
48
+ - 'lib/dcc/cli/cli.rb'
49
+ - 'lib/dcc/context_configuration.rb'
50
+ - 'lib/dcc/context_options.rb'
51
+ - 'lib/dcc/convert/csv.rb'
52
+ - 'lib/dcc/convert/json.rb'
53
+ - 'lib/dcc/convert/result.rb'
54
+ - 'lib/dcc/diff.rb'
55
+ - 'lib/dcc/diff/result.rb'
56
+ - 'lib/dcc/error.rb'
57
+ - 'lib/dcc/extract/file.rb'
58
+ - 'lib/dcc/i18n/text_lookup.rb'
59
+ - 'lib/dcc/inspect/report.rb'
60
+ - 'lib/dcc/quantity_format/formatter.rb'
61
+ - 'lib/dcc/server/app.rb'
62
+ - 'lib/dcc/signature/result.rb'
63
+ - 'lib/dcc/type/base64_binary.rb'
64
+ - 'lib/dcc/type/decimal_xml_list.rb'
65
+ - 'lib/dcc/type/iso_country_code.rb'
66
+ - 'lib/dcc/type/iso_language_code.rb'
67
+ - 'lib/dcc/type/schema_version.rb'
68
+ - 'lib/dcc/type/si_unit.rb'
69
+ - 'lib/dcc/validate/business_rules.rb'
70
+ - 'lib/dcc/validate/issue.rb'
71
+ - 'lib/dcc/validate/result.rb'
72
+ - 'lib/dcc/validate/schematron/rule.rb'
73
+ - 'lib/dcc/validate/schematron/rules.rb'
74
+ - 'lib/dcc/validate/schematron/rules/administrative_data_completeness.rb'
75
+ - 'lib/dcc/validate/schematron/rules/date_range_check.rb'
76
+ - 'lib/dcc/validate/schematron/rules/influence_conditions_placement.rb'
77
+ - 'lib/dcc/validate/schematron/rules/iso_code_validation.rb'
78
+ - 'lib/dcc/validate/schematron/rules/language_code_dedup.rb'
79
+ - 'lib/dcc/validate/schematron/rules/non_si_declaration.rb'
80
+ - 'lib/dcc/validate/schematron/rules/release_format_check.rb'
81
+ - 'lib/dcc/validate/schematron/rules/schema_version_check.rb'
82
+ - 'lib/dcc/validate/schematron/rules/uncertainty_consistency.rb'
83
+ - 'lib/dcc/validate/schematron/rules/unit_format_check.rb'
84
+ - 'lib/dcc/validate/schematron/rules/used_methods_placement.rb'
85
+ - 'lib/dcc/validate/schematron/rules/used_software_placement.rb'
86
+ - 'lib/dcc/validate/schematron/rules/xml_list_spacing.rb'
87
+ - 'spec/dcc/builder/builder_spec.rb'
88
+ - 'spec/dcc/cli/cli_spec.rb'
89
+ - 'spec/dcc/extract/file_spec.rb'
90
+ - 'spec/dcc/server_spec.rb'
91
+ - 'spec/dcc/type_spec.rb'
92
+ - 'spec/dcc/validate/schematron_stubs_spec.rb'
93
+ - 'spec/dcc/validate_spec.rb'
94
+ - 'spec/dcc_spec.rb'
95
+
96
+ # ---------------------------------------------------------------------------
97
+ # Complexity metrics — a refactoring project, not a lint pass
98
+ # ---------------------------------------------------------------------------
99
+
100
+ # 246 offenses across the Metrics family. Every one needs a real refactor of
101
+ # working code — splitting methods, extracting collaborators, reshaping the
102
+ # XML mapping blocks. That is its own effort with its own tests, and it is
103
+ # not something to bundle into the PR that unblocks CI. Frozen per file so
104
+ # new code is still held to the limits.
105
+ Metrics/AbcSize:
106
+ Exclude:
107
+ - 'lib/dcc/base/administrative_data.rb'
108
+ - 'lib/dcc/base/byte_data.rb'
109
+ - 'lib/dcc/base/condition.rb'
110
+ - 'lib/dcc/base/contact.rb'
111
+ - 'lib/dcc/base/contact_not_strict.rb'
112
+ - 'lib/dcc/base/core_data.rb'
113
+ - 'lib/dcc/base/data.rb'
114
+ - 'lib/dcc/base/formula.rb'
115
+ - 'lib/dcc/base/hash_type.rb'
116
+ - 'lib/dcc/base/influence_condition_list.rb'
117
+ - 'lib/dcc/base/item.rb'
118
+ - 'lib/dcc/base/item_list.rb'
119
+ - 'lib/dcc/base/list.rb'
120
+ - 'lib/dcc/base/location.rb'
121
+ - 'lib/dcc/base/measurement_result.rb'
122
+ - 'lib/dcc/base/measuring_equipment.rb'
123
+ - 'lib/dcc/base/measuring_equipment_list.rb'
124
+ - 'lib/dcc/base/quantity.rb'
125
+ - 'lib/dcc/base/ref_type_definition.rb'
126
+ - 'lib/dcc/base/resp_person.rb'
127
+ - 'lib/dcc/base/result.rb'
128
+ - 'lib/dcc/base/rich_content.rb'
129
+ - 'lib/dcc/base/software.rb'
130
+ - 'lib/dcc/base/statement.rb'
131
+ - 'lib/dcc/base/text.rb'
132
+ - 'lib/dcc/base/used_method.rb'
133
+ - 'lib/dcc/cli/cli.rb'
134
+ - 'lib/dcc/cli/formatters.rb'
135
+ - 'lib/dcc/convert/csv.rb'
136
+ - 'lib/dcc/convert/json.rb'
137
+ - 'lib/dcc/convert/liquid_filters.rb'
138
+ - 'lib/dcc/diff.rb'
139
+ - 'lib/dcc/diff/result.rb'
140
+ - 'lib/dcc/extract/file.rb'
141
+ - 'lib/dcc/inspect/report.rb'
142
+ - 'lib/dcc/quantity_format/formatter.rb'
143
+ - 'lib/dcc/quantity_math/real.rb'
144
+ - 'lib/dcc/server/app.rb'
145
+ - 'lib/dcc/si/base/complex.rb'
146
+ - 'lib/dcc/si/base/complex_list_xml_list.rb'
147
+ - 'lib/dcc/si/base/constant.rb'
148
+ - 'lib/dcc/si/base/hybrid.rb'
149
+ - 'lib/dcc/si/base/real.rb'
150
+ - 'lib/dcc/si/base/real_list_xml_list.rb'
151
+ - 'lib/dcc/si/base/si_list.rb'
152
+ - 'lib/dcc/signature/signer.rb'
153
+ - 'lib/dcc/validate/business_rules.rb'
154
+ - 'lib/dcc/validate/issue.rb'
155
+ - 'lib/dcc/validate/result.rb'
156
+ - 'lib/dcc/validate/schematron/rules/administrative_data_completeness.rb'
157
+ - 'lib/dcc/validate/schematron/rules/id_refid_linking.rb'
158
+ - 'lib/dcc/validate/schematron/rules/influence_conditions_placement.rb'
159
+ - 'lib/dcc/validate/schematron/rules/iso_code_validation.rb'
160
+ - 'lib/dcc/validate/schematron/rules/language_code_dedup.rb'
161
+ - 'lib/dcc/validate/schematron/rules/non_si_declaration.rb'
162
+ - 'lib/dcc/validate/schematron/rules/release_format_check.rb'
163
+ - 'lib/dcc/validate/schematron/rules/unit_format_check.rb'
164
+ - 'lib/dcc/validate/schematron/rules/used_methods_placement.rb'
165
+ - 'lib/dcc/validate/schematron/rules/xml_list_spacing.rb'
166
+
167
+ Metrics/BlockLength:
168
+ Exclude:
169
+ - 'lib/dcc/base/administrative_data.rb'
170
+ - 'lib/dcc/base/core_data.rb'
171
+ - 'lib/dcc/base/list.rb'
172
+ - 'lib/dcc/base/measuring_equipment.rb'
173
+ - 'lib/dcc/base/quantity.rb'
174
+ - 'lib/dcc/base/statement.rb'
175
+ - 'lib/dcc/si/base/complex.rb'
176
+ - 'lib/dcc/si/base/real_list_xml_list.rb'
177
+
178
+ Metrics/CyclomaticComplexity:
179
+ Exclude:
180
+ - 'lib/dcc/cli/formatters.rb'
181
+ - 'lib/dcc/convert/csv.rb'
182
+ - 'lib/dcc/convert/json.rb'
183
+ - 'lib/dcc/convert/liquid_filters.rb'
184
+ - 'lib/dcc/diff.rb'
185
+ - 'lib/dcc/extract/file.rb'
186
+ - 'lib/dcc/i18n/text_lookup.rb'
187
+ - 'lib/dcc/inspect/report.rb'
188
+ - 'lib/dcc/server/app.rb'
189
+ - 'lib/dcc/validate/business_rules.rb'
190
+ - 'lib/dcc/validate/issue.rb'
191
+ - 'lib/dcc/validate/schematron/rules/administrative_data_completeness.rb'
192
+ - 'lib/dcc/validate/schematron/rules/date_range_check.rb'
193
+ - 'lib/dcc/validate/schematron/rules/id_refid_linking.rb'
194
+ - 'lib/dcc/validate/schematron/rules/influence_conditions_placement.rb'
195
+ - 'lib/dcc/validate/schematron/rules/iso_code_validation.rb'
196
+ - 'lib/dcc/validate/schematron/rules/language_code_dedup.rb'
197
+ - 'lib/dcc/validate/schematron/rules/non_si_declaration.rb'
198
+ - 'lib/dcc/validate/schematron/rules/release_format_check.rb'
199
+ - 'lib/dcc/validate/schematron/rules/unit_format_check.rb'
200
+ - 'lib/dcc/validate/schematron/rules/used_methods_placement.rb'
201
+ - 'lib/dcc/validate/schematron/rules/xml_list_spacing.rb'
202
+ - 'lib/dcc/validate/severity.rb'
203
+
204
+ Metrics/MethodLength:
205
+ Exclude:
206
+ - 'lib/dcc/base/administrative_data.rb'
207
+ - 'lib/dcc/base/byte_data.rb'
208
+ - 'lib/dcc/base/calibration_laboratory.rb'
209
+ - 'lib/dcc/base/condition.rb'
210
+ - 'lib/dcc/base/contact.rb'
211
+ - 'lib/dcc/base/contact_not_strict.rb'
212
+ - 'lib/dcc/base/core_data.rb'
213
+ - 'lib/dcc/base/data.rb'
214
+ - 'lib/dcc/base/digital_calibration_certificate.rb'
215
+ - 'lib/dcc/base/equipment_class.rb'
216
+ - 'lib/dcc/base/formula.rb'
217
+ - 'lib/dcc/base/hash_type.rb'
218
+ - 'lib/dcc/base/identification.rb'
219
+ - 'lib/dcc/base/identifications.rb'
220
+ - 'lib/dcc/base/influence_condition_list.rb'
221
+ - 'lib/dcc/base/item.rb'
222
+ - 'lib/dcc/base/item_list.rb'
223
+ - 'lib/dcc/base/list.rb'
224
+ - 'lib/dcc/base/location.rb'
225
+ - 'lib/dcc/base/measurement_meta_data_list.rb'
226
+ - 'lib/dcc/base/measurement_result.rb'
227
+ - 'lib/dcc/base/measurement_result_list.rb'
228
+ - 'lib/dcc/base/measuring_equipment.rb'
229
+ - 'lib/dcc/base/measuring_equipment_list.rb'
230
+ - 'lib/dcc/base/quantity.rb'
231
+ - 'lib/dcc/base/ref_type_definition.rb'
232
+ - 'lib/dcc/base/resp_person.rb'
233
+ - 'lib/dcc/base/resp_person_list.rb'
234
+ - 'lib/dcc/base/result.rb'
235
+ - 'lib/dcc/base/result_list.rb'
236
+ - 'lib/dcc/base/rich_content.rb'
237
+ - 'lib/dcc/base/software.rb'
238
+ - 'lib/dcc/base/software_list.rb'
239
+ - 'lib/dcc/base/statement.rb'
240
+ - 'lib/dcc/base/statement_list.rb'
241
+ - 'lib/dcc/base/string_with_lang.rb'
242
+ - 'lib/dcc/base/text.rb'
243
+ - 'lib/dcc/base/used_method.rb'
244
+ - 'lib/dcc/base/used_method_list.rb'
245
+ - 'lib/dcc/builder/session.rb'
246
+ - 'lib/dcc/cli/cli.rb'
247
+ - 'lib/dcc/cli/formatters.rb'
248
+ - 'lib/dcc/convert/csv.rb'
249
+ - 'lib/dcc/convert/html.rb'
250
+ - 'lib/dcc/convert/json.rb'
251
+ - 'lib/dcc/convert/liquid_filters.rb'
252
+ - 'lib/dcc/diff.rb'
253
+ - 'lib/dcc/extract/file.rb'
254
+ - 'lib/dcc/i18n/text_lookup.rb'
255
+ - 'lib/dcc/inspect/report.rb'
256
+ - 'lib/dcc/migrate.rb'
257
+ - 'lib/dcc/server/app.rb'
258
+ - 'lib/dcc/si/base/complex.rb'
259
+ - 'lib/dcc/si/base/complex_list_xml_list.rb'
260
+ - 'lib/dcc/si/base/constant.rb'
261
+ - 'lib/dcc/si/base/coverage_interval_mu.rb'
262
+ - 'lib/dcc/si/base/expanded_mu.rb'
263
+ - 'lib/dcc/si/base/expanded_unc_xml_list.rb'
264
+ - 'lib/dcc/si/base/hybrid.rb'
265
+ - 'lib/dcc/si/base/measurement_uncertainty_univariate.rb'
266
+ - 'lib/dcc/si/base/real.rb'
267
+ - 'lib/dcc/si/base/real_list_xml_list.rb'
268
+ - 'lib/dcc/si/base/si_list.rb'
269
+ - 'lib/dcc/si/base/standard_mu.rb'
270
+ - 'lib/dcc/signature/signer.rb'
271
+ - 'lib/dcc/signature/verifier.rb'
272
+ - 'lib/dcc/transform/xslt.rb'
273
+ - 'lib/dcc/type/decimal_xml_list.rb'
274
+ - 'lib/dcc/validate/business_rules.rb'
275
+ - 'lib/dcc/validate/result.rb'
276
+ - 'lib/dcc/validate/schematron/profile.rb'
277
+ - 'lib/dcc/validate/schematron/rules/administrative_data_completeness.rb'
278
+ - 'lib/dcc/validate/schematron/rules/date_range_check.rb'
279
+ - 'lib/dcc/validate/schematron/rules/id_refid_linking.rb'
280
+ - 'lib/dcc/validate/schematron/rules/influence_conditions_placement.rb'
281
+ - 'lib/dcc/validate/schematron/rules/iso_code_validation.rb'
282
+ - 'lib/dcc/validate/schematron/rules/language_code_dedup.rb'
283
+ - 'lib/dcc/validate/schematron/rules/non_si_declaration.rb'
284
+ - 'lib/dcc/validate/schematron/rules/release_format_check.rb'
285
+ - 'lib/dcc/validate/schematron/rules/unit_format_check.rb'
286
+ - 'lib/dcc/validate/schematron/rules/used_methods_placement.rb'
287
+ - 'lib/dcc/validate/schematron/rules/used_software_placement.rb'
288
+ - 'lib/dcc/validate/schematron/rules/xml_list_spacing.rb'
289
+ - 'lib/dcc/validate/xsd.rb'
290
+
291
+ Metrics/ParameterLists:
292
+ Exclude:
293
+ - 'lib/dcc/validate/issue.rb'
294
+ - 'lib/dcc/validate/schematron/rule.rb'
295
+
296
+ Metrics/PerceivedComplexity:
297
+ Exclude:
298
+ - 'lib/dcc/convert/csv.rb'
299
+ - 'lib/dcc/convert/json.rb'
300
+ - 'lib/dcc/convert/liquid_filters.rb'
301
+ - 'lib/dcc/diff.rb'
302
+ - 'lib/dcc/extract/file.rb'
303
+ - 'lib/dcc/i18n/text_lookup.rb'
304
+ - 'lib/dcc/inspect/report.rb'
305
+ - 'lib/dcc/server/app.rb'
306
+ - 'lib/dcc/validate/business_rules.rb'
307
+ - 'lib/dcc/validate/schematron/rules/administrative_data_completeness.rb'
308
+ - 'lib/dcc/validate/schematron/rules/date_range_check.rb'
309
+ - 'lib/dcc/validate/schematron/rules/id_refid_linking.rb'
310
+ - 'lib/dcc/validate/schematron/rules/influence_conditions_placement.rb'
311
+ - 'lib/dcc/validate/schematron/rules/iso_code_validation.rb'
312
+ - 'lib/dcc/validate/schematron/rules/language_code_dedup.rb'
313
+ - 'lib/dcc/validate/schematron/rules/release_format_check.rb'
314
+ - 'lib/dcc/validate/schematron/rules/unit_format_check.rb'
315
+ - 'lib/dcc/validate/schematron/rules/used_methods_placement.rb'
316
+ - 'lib/dcc/validate/schematron/rules/xml_list_spacing.rb'
317
+
318
+
319
+ # ---------------------------------------------------------------------------
320
+ # Naming — the cop defaults are wrong for this domain
321
+ # ---------------------------------------------------------------------------
322
+
323
+ # The short parameter names RuboCop flags are the conventional ones in this
324
+ # code: `q` for a quantity, `a`/`b` for the two sides of a diff, `u`/`u1`/`u2`
325
+ # for units being composed, `v` for a version string, `mr` for a measurement
326
+ # result. Spelling them out would make the maths harder to read, not easier.
327
+ # Widening AllowedNames rather than excluding files, so the rule keeps working
328
+ # on genuinely lazy names. This list must repeat the inherited defaults —
329
+ # only Exclude is merged across configs, so a bare addition would replace it.
330
+ Naming/MethodParameterName:
331
+ AllowedNames:
332
+ - as
333
+ - at
334
+ - by
335
+ - cc
336
+ - db
337
+ - id
338
+ - if
339
+ - in
340
+ - io
341
+ - ip
342
+ - of
343
+ - "on"
344
+ - os
345
+ - pp
346
+ - to
347
+ - a
348
+ - b
349
+ - mr
350
+ - q
351
+ - u
352
+ - u1
353
+ - u2
354
+ - v
355
+
356
+ # Names like `country_code_iso_3166_1` and `used_lang_code_iso_639_1` come
357
+ # from the standards they reference (ISO 3166-1, ISO 639-1) and from the DCC
358
+ # XML element names they map to. The cop wants `iso_31661`, which would break
359
+ # the link to the schema. These names are not a style choice, so the rule does
360
+ # not apply to this codebase at all.
361
+ Naming/VariableNumber:
362
+ Enabled: false
363
+
364
+ # ---------------------------------------------------------------------------
365
+ # RSpec — suite-wide style the specs deliberately do not follow
366
+ # ---------------------------------------------------------------------------
367
+
368
+ # RSpec/MultipleExpectations caps an example at ONE expectation. These specs
369
+ # check a parsed document by asserting over several of its fields at once,
370
+ # which is the point of a round-trip test. Splitting 61 examples into ~200
371
+ # would make the suite slower and no clearer. Frozen per file.
372
+ RSpec/MultipleExpectations:
373
+ Exclude:
374
+ - 'spec/dcc/builder/builder_spec.rb'
375
+ - 'spec/dcc/convert/additional_spec.rb'
376
+ - 'spec/dcc/convert/json_spec.rb'
377
+ - 'spec/dcc/extract/file_spec.rb'
378
+ - 'spec/dcc/i18n/text_lookup_spec.rb'
379
+ - 'spec/dcc/inspect/report_spec.rb'
380
+ - 'spec/dcc/migrate_spec.rb'
381
+ - 'spec/dcc/namespace_spec.rb'
382
+ - 'spec/dcc/plugin_spec.rb'
383
+ - 'spec/dcc/quantity_format/formatter_spec.rb'
384
+ - 'spec/dcc/quantity_math/real_spec.rb'
385
+ - 'spec/dcc/schema_spec.rb'
386
+ - 'spec/dcc/server_spec.rb'
387
+ - 'spec/dcc/signature/signature_spec.rb'
388
+ - 'spec/dcc/type_spec.rb'
389
+ - 'spec/dcc/validate/schematron_spec.rb'
390
+ - 'spec/dcc/validate_spec.rb'
391
+ - 'spec/dcc_spec.rb'
392
+ - 'spec/round_trip_spec.rb'
393
+
394
+ # Same story: long examples that build a document and then assert over it.
395
+ RSpec/ExampleLength:
396
+ Exclude:
397
+ - 'spec/dcc/builder/builder_spec.rb'
398
+ - 'spec/dcc/cli/cli_spec.rb'
399
+ - 'spec/dcc/cli/formatters_spec.rb'
400
+ - 'spec/dcc/convert/additional_spec.rb'
401
+ - 'spec/dcc/extract/file_spec.rb'
402
+ - 'spec/dcc/migrate_spec.rb'
403
+ - 'spec/dcc/type_spec.rb'
404
+ - 'spec/dcc/validate/business_rules_spec.rb'
405
+ - 'spec/dcc/validate_spec.rb'
406
+ - 'spec/round_trip_spec.rb'
407
+
408
+ # The rest of the RSpec family is spec-organisation preference, not
409
+ # correctness: `subject` used without naming it, several describes per file,
410
+ # file paths that do not mirror the class name, a context wording rule, and
411
+ # describes whose subject is a string rather than a class. Frozen per file
412
+ # rather than argued one by one; none of it affects what the suite proves.
413
+ RSpec/ContextWording:
414
+ Exclude:
415
+ - 'spec/round_trip_spec.rb'
416
+
417
+ RSpec/DescribeClass:
418
+ Exclude:
419
+ - 'spec/ptb_fixtures_spec.rb'
420
+ - 'spec/round_trip_spec.rb'
421
+
422
+ RSpec/MultipleDescribes:
423
+ Exclude:
424
+ - 'spec/dcc/convert/additional_spec.rb'
425
+ - 'spec/dcc/convert/json_spec.rb'
426
+ - 'spec/dcc/extract/file_spec.rb'
427
+ - 'spec/dcc/server_spec.rb'
428
+ - 'spec/dcc/type_spec.rb'
429
+ - 'spec/dcc/validate/schematron_spec.rb'
430
+ - 'spec/dcc/validate/schematron_stubs_spec.rb'
431
+ - 'spec/dcc/validate_spec.rb'
432
+
433
+ RSpec/NamedSubject:
434
+ Exclude:
435
+ - 'spec/dcc/server_spec.rb'
436
+
437
+ RSpec/SpecFilePathFormat:
438
+ Exclude:
439
+ - 'spec/dcc/builder/builder_spec.rb'
440
+ - 'spec/dcc/signature/signature_spec.rb'
441
+
442
+ # RSpec/DescribedClass wants `described_class` in place of the literal class
443
+ # name. In a library with parallel `Dcc::V2::Foo` and `Dcc::V3::Foo`
444
+ # hierarchies, spelling out which one a spec means is worth more than the
445
+ # indirection. Its autocorrect is also flagged unsafe.
446
+ RSpec/DescribedClass:
447
+ Exclude:
448
+ - 'spec/dcc/schema_spec.rb'
449
+ - 'spec/dcc_spec.rb'
450
+
451
+
452
+ # ---------------------------------------------------------------------------
453
+ # Unsafe autocorrections — each one changes behaviour
454
+ # ---------------------------------------------------------------------------
455
+
456
+ # RuboCop marks all of these "unsafe correctable", meaning the rewrite is not
457
+ # behaviour-preserving in general. `rubocop -A` was tried and reverted on this
458
+ # branch precisely because an autocorrect pair broke `Dcc::Builder.call`.
459
+ # Each of these needs a human to check the surrounding code and, in most
460
+ # cases, a test that does not exist yet. Frozen until then, not swept.
461
+ #
462
+ # Style/SafeNavigation in particular changes `x && x.foo` into `x&.foo`, which
463
+ # differs whenever the receiver can be `false` rather than `nil`.
464
+ Style/SafeNavigation:
465
+ Exclude:
466
+ - 'lib/dcc/validate/schematron/rules/date_range_check.rb'
467
+ - 'lib/dcc/validate/schematron/rules/influence_conditions_placement.rb'
468
+ - 'lib/dcc/validate/schematron/rules/iso_code_validation.rb'
469
+ - 'lib/dcc/validate/schematron/rules/language_code_dedup.rb'
470
+ - 'lib/dcc/validate/schematron/rules/release_format_check.rb'
471
+ - 'lib/dcc/validate/schematron/rules/unit_format_check.rb'
472
+ - 'lib/dcc/validate/schematron/rules/used_methods_placement.rb'
473
+ - 'lib/dcc/validate/schematron/rules/used_software_placement.rb'
474
+
475
+ Style/MapIntoArray:
476
+ Exclude:
477
+ - 'lib/dcc/validate/schematron/rules/id_refid_linking.rb'
478
+
479
+ Style/MapJoin:
480
+ Exclude:
481
+ - 'lib/dcc/convert/csv.rb'
482
+
483
+ Style/PartitionInsteadOfDoubleSelect:
484
+ Exclude:
485
+ - 'lib/dcc/convert/json.rb'
486
+
487
+ Style/RedundantInterpolation:
488
+ Exclude:
489
+ - 'lib/dcc/diff.rb'
490
+
491
+ Style/StringConcatenation:
492
+ Exclude:
493
+ - 'examples/convert_all_formats.rb'
494
+
495
+ Style/SymbolProc:
496
+ Exclude:
497
+ - 'lib/dcc/validate/xsd.rb'
498
+
499
+ Performance/DeletePrefix:
500
+ Exclude:
501
+ - 'lib/dcc/schema/version.rb'
502
+
503
+ Performance/DeleteSuffix:
504
+ Exclude:
505
+ - 'lib/dcc/type/decimal_xml_list.rb'
506
+
507
+ # `FIXTURE_CACHE = {}` in the spec helper is a cache: the suite writes into it
508
+ # on every fixture load. Freezing it, which is what this cop asks for, would
509
+ # break every spec that touches a fixture.
510
+ Style/MutableConstant:
511
+ Exclude:
512
+ - 'spec/spec_helper.rb'
513
+
514
+ # The `.sort` after `Dir.glob` keeps fixture iteration order stable across
515
+ # platforms and Ruby versions. Ruby only started guaranteeing sorted glob
516
+ # results in 3.0, and the suite names examples after the fixture it is on, so
517
+ # dropping the sort would make spec output order drift.
518
+ Lint/RedundantDirGlobSort:
519
+ Exclude:
520
+ - 'spec/round_trip_spec.rb'
521
+
522
+ # ---------------------------------------------------------------------------
523
+ # Small ones that need a real decision, not a rename
524
+ # ---------------------------------------------------------------------------
525
+
526
+ # Both unused arguments are public keyword parameters. `warning_source:` is
527
+ # still passed in by Dcc::VersionedParser, and `xml:` is part of the published
528
+ # signature of Dcc::Schema::Version.resolve_dsi. RuboCop wants a leading
529
+ # underscore, but for keyword arguments that renames the keyword and breaks
530
+ # callers. Removing them is an API change and belongs in its own PR.
531
+ Lint/UnusedMethodArgument:
532
+ Exclude:
533
+ - 'lib/dcc/context_options.rb'
534
+ - 'lib/dcc/schema/version.rb'
535
+
536
+ # The remaining few are judgement calls about existing working code: branches
537
+ # that happen to share a body but read better apart, predicate methods whose
538
+ # names the cop disputes, `size` on a literal, and an `it` assignment. All are
539
+ # cosmetic, none is mechanical, and none belongs in a CI-unblocking PR.
540
+ Lint/DuplicateBranch:
541
+ Exclude:
542
+ - 'lib/dcc/convert/liquid_filters.rb'
543
+
544
+ Naming/PredicateMethod:
545
+ Exclude:
546
+ - 'lib/dcc.rb'
547
+ - 'lib/dcc/server/storage/memory.rb'
548
+ - 'lib/dcc/si/v1.rb'
549
+ - 'lib/dcc/si/v2.rb'
550
+ - 'lib/dcc/v2.rb'
551
+ - 'lib/dcc/v3.rb'
552
+
553
+ Performance/FixedSize:
554
+ Exclude:
555
+ - 'lib/dcc/cli/formatters.rb'
556
+
557
+ Style/ItAssignment:
558
+ Exclude:
559
+ - 'lib/dcc/builder/session.rb'
560
+