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
data/lib/pubid/bsi.rb CHANGED
@@ -2,21 +2,6 @@
2
2
 
3
3
  module Pubid
4
4
  module Bsi
5
- extend Pubid::PrefixesSupport
6
-
7
- # Leading tokens a printed BSI reference can start with, curated from the
8
- # parser grammar (lib/pubid/bsi/parser.rb): the publisher (`bs` => BS/BSI),
9
- # the native series/type rules that begin references (dd, pd, pas, na, ts,
10
- # handbook => HB, pp, bip, ep_type), and the "BS <adopted-org>" combos the
11
- # grammar builds from `bs` + `adopted_org_prefix`. Deliberately EXCLUDES the
12
- # aerospace single/multi-letter prefixes (see
13
- # identifiers/aerospace_standard.rb SINGLE_LETTER_PREFIXES / the parser's
14
- # `single_letter_prefix` rule — A/B/C/S/X ...) because they are dangerously
15
- # ambiguous and never lead a routable reference on their own; and the bare
16
- # adopted forms (ISO/IEC/EN alone), which route to their own SDOs.
17
- PREFIXES = (%w[BS BSI DD PD PAS NA TS HB PP BIP EP] +
18
- ["BS EN", "BS ISO", "BS IEC", "BS EN ISO", "BS EN IEC"]).freeze
19
-
20
5
  module Components
21
6
  autoload :Code, "#{__dir__}/bsi/components/code"
22
7
  autoload :Date, "#{__dir__}/bsi/components/date"
@@ -27,256 +12,21 @@ module Pubid
27
12
  autoload :Builder, "#{__dir__}/bsi/builder"
28
13
  autoload :Identifier, "#{__dir__}/bsi/identifier"
29
14
  autoload :Identifiers, "#{__dir__}/bsi/identifiers"
30
- # NOTE: bsi/model.rb is legacy/unused (nothing references Pubid::Bsi::Model)
31
- # and defines a conflicting `class Identifier < Lutaml::Model::Serializable`.
32
- # It is intentionally NOT autoloaded so it can never clash with the real
33
- # Pubid::Bsi::Identifier (single_identifier.rb).
15
+ autoload :Model, "#{__dir__}/bsi/model"
34
16
  autoload :Parser, "#{__dir__}/bsi/parser"
35
- autoload :Renderer, "#{__dir__}/bsi/renderer"
17
+ autoload :Scheme, "#{__dir__}/bsi/scheme"
36
18
  autoload :SingleIdentifier, "#{__dir__}/bsi/single_identifier"
37
19
  autoload :UrnGenerator, "#{__dir__}/bsi/urn_generator"
