pubid 2.0.0.alpha.10 → 2.0.0.pre.alpha.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 (811) hide show
  1. checksums.yaml +4 -4
  2. data/README.adoc +51 -54
  3. data/data/iec/update_codes.yaml +0 -3
  4. data/data/ieee/update_codes.yaml +1 -107
  5. data/data/nist/update_codes.yaml +0 -35
  6. data/lib/pubid/amca/builder.rb +6 -6
  7. data/lib/pubid/amca/identifier.rb +16 -2
  8. data/lib/pubid/amca/identifiers/base.rb +46 -74
  9. data/lib/pubid/amca/identifiers/interpretation.rb +30 -17
  10. data/lib/pubid/amca/identifiers/publication.rb +27 -14
  11. data/lib/pubid/amca/identifiers/standard.rb +5 -3
  12. data/lib/pubid/amca/identifiers.rb +1 -0
  13. data/lib/pubid/amca/parser.rb +1 -1
  14. data/lib/pubid/amca/scheme.rb +16 -0
  15. data/lib/pubid/amca/single_identifier.rb +24 -1
  16. data/lib/pubid/amca/urn_generator.rb +3 -4
  17. data/lib/pubid/amca.rb +3 -50
  18. data/lib/pubid/ansi/builder.rb +5 -7
  19. data/lib/pubid/ansi/identifier.rb +1 -19
  20. data/lib/pubid/ansi/identifiers/american_national_standard.rb +1 -2
  21. data/lib/pubid/ansi/identifiers/standard.rb +3 -2
  22. data/lib/pubid/ansi/parser.rb +1 -1
  23. data/lib/pubid/ansi/scheme.rb +15 -0
  24. data/lib/pubid/ansi/single_identifier.rb +31 -2
  25. data/lib/pubid/ansi/urn_generator.rb +38 -3
  26. data/lib/pubid/ansi.rb +6 -47
  27. data/lib/pubid/api/builder.rb +72 -45
  28. data/lib/pubid/api/identifier.rb +9 -30
  29. data/lib/pubid/api/identifiers/base.rb +14 -2
  30. data/lib/pubid/api/identifiers/bulletin.rb +2 -0
  31. data/lib/pubid/api/identifiers/continuous_operations_standard.rb +2 -0
  32. data/lib/pubid/api/identifiers/mpms.rb +28 -10
  33. data/lib/pubid/api/identifiers/publication.rb +2 -0
  34. data/lib/pubid/api/identifiers/recommended_practice.rb +2 -0
  35. data/lib/pubid/api/identifiers/specification.rb +2 -0
  36. data/lib/pubid/api/identifiers/standard.rb +2 -0
  37. data/lib/pubid/api/identifiers/technical_report.rb +2 -0
  38. data/lib/pubid/api/identifiers/typeless_standard.rb +16 -0
  39. data/lib/pubid/api/parser.rb +1 -1
  40. data/lib/pubid/api/scheme.rb +66 -0
  41. data/lib/pubid/api/single_identifier.rb +32 -10
  42. data/lib/pubid/api/urn_generator.rb +18 -0
  43. data/lib/pubid/api.rb +5 -56
  44. data/lib/pubid/ashrae/builder.rb +35 -56
  45. data/lib/pubid/ashrae/identifier.rb +16 -6
  46. data/lib/pubid/ashrae/identifiers/addenda_package.rb +11 -7
  47. data/lib/pubid/ashrae/identifiers/addendum.rb +20 -9
  48. data/lib/pubid/ashrae/identifiers/base.rb +15 -111
  49. data/lib/pubid/ashrae/identifiers/combined_addenda.rb +16 -8
  50. data/lib/pubid/ashrae/identifiers/errata.rb +10 -9
  51. data/lib/pubid/ashrae/identifiers/guideline.rb +0 -3
  52. data/lib/pubid/ashrae/identifiers/interpretation.rb +10 -16
  53. data/lib/pubid/ashrae/identifiers/standard.rb +0 -3
  54. data/lib/pubid/ashrae/identifiers.rb +1 -0
  55. data/lib/pubid/ashrae/parser.rb +16 -40
  56. data/lib/pubid/ashrae/scheme.rb +53 -0
  57. data/lib/pubid/ashrae/single_identifier.rb +14 -1
  58. data/lib/pubid/ashrae/supplement_identifier.rb +6 -21
  59. data/lib/pubid/ashrae/urn_generator.rb +10 -8
  60. data/lib/pubid/ashrae.rb +2 -58
  61. data/lib/pubid/asme/builder.rb +2 -11
  62. data/lib/pubid/asme/components/code.rb +2 -10
  63. data/lib/pubid/asme/identifier.rb +0 -9
  64. data/lib/pubid/asme/identifiers/base.rb +60 -0
  65. data/lib/pubid/asme/identifiers/standard.rb +2 -86
  66. data/lib/pubid/asme/parser.rb +1 -1
  67. data/lib/pubid/asme/scheme.rb +37 -0
  68. data/lib/pubid/asme/single_identifier.rb +2 -11
  69. data/lib/pubid/asme/urn_generator.rb +2 -2
  70. data/lib/pubid/asme.rb +1 -47
  71. data/lib/pubid/astm/builder.rb +3 -10
  72. data/lib/pubid/astm/components/code.rb +0 -9
  73. data/lib/pubid/astm/identifier.rb +0 -9
  74. data/lib/pubid/astm/identifiers/adjunct.rb +9 -16
  75. data/lib/pubid/astm/identifiers/data_series.rb +14 -2
  76. data/lib/pubid/astm/identifiers/iso_dual_published.rb +34 -25
  77. data/lib/pubid/astm/identifiers/manual.rb +25 -8
  78. data/lib/pubid/astm/identifiers/monograph.rb +14 -2
  79. data/lib/pubid/astm/identifiers/research_report.rb +5 -8
  80. data/lib/pubid/astm/identifiers/standard.rb +37 -8
  81. data/lib/pubid/astm/identifiers/technical_report.rb +13 -2
  82. data/lib/pubid/astm/identifiers/work_in_progress.rb +10 -1
  83. data/lib/pubid/astm/parser.rb +1 -1
  84. data/lib/pubid/astm/scheme.rb +55 -0
  85. data/lib/pubid/astm/single_identifier.rb +10 -32
  86. data/lib/pubid/astm/urn_generator.rb +5 -7
  87. data/lib/pubid/astm.rb +27 -44
  88. data/lib/pubid/bsi/builder.rb +107 -119
  89. data/lib/pubid/bsi/identifier.rb +25 -4
  90. data/lib/pubid/bsi/identifiers/addendum_document.rb +37 -3
  91. data/lib/pubid/bsi/identifiers/adopted_european_norm.rb +47 -19
  92. data/lib/pubid/bsi/identifiers/adopted_international_standard.rb +39 -8
  93. data/lib/pubid/bsi/identifiers/aerospace_standard.rb +55 -2
  94. data/lib/pubid/bsi/identifiers/amendment.rb +22 -30
  95. data/lib/pubid/bsi/identifiers/base.rb +11 -0
  96. data/lib/pubid/bsi/identifiers/british_industrial_practice.rb +7 -1
  97. data/lib/pubid/bsi/identifiers/british_standard.rb +1 -2
  98. data/lib/pubid/bsi/identifiers/bundled_identifier.rb +87 -13
  99. data/lib/pubid/bsi/identifiers/committee_document.rb +17 -10
  100. data/lib/pubid/bsi/identifiers/consolidated_identifier.rb +87 -19
  101. data/lib/pubid/bsi/identifiers/corrigendum.rb +10 -26
  102. data/lib/pubid/bsi/identifiers/detailed_specification.rb +36 -0
  103. data/lib/pubid/bsi/identifiers/disc.rb +29 -0
  104. data/lib/pubid/bsi/identifiers/draft_document.rb +46 -2
  105. data/lib/pubid/bsi/identifiers/electronic_book.rb +38 -2
  106. data/lib/pubid/bsi/identifiers/expert_commentary.rb +21 -10
  107. data/lib/pubid/bsi/identifiers/explanatory_supplement.rb +47 -0
  108. data/lib/pubid/bsi/identifiers/flex.rb +34 -3
  109. data/lib/pubid/bsi/identifiers/handbook.rb +17 -1
  110. data/lib/pubid/bsi/identifiers/index.rb +32 -0
  111. data/lib/pubid/bsi/identifiers/method.rb +41 -0
  112. data/lib/pubid/bsi/identifiers/national_annex.rb +29 -4
  113. data/lib/pubid/bsi/identifiers/practice_guide.rb +7 -1
  114. data/lib/pubid/bsi/identifiers/publicly_available_specification.rb +54 -2
  115. data/lib/pubid/bsi/identifiers/published_document.rb +54 -2
  116. data/lib/pubid/bsi/identifiers/section.rb +30 -0
  117. data/lib/pubid/bsi/identifiers/set.rb +20 -14
  118. data/lib/pubid/bsi/identifiers/standalone_amendment.rb +10 -10
  119. data/lib/pubid/bsi/identifiers/supplement_document.rb +25 -3
  120. data/lib/pubid/bsi/identifiers/supplementary_index.rb +46 -0
  121. data/lib/pubid/bsi/identifiers/technical_specification.rb +47 -2
  122. data/lib/pubid/bsi/identifiers/test_method.rb +32 -0
  123. data/lib/pubid/bsi/identifiers/value_added_publication.rb +22 -7
  124. data/lib/pubid/bsi/identifiers.rb +1 -0
  125. data/lib/pubid/bsi/parser.rb +6 -20
  126. data/lib/pubid/bsi/scheme.rb +243 -0
  127. data/lib/pubid/bsi/single_identifier.rb +82 -94
  128. data/lib/pubid/bsi/urn_generator.rb +5 -13
  129. data/lib/pubid/bsi.rb +2 -252
  130. data/lib/pubid/builder/base.rb +13 -62
  131. data/lib/pubid/bundled_identifier.rb +10 -18
  132. data/lib/pubid/ccsds/builder.rb +4 -5
  133. data/lib/pubid/ccsds/identifier.rb +3 -63
  134. data/lib/pubid/ccsds/identifiers/base.rb +51 -14
  135. data/lib/pubid/ccsds/identifiers/corrigendum.rb +8 -9
  136. data/lib/pubid/ccsds/parser.rb +3 -5
  137. data/lib/pubid/ccsds/scheme.rb +57 -0
  138. data/lib/pubid/ccsds/single_identifier.rb +3 -6
  139. data/lib/pubid/ccsds/supplement_identifier.rb +13 -17
  140. data/lib/pubid/ccsds/urn_generator.rb +6 -6
  141. data/lib/pubid/ccsds.rb +1 -44
  142. data/lib/pubid/cen_cenelec/builder.rb +29 -61
  143. data/lib/pubid/cen_cenelec/identifier.rb +5 -28
  144. data/lib/pubid/cen_cenelec/identifiers/adopted_european_norm.rb +4 -9
  145. data/lib/pubid/cen_cenelec/identifiers/amendment.rb +12 -2
  146. data/lib/pubid/cen_cenelec/identifiers/base.rb +46 -5
  147. data/lib/pubid/cen_cenelec/identifiers/cen_report.rb +1 -2
  148. data/lib/pubid/cen_cenelec/identifiers/cen_workshop_agreement.rb +1 -2
  149. data/lib/pubid/cen_cenelec/identifiers/consolidated_identifier.rb +27 -6
  150. data/lib/pubid/cen_cenelec/identifiers/corrigendum.rb +17 -2
  151. data/lib/pubid/cen_cenelec/identifiers/european_norm.rb +4 -62
  152. data/lib/pubid/cen_cenelec/identifiers/european_prestandard.rb +7 -20
  153. data/lib/pubid/cen_cenelec/identifiers/european_specification.rb +1 -2
  154. data/lib/pubid/cen_cenelec/identifiers/fragment.rb +6 -2
  155. data/lib/pubid/cen_cenelec/identifiers/harmonization_document.rb +1 -2
  156. data/lib/pubid/cen_cenelec/identifiers/technical_report.rb +1 -2
  157. data/lib/pubid/cen_cenelec/identifiers/technical_specification.rb +1 -2
  158. data/lib/pubid/cen_cenelec/parser.rb +1 -1
  159. data/lib/pubid/cen_cenelec/scheme.rb +164 -0
  160. data/lib/pubid/cen_cenelec/single_identifier.rb +91 -10
  161. data/lib/pubid/cen_cenelec/supplement_identifier.rb +7 -6
  162. data/lib/pubid/cen_cenelec/urn_generator.rb +7 -7
  163. data/lib/pubid/cen_cenelec.rb +1 -188
  164. data/lib/pubid/cie/builder.rb +24 -149
  165. data/lib/pubid/cie/components/code.rb +72 -0
  166. data/lib/pubid/cie/identifier.rb +5 -20
  167. data/lib/pubid/cie/identifiers/bundle.rb +5 -35
  168. data/lib/pubid/cie/identifiers/conference.rb +6 -11
  169. data/lib/pubid/cie/identifiers/corrigendum.rb +23 -17
  170. data/lib/pubid/cie/identifiers/dual_published.rb +6 -6
  171. data/lib/pubid/cie/identifiers/identical.rb +9 -9
  172. data/lib/pubid/cie/identifiers/joint_published.rb +10 -10
  173. data/lib/pubid/cie/identifiers/standard.rb +8 -43
  174. data/lib/pubid/cie/identifiers/supplement.rb +25 -27
  175. data/lib/pubid/cie/identifiers/tutorial_bundle.rb +3 -7
  176. data/lib/pubid/cie/identifiers.rb +0 -2
  177. data/lib/pubid/cie/parser.rb +6 -55
  178. data/lib/pubid/cie/scheme.rb +64 -0
  179. data/lib/pubid/cie/single_identifier.rb +5 -44
  180. data/lib/pubid/cie/supplement_identifier.rb +16 -29
  181. data/lib/pubid/cie/urn_generator.rb +8 -11
  182. data/lib/pubid/cie.rb +2 -57
  183. data/lib/pubid/components/code.rb +8 -22
  184. data/lib/pubid/components/date.rb +18 -41
  185. data/lib/pubid/components/edition.rb +6 -9
  186. data/lib/pubid/components/language.rb +4 -6
  187. data/lib/pubid/components/locality.rb +1 -10
  188. data/lib/pubid/components/publisher.rb +6 -9
  189. data/lib/pubid/components/stage.rb +14 -5
  190. data/lib/pubid/components/type.rb +15 -5
  191. data/lib/pubid/components/typed_stage.rb +8 -11
  192. data/lib/pubid/components.rb +0 -4
  193. data/lib/pubid/core/update_codes.rb +7 -28
  194. data/lib/pubid/csa/builder.rb +48 -48
  195. data/lib/pubid/csa/composite_identifier.rb +7 -18
  196. data/lib/pubid/csa/identifier.rb +78 -191
  197. data/lib/pubid/csa/identifiers/base.rb +123 -0
  198. data/lib/pubid/csa/identifiers/bundled.rb +9 -25
  199. data/lib/pubid/csa/identifiers/canadian_adopted.rb +13 -13
  200. data/lib/pubid/csa/identifiers/cec.rb +103 -40
  201. data/lib/pubid/csa/identifiers/combined.rb +69 -97
  202. data/lib/pubid/csa/identifiers/csa_adopted.rb +4 -4
  203. data/lib/pubid/csa/identifiers/package.rb +4 -4
  204. data/lib/pubid/csa/identifiers/series.rb +104 -0
  205. data/lib/pubid/csa/parser.rb +8 -12
  206. data/lib/pubid/csa/scheme.rb +44 -0
  207. data/lib/pubid/csa/single_identifier.rb +5 -94
  208. data/lib/pubid/csa/urn_generator.rb +2 -9
  209. data/lib/pubid/csa/wrapper_identifier.rb +10 -43
  210. data/lib/pubid/csa.rb +1 -56
  211. data/lib/pubid/etsi/builder.rb +4 -13
  212. data/lib/pubid/etsi/components/code.rb +9 -10
  213. data/lib/pubid/etsi/components/version.rb +5 -0
  214. data/lib/pubid/etsi/identifier.rb +12 -2
  215. data/lib/pubid/etsi/identifiers/base.rb +24 -60
  216. data/lib/pubid/etsi/identifiers/etsi_standard.rb +4 -207
  217. data/lib/pubid/etsi/identifiers/supplement_identifier.rb +14 -46
  218. data/lib/pubid/etsi/identifiers.rb +1 -0
  219. data/lib/pubid/etsi/parser.rb +3 -9
  220. data/lib/pubid/etsi/scheme.rb +42 -0
  221. data/lib/pubid/etsi.rb +2 -52
  222. data/lib/pubid/export/data_class_exporter.rb +59 -0
  223. data/lib/pubid/export/exporter.rb +47 -6
  224. data/lib/pubid/export/flavor_exporter.rb +276 -124
  225. data/lib/pubid/export/ieee_exporter.rb +78 -0
  226. data/lib/pubid/export/itu_exporter.rb +66 -0
  227. data/lib/pubid/export/nist_exporter.rb +64 -0
  228. data/lib/pubid/export/registry_exporter.rb +90 -0
  229. data/lib/pubid/export/scheme_exporter.rb +70 -0
  230. data/lib/pubid/export.rb +6 -0
  231. data/lib/pubid/identifier.rb +37 -920
  232. data/lib/pubid/identifier_metadata.rb +1 -1
  233. data/lib/pubid/identifier_registry.rb +198 -0
  234. data/lib/pubid/idf/builder.rb +7 -7
  235. data/lib/pubid/idf/identifier.rb +13 -23
  236. data/lib/pubid/idf/identifiers/amendment.rb +1 -2
  237. data/lib/pubid/idf/identifiers/corrigendum.rb +1 -2
  238. data/lib/pubid/idf/identifiers/international_standard.rb +1 -2
  239. data/lib/pubid/idf/identifiers/reviewed_method.rb +1 -2
  240. data/lib/pubid/idf/parser.rb +5 -6
  241. data/lib/pubid/idf/scheme.rb +61 -0
  242. data/lib/pubid/idf/supplement_identifier.rb +13 -5
  243. data/lib/pubid/idf/urn_generator.rb +39 -4
  244. data/lib/pubid/idf.rb +1 -65
  245. data/lib/pubid/iec/builder.rb +91 -92
  246. data/lib/pubid/iec/components/code.rb +32 -9
  247. data/lib/pubid/iec/components/publisher.rb +1 -1
  248. data/lib/pubid/iec/identifier.rb +8 -328
  249. data/lib/pubid/iec/identifiers/amendment.rb +5 -8
  250. data/lib/pubid/iec/identifiers/base.rb +31 -7
  251. data/lib/pubid/iec/identifiers/component_specification.rb +13 -3
  252. data/lib/pubid/iec/identifiers/conformity_assessment.rb +12 -1
  253. data/lib/pubid/iec/identifiers/consolidated_identifier.rb +30 -29
  254. data/lib/pubid/iec/identifiers/corrigendum.rb +5 -4
  255. data/lib/pubid/iec/identifiers/fragment_identifier.rb +36 -43
  256. data/lib/pubid/iec/identifiers/guide.rb +18 -0
  257. data/lib/pubid/iec/identifiers/international_standard.rb +9 -24
  258. data/lib/pubid/iec/identifiers/interpretation_sheet.rb +3 -2
  259. data/lib/pubid/iec/identifiers/operational_document.rb +13 -3
  260. data/lib/pubid/iec/identifiers/publicly_available_specification.rb +15 -2
  261. data/lib/pubid/iec/identifiers/sheet_identifier.rb +24 -26
  262. data/lib/pubid/iec/identifiers/societal_technology_trend_report.rb +13 -3
  263. data/lib/pubid/iec/identifiers/systems_reference_document.rb +13 -2
  264. data/lib/pubid/iec/identifiers/technical_report.rb +21 -3
  265. data/lib/pubid/iec/identifiers/technical_specification.rb +21 -3
  266. data/lib/pubid/iec/identifiers/technology_report.rb +12 -1
  267. data/lib/pubid/iec/identifiers/test_report_form.rb +46 -3
  268. data/lib/pubid/iec/identifiers/vap_identifier.rb +34 -33
  269. data/lib/pubid/iec/identifiers/white_paper.rb +13 -3
  270. data/lib/pubid/iec/identifiers/working_document.rb +60 -26
  271. data/lib/pubid/iec/parser.rb +42 -73
  272. data/lib/pubid/iec/scheme.rb +71 -0
  273. data/lib/pubid/iec/single_identifier.rb +23 -15
  274. data/lib/pubid/iec/supplement_identifier.rb +67 -84
  275. data/lib/pubid/iec/urn_generator.rb +143 -195
  276. data/lib/pubid/iec/urn_parser.rb +246 -85
  277. data/lib/pubid/iec.rb +66 -45
  278. data/lib/pubid/ieee/aiee/builder.rb +3 -17
  279. data/lib/pubid/ieee/aiee/identifier.rb +62 -46
  280. data/lib/pubid/ieee/aiee/parser.rb +1 -1
  281. data/lib/pubid/ieee/builder.rb +81 -398
  282. data/lib/pubid/ieee/components/code.rb +0 -8
  283. data/lib/pubid/ieee/components/draft.rb +0 -54
  284. data/lib/pubid/ieee/components/relationship.rb +149 -5
  285. data/lib/pubid/ieee/identifier.rb +11 -3
  286. data/lib/pubid/ieee/identifiers/adopted_standard.rb +14 -62
  287. data/lib/pubid/ieee/identifiers/base.rb +547 -340
  288. data/lib/pubid/ieee/identifiers/conformance_identifier.rb +12 -6
  289. data/lib/pubid/ieee/identifiers/corrigendum.rb +12 -15
  290. data/lib/pubid/ieee/identifiers/csa_dual_published.rb +13 -24
  291. data/lib/pubid/ieee/identifiers/dual_identifier.rb +7 -3
  292. data/lib/pubid/ieee/identifiers/dual_published.rb +7 -58
  293. data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +11 -99
  294. data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +11 -25
  295. data/lib/pubid/ieee/identifiers/joint_development.rb +15 -66
  296. data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +24 -58
  297. data/lib/pubid/ieee/identifiers/nesc/base.rb +19 -90
  298. data/lib/pubid/ieee/identifiers/nesc/draft.rb +5 -20
  299. data/lib/pubid/ieee/identifiers/nesc/handbook.rb +5 -16
  300. data/lib/pubid/ieee/identifiers/nesc/redline.rb +2 -11
  301. data/lib/pubid/ieee/identifiers/nesc/standard.rb +3 -18
  302. data/lib/pubid/ieee/identifiers/nesc.rb +0 -1
  303. data/lib/pubid/ieee/identifiers/parenthetical_identifier.rb +9 -3
  304. data/lib/pubid/ieee/identifiers/project_draft_identifier.rb +6 -29
  305. data/lib/pubid/ieee/identifiers/redlined_standard.rb +11 -4
  306. data/lib/pubid/ieee/identifiers/si_standard.rb +39 -4
  307. data/lib/pubid/ieee/identifiers/standard.rb +2 -5
  308. data/lib/pubid/ieee/identifiers/supplement_identifier.rb +7 -26
  309. data/lib/pubid/ieee/identifiers.rb +1 -2
  310. data/lib/pubid/ieee/ire/builder.rb +6 -7
  311. data/lib/pubid/ieee/ire/identifier.rb +33 -48
  312. data/lib/pubid/ieee/ire/parser.rb +1 -1
  313. data/lib/pubid/ieee/nesc/builder.rb +20 -33
  314. data/lib/pubid/ieee/nesc/parser.rb +15 -16
  315. data/lib/pubid/ieee/parser.rb +44 -462
  316. data/lib/pubid/ieee/scheme.rb +90 -0
  317. data/lib/pubid/ieee/typed_stages.rb +1 -12
  318. data/lib/pubid/ieee/urn_generator.rb +8 -35
  319. data/lib/pubid/ieee.rb +2 -133
  320. data/lib/pubid/ieee_debug.rb +1 -0
  321. data/lib/pubid/iho/builder.rb +2 -2
  322. data/lib/pubid/iho/identifier.rb +17 -5
  323. data/lib/pubid/iho/identifiers/base.rb +30 -64
  324. data/lib/pubid/iho/identifiers/bibliographic.rb +5 -1
  325. data/lib/pubid/iho/identifiers/circular_letter.rb +5 -1
  326. data/lib/pubid/iho/identifiers/miscellaneous.rb +5 -1
  327. data/lib/pubid/iho/identifiers/publication.rb +5 -1
  328. data/lib/pubid/iho/identifiers/standard.rb +5 -1
  329. data/lib/pubid/iho/identifiers.rb +1 -0
  330. data/lib/pubid/iho/parser.rb +4 -4
  331. data/lib/pubid/iho/scheme.rb +29 -0
  332. data/lib/pubid/iho/urn_generator.rb +3 -3
  333. data/lib/pubid/iho.rb +3 -59
  334. data/lib/pubid/iso/builder.rb +57 -68
  335. data/lib/pubid/iso/bundled_identifier.rb +3 -56
  336. data/lib/pubid/iso/combined_identifier.rb +4 -6
  337. data/lib/pubid/iso/components/code.rb +19 -7
  338. data/lib/pubid/iso/components/publisher.rb +8 -10
  339. data/lib/pubid/iso/components.rb +4 -2
  340. data/lib/pubid/iso/identifier.rb +11 -260
  341. data/lib/pubid/iso/identifiers/addendum.rb +6 -9
  342. data/lib/pubid/iso/identifiers/amendment.rb +4 -8
  343. data/lib/pubid/iso/identifiers/base.rb +115 -0
  344. data/lib/pubid/iso/identifiers/corrigendum.rb +4 -4
  345. data/lib/pubid/iso/identifiers/data.rb +1 -0
  346. data/lib/pubid/iso/identifiers/directives.rb +2 -8
  347. data/lib/pubid/iso/identifiers/directives_supplement.rb +26 -55
  348. data/lib/pubid/iso/identifiers/extract.rb +2 -2
  349. data/lib/pubid/iso/identifiers/guide.rb +1 -0
  350. data/lib/pubid/iso/identifiers/international_standard.rb +4 -4
  351. data/lib/pubid/iso/identifiers/international_standardized_profile.rb +4 -4
  352. data/lib/pubid/iso/identifiers/international_workshop_agreement.rb +4 -10
  353. data/lib/pubid/iso/identifiers/pas.rb +2 -2
  354. data/lib/pubid/iso/identifiers/recommendation.rb +2 -2
  355. data/lib/pubid/iso/identifiers/supplement.rb +3 -11
  356. data/lib/pubid/iso/identifiers/tc_document.rb +15 -44
  357. data/lib/pubid/iso/identifiers/technical_report.rb +4 -4
  358. data/lib/pubid/iso/identifiers/technical_specification.rb +2 -2
  359. data/lib/pubid/iso/identifiers/technology_trends_assessments.rb +2 -2
  360. data/lib/pubid/iso/identifiers.rb +1 -0
  361. data/lib/pubid/iso/parser.rb +19 -43
  362. data/lib/pubid/iso/scheme.rb +187 -0
  363. data/lib/pubid/iso/single_identifier.rb +7 -6
  364. data/lib/pubid/iso/supplement_identifier.rb +3 -29
  365. data/lib/pubid/iso/urn_generator.rb +177 -78
  366. data/lib/pubid/iso/urn_parser.rb +10 -29
  367. data/lib/pubid/iso.rb +2 -188
  368. data/lib/pubid/itu/builder.rb +41 -230
  369. data/lib/pubid/itu/components/code.rb +12 -57
  370. data/lib/pubid/itu/components/sector.rb +4 -15
  371. data/lib/pubid/itu/components/series.rb +4 -0
  372. data/lib/pubid/itu/identifier.rb +51 -2
  373. data/lib/pubid/itu/identifiers/amendment.rb +31 -7
  374. data/lib/pubid/itu/identifiers/annex.rb +4 -13
  375. data/lib/pubid/itu/identifiers/base.rb +128 -456
  376. data/lib/pubid/itu/identifiers/combined_identifier.rb +25 -99
  377. data/lib/pubid/itu/identifiers/corrigendum.rb +25 -16
  378. data/lib/pubid/itu/identifiers/recommendation.rb +4 -3
  379. data/lib/pubid/itu/identifiers/special_publication.rb +3 -3
  380. data/lib/pubid/itu/identifiers/supplement.rb +16 -119
  381. data/lib/pubid/itu/identifiers.rb +1 -10
  382. data/lib/pubid/itu/model.rb +1 -1
  383. data/lib/pubid/itu/parser.rb +27 -481
  384. data/lib/pubid/itu/scheme.rb +174 -0
  385. data/lib/pubid/itu/urn_generator.rb +6 -36
  386. data/lib/pubid/itu.rb +2 -58
  387. data/lib/pubid/jcgm/builder.rb +19 -37
  388. data/lib/pubid/jcgm/identifier.rb +0 -10
  389. data/lib/pubid/jcgm/identifiers/amendment.rb +11 -0
  390. data/lib/pubid/jcgm/identifiers/gum_guide.rb +15 -3
  391. data/lib/pubid/jcgm/identifiers.rb +0 -2
  392. data/lib/pubid/jcgm/parser.rb +7 -74
  393. data/lib/pubid/jcgm/scheme.rb +60 -0
  394. data/lib/pubid/jcgm/single_identifier.rb +14 -84
  395. data/lib/pubid/jcgm/supplement_identifier.rb +4 -39
  396. data/lib/pubid/jcgm/urn_generator.rb +19 -25
  397. data/lib/pubid/jcgm.rb +2 -57
  398. data/lib/pubid/jis/builder.rb +52 -44
  399. data/lib/pubid/jis/components/code.rb +59 -0
  400. data/lib/pubid/{astm → jis}/components.rb +1 -1
  401. data/lib/pubid/jis/identifier.rb +5 -181
  402. data/lib/pubid/jis/identifiers/amendment.rb +1 -1
  403. data/lib/pubid/jis/identifiers/base.rb +72 -0
  404. data/lib/pubid/jis/identifiers/standard.rb +1 -2
  405. data/lib/pubid/jis/identifiers/technical_report.rb +1 -2
  406. data/lib/pubid/jis/identifiers/technical_specification.rb +1 -2
  407. data/lib/pubid/jis/identifiers.rb +1 -1
  408. data/lib/pubid/jis/parser.rb +6 -32
  409. data/lib/pubid/jis/scheme.rb +49 -0
  410. data/lib/pubid/jis/single_identifier.rb +12 -6
  411. data/lib/pubid/jis/supplement_identifier.rb +14 -17
  412. data/lib/pubid/jis.rb +2 -48
  413. data/lib/pubid/nist/builder.rb +1765 -146
  414. data/lib/pubid/nist/components/code.rb +20 -9
  415. data/lib/pubid/nist/components/edition.rb +0 -16
  416. data/lib/pubid/nist/components/publisher.rb +24 -0
  417. data/lib/pubid/nist/components/supplement.rb +21 -91
  418. data/lib/pubid/nist/components.rb +1 -0
  419. data/lib/pubid/nist/configuration.rb +2 -12
  420. data/lib/pubid/nist/identifiers/base.rb +417 -662
  421. data/lib/pubid/nist/identifiers/circular.rb +5 -17
  422. data/lib/pubid/nist/identifiers/circular_supplement.rb +6 -16
  423. data/lib/pubid/nist/identifiers/commercial_standard.rb +2 -3
  424. data/lib/pubid/nist/identifiers/commercial_standard_emergency.rb +5 -7
  425. data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +5 -18
  426. data/lib/pubid/nist/identifiers/crpl_report.rb +13 -16
  427. data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +17 -18
  428. data/lib/pubid/nist/identifiers/grant_contractor_report.rb +2 -3
  429. data/lib/pubid/nist/identifiers/handbook.rb +4 -12
  430. data/lib/pubid/nist/identifiers/internal_report.rb +7 -15
  431. data/lib/pubid/nist/identifiers/letter_circular.rb +2 -3
  432. data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +11 -20
  433. data/lib/pubid/nist/identifiers/monograph.rb +11 -22
  434. data/lib/pubid/nist/identifiers/ncstar.rb +2 -2
  435. data/lib/pubid/nist/identifiers/nsrds.rb +1 -1
  436. data/lib/pubid/nist/identifiers/owmwp.rb +1 -1
  437. data/lib/pubid/nist/identifiers/report.rb +10 -19
  438. data/lib/pubid/nist/identifiers/special_publication.rb +2 -12
  439. data/lib/pubid/nist/identifiers/technical_note.rb +3 -4
  440. data/lib/pubid/nist/identifiers.rb +1 -1
  441. data/lib/pubid/nist/parser.rb +429 -97
  442. data/lib/pubid/nist/scheme.rb +199 -0
  443. data/lib/pubid/nist/supplement_identifier.rb +34 -35
  444. data/lib/pubid/nist/urn_generator.rb +8 -14
  445. data/lib/pubid/nist.rb +5 -107
  446. data/lib/pubid/oiml/builder.rb +10 -91
  447. data/lib/pubid/oiml/components/code.rb +0 -17
  448. data/lib/pubid/oiml/identifier.rb +0 -53
  449. data/lib/pubid/oiml/identifiers/annex.rb +46 -13
  450. data/lib/pubid/oiml/identifiers/base.rb +36 -0
  451. data/lib/pubid/oiml/identifiers/basic_publication.rb +0 -2
  452. data/lib/pubid/oiml/identifiers/document.rb +0 -2
  453. data/lib/pubid/oiml/identifiers/expert_report.rb +0 -2
  454. data/lib/pubid/oiml/identifiers/guide.rb +0 -2
  455. data/lib/pubid/oiml/identifiers/recommendation.rb +0 -2
  456. data/lib/pubid/oiml/identifiers/seminar_report.rb +0 -2
  457. data/lib/pubid/oiml/identifiers/vocabulary.rb +0 -2
  458. data/lib/pubid/oiml/identifiers.rb +1 -3
  459. data/lib/pubid/oiml/parser.rb +17 -118
  460. data/lib/pubid/oiml/scheme.rb +46 -0
  461. data/lib/pubid/oiml/single_identifier.rb +43 -66
  462. data/lib/pubid/oiml/supplement_identifier.rb +17 -62
  463. data/lib/pubid/oiml/urn_generator.rb +8 -22
  464. data/lib/pubid/oiml.rb +1 -56
  465. data/lib/pubid/parser.rb +0 -1
  466. data/lib/pubid/parsers/mr_string.rb +7 -120
  467. data/lib/pubid/plateau/builder.rb +4 -8
  468. data/lib/pubid/plateau/identifiers/base.rb +36 -40
  469. data/lib/pubid/plateau/identifiers/handbook.rb +7 -1
  470. data/lib/pubid/plateau/identifiers/technical_report.rb +5 -1
  471. data/lib/pubid/plateau/identifiers.rb +1 -0
  472. data/lib/pubid/plateau/parser.rb +6 -16
  473. data/lib/pubid/plateau/scheme.rb +45 -0
  474. data/lib/pubid/plateau/supplement_identifier.rb +15 -11
  475. data/lib/pubid/plateau.rb +1 -58
  476. data/lib/pubid/renderers/base.rb +0 -47
  477. data/lib/pubid/renderers/directives_renderer.rb +14 -27
  478. data/lib/pubid/renderers/guide_renderer.rb +1 -7
  479. data/lib/pubid/renderers/human_readable.rb +9 -34
  480. data/lib/pubid/renderers/iwa_renderer.rb +1 -5
  481. data/lib/pubid/renderers/mr_string.rb +6 -54
  482. data/lib/pubid/renderers/supplement_renderer.rb +2 -5
  483. data/lib/pubid/renderers.rb +0 -1
  484. data/lib/pubid/rendering/base.rb +73 -0
  485. data/lib/pubid/rendering/common.rb +211 -0
  486. data/lib/pubid/rendering/context.rb +21 -33
  487. data/lib/pubid/rendering/format.rb +25 -0
  488. data/lib/pubid/rendering/numbering.rb +7 -25
  489. data/lib/pubid/rendering/supplement.rb +4 -4
  490. data/lib/pubid/rendering.rb +3 -0
  491. data/lib/pubid/sae/builder.rb +1 -1
  492. data/lib/pubid/sae/components/date.rb +0 -8
  493. data/lib/pubid/sae/components/type.rb +1 -5
  494. data/lib/pubid/sae/identifier.rb +12 -2
  495. data/lib/pubid/sae/identifiers/base.rb +28 -33
  496. data/lib/pubid/sae/identifiers.rb +1 -0
  497. data/lib/pubid/sae/parser.rb +1 -1
  498. data/lib/pubid/sae/scheme.rb +47 -0
  499. data/lib/pubid/sae/urn_generator.rb +10 -2
  500. data/lib/pubid/sae.rb +2 -49
  501. data/lib/pubid/scheme.rb +207 -0
  502. data/lib/pubid/urn_generator/base.rb +12 -12
  503. data/lib/pubid/version.rb +1 -1
  504. data/lib/pubid.rb +10 -424
  505. data/lib/tasks/export.rake +5 -6
  506. data/lib/tasks/website-data.json +1796 -1854
  507. metadata +45 -307
  508. data/data/bipm/update_codes.yaml +0 -9
  509. data/data/nist/series.yaml +0 -155
  510. data/lib/pubid/adobe/builder.rb +0 -52
  511. data/lib/pubid/adobe/identifier.rb +0 -47
  512. data/lib/pubid/adobe/identifiers/publication.rb +0 -31
  513. data/lib/pubid/adobe/identifiers/tech_note.rb +0 -32
  514. data/lib/pubid/adobe/identifiers.rb +0 -10
  515. data/lib/pubid/adobe/parser.rb +0 -136
  516. data/lib/pubid/adobe/renderer.rb +0 -39
  517. data/lib/pubid/adobe/urn_generator.rb +0 -42
  518. data/lib/pubid/adobe/urn_parser.rb +0 -69
  519. data/lib/pubid/adobe.rb +0 -60
  520. data/lib/pubid/amca/renderer.rb +0 -82
  521. data/lib/pubid/amca/urn_parser.rb +0 -28
  522. data/lib/pubid/ansi/renderer.rb +0 -53
  523. data/lib/pubid/ansi/urn_parser.rb +0 -23
  524. data/lib/pubid/api/identifiers.rb +0 -18
  525. data/lib/pubid/api/renderer.rb +0 -98
  526. data/lib/pubid/api/urn_parser.rb +0 -35
  527. data/lib/pubid/ashrae/renderer.rb +0 -117
  528. data/lib/pubid/ashrae/urn_parser.rb +0 -27
  529. data/lib/pubid/asme/renderer.rb +0 -66
  530. data/lib/pubid/asme/urn_parser.rb +0 -31
  531. data/lib/pubid/astm/identifiers/code_number.rb +0 -81
  532. data/lib/pubid/astm/identifiers.rb +0 -19
  533. data/lib/pubid/astm/renderer.rb +0 -172
  534. data/lib/pubid/astm/urn_parser.rb +0 -30
  535. data/lib/pubid/bipm/builder.rb +0 -163
  536. data/lib/pubid/bipm/identifier.rb +0 -285
  537. data/lib/pubid/bipm/identifiers/committee_document.rb +0 -36
  538. data/lib/pubid/bipm/identifiers/guide.rb +0 -35
  539. data/lib/pubid/bipm/identifiers/meeting.rb +0 -53
  540. data/lib/pubid/bipm/identifiers/mep.rb +0 -33
  541. data/lib/pubid/bipm/identifiers/metrologia_article.rb +0 -48
  542. data/lib/pubid/bipm/identifiers/si_brochure.rb +0 -33
  543. data/lib/pubid/bipm/identifiers.rb +0 -15
  544. data/lib/pubid/bipm/parser.rb +0 -237
  545. data/lib/pubid/bipm/renderer.rb +0 -118
  546. data/lib/pubid/bipm/urn_generator.rb +0 -58
  547. data/lib/pubid/bipm/urn_parser.rb +0 -60
  548. data/lib/pubid/bipm.rb +0 -91
  549. data/lib/pubid/bsi/renderer.rb +0 -1064
  550. data/lib/pubid/bsi/urn_parser.rb +0 -52
  551. data/lib/pubid/calconnect/builder.rb +0 -38
  552. data/lib/pubid/calconnect/identifier.rb +0 -121
  553. data/lib/pubid/calconnect/identifiers/standard.rb +0 -29
  554. data/lib/pubid/calconnect/identifiers.rb +0 -9
  555. data/lib/pubid/calconnect/parser.rb +0 -54
  556. data/lib/pubid/calconnect/renderer.rb +0 -36
  557. data/lib/pubid/calconnect/urn_generator.rb +0 -33
  558. data/lib/pubid/calconnect/urn_parser.rb +0 -34
  559. data/lib/pubid/calconnect.rb +0 -82
  560. data/lib/pubid/ccsds/urn_parser.rb +0 -20
  561. data/lib/pubid/cen_cenelec/renderer.rb +0 -261
  562. data/lib/pubid/cen_cenelec/urn_parser.rb +0 -28
  563. data/lib/pubid/cie/identifiers/code_attributes.rb +0 -52
  564. data/lib/pubid/cie/identifiers/proceedings.rb +0 -41
  565. data/lib/pubid/cie/urn_parser.rb +0 -28
  566. data/lib/pubid/components/adoption.rb +0 -104
  567. data/lib/pubid/components/iteration.rb +0 -32
  568. data/lib/pubid/components/relationship.rb +0 -151
  569. data/lib/pubid/components/supplement.rb +0 -184
  570. data/lib/pubid/csa/renderer.rb +0 -300
  571. data/lib/pubid/csa/urn_parser.rb +0 -33
  572. data/lib/pubid/doi/builder.rb +0 -18
  573. data/lib/pubid/doi/identifier.rb +0 -49
  574. data/lib/pubid/doi/identifiers/resource.rb +0 -30
  575. data/lib/pubid/doi/identifiers.rb +0 -9
  576. data/lib/pubid/doi/parser.rb +0 -52
  577. data/lib/pubid/doi/renderer.rb +0 -13
  578. data/lib/pubid/doi.rb +0 -55
  579. data/lib/pubid/easc/builder.rb +0 -55
  580. data/lib/pubid/easc/identifier.rb +0 -59
  581. data/lib/pubid/easc/identifiers/pmg.rb +0 -20
  582. data/lib/pubid/easc/identifiers/rmg.rb +0 -19
  583. data/lib/pubid/easc/identifiers.rb +0 -10
  584. data/lib/pubid/easc/parser.rb +0 -88
  585. data/lib/pubid/easc/renderer.rb +0 -48
  586. data/lib/pubid/easc/urn_generator.rb +0 -46
  587. data/lib/pubid/easc/urn_parser.rb +0 -57
  588. data/lib/pubid/easc.rb +0 -52
  589. data/lib/pubid/ecma/builder.rb +0 -45
  590. data/lib/pubid/ecma/identifier.rb +0 -147
  591. data/lib/pubid/ecma/identifiers/memento.rb +0 -30
  592. data/lib/pubid/ecma/identifiers/standard.rb +0 -31
  593. data/lib/pubid/ecma/identifiers/technical_report.rb +0 -31
  594. data/lib/pubid/ecma/identifiers.rb +0 -11
  595. data/lib/pubid/ecma/parser.rb +0 -76
  596. data/lib/pubid/ecma/renderer.rb +0 -67
  597. data/lib/pubid/ecma/urn_generator.rb +0 -46
  598. data/lib/pubid/ecma/urn_parser.rb +0 -51
  599. data/lib/pubid/ecma.rb +0 -67
  600. data/lib/pubid/errors.rb +0 -79
  601. data/lib/pubid/etsi/renderer.rb +0 -48
  602. data/lib/pubid/etsi/urn_parser.rb +0 -34
  603. data/lib/pubid/gb/builder.rb +0 -45
  604. data/lib/pubid/gb/identifier.rb +0 -67
  605. data/lib/pubid/gb/identifiers/standard.rb +0 -34
  606. data/lib/pubid/gb/identifiers.rb +0 -9
  607. data/lib/pubid/gb/parser.rb +0 -63
  608. data/lib/pubid/gb/renderer.rb +0 -35
  609. data/lib/pubid/gb.rb +0 -87
  610. data/lib/pubid/gost/builder.rb +0 -148
  611. data/lib/pubid/gost/identifier.rb +0 -47
  612. data/lib/pubid/gost/identifiers/foreign_reference.rb +0 -25
  613. data/lib/pubid/gost/identifiers/harmonized.rb +0 -39
  614. data/lib/pubid/gost/identifiers/identical_adoption.rb +0 -39
  615. data/lib/pubid/gost/identifiers/interstate_standard.rb +0 -20
  616. data/lib/pubid/gost/identifiers/national_standard.rb +0 -19
  617. data/lib/pubid/gost/identifiers.rb +0 -13
  618. data/lib/pubid/gost/parser.rb +0 -105
  619. data/lib/pubid/gost/renderer.rb +0 -48
  620. data/lib/pubid/gost/urn_generator.rb +0 -46
  621. data/lib/pubid/gost/urn_parser.rb +0 -52
  622. data/lib/pubid/gost.rb +0 -49
  623. data/lib/pubid/iala/builder.rb +0 -102
  624. data/lib/pubid/iala/identifier.rb +0 -90
  625. data/lib/pubid/iala/identifiers/advice.rb +0 -15
  626. data/lib/pubid/iala/identifiers/annex.rb +0 -57
  627. data/lib/pubid/iala/identifiers/general_assembly.rb +0 -19
  628. data/lib/pubid/iala/identifiers/guideline.rb +0 -17
  629. data/lib/pubid/iala/identifiers/letter.rb +0 -16
  630. data/lib/pubid/iala/identifiers/manual.rb +0 -18
  631. data/lib/pubid/iala/identifiers/model_course.rb +0 -17
  632. data/lib/pubid/iala/identifiers/recommendation.rb +0 -17
  633. data/lib/pubid/iala/identifiers/report.rb +0 -16
  634. data/lib/pubid/iala/identifiers/resolution.rb +0 -16
  635. data/lib/pubid/iala/identifiers/standard.rb +0 -17
  636. data/lib/pubid/iala/identifiers.rb +0 -19
  637. data/lib/pubid/iala/parser.rb +0 -138
  638. data/lib/pubid/iala/renderer.rb +0 -36
  639. data/lib/pubid/iala/urn_generator.rb +0 -49
  640. data/lib/pubid/iala/urn_parser.rb +0 -67
  641. data/lib/pubid/iala.rb +0 -71
  642. data/lib/pubid/iana/builder.rb +0 -22
  643. data/lib/pubid/iana/identifier.rb +0 -140
  644. data/lib/pubid/iana/identifiers/registry.rb +0 -69
  645. data/lib/pubid/iana/identifiers.rb +0 -9
  646. data/lib/pubid/iana/parser.rb +0 -38
  647. data/lib/pubid/iana/renderer.rb +0 -32
  648. data/lib/pubid/iana/urn_generator.rb +0 -19
  649. data/lib/pubid/iana/urn_parser.rb +0 -24
  650. data/lib/pubid/iana.rb +0 -69
  651. data/lib/pubid/idf/renderer.rb +0 -84
  652. data/lib/pubid/idf/urn_parser.rb +0 -25
  653. data/lib/pubid/iec/components.rb +0 -14
  654. data/lib/pubid/iec/identifiers/technical_group.rb +0 -30
  655. data/lib/pubid/iec/identifiers.rb +0 -31
  656. data/lib/pubid/iec/renderer.rb +0 -267
  657. data/lib/pubid/ieee/compaction.rb +0 -121
  658. data/lib/pubid/ieee/identifiers/amendment.rb +0 -40
  659. data/lib/pubid/ieee/identifiers/code_number.rb +0 -82
  660. data/lib/pubid/ieee/identifiers/nesc/edition.rb +0 -32
  661. data/lib/pubid/ieee/pre_parser.rb +0 -301
  662. data/lib/pubid/ieee/renderer.rb +0 -408
  663. data/lib/pubid/ieee/urn_parser.rb +0 -34
  664. data/lib/pubid/ietf/builder.rb +0 -78
  665. data/lib/pubid/ietf/identifier.rb +0 -5
  666. data/lib/pubid/ietf/identifiers/base.rb +0 -72
  667. data/lib/pubid/ietf/identifiers/bcp.rb +0 -36
  668. data/lib/pubid/ietf/identifiers/fyi.rb +0 -36
  669. data/lib/pubid/ietf/identifiers/internet_draft.rb +0 -45
  670. data/lib/pubid/ietf/identifiers/rfc.rb +0 -27
  671. data/lib/pubid/ietf/identifiers/serialization.rb +0 -51
  672. data/lib/pubid/ietf/identifiers/std.rb +0 -36
  673. data/lib/pubid/ietf/identifiers.rb +0 -14
  674. data/lib/pubid/ietf/parser.rb +0 -61
  675. data/lib/pubid/ietf/renderer.rb +0 -64
  676. data/lib/pubid/ietf/urn_generator.rb +0 -37
  677. data/lib/pubid/ietf/urn_parser.rb +0 -43
  678. data/lib/pubid/ietf.rb +0 -85
  679. data/lib/pubid/iho/renderer.rb +0 -30
  680. data/lib/pubid/iho/urn_parser.rb +0 -58
  681. data/lib/pubid/isbn/builder.rb +0 -44
  682. data/lib/pubid/isbn/check_digit.rb +0 -53
  683. data/lib/pubid/isbn/identifier.rb +0 -81
  684. data/lib/pubid/isbn/identifiers/book.rb +0 -30
  685. data/lib/pubid/isbn/identifiers.rb +0 -9
  686. data/lib/pubid/isbn/parser.rb +0 -45
  687. data/lib/pubid/isbn/renderer.rb +0 -16
  688. data/lib/pubid/isbn.rb +0 -52
  689. data/lib/pubid/iso/normalizer.rb +0 -89
  690. data/lib/pubid/itu/components/designation.rb +0 -35
  691. data/lib/pubid/itu/components.rb +0 -12
  692. data/lib/pubid/itu/identifiers/addendum.rb +0 -15
  693. data/lib/pubid/itu/identifiers/annex_of_recommendation.rb +0 -87
  694. data/lib/pubid/itu/identifiers/appendix_of_recommendation.rb +0 -92
  695. data/lib/pubid/itu/identifiers/errata.rb +0 -15
  696. data/lib/pubid/itu/identifiers/handbook.rb +0 -38
  697. data/lib/pubid/itu/identifiers/question.rb +0 -63
  698. data/lib/pubid/itu/identifiers/report.rb +0 -39
  699. data/lib/pubid/itu/identifiers/standard_serialization.rb +0 -58
  700. data/lib/pubid/itu/urn_parser.rb +0 -31
  701. data/lib/pubid/jcgm/identifiers/corrigendum.rb +0 -34
  702. data/lib/pubid/jcgm/identifiers/meeting.rb +0 -47
  703. data/lib/pubid/jcgm/renderer.rb +0 -89
  704. data/lib/pubid/jcgm/urn_parser.rb +0 -177
  705. data/lib/pubid/jis/identifiers/corrigendum.rb +0 -16
  706. data/lib/pubid/jis/renderer.rb +0 -69
  707. data/lib/pubid/jis/urn_parser.rb +0 -23
  708. data/lib/pubid/nist/caster.rb +0 -1234
  709. data/lib/pubid/nist/circular_supplement_builder.rb +0 -293
  710. data/lib/pubid/nist/identifier.rb +0 -8
  711. data/lib/pubid/nist/identifiers/dated_document.rb +0 -49
  712. data/lib/pubid/nist/parser_output_normalizer.rb +0 -233
  713. data/lib/pubid/nist/preprocessor.rb +0 -443
  714. data/lib/pubid/nist/renderer.rb +0 -43
  715. data/lib/pubid/nist/router.rb +0 -149
  716. data/lib/pubid/nist/series/base.rb +0 -58
  717. data/lib/pubid/nist/series/crpl.rb +0 -13
  718. data/lib/pubid/nist/series/fips.rb +0 -14
  719. data/lib/pubid/nist/series/ir.rb +0 -57
  720. data/lib/pubid/nist/series/letter_preserving.rb +0 -15
  721. data/lib/pubid/nist/series/mono.rb +0 -19
  722. data/lib/pubid/nist/series/ncstar.rb +0 -20
  723. data/lib/pubid/nist/series.rb +0 -49
  724. data/lib/pubid/nist/urn_parser.rb +0 -67
  725. data/lib/pubid/oasis/builder.rb +0 -79
  726. data/lib/pubid/oasis/identifier.rb +0 -160
  727. data/lib/pubid/oasis/identifiers/standard.rb +0 -29
  728. data/lib/pubid/oasis/identifiers.rb +0 -9
  729. data/lib/pubid/oasis/parser.rb +0 -34
  730. data/lib/pubid/oasis/renderer.rb +0 -29
  731. data/lib/pubid/oasis/urn_generator.rb +0 -25
  732. data/lib/pubid/oasis/urn_parser.rb +0 -22
  733. data/lib/pubid/oasis.rb +0 -79
  734. data/lib/pubid/ogc/builder.rb +0 -33
  735. data/lib/pubid/ogc/identifier.rb +0 -81
  736. data/lib/pubid/ogc/identifiers/document.rb +0 -26
  737. data/lib/pubid/ogc/identifiers.rb +0 -10
  738. data/lib/pubid/ogc/parser.rb +0 -40
  739. data/lib/pubid/ogc/renderer.rb +0 -33
  740. data/lib/pubid/ogc/urn_generator.rb +0 -14
  741. data/lib/pubid/ogc/urn_parser.rb +0 -22
  742. data/lib/pubid/ogc.rb +0 -71
  743. data/lib/pubid/oiml/identifiers/bulletin.rb +0 -137
  744. data/lib/pubid/oiml/identifiers/code_number.rb +0 -90
  745. data/lib/pubid/oiml/identifiers/errata.rb +0 -15
  746. data/lib/pubid/oiml/renderer.rb +0 -232
  747. data/lib/pubid/oiml/urn_parser.rb +0 -39
  748. data/lib/pubid/omg/builder.rb +0 -19
  749. data/lib/pubid/omg/identifier.rb +0 -47
  750. data/lib/pubid/omg/identifiers/specification.rb +0 -32
  751. data/lib/pubid/omg/identifiers.rb +0 -9
  752. data/lib/pubid/omg/parser.rb +0 -40
  753. data/lib/pubid/omg/renderer.rb +0 -19
  754. data/lib/pubid/omg.rb +0 -51
  755. data/lib/pubid/parser/grammar.rb +0 -74
  756. data/lib/pubid/plateau/identifier.rb +0 -4
  757. data/lib/pubid/plateau/renderer.rb +0 -51
  758. data/lib/pubid/plateau/urn_parser.rb +0 -43
  759. data/lib/pubid/prefixes_support.rb +0 -51
  760. data/lib/pubid/renderers/annotator.rb +0 -233
  761. data/lib/pubid/sae/renderer.rb +0 -36
  762. data/lib/pubid/sae/urn_parser.rb +0 -36
  763. data/lib/pubid/tgpp/builder.rb +0 -41
  764. data/lib/pubid/tgpp/identifier.rb +0 -107
  765. data/lib/pubid/tgpp/identifiers/technical_report.rb +0 -32
  766. data/lib/pubid/tgpp/identifiers/technical_specification.rb +0 -33
  767. data/lib/pubid/tgpp/identifiers.rb +0 -11
  768. data/lib/pubid/tgpp/parser.rb +0 -78
  769. data/lib/pubid/tgpp/renderer.rb +0 -52
  770. data/lib/pubid/tgpp/urn_generator.rb +0 -39
  771. data/lib/pubid/tgpp/urn_parser.rb +0 -30
  772. data/lib/pubid/tgpp.rb +0 -83
  773. data/lib/pubid/type_resolver.rb +0 -59
  774. data/lib/pubid/un/builder.rb +0 -42
  775. data/lib/pubid/un/identifier.rb +0 -40
  776. data/lib/pubid/un/identifiers/document.rb +0 -24
  777. data/lib/pubid/un/identifiers.rb +0 -9
  778. data/lib/pubid/un/parser.rb +0 -25
  779. data/lib/pubid/un/renderer.rb +0 -11
  780. data/lib/pubid/un.rb +0 -46
  781. data/lib/pubid/urn_parser/base.rb +0 -81
  782. data/lib/pubid/urn_parser/errors.rb +0 -16
  783. data/lib/pubid/urn_parser.rb +0 -14
  784. data/lib/pubid/w3c/builder.rb +0 -55
  785. data/lib/pubid/w3c/identifier.rb +0 -130
  786. data/lib/pubid/w3c/identifiers/candidate_recommendation.rb +0 -31
  787. data/lib/pubid/w3c/identifiers/candidate_recommendation_draft.rb +0 -31
  788. data/lib/pubid/w3c/identifiers/draft_note.rb +0 -31
  789. data/lib/pubid/w3c/identifiers/note.rb +0 -30
  790. data/lib/pubid/w3c/identifiers/obsolete_recommendation.rb +0 -31
  791. data/lib/pubid/w3c/identifiers/proposed_edited_recommendation.rb +0 -31
  792. data/lib/pubid/w3c/identifiers/proposed_recommendation.rb +0 -31
  793. data/lib/pubid/w3c/identifiers/recommendation.rb +0 -31
  794. data/lib/pubid/w3c/identifiers/standard.rb +0 -12
  795. data/lib/pubid/w3c/identifiers/superseded_recommendation.rb +0 -31
  796. data/lib/pubid/w3c/identifiers/working_draft.rb +0 -30
  797. data/lib/pubid/w3c/identifiers.rb +0 -25
  798. data/lib/pubid/w3c/parser.rb +0 -43
  799. data/lib/pubid/w3c/renderer.rb +0 -35
  800. data/lib/pubid/w3c/urn_generator.rb +0 -18
  801. data/lib/pubid/w3c/urn_parser.rb +0 -36
  802. data/lib/pubid/w3c.rb +0 -67
  803. data/lib/pubid/xsf/builder.rb +0 -17
  804. data/lib/pubid/xsf/identifier.rb +0 -66
  805. data/lib/pubid/xsf/identifiers/xep.rb +0 -31
  806. data/lib/pubid/xsf/identifiers.rb +0 -9
  807. data/lib/pubid/xsf/parser.rb +0 -25
  808. data/lib/pubid/xsf/renderer.rb +0 -23
  809. data/lib/pubid/xsf/urn_generator.rb +0 -13
  810. data/lib/pubid/xsf/urn_parser.rb +0 -18
  811. data/lib/pubid/xsf.rb +0 -81
@@ -1,341 +1,21 @@
1
+ require_relative "../identifier"
1
2
  # frozen_string_literal: true
3
+ require_relative "../components/typed_stage"
2
4
 
3
5
  module Pubid
4
6
  module Iec
5
- # Mixin for pure wrapper identifiers (Vap/Consolidated/Sheet) whose common
6
- # ID fields are delegated to a wrapped base. lutaml merges a subclass's
7
- # key_value block onto the parent's, so without this the delegated fields
8
- # would serialize twice — once at the wrapper's top level and once inside
9
- # "base". No-op the delegated maps so they serialize once. (Mirrors
10
- # Iso::BundledIdentifier.) Fragment keeps its own stage/edition, so it
11
- # suppresses a subset inline instead of including this.
12
- module DelegatedFieldSuppression
13
- def number_to_kv(_model, _doc); end
14
- def part_to_kv(_model, _doc); end
15
- def subpart_to_kv(_model, _doc); end
16
- def stage_iteration_to_kv(_model, _doc); end
17
- def year_to_kv(_model, _doc); end
18
- def publisher_to_kv(_model, _doc); end
19
- def copublishers_to_kv(_model, _doc); end
20
- def stage_to_kv(_model, _doc); end
21
- end
22
-
23
7
  class Identifier < ::Pubid::Identifier