38
- autoload :UrnParser, "#{__dir__}/bsi/urn_parser"
39
-
40
- # TYPED_STAGES_REGISTRY for native BSI types. Used by Pubid::Bsi.locate_stage
41
- # to map abbreviations (e.g. "BS", "PD", "Handbook") to typed stages.
42
- TYPED_STAGES_REGISTRY = [
43
- # British Standard (BS)
44
- Pubid::Components::TypedStage.new(
45
- code: :pubbs,
46
- stage_code: :published,
47
- type_code: :bs,
48
- abbr: ["BS"],
49
- name: "British Standard",
50
- harmonized_stages: %w[60.00 60.60],
51
- ),
52
- Pubid::Components::TypedStage.new(
53
- code: :drbs,
54
- stage_code: :draft,
55
- type_code: :bs,
56
- abbr: ["Draft BS", "DBS"],
57
- name: "Draft British Standard",
58
- harmonized_stages: %w[30.00 30.20 30.60 40.00 40.20 40.60],
59
- ),
60
-
61
- # Published Document (PD)
62
- Pubid::Components::TypedStage.new(
63
- code: :pubpd,
64
- stage_code: :published,
65
- type_code: :pd,
66
- abbr: ["PD"],
67
- name: "Published Document",
68
- harmonized_stages: %w[60.00 60.60],
69
- ),
70
-
71
- # Publicly Available Specification (PAS)
72
- Pubid::Components::TypedStage.new(
73
- code: :pubpas,
74
- stage_code: :published,
75
- type_code: :pas,
76
- abbr: ["PAS"],
77
- name: "Publicly Available Specification",
78
- harmonized_stages: %w[60.00 60.60],
79
- ),
80
-
81
- # National Annex (NA)
82
- Pubid::Components::TypedStage.new(
83
- code: :pubna,
84
- stage_code: :published,
85
- type_code: :na,
86
- abbr: ["NA"],
87
- name: "National Annex",
88
- harmonized_stages: %w[60.00 60.60],
89
- ),
90
-
91
- # Draft Document (DD)
92
- Pubid::Components::TypedStage.new(
93
- code: :pubdd,
94
- stage_code: :published,
95
- type_code: :dd,
96
- abbr: ["DD"],
97
- name: "Draft Document",
98
- harmonized_stages: %w[60.00 60.60],
99
- ),
100
-
101
- # Flex Document
102
- Pubid::Components::TypedStage.new(
103
- code: :pubflex,
104
- stage_code: :published,
105
- type_code: :flex,
106
- abbr: ["Flex", "BSI Flex"],
107
- name: "BSI Flex",
108
- harmonized_stages: %w[60.00 60.60],
109
- ),
110
-
111
- # Handbook
112
- Pubid::Components::TypedStage.new(
113
- code: :pubhandbook,
114
- stage_code: :published,
115
- type_code: :handbook,
116
- abbr: ["Handbook", "HB"],
117
- name: "BSI Handbook",
118
- harmonized_stages: %w[60.00 60.60],
119
- ),
120
-
121
- # Practice Guide (PP)
122
- Pubid::Components::TypedStage.new(
123
- code: :pubpp,
124
- stage_code: :published,
125
- type_code: :pp,
126
- abbr: ["PP"],
127
- name: "Published Practice",
128
- harmonized_stages: %w[60.00 60.60],
129
- ),
130
-
131
- # British Industrial Practice (BIP)
132
- Pubid::Components::TypedStage.new(
133
- code: :pubbip,
134
- stage_code: :published,
135
- type_code: :bip,
136
- abbr: ["BIP"],
137
- name: "British Industrial Practice",
138
- harmonized_stages: %w[60.00 60.60],
139
- ),
140
-
141
- # Aerospace/Specialized British Standard (with letter prefix)
142
- Pubid::Components::TypedStage.new(
143
- code: :pubaerospace,
144
- stage_code: :published,
145
- type_code: :aerospace,
146
- abbr: ["BS A", "BS AU", "BS C", "BS M", "BS S", "BS L", "BS TA",
147
- "BS MA", "BS PL", "BS QC", "BS G", "BS HC", "BS F", "BS X", "BS B"],
148
- name: "Aerospace/Specialized British Standard",
149
- harmonized_stages: %w[60.00 60.60],
150
- ),
151
-
152
- # Index
153
- Pubid::Components::TypedStage.new(
154
- code: :pubindex,
155
- stage_code: :published,
156
- type_code: :index,
157
- abbr: ["Index"],
158
- name: "BSI Index",
159
- harmonized_stages: %w[60.00 60.60],
160
- ),
161
-
162
- # Method
163
- Pubid::Components::TypedStage.new(
164
- code: :pubmethod,
165
- stage_code: :published,
166
- type_code: :method,
167
- abbr: ["Method", "Methods"],
168
- name: "BSI Method",
169
- harmonized_stages: %w[60.00 60.60],
170
- ),
171
-
172
- # Section
173
- Pubid::Components::TypedStage.new(
174
- code: :pubsection,
175
- stage_code: :published,
176
- type_code: :section,
177
- abbr: ["Section"],
178
- name: "BSI Section",
179
- harmonized_stages: %w[60.00 60.60],
180
- ),
181
-
182
- # DISC (Delivering Information Solutions to Customers)
183
- Pubid::Components::TypedStage.new(
184
- code: :pubdisc,
185
- stage_code: :published,
186
- type_code: :disc,
187
- abbr: ["DISC"],
188
- name: "DISC",
189
- harmonized_stages: %w[60.00 60.60],
190
- ),
191
-
192
- # Detailed Specification (with N or C notation)
193
- Pubid::Components::TypedStage.new(
194
- code: :pubdetailed_spec,
195
- stage_code: :published,
196
- type_code: :detailed_specification,
197
- abbr: ["DETAILED SPEC"],
198
- name: "Detailed Specification",
199
- harmonized_stages: %w[60.00 60.60],
200
- ),
201
-
202
- # Standalone Amendment
203
- Pubid::Components::TypedStage.new(
204
- code: :standalone_amendment,
205
- stage_code: :published,
206
- type_code: :amendment,
207
- abbr: ["AMD"],
208
- name: "Amendment",
209
- harmonized_stages: %w[60.00 60.60],
210
- ),
211
-
212
- # Technical Specification
213
- Pubid::Components::TypedStage.new(
214
- code: :pubts,
215
- stage_code: :published,
216
- type_code: :ts,
217
- abbr: ["TS"],
218
- name: "Technical Specification",
219
- harmonized_stages: %w[60.00 60.60],
220
- ),
221
- ].freeze
222
20
 