24
- # Override base types with IEC-specific ones. publisher defaults to the
25
- # type's implied publisher (IEC), so an omitted publisher key reconstructs
26
- # correctly on from_hash. number/part/subpart are IEC codes.
27
- attribute :publisher, ::Pubid::Iec::Components::Publisher,
28
- default: -> { self.class.default_publisher }
29
- attribute :copublishers, ::Pubid::Iec::Components::Publisher,
30
- collection: true
31
- attribute :number, ::Pubid::Iec::Components::Code
32
- attribute :part, ::Pubid::Iec::Components::Code
33
- attribute :subpart, ::Pubid::Iec::Components::Code
34
-
35
- # The publisher implied when none is serialized (IEC for every type).
36
- def self.default_publisher
37
- ::Pubid::Iec::Components::Publisher.new(body: "IEC")
38
- end
39
-
40
- # typed_stage is the single source of truth for stage (and, with the
41
- # class, the doctype). Default to the class's published typed_stage so an
42
- # omitted "stage" key reconstructs the published state on from_hash.
43
- attribute :typed_stage, ::Pubid::Components::TypedStage,
44
- default: -> { self.class.published_typed_stage }
45
-
46
- # The class's published typed_stage (canonical surface form), or nil for
47
- # types without a published stage.
48
- #
49
- # `original_abbr` is deliberately LEFT NIL. It records the spelling the
50
- # input used, it is not serialized, and the parse path (Builder#
51
- # locate_typed_stage) never writes it — so setting it here alone made
52
- # `from_hash(to_hash) != parse` for every IEC identifier. The `dup` stays:
53
- # TYPED_STAGES is frozen, its elements are not.
54
- def self.published_typed_stage
55
- return nil unless const_defined?(:TYPED_STAGES)
56
-
57
- ts = self::TYPED_STAGES.find { |t| t.stage_code.to_s == "published" }
58
- ts&.dup
59
- end
60
-
61
- # type and generic stage are derived from typed_stage, never stored — so
62
- # the doctype (fixed by the class / _type) can't be lost when "stage" is
63
- # omitted for the published default.
64
- def type
65
- typed_stage&.to_type
66
- end
67
-
68
- def stage
69
- typed_stage&.to_stage
70
- end
71
-
72
- # Polymorphic type map for lutaml::Model key_value serialization. Maps
73
- # polymorphic_name -> class name for from_hash dispatch. Includes the
74
- # compound wrappers (Consolidated/Vap/Sheet) and the synthetic
75
- # SingleIdentifier base, which appear as nested `_type` values even though
76
- # they aren't identifier_types. Validated against build_type_map by spec.
77
- IEC_TYPE_MAP = {
78
- "pubid:iec:international-standard" => "Pubid::Iec::Identifiers::InternationalStandard",
79
- "pubid:iec:technical-specification" => "Pubid::Iec::Identifiers::TechnicalSpecification",
80
- "pubid:iec:technical-report" => "Pubid::Iec::Identifiers::TechnicalReport",
81
- "pubid:iec:publicly-available-specification" => "Pubid::Iec::Identifiers::PubliclyAvailableSpecification",
82
- "pubid:iec:guide" => "Pubid::Iec::Identifiers::Guide",
83
- "pubid:iec:operational-document" => "Pubid::Iec::Identifiers::OperationalDocument",
84
- "pubid:iec:component-specification" => "Pubid::Iec::Identifiers::ComponentSpecification",
85
- "pubid:iec:conformity-assessment" => "Pubid::Iec::Identifiers::ConformityAssessment",
86
- "pubid:iec:societal-technology-trend-report" => "Pubid::Iec::Identifiers::SocietalTechnologyTrendReport",
87
- "pubid:iec:systems-reference-document" => "Pubid::Iec::Identifiers::SystemsReferenceDocument",
88
- "pubid:iec:technology-report" => "Pubid::Iec::Identifiers::TechnologyReport",
89
- "pubid:iec:technical-group" => "Pubid::Iec::Identifiers::TechnicalGroup",
90
- "pubid:iec:test-report-form" => "Pubid::Iec::Identifiers::TestReportForm",
91
- "pubid:iec:white-paper" => "Pubid::Iec::Identifiers::WhitePaper",
92
- "pubid:iec:working-document" => "Pubid::Iec::Identifiers::WorkingDocument",
93
- "pubid:iec:amendment" => "Pubid::Iec::Identifiers::Amendment",
94
- "pubid:iec:corrigendum" => "Pubid::Iec::Identifiers::Corrigendum",
95
- "pubid:iec:interpretation-sheet" => "Pubid::Iec::Identifiers::InterpretationSheet",
96
- "pubid:iec:fragment-identifier" => "Pubid::Iec::Identifiers::FragmentIdentifier",
97
- "pubid:iec:consolidated-identifier" => "Pubid::Iec::Identifiers::ConsolidatedIdentifier",
98
- "pubid:iec:vap-identifier" => "Pubid::Iec::Identifiers::VapIdentifier",
99
- "pubid:iec:sheet-identifier" => "Pubid::Iec::Identifiers::SheetIdentifier",
100
- "pubid:iec:base" => "Pubid::Iec::Identifiers::Base",
101
- "pubid:iec:single-identifier" => "Pubid::Iec::SingleIdentifier",
102
- }.freeze
103
-
104
- # SingleIdentifier lives outside Pubid::Iec::Identifiers but appears as a
105
- # nested `_type`, so the shared polymorphic_type_map needs it explicitly
106
- # (see Pubid::Identifier#additional_identifier_classes).
107
- def self.additional_identifier_classes
108
- [Pubid::Iec::SingleIdentifier]
109
- end
110
- private_class_method :additional_identifier_classes
111
-
112
- # Build the type map from the live class list, for the validation spec.
113
- def self.build_type_map
114
- types = Pubid::Iec.identifier_types
115
- extra = [Identifiers::ConsolidatedIdentifier, Identifiers::VapIdentifier,
116
- Identifiers::SheetIdentifier, Identifiers::Base, SingleIdentifier]
117
- (types + extra).uniq.to_h { |klass| [klass.polymorphic_name, klass.name] }
118
- end
119
-
120
- # The base Pubid::Identifier no longer auto-maps attributes, so each
121
- # flavor's top class declares its own key_value mapping. Subclasses merge
122
- # their own blocks on top of this one (e.g. SupplementIdentifier adds
123
- # base; VapIdentifier adds vap), so list every base attribute IEC
124
- # serializes here once. Code/Date are flattened to plain scalars; the
125
- # verbose type/stage trees are not mapped (type/stage are recomputed from
126
- # typed_stage, which serializes as just its code under "stage").
127
- key_value do
128
- map "_type", to: :_type, polymorphic_map: IEC_TYPE_MAP
129
- # Code components serialize as their plain string value, not {value,...}.
130
- map "number", with: { to: :number_to_kv, from: :number_from_kv }
131
- map "part", with: { to: :part_to_kv, from: :part_from_kv }
132
- map "subpart", with: { to: :subpart_to_kv, from: :subpart_from_kv }
133
- map "stage_iteration",
134
- with: { to: :stage_iteration_to_kv, from: :stage_iteration_from_kv }
135
- # date serialized flat as year/month/day, nils omitted.
136
- map "year", with: { to: :year_to_kv, from: :year_from_kv }
137
- map "month", with: { to: :month_to_kv, from: :month_from_kv }
138
- map "day", with: { to: :day_to_kv, from: :day_from_kv }
139
- # IEC undated reference (e.g. IEC 60050:--). The `false` default is
140
- # omitted; only the meaningful `true` round-trips via to_hash.
141
- map "undated", with: { to: :undated_to_kv, from: :undated_from_kv }
142
- map "edition", to: :edition, render_default: false
143
- map "languages", to: :languages, render_default: false
144
- # publisher emitted only when the primary isn't the IEC default;
145
- # copublishers (the other bodies) as an array, omitted when empty.
146
- map "publisher", with: { to: :publisher_to_kv, from: :publisher_from_kv }
147
- map "copublishers",
148
- with: { to: :copublishers_to_kv, from: :copublishers_from_kv }
149
- # `type` and generic `stage` are fully derived from `typed_stage`, so we
150
- # serialize only the unique typed-stage code under "stage" and recompute
151
- # the rest on load. _type already pins the document type.
152
- map "stage", with: { to: :stage_to_kv, from: :stage_from_kv }
153
- # Omit the `false` default; only the meaningful `true` is serialized.
154
- map "all_parts", with: { to: :all_parts_to_kv, from: :all_parts_from_kv }
155
- end
156
-
157
- # --- Code components <-> plain string ---
158
- def number_to_kv(model, doc) = emit_code(doc, "number", model.number)
159
- def number_from_kv(model, value) = model.number = build_code(value)
160
- def part_to_kv(model, doc) = emit_code(doc, "part", model.part)
161
- def part_from_kv(model, value) = model.part = build_code(value)
162
- def subpart_to_kv(model, doc) = emit_code(doc, "subpart", model.subpart)
163
- def subpart_from_kv(model, value) = model.subpart = build_code(value)
164
-
165
- def emit_code(doc, key, code)
166
- v = code.is_a?(::Pubid::Components::Code) ? code.value : code
167
- return if v.nil? || v.to_s.empty?
168
-
169
- doc.add_child(Lutaml::KeyValue::DataModel::Element.new(key, v.to_s))
170
- end
171
-
172
- def build_code(value)
173
- return if value.nil? || value.to_s.empty?
174
-
175
- ::Pubid::Iec::Components::Code.new(value: value.to_s)
176
- end
177
-
178
- def stage_iteration_to_kv(model, doc)
179
- iter = model.stage_iteration
180
- v = iter.is_a?(::Pubid::Components::Iteration) ? iter.number : iter
181
- return if v.nil? || v.to_s.empty?
182
-
183
- doc.add_child(Lutaml::KeyValue::DataModel::Element.new("stage_iteration",
184
- v.to_s))
185
- end
186
-
187
- def stage_iteration_from_kv(model, value)
188
- return if value.nil? || value.to_s.empty?
189
-
190
- model.stage_iteration =
191
- ::Pubid::Components::Iteration.new(number: value.to_s)
192
- end
193
-
194
- # --- date serialized flat as year/month/day ---
195
- def year_to_kv(model, doc)
196
- y = model.date&.year
197
- return if y.nil? || y.to_s.empty?
198
-
199
- doc.add_child(Lutaml::KeyValue::DataModel::Element.new("year", y.to_s))
200
- end
201
-
202
- def year_from_kv(model, value)
203
- return if value.nil? || value.to_s.empty?
204
-
205
- (model.date ||= ::Pubid::Components::Date.new).year = value.to_s
206
- end
207
-
208
- def month_to_kv(model, doc)
209
- m = model.date&.month
210
- return if m.nil? || m.to_s.empty?
211
-
212
- doc.add_child(Lutaml::KeyValue::DataModel::Element.new("month", m.to_s))
213
- end
214
-
215
- def month_from_kv(model, value)
216
- return if value.nil? || value.to_s.empty?
217
-
218
- (model.date ||= ::Pubid::Components::Date.new).month = value.to_s
219
- end
220
-
221
- def day_to_kv(model, doc)
222
- d = model.date&.day
223
- return if d.nil? || d.to_s.empty?
224
-
225
- doc.add_child(Lutaml::KeyValue::DataModel::Element.new("day", d.to_s))
226
- end
227
-
228
- def day_from_kv(model, value)
229
- return if value.nil? || value.to_s.empty?
230
-
231
- (model.date ||= ::Pubid::Components::Date.new).day = value.to_s
232
- end
233
-
234
- # --- date undated flag (IEC undated reference, e.g. IEC 60050:--) ---
235
- # The `false` default is omitted; only the meaningful `true` round-trips
236
- # via to_hash / from_hash.
237
- def undated_to_kv(model, doc)
238
- return unless model.date&.undated?
239
-
240
- doc.add_child(Lutaml::KeyValue::DataModel::Element.new("undated", true))
241
- end
242
-
243
- def undated_from_kv(model, value)
244
- (model.date ||= ::Pubid::Components::Date.new).undated = value.to_s == "true"
245
- end
246
-
247
- # --- publisher: primary only when non-default; copublishers as a list ---
248
- def publisher_to_kv(model, doc)
249
- pub = model.publisher&.body
250
- return if pub.nil? || pub == model.class.default_publisher&.body
251
-
252
- doc.add_child(Lutaml::KeyValue::DataModel::Element.new("publisher", pub))
253
- end
254
-
255
- def publisher_from_kv(model, value)
256
- return if value.nil? || value.to_s.empty?
257
-
258
- model.publisher = ::Pubid::Iec::Components::Publisher.new(body: value.to_s)
259
- end
260
-
261
- def copublishers_to_kv(model, doc)
262
- cp = model.copublishers
263
- return unless cp&.any?
264
-
265
- doc.add_child(
266
- Lutaml::KeyValue::DataModel::Element.new("copublishers", cp.map(&:body)),
267
- )
268
- end
269
-
270
- def copublishers_from_kv(model, value)
271
- list = Array(value).map(&:to_s)
272
- return unless list.any?
273
-
274
- model.copublishers = list.map do |cp|
275
- ::Pubid::Iec::Components::Publisher.new(body: cp)
276
- end
277
- end
278
-
279
- # --- all_parts: omit the false default ---
280
- def all_parts_to_kv(model, doc)
281
- return unless model.all_parts
282
-
283
- doc.add_child(Lutaml::KeyValue::DataModel::Element.new("all_parts", true))
284
- end
285
-
286
- def all_parts_from_kv(model, value)
287
- model.all_parts = value
288
- end
289
-
290
- # Serialize typed_stage as just its unique code (e.g. "cd", "fdis"); the
291
- # published default is omitted (recomputed from the class on load).
292
- def stage_to_kv(model, doc)
293
- ts = model.typed_stage
294
- return unless ts&.code
295
- return if ts.stage_code.to_s == "published"
296
-
297
- doc.add_child(
298
- Lutaml::KeyValue::DataModel::Element.new("stage", ts.code.to_s),
299
- )
300
- end
301
-
302
- # Resolve the typed-stage code back within this identifier's class.
303
- # `original_abbr` is left nil here for the same reason as in
304
- # `published_typed_stage` above.
305
- def stage_from_kv(model, value)
306
- return if value.nil? || value.to_s.empty?
307
-
308
- ts = (model.class.const_defined?(:TYPED_STAGES) &&
309
- model.class::TYPED_STAGES.find { |t| t.code.to_s == value.to_s }) ||
310
- Pubid::Iec.all_typed_stages.find { |t| t.code.to_s == value.to_s }
311
- return unless ts
312
-
313
- model.typed_stage = ts.dup
314
- end
315
-
316
8
  def self.parse(string)