223
21
  def self.parse(string)
224
- unless string.is_a?(String)
225
- raise Pubid::Errors::InvalidInputError,
226
- Pubid::INPUT_NOT_A_STRING_MESSAGE
227
- end
228
-
229
- if string.length > Pubid::MAX_INPUT_LENGTH
230
- raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
231
- end
232
-
233
22
  Identifier.parse(string)
234
23
  end
235
24
 
236
25
  def self.transform(data)
237
26
  Builder.build(data)
238
27
  end
239
-
240
- # Auto-discover all identifier types from the Identifiers namespace.
241
- # Includes classes with explicit type declarations (Hash or nil).
242
- # @return [Array<Class>] identifier classes (Pubid::Identifier subclasses)
243
- def self.identifier_types
244
- @identifier_types ||= Identifiers.constants
245
- .filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
246
- .select { |c| c.is_a?(Class) && c < Pubid::Identifier }
247
- .select { |c| c.singleton_methods(false).include?(:type) }
248
- .reject { |c| c.name&.split("::")&.last == "Base" }
249
- end
250
-
251
- # Build typed stage index from the module's TYPED_STAGES_REGISTRY
252
- # @return [Array<Pubid::Components::TypedStage>] all typed stages
253
- def self.all_typed_stages
254
- @all_typed_stages ||= TYPED_STAGES_REGISTRY
255
- end
256
-
257
- # Lookup: type code -> identifier class
258
- # @param code [String, Symbol] the type key to find
259
- # @return [Class, nil] the matching identifier class
260
- def self.locate_type(code)
261
- identifier_types.find { |t| t.type&.dig(:key)&.to_s == code.to_s }
262
- end
263
-
264
- # Lookup: abbreviation -> typed stage
265
- # @param abbr [String, Symbol] the abbreviation to find
266
- # @return [Pubid::Components::TypedStage, nil] the matching typed stage
267
- def self.locate_stage(abbr)
268
- abbr_str = abbr.to_s.upcase
269
- all_typed_stages.find { |s| s.abbr.any? { |a| a.to_s.upcase == abbr_str } }
270
- end
271
28
  end
272
29
  end
273
30
 
274
31
  # Register Ubsi flavor with the registry
275
32
  Pubid::Registry.register(:bsi, Pubid::Bsi)
276
-
277
- # Per-flavor format registry: inherits global formats, overrides :human.
278
- # SingleIdentifier is the abstract base for every concrete BSI identifier
279
- # (including Amendment and Corrigendum), so wiring the registry here covers
280
- # the whole flavor in one shot.
281
- Pubid::Bsi::SingleIdentifier.format_registry = Pubid::FormatRegistry.new(parent: Pubid::Identifier.format_registry)
282
- Pubid::Bsi::SingleIdentifier.format_registry.register(:human, renderer: Pubid::Bsi::Renderer)
@@ -5,43 +5,31 @@ module Pubid
5
5
  # Base class for all flavor-specific builders.
6
6
  #
7
7
  # Provides the shared build loop that converts parsed data into identifier
8
- # objects. Flavors subclass and override:
9
- # - +select_class(data)+ to dispatch by data shape (default returns
10
- # +default_identifier_class+).
11
- # - +cast(key, value)+ to transform raw parsed values into components.
12
- # - +handle_key(identifier, key, value)+ for non-attribute side effects.
8
+ # objects. Flavors subclass and override only `cast` and optionally
9
+ # `default_identifier_class`.
13
10
  #
14
11
  # The build loop:
15
12
  # 1. Flattens array-of-hashes input (from Parslet transforms)