317
- unless string.is_a?(String)
318
- raise Pubid::Errors::InvalidInputError,
319
- Pubid::INPUT_NOT_A_STRING_MESSAGE
320
- end
321
-
322
- if string.length > Pubid::MAX_INPUT_LENGTH
323
- raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
324
- end
325
-
326
- # Route URN strings to the URN parser (mirrors Iso::Identifier.parse)
327
- if Pubid::FormatDetector.detect(string) == :urn
328
- return Pubid::Iec::UrnParser.parse(string)
329
- end
330
-
331
9
  # Apply legacy update_codes normalization first, before any other preprocessing
332
10
  normalized = Core::UpdateCodes.apply(string, :iec)
333
11
  parsed = Pubid::Iec::Parser.new.parse(normalized)
334
- Pubid::Iec::Builder.new.build(parsed)
335
- end
12
+ if parsed.nil? || parsed.empty?
13
+ raise Pubid::Iec::Parser::ParseError,
14
+ "Invalid identifier format"
15
+ end
336
16
 
337
- # from_hash is the shared polymorphic dispatch on Pubid::Identifier.
338
- # IEC_TYPE_MAP remains as the key_value polymorphic_map.
17
+ Pubid::Iec::Builder.new(Pubid::Iec::Scheme).build(parsed)
18
+ end
339
19
  end
340
20
  end
341
21
  end
@@ -1,16 +1,14 @@
1
+ require_relative "../supplement_identifier"
1
2
  # frozen_string_literal: true
3
+ require_relative "../../components/typed_stage"
2
4
 
3
5
  module Pubid
4
6
  module Iec
5
7
  module Identifiers
6
8
  # Amendment Identifier
7
9
  class Amendment < SupplementIdentifier
8
- # `type` is NOT redeclared here. It is derived from `typed_stage` by
9
- # Pubid::Iec::Identifier#type, like every other IEC type. A redeclared
10
- # attribute shadowed that reader and, because `type` is not serialized,
11
- # its class-level default assigned the Symbol `:amd` on the from_hash
12
- # path where the parse path assigns a Components::Type — so
13
- # `from_hash(to_hash) != parse` for every amendment.
10
+ attribute :type, Pubid::Components::Type, default: -> { self.class.type[:key] }
11
+
14
12
  TYPED_STAGES = [
15
13
  Pubid::Components::TypedStage.new(
16
14
  code: :pwi_amd,
@@ -88,8 +86,7 @@ module Pubid
88
86
  ].freeze
89
87
 
90
88
  def self.type
91
- { key: :amd,
92
- web: :amendment, title: "Amendment", short: "AMD" }
89
+ { key: :amd, title: "Amendment", short: "AMD" }
93
90
  end
94
91
  end
95
92
  end
@@ -1,4 +1,9 @@
1
+ require_relative "../single_identifier"
1
2
  # frozen_string_literal: true
3
+ require_relative "../components/publisher"
4
+ require_relative "../components/code"
5
+ require_relative "../components/vap_suffix"
6
+ require_relative "../components/trf_info"
2
7
 
3
8
  module Pubid
4
9
  module Iec
@@ -7,17 +12,33 @@ module Pubid
7
12
  # Inherits from SingleIdentifier to get common functionality
8
13
  # Single Responsibility: Common IEC identifier attributes and behavior
9
14
  class Base < SingleIdentifier
10
- # IEC-specific attributes. VAP codes live on VapIdentifier, not here.
15
+ # IEC-specific attributes
16
+ attribute :vap_suffix, Components::VapSuffix, default: -> {}
11
17
  attribute :trf_info, Components::TrfInfo, default: -> {}
12
18
  attribute :database, :boolean, default: -> { false }
13
19
  attribute :fragment, :string, default: -> {}
14
20
  attribute :version, :string, default: -> {}
15
21
  attribute :decision_sheet, :string, default: -> {}
16
22
 
17
- # database is the only Base-specific serialized key (emitted when set);
18
- # merged onto the common map inherited from Identifier.
19
- key_value do
20
- map "database", to: :database, render_default: false
23
+ def to_s(_format = :short)
24
+ parts = []
25
+
26
+ # Publisher and type portion (from typed_stage) - uses inherited method
27
+ parts << publisher_portion
28
+
29
+ # Number portion (number with part/subpart)
30
+ parts << number_portion
31
+
32
+ # Edition if present - add space before edition
33
+ parts << " #{edition}" if edition&.number
34
+
35
+ # VAP suffix
36
+ parts << vap_suffix.render_with_space if vap_suffix
37
+
38
+ # Database flag
39
+ parts << " DB" if database
40
+
41
+ parts.compact.join
21
42
  end
22
43
 
23
44
  def number_portion
@@ -31,8 +52,8 @@ module Pubid
31
52
  # Add subpart if present
32
53
  result += "-#{subpart}" if subpart && subpart.to_s != ""
33
54
 
34
- # Render the date (year[-month[-day]], or `--` for undated).
35
- result += ":#{date.render}" if date
55
+ # Add date if present
56
+ result += ":#{date.year}" if date
36
57
 
37
58
  result
38
59
  end
@@ -45,6 +66,9 @@ module Pubid
45
66
  def validate!
46
67
  super if defined?(super)
47
68
 
69
+ # Validate VAP suffix if present
70
+ vap_suffix&.validate!
71
+
48
72
  # Validate TRF info if present
49
73
  trf_info&.validate! if trf_info && !trf_info.empty?
50
74
  end
@@ -1,4 +1,5 @@
1
- # frozen_string_literal: true
1
+ require_relative "base"
2
+ require_relative "../../components/typed_stage"
2
3
 
3
4
  module Pubid
4
5
  module Iec
@@ -19,10 +20,19 @@ module Pubid
19
20
  ].freeze