16
- # 2. Asks +select_class(data)+ for the identifier class
17
- # 3. Iterates each key-value pair
18
- # 4. Calls +cast(key, value)+ to convert raw values to component objects
19
- # 5. Assigns the result to the identifier via setter
20
- # 6. Silently skips unknown attributes
13
+ # 2. Iterates each key-value pair
14
+ # 3. Calls `cast(key, value)` to convert raw values to component objects
15
+ # 4. Assigns the result to the identifier via `send`
16
+ # 5. Silently skips unknown attributes (rescue NoMethodError)
21
17
  class Base
22
18
  attr_reader :identifier
23
19
 
24
- def initialize(identifier_class = nil)
20
+ def initialize(identifier_class = default_identifier_class)
25
21
  @identifier_class = identifier_class
26
22
  end
27
23
 
28
24
  def build(data)
29
25
  data = flatten_array(data) if data.is_a?(Array)
30
- identifier_class = @identifier_class || select_class(data)
31
- identifier = identifier_class.new
26
+ identifier = @identifier_class.new
32
27
  assign_attributes(identifier, data)
33
28
  identifier
34
29
  end
35
30
 
36
31
  private
37
32
 
38
- # Override in subclasses to dispatch to a specific identifier class
39
- # based on the shape of the parsed data (type code, supplement marker,
40
- # etc.). Defaults to +default_identifier_class+.
41
- def select_class(_data)
42
- default_identifier_class
43
- end
44
-
45
33
  # Override in subclasses to convert raw parsed values to component objects.
46
34
  # Return a Hash to assign multiple attributes, or a single value.
47
35
  # Return nil to skip the assignment.
@@ -99,9 +87,8 @@ module Pubid
99
87
  }.freeze
100
88
 
101
89
  def locate_typed_stage(typed_stage_string)
102
- raise NotImplementedError,
103
- "#{self.class} must implement locate_typed_stage " \
104
- "(rely on the flavor module's locate_stage method)"
90
+ typed_stage_string = "" if typed_stage_string.nil?
91
+ @scheme.locate_typed_stage_by_abbr(typed_stage_string)
105
92
  end
106
93
 
107
94
  def convert_roman_to_integer(roman_numeral)
@@ -125,11 +112,9 @@ module Pubid
125
112
 
126
113
  def parse_date(value)
127
114
  value = value.to_s
128
- if value.match?(/^\d{4}(-\d{2}){0,2}$/)
129
- year, month, day = value.split("-")
130
- Pubid::Components::Date.new(year: year,
131
- month: month || nil,
132
- day: day || nil)
115
+ if value.match?(/^\d{4}(-\d{2})?$/)
116
+ year, month = value.split("-")
117
+ Pubid::Components::Date.new(year: year, month: month || nil)
133
118
  elsif value.is_a?(Integer) || (value.is_a?(String) && value.match?(/^\d{4}$/))
134
119
  Pubid::Components::Date.new(year: value)
135
120
  else
@@ -137,40 +122,6 @@ module Pubid
137
122
  end
138
123
  end
139
124
 
140
- # Splits a compound document number ("1234", "1234-1", "1234-1-2")
141
- # into number/part/subpart Code components. Flavor-specific dash/slash
142
- # normalization lives in +normalize_number_with_part+; legacy year
143
- # extraction (e.g. ISO "4037-1979") lives in +extract_legacy_year+.
144
- def parse_number_with_part(value, code_class:)
145
- normalized = normalize_number_with_part(value)
146
- parts = normalized.split("-").reject(&:empty?)
147
- number = parts.shift
148
- part = parts.shift&.strip
149
- subpart = parts.any? ? parts.join("-") : nil
150
-
151
- legacy = extract_legacy_year(number, part, code_class)
152
- return legacy if legacy
153
-
154
- part = convert_roman_to_integer(part) if part
155
-
156
- code_hash = { number: code_class.new(value: number) }
157
- code_hash[:part] = code_class.new(value: part) if part
158
- code_hash[:subpart] = code_class.new(value: subpart) if subpart
159
- code_hash
160
- end
161
-
162
- # Hook: normalize the raw number_with_part string before splitting.
163
- # Override in subclasses for flavor-specific dash/slash/space handling.
164
- def normalize_number_with_part(value)
165
- value.to_s
166
- end
167
-
168
- # Hook: detect a year masquerading as a part (e.g. "4037-1979") and
169
- # return a number+date hash, or nil to continue normal splitting.
170
- def extract_legacy_year(_number, _part, _code_class)
171
- nil
172
- end
173
-
174
125
  def parse_languages(value)
175
126
  original_value = value.to_s
176
127
  normalized_value = original_value.gsub("/", ",")
@@ -1,3 +1,4 @@
1
+ require_relative "identifier"
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Pubid
@@ -45,27 +46,22 @@ module Pubid
45
46
  base_document&.typed_stage
46
47
  end
47
48
 
48
- # `**opts` carries render flags this method does not name — `annotated:`
49
- # above all. Without it the closed keyword list raised
50
- # `ArgumentError: unknown keyword: :annotated` for every bundled
51
- # identifier, which is worse than a missing span: a wrapper is exactly the
52
- # shape a consumer renders.
53
49
  def to_s(lang: :en, lang_single: false, with_edition: false, format: nil,
54
- stage_format_long: nil, with_date: nil, **opts)
50
+ stage_format_long: nil, with_date: nil)
55
51
  result = base_document.to_s(lang: lang, lang_single: lang_single,
56
- with_edition: with_edition, format: format, stage_format_long: stage_format_long, with_date: with_date, **opts)
52
+ with_edition: with_edition, format: format, stage_format_long: stage_format_long, with_date: with_date)
57
53
 
58
54
  supplements.each do |supplement|
59
55
  # ISO DirectivesSupplement always uses " + " (space before)
60
- # CEN-style supplements (AC, A) without base use "+" (no space before)
61
- # Other ISO supplements with base use " + " (space before)
56
+ # CEN-style supplements (AC, A) without base_identifier use "+" (no space before)
57
+ # Other ISO supplements with base_identifier use " + " (space before)
62
58
  if supplement.class.name&.include?("DirectivesSupplement") ||
63
- (supplement.class.attributes.key?(:base) && !supplement.base.nil?)
59
+ (supplement.class.attributes.key?(:base_identifier) && !supplement.base_identifier.nil?)
64
60
  result += " + #{supplement.to_s(lang: lang, lang_single: lang_single,
65
- with_edition: with_edition, format: format, stage_format_long: stage_format_long, with_date: with_date, **opts)}"
61
+ with_edition: with_edition, format: format, stage_format_long: stage_format_long, with_date: with_date)}"
66
62
  else
67
63
  result += "+#{supplement.to_s(lang: lang, lang_single: lang_single,
68
- with_edition: with_edition, format: format, stage_format_long: stage_format_long, with_date: with_date, **opts)}"
64
+ with_edition: with_edition, format: format, stage_format_long: stage_format_long, with_date: with_date)}"
69
65
  end
70
66
  end
71
67
 
@@ -107,13 +103,9 @@ stage_format_long: nil, with_date: nil, **opts)
107
103
  parts << supplement.date.year.to_s
108
104
  end
109
105
 
110
- # Add supplement number if present. `supplement` is polymorphic and
111
- # `number` is a Components::Code on ::Pubid::Identifier but a plain
112
- # :string in a growing number of flavors, so read through either.
106
+ # Add supplement number if present
113
107
  if supplement.number
114
- number = supplement.number
115
- value = number.respond_to?(:value) ? number.value : number
116
- parts << "v#{value}"
108
+ parts << "v#{supplement.number.value}"
117
109
  end
118
110
  end
119
111
  end
@@ -34,21 +34,20 @@ module Pubid
34
34
  # Extract corrigenda numbers
35
35
  corr_array = data[:corrigenda]
36
36
  corr_array = [corr_array] unless corr_array.is_a?(Array)
37
- corr_numbers = corr_array.map { |c| c[:cor_number].to_s }
37
+ corr_numbers = corr_array.map { |c| c[:cor_number].to_i }
38
38
 
39
39
  # Build base identifier (without corrigenda)
40
40
  base_data = data.dup
41
41
  base_data.delete(:corrigenda)
42
42
  base = build_base(base_data)
43
43
 
44
- # Build Corrigendum object for each corrigendum number. The corrigendum
45
- # sequence is stored in the inherited `number` attribute (mirroring ISO).
44
+ # Build Corrigendum object for each corrigendum number
46
45
  # Note: CCSDS uses "Cor. 1" format (single corrigendum per identifier)
47
46
  # If multiple corrigenda exist, we build the last one wrapping the base
48
47
  corr_numbers.reduce(base) do |current_base, cor_num|
49
48
  Identifiers::Corrigendum.new(
50
- base: current_base,
51
- number: cor_num,
49
+ base_identifier: current_base,
50
+ cor_number: cor_num,
52
51
  )