20
21
 
21
22
  def self.type
22
- { key: :cs,
23
- web: :component_specification, title: "Component Specification", short: "CS" }
23
+ { key: :cs, title: "Component Specification", short: "CS" }
24
24
  end
25
25
 
26
+ # Override publisher_portion to add CS
27
+ def publisher_portion
28
+ result = publisher.to_s
29
+
30
+ if typed_stage && typed_stage.abbreviation == "CS"
31
+ result += " CS"
32
+ end
33
+
34
+ result
35
+ end
26
36
  end
27
37
  end
28
38
  end
@@ -1,4 +1,5 @@
1
- # frozen_string_literal: true
1
+ require_relative "base"
2
+ require_relative "../../components/typed_stage"
2
3
 
3
4
  module Pubid
4
5
  module Iec
@@ -22,6 +23,16 @@ module Pubid
22
23
  { key: :ca, title: "Conformity Assessment", short: "CA" }
23
24
  end
24
25
 
26
+ # Override publisher_portion to add /CA
27
+ def publisher_portion
28
+ result = publisher.to_s
29
+
30
+ if typed_stage && typed_stage.abbreviation == "CA"
31
+ result += " CA"
32
+ end
33
+
34
+ result
35
+ end
25
36
  end
26
37
  end
27
38
  end
@@ -1,3 +1,4 @@
1
+ require_relative "../identifier"
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Pubid
@@ -10,29 +11,31 @@ module Pubid
10
11
  class ConsolidatedIdentifier < Identifier
11
12
  attribute :identifiers, Identifier, polymorphic: true, collection: true
12
13
 
13
- # Common fields are delegated to identifiers.first, so suppress the
14
- # inherited common maps and serialize the wrapped identifiers (base
15
- # document + supplements) instead. Route each nested hash back through
16
- # Identifier.from_hash so its concrete subclass is reconstructed.
17
- include Pubid::Iec::DelegatedFieldSuppression
18
-
19
- key_value do
20
- map "identifiers",
21
- with: { to: :identifiers_to_kv, from: :identifiers_from_kv }
22
- end
23
-
24
- def identifiers_to_kv(model, doc)
25
- return unless model.identifiers&.any?
26
-
27
- doc.add_child(Lutaml::KeyValue::DataModel::Element.new(
28
- "identifiers", model.identifiers.map(&:to_hash)
29
- ))
30
- end
31
-
32
- def identifiers_from_kv(model, value)
33
- model.identifiers = Array(value).map do |h|
34
- ::Pubid::Iec::Identifier.from_hash(h)
35
- end
14
+ def to_s(lang: :en, lang_single: false, with_edition: false)
15
+ identifiers.map.with_index do |id, idx|
16
+ if idx.zero?
17
+ # First identifier renders normally
18
+ id.to_s(lang: lang, lang_single: lang_single,
19
+ with_edition: with_edition)
20
+ elsif id.is_a?(Amendment)
21
+ # Subsequent identifiers render with + prefix
22
+ # For amendments, just show +AMDn:year part (or +AMDn if no date)
23
+ if id.date&.year && !id.date.year.empty?
24
+ "+AMD#{id.number}:#{id.date.year}"
25
+ else
26
+ "+AMD#{id.number}"
27
+ end
28
+ elsif id.is_a?(Corrigendum)
29
+ if id.date&.year && !id.date.year.empty?
30
+ "+COR#{id.number}:#{id.date.year}"
31
+ else
32
+ "+COR#{id.number}"
33
+ end
34
+ else
35
+ "+#{id.to_s(lang: lang, lang_single: lang_single,
36
+ with_edition: with_edition)}"
37
+ end
38
+ end.join
36
39
  end