53
52
  end
54
53
  end
@@ -2,75 +2,15 @@
2
2
 
3
3
  module Pubid
4
4
  module Ccsds
5
- # Abstract root for every CCSDS identifier AND the flavor's parse entry
6
- # point — mirrors Pubid::Iso::Identifier / Pubid::Jis::Identifier. Concrete
7
- # identifiers (Identifiers::Base, Identifiers::Corrigendum) descend from this
8
- # class, so a parsed CCSDS id is an instance of Pubid::Ccsds::Identifier and
9
- # relaton-index can pass this class as `pubid_class` for from_hash/to_hash.
10
- #
11
- # Keeping the root abstract (it is never itself a serialized type, so it is
12
- # absent from CCSDS_TYPE_MAP) is what breaks the polymorphic recursion a
13
- # supplement's `base` would otherwise hit if it pointed at a
14
- # concrete type that is also its own superclass.
15
- class Identifier < ::Pubid::Identifier
16
- # CCSDS stores every code component as a plain string (the Builder passes
17
- # strings, never Components::Code/Edition objects), so override the
18
- # inherited Components::Code/Edition attribute types with :string. This
19
- # both matches the runtime values and yields a lean, round-trippable
20
- # key_value (`to_hash`) serialization instead of nested component hashes.
21
- # `type` (single book-color letter B/G/M/R/Y/O), `suffix`, and `language`
22
- # are likewise CCSDS-specific plain strings.
23
- attribute :number, :string
24
- attribute :part, :string
25
- attribute :edition, :string
26
- attribute :type, :string
27
- attribute :suffix, :string
28
- attribute :language, :string
29
-
30
- # Polymorphic type map for lutaml::Model key_value (de)serialization,
31
- # mapping each concrete class's polymorphic_name to its class name.
32
- CCSDS_TYPE_MAP = {
33
- "pubid:ccsds:base" => "Pubid::Ccsds::Identifiers::Base",
34
- "pubid:ccsds:corrigendum" => "Pubid::Ccsds::Identifiers::Corrigendum",
35
- }.freeze
36
-
37
- # The shared Pubid::Identifier no longer auto-maps attributes, so the
38
- # flavor's root declares the full key_value mapping; subclasses
39
- # (SupplementIdentifier/Corrigendum) merge their own blocks on top. Every
40
- # value is a plain string, so a direct `to:` map round-trips.
41
- key_value do
42
- map "_type", to: :_type, polymorphic_map: CCSDS_TYPE_MAP
43
- map "number", to: :number
44
- map "part", to: :part
45
- map "edition", to: :edition
46
- map "type", to: :type
47
- map "suffix", to: :suffix
48
- map "language", to: :language
49
- end
50
-
51
- def publisher
52
- "CCSDS"
53
- end
54
-
55
- # Parse a CCSDS identifier string into the appropriate identifier object.
5
+ module Identifier
56
6
  def self.parse(identifier)
57
- unless identifier.is_a?(String)
58
- raise Pubid::Errors::InvalidInputError,
59
- Pubid::INPUT_NOT_A_STRING_MESSAGE
60
- end
61
-
62
- if identifier.length > Pubid::MAX_INPUT_LENGTH
63
- raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
64
- end
65
-
66
7
  # Apply legacy update_codes normalization first
67
8
  normalized = Core::UpdateCodes.apply(identifier, :ccsds)
68
9
  parsed = Pubid::Ccsds::Parser.parse(normalized)
69
10
  Pubid::Ccsds::Builder.build(parsed)
11
+ rescue Parslet::ParseFailed => e
12
+ raise "Failed to parse CCSDS identifier '#{identifier}': #{e.message}"
70
13
  end
71
-
72
- # from_hash is the shared polymorphic dispatch on Pubid::Identifier.
73
- # CCSDS_TYPE_MAP remains as the key_value polymorphic_map.
74
14
  end
75
15
  end
76
16
  end
@@ -3,15 +3,12 @@
3
3
  module Pubid
4
4
  module Ccsds
5
5
  module Identifiers