37
40
 
38
41
  # Delegate common attributes to first identifier (base document)
@@ -56,6 +59,10 @@ module Pubid
56
59
  identifiers&.first&.date
57
60
  end
58
61
 
62
+ def type
63
+ :consolidated
64
+ end
65
+
59
66
  def stage
60
67
  identifiers&.first&.stage
61
68
  end
@@ -69,12 +76,6 @@ module Pubid
69
76
  identifiers&.first
70
77
  end
71
78
 
72
- # The origin document. A consolidated bundle stores its members in
73
- # `identifiers` (not `base`), so walk the first member to its root.
74
- def root
75
- identifiers&.first&.root || self
76
- end
77
-
78
79
  # Get all supplements (identifiers after first)
79
80
  def supplements
80
81
  identifiers&.drop(1) || []
@@ -1,12 +1,14 @@
1
+ require_relative "../supplement_identifier"
1
2
  # frozen_string_literal: true
3
+ require_relative "../../components/typed_stage"
2
4
 
3
5
  module Pubid
4
6
  module Iec
5
7
  module Identifiers
6
8
  # Corrigendum Identifier
7
9
  class Corrigendum < SupplementIdentifier
8
- # `type` is NOT redeclared here — see the note on Amendment. The
9
- # redeclaration assigned the Symbol `:cor` on the from_hash path.
10
+ attribute :type, Pubid::Components::Type, default: -> { self.class.type[:key] }
11
+
10
12
  TYPED_STAGES = [
11
13
  Pubid::Components::TypedStage.new(
12
14
  code: :pwi_cor,
@@ -84,8 +86,7 @@ module Pubid
84
86
  ].freeze
85
87
 
86
88
  def self.type
87
- { key: :cor,
88
- web: :corrigendum, title: "Corrigendum", short: "COR" }
89
+ { key: :cor, title: "Corrigendum", short: "COR" }
89
90
  end
90
91
  end
91
92
  end