6
- # CCSDS base identifier (a published standard).
7
- #
8
- # Format: CCSDS NUMBER.PART-TYPE-EDITION[-SUFFIX][ - LANGUAGE Translated]
9
- # Examples: CCSDS 120.0-G-4, CCSDS 100.0-G-1-S, CCSDS 551.1-O-2 - Russian Translated
10
- #
11
- # Attributes, the key_value mapping and from_hash dispatch live on the
12
- # abstract root Pubid::Ccsds::Identifier; this concrete type only carries
13
- # its typed stage and rendering.
14
- class Base < Pubid::Ccsds::Identifier
6
+ # CCSDS identifier
7
+ # Format: CCSDS NUMBER.PART-TYPE-EDITION[-SUFFIX]
8
+ # Example: CCSDS 120.0-G-4, CCSDS 100.0-G-1-S
9
+ class Base < Lutaml::Model::Serializable
10
+ # CCSDS uses a simple architecture without typed stages
11
+ # TYPED_STAGES includes default stage for base identifiers
15
12
  TYPED_STAGES = [
16
13
  Pubid::Components::TypedStage.new(
17
14
  abbr: [""],
@@ -20,20 +17,60 @@ module Pubid
20
17
  ),
21
18
  ].freeze
22
19
 
20
+ # Type information for this identifier class
21
+ #
22
+ # @return [Hash] Type information with key, title, and short form
23
23
  def self.type
24
- { key: :base, web: :base, title: "Base Standard", short: nil }
24
+ { key: :base, title: "Base Standard", short: nil }
25
25
  end
26
26
 
27
- # Composes its string by hand rather than going through `render`, so
28
- # the annotation hook has to be applied on the way out.
29
- def to_s(**opts)
27
+ # Generate URN for this identifier
28
+ #
29
+ # @return [String] URN representation
30
+
31
+ # Include CCSDS-specific attributes in serialization
32
+ def base_hash
33
+ hash = super
34
+ # CCSDS uses plain strings for type, edition, suffix
35
+ hash[:type] = type if type
36
+ hash[:suffix] = suffix if suffix
37
+ hash[:language] = language if language
38
+ hash
39
+ end
40
+
41
+ attribute :number, :string
42
+ attribute :part, :string
43
+ attribute :type, :string # B, G, M, R, Y, O, etc.
44
+ attribute :edition, :string
45
+ attribute :suffix, :string # Optional suffix like -S
46
+ attribute :language, :string # Language metadata (e.g., "French", "Russian")
47
+
48
+ def publisher
49
+ "CCSDS"
50
+ end
51
+
52
+ def to_s
30
53
  result = "#{publisher} #{number}"
31
54
  result += ".#{part}" if part
32
55
  result += "-#{type}" if type
33
56
  result += "-#{edition}" if edition
34
57
  result += "-#{suffix}" if suffix
58
+
59
+ # Add language metadata
35
60
  result += " - #{language} Translated" if language
36
- annotate_plain_render(result, **opts)
61
+
62
+ result
63
+ end
64
+
65
+ def ==(other)
66
+ return false unless other.is_a?(Base)
67
+
68
+ number == other.number &&
69
+ part == other.part &&
70
+ type == other.type &&
71
+ edition == other.edition &&
72
+ suffix == other.suffix &&
73
+ language == other.language
37
74
  end
38
75
  end
39
76
  end
@@ -17,22 +17,21 @@ module Pubid
17
17
  #
18
18
  # @return [Hash] Type information with key, title, and short form
19
19
  def self.type
20
- { key: :cor,
21
- web: :corrigendum, title: "Corrigendum", short: "Cor" }
20
+ { key: :cor, title: "Corrigendum", short: "Cor" }
22
21
  end
23
22
 
24
- # The corrigendum sequence number is stored in the inherited `number`
25
- # attribute (mirroring ISO), so it serializes via Base's key_value as
26
- # { _type, number: '1', base: {...} } with no corrigendum-specific map.
27
- def to_s(**opts)
28
- base_str = base.to_s
29
- annotate_plain_render("#{base_str} Cor. #{number}", **opts)
23
+ attribute :cor_number, :integer
24
+
25
+ def to_s
26
+ base_str = base_identifier.to_s
27
+ "#{base_str} Cor. #{cor_number}"
30
28
  end
31
29
 
32
30
  def ==(other)
33
31
  return false unless other.is_a?(Corrigendum)
34
32
 
35
- base == other.base && number == other.number
33
+ base_identifier == other.base_identifier &&
34
+ cor_number == other.cor_number
36
35
  end
37
36
  end
38
37
  end