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
@@ -5,6 +5,7 @@ module Pubid
5
5
  module Identifiers
6
6
  autoload :AddendaPackage, "#{__dir__}/identifiers/addenda_package"
7
7
  autoload :Addendum, "#{__dir__}/identifiers/addendum"
8
+ autoload :Base, "#{__dir__}/identifiers/base"
8
9
  autoload :CombinedAddenda, "#{__dir__}/identifiers/combined_addenda"
9
10
  autoload :Errata, "#{__dir__}/identifiers/errata"
10
11
  autoload :Guideline, "#{__dir__}/identifiers/guideline"
@@ -6,7 +6,7 @@ module Pubid
6
6
  module Ashrae
7
7
  # Parser class for ASHRAE identifiers
8
8
  # Single Responsibility: Parsing ASHRAE identifier syntax
9
- class Parser < ::Pubid::Parser::Grammar
9
+ class Parser < Parslet::Parser
10
10
  # Basic building blocks
11
11
  rule(:space) { str(" ") }
12
12
  rule(:space?) { space.maybe }
@@ -54,25 +54,15 @@ module Pubid
54
54
  end
55
55
 
56
56
  # Code with year pattern (e.g., 34-2024, 62.1-2022, 90A-2010) - used when type is missing
57
- #
58
- # The code portion MUST be captured with `.as(:code)`. Without it the
59
- # digits were matched and then discarded — only the year was named — so
60
- # every identifier reaching this rule lost its document number: 48 corpus
61
- # ids rendered as "ANSI/ASHRAE Addendum a to ASHRAE Standard -2024",
62
- # number gone and a dangling dash left behind. Builder#extract_base_attributes
63
- # already read `code_with_year[:code]`; it was waiting for a value the
64
- # grammar never produced.
65
57
  rule(:code_with_year) do
66
58
  (
59
+ digits >> # First part (e.g., 34, 62)
60
+ (dot >> digits).repeat(0, 2) >> # Optional dotted parts (e.g., .1)
61
+ # Special pattern for codes like "90A,B,C-2010"
67
62
  (
68
- digits >> # First part (e.g., 34, 62)
69
- (dot >> digits).repeat(0, 2) >> # Optional dotted parts (e.g., .1)
70
- # Special pattern for codes like "90A,B,C-2010"
71
- (
72
- letter >> # Single letter after digits
73
- (comma >> letter).repeat(0, 10) # Optional comma-separated letters
74
- ).maybe
75
- ).as(:code) >>
63
+ letter >> # Single letter after digits
64
+ (comma >> letter).repeat(0, 10) # Optional comma-separated letters
65
+ ).maybe >>
76
66
  space?.maybe >> dash >>
77
67
  year_digits.as(:year)
78
68
  ).as(:code_with_year)
@@ -176,7 +166,7 @@ module Pubid
176
166
  (space >> additional_copublisher).maybe >>
177
167
  suffix.maybe >>
178
168
  reaffirmed.maybe
179
- ).as(:base) >>
169
+ ).as(:base_identifier) >>
180
170
  space >>
181
171
  str("Errata").as(:errata_keyword) >>
182
172
  (
@@ -198,7 +188,7 @@ module Pubid
198
188
  (space >> additional_copublisher).maybe >>
199
189
  suffix.maybe >>
200
190
  reaffirmed.maybe
201
- ).as(:base) >>
191
+ ).as(:base_identifier) >>
202
192
  space >>
203
193
  str("Errata").as(:errata_keyword) >>
204
194
  (
@@ -217,7 +207,7 @@ module Pubid
217
207
  (space >> additional_copublisher).maybe >>
218
208
  suffix.maybe >>
219
209
  reaffirmed.maybe
220
- ).as(:base) >>
210
+ ).as(:base_identifier) >>
221
211
  space >>
222
212
  str("Errata").as(:errata_keyword) >>
223
213
  errata_date.maybe >>
@@ -229,7 +219,7 @@ module Pubid
229
219
  rule(:interpretation_identifier) do
230
220
  str("Interpretations") >> space >>
231
221
  str("for") >> space >>
232
- (type.as(:type) >> space >> code >> (dash >> year_digits.as(:year)).maybe).as(:base)
222
+ (type.as(:type) >> space >> code >> (dash >> year_digits.as(:year)).maybe).as(:base_identifier)
233
223
  end
234
224
 
235
225
  # Combined Addenda pattern (multiple addendums grouped together)
@@ -617,12 +607,9 @@ module Pubid
617
607
  year_first_addenda_package_identifier |
618
608
  addenda_package_identifier |
619
609
  addendum_identifier |
620
- # Standalone copublisher pattern (ANSI/AMCA 210-99, AMCA 210-99).
621
- # The literal "ASHRAE" is excluded here so a bare "ASHRAE <code>-<year>"
622
- # is not swallowed as a copublisher and instead falls through to the
623
- # ASHRAE-publisher branch below.
624
- (((str("ANSI") >> slash).maybe >> (str("ASHRAE").absent? >> letter).repeat(2,
625
- 10)).as(:copublisher) >>
610
+ # Standalone copublisher pattern (ANSI/AMCA 210-99, AMCA 210-99)
611
+ (((str("ANSI") >> slash).maybe >> letter.repeat(2,
612
+ 10)).as(:copublisher) >>
626
613
  space >>
627
614
  code_with_year >>
628
615
  optional_suffix.repeat(0, 2)) |
@@ -648,11 +635,9 @@ module Pubid
648
635
  suffix.maybe >>
649
636
  reaffirmed.maybe >>
650
637
  optional_suffix.repeat(0, 2)) |
651
- # Standard ASHRAE pattern. The type keyword is optional so a bare
652
- # partial reference "ASHRAE <code>" (no "Standard"/"Guideline") parses;
653
- # the builder defaults the absent type to "Standard".
638
+ # Standard ASHRAE pattern
654
639
  (publisher.as(:publisher) >> space >>
655
- (type.as(:type) >> space).maybe >>
640
+ type.as(:type) >> space >>
656
641
  code >>
657
642
  (space?.maybe >> dash >> year_digits.as(:year)).maybe >>
658
643
  (space >> additional_copublisher).maybe >>
@@ -665,15 +650,6 @@ module Pubid
665
650
  root(:identifier)
666
651
 
667
652
  def self.parse(string)
668
- unless string.is_a?(String)
669
- raise Pubid::Errors::InvalidInputError,
670
- Pubid::INPUT_NOT_A_STRING_MESSAGE
671
- end
672
-
673
- if string.length > Pubid::MAX_INPUT_LENGTH
674
- raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
675
- end
676
-
677
653
  # Strip leading/trailing whitespace
678
654
  cleaned = string.strip
679
655
 
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Ashrae
5
+ class Scheme < Pubid::Scheme
6
+ class << self
7
+ def identifiers
8
+ [
9
+ Identifiers::Guideline,
10
+ Identifiers::Standard,
11
+ Identifiers::Addendum,
12
+ Identifiers::Interpretation,
13
+ Identifiers::Errata,
14
+ Identifiers::CombinedAddenda,
15
+ Identifiers::AddendaPackage,
16
+ ]
17
+ end
18
+
19
+ def typed_stages
20
+ identifiers.flat_map { |klass| klass::TYPED_STAGES }
21
+ end
22
+
23
+ def locate_typed_stage_by_abbr(abbr)
24
+ abbr = "ASHRAE" if abbr.nil? || abbr.to_s.empty?
25
+
26
+ typed_stage = typed_stages.detect do |ts|
27
+ ts.abbr.include?(abbr)
28
+ end
29
+
30
+ unless typed_stage
31
+ raise ArgumentError,
32
+ "Unknown type abbreviation: '#{abbr}'"
33
+ end
34
+
35
+ typed_stage
36
+ end
37
+
38
+ def locate_identifier_klass_by_type_code(type_code)
39
+ identifier_klass = identifiers.detect do |klass|
40
+ klass.type[:key].to_s == type_code.to_s
41
+ end
42
+
43
+ unless identifier_klass
44
+ raise ArgumentError,
45
+ "Unknown type code: #{type_code}"
46
+ end
47
+
48
+ identifier_klass
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -4,7 +4,20 @@ module Pubid
4
4
  module Ashrae
5
5
  # Base class for single (non-supplement) ASHRAE identifiers
6
6
  # Includes: Guideline, Standard
7
- class SingleIdentifier < Identifier
7
+ class SingleIdentifier < Identifiers::Base
8
+ def to_s
9
+ parts = []
10
+ parts << publisher if publisher
11
+ parts << type.to_s if type
12
+ result = parts.join(" ")
13
+ result += " " if result.length.positive?
14
+ result += code.to_s
15
+ result += "-#{year}" if year
16
+ result += " (#{amendment})" if amendment
17
+ result += suffix if suffix
18
+ result += " (RA#{reaffirmed})" if reaffirmed
19
+ result
20
+ end
8
21
  end
9
22
  end
10
23
  end
@@ -6,32 +6,17 @@ module Pubid
6
6
  module Ashrae
7
7
  # Base class for supplement identifiers (addendums, errata, interpretations)
8
8
  # Supplements modify or add to a base document
9
- class SupplementIdentifier < Identifier
10
- attribute :base, Identifier, polymorphic: true
9
+ class SupplementIdentifier < Identifiers::Base
10
+ attribute :base_identifier, Identifiers::Base, polymorphic: true
11
11
 
12
- # Delegate publisher to base
12
+ # Delegate publisher to base_identifier
13
13
  def publisher
14
- base&.publisher
14
+ base_identifier&.publisher
15
15
  end
16
16
 
17
- # Delegate the document code to the base standard.
18
- #
19
- # The BODY had to move with the `code` -> `number` rename — it was
20
- # `base&.code`, and `code` no longer exists anywhere in the hierarchy, so
21
- # it raised NoMethodError on every Errata/Addendum/CombinedAddenda/
22
- # AddendaPackage/Interpretation. Nothing inside lib/pubid/ashrae calls
23
- # it, which is exactly why the suite stayed green while a public method
24
- # on five types was broken.
25
- #
26
- # The NAME deliberately stays `code`. Renaming it to `number` looks
27
- # tidier and is wrong twice over: `number` is an inherited lutaml
28
- # attribute typed Components::Code, so a String-returning method of that
29
- # name makes `to_hash` raise IncorrectModelError on every supplement —
30
- # and even typed correctly it would serialize a duplicate of the base's
31
- # number onto the wrapper. `code` is not an attribute anywhere, so it is
32
- # free to be a plain reader. Use `#root.number` for the index key.
17
+ # Delegate code to base_identifier
33
18
  def code
34
- base&.number
19
+ base_identifier&.code
35
20
  end
36
21
  end
37
22
  end
@@ -3,16 +3,18 @@
3
3
  module Pubid
4
4
  module Ashrae
5
5
  class UrnGenerator < Pubid::UrnGenerator::Base
6
- # A supplement carries no number of its own — only the two
7
- # single-document leaves declare one — so reach it through #root, which
8
- # walks `base` to the standard the supplement attaches to. Without the
9
- # fallback every Errata/Addendum URN lost its number when `code` moved
10
- # off the shared base onto the leaves.
11
6
  def urn_number
12
- num = identifier.number || identifier.root.number
13
- return nil if num.nil? || num.to_s.empty?
7
+ return nil unless identifier.code
14
8
 
15
- num.to_s
9
+ identifier.code.to_s
10
+ end
11
+
12
+ def urn_year
13
+ if identifier.year
14
+ return identifier.year.to_s
15
+ end
16
+
17
+ nil
16
18
  end
17
19
 
18
20
  def urn_suffix
data/lib/pubid/ashrae.rb CHANGED
@@ -2,76 +2,20 @@
2
2
 
3
3
  module Pubid
4
4
  module Ashrae
5
- extend Pubid::PrefixesSupport
6
-
7
- # ASHRAE publisher token; the ANSI/ASHRAE joint form comes from
8
- # Pubid::JOINT_PREFIXES.
9
- PREFIXES = ["ASHRAE"].freeze
10
-
11
5
  autoload :Builder, "#{__dir__}/ashrae/builder"
12
- autoload :Identifier, "#{__dir__}/ashrae/identifiers/base"
6
+ autoload :Identifier, "#{__dir__}/ashrae/identifier"
13
7
  autoload :Identifiers, "#{__dir__}/ashrae/identifiers"
14
8
  autoload :Parser, "#{__dir__}/ashrae/parser"
15
- autoload :Renderer, "#{__dir__}/ashrae/renderer"
9
+ autoload :Scheme, "#{__dir__}/ashrae/scheme"
16
10
  autoload :SingleIdentifier, "#{__dir__}/ashrae/single_identifier"
17
11
  autoload :SupplementIdentifier, "#{__dir__}/ashrae/supplement_identifier"
18
12
  autoload :UrnGenerator, "#{__dir__}/ashrae/urn_generator"
19
- autoload :UrnParser, "#{__dir__}/ashrae/urn_parser"
20
13
 
21
14
  def self.parse(identifier)
22
- unless identifier.is_a?(String)
23
- raise Pubid::Errors::InvalidInputError,
24
- Pubid::INPUT_NOT_A_STRING_MESSAGE
25
- end
26
-
27
- if identifier.length > Pubid::MAX_INPUT_LENGTH
28
- raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
29
- end
30
-
31
15
  Identifier.parse(identifier)
32
16
  end
33
-
34
- # Auto-discover all identifier types from the Identifiers namespace
35
- # @return [Array<Class>] identifier classes that define a self.type Hash
36
- def self.identifier_types
37
- @identifier_types ||= Identifiers.constants
38
- .filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
39
- .select { |c| c.is_a?(Class) && c.singleton_methods(false).include?(:type) }
40
- .select { |c| c.type.is_a?(Hash) }
41
- end
42
-
43
- # Build typed stage index from identifier types
44
- # @return [Array<Pubid::Components::TypedStage>] all typed stages
45
- def self.all_typed_stages
46
- @all_typed_stages ||= identifier_types.flat_map do |klass|
47
- if klass.const_defined?(:TYPED_STAGES)
48
- klass.const_get(:TYPED_STAGES)
49
- else
50
- []
51
- end
52
- end
53
- end
54
-
55
- # Lookup: type code -> identifier class
56
- # @param code [String, Symbol] the type key to find
57
- # @return [Class, nil] the matching identifier class
58
- def self.locate_type(code)
59
- identifier_types.find { |t| t.type[:key].to_s == code.to_s }
60
- end
61
-
62
- # Lookup: abbreviation -> typed stage
63
- # @param abbr [String, Symbol] the abbreviation to find
64
- # @return [Pubid::Components::TypedStage, nil] the matching typed stage
65
- def self.locate_stage(abbr)
66
- abbr_str = abbr.to_s.upcase
67
- all_typed_stages.find { |s| s.abbr.any? { |a| a.to_s.upcase == abbr_str } }
68
- end
69
17
  end
70
18
  end
71
19
 
72
20
  # Register Uashrae flavor with the registry
73
21
  Pubid::Registry.register(:ashrae, Pubid::Ashrae)
74
-
75
- # Per-flavor format registry: inherits global formats, overrides :human
76
- Pubid::Ashrae::Identifier.format_registry = Pubid::FormatRegistry.new(parent: Pubid::Identifier.format_registry)
77
- Pubid::Ashrae::Identifier.format_registry.register(:human, renderer: Pubid::Ashrae::Renderer)
@@ -21,18 +21,9 @@ module Pubid
21
21
  identifier.publisher = "ASME"
22
22
  end
23
23
 
24
- # The code is stored as flat index columns on the leaf (see
25
- # Identifiers::Standard) — `number` is what relaton-index keys on — so
26
- # the Code built below is unpacked rather than assigned.
24
+ # Build code component
27
25
  if parsed_hash[:designator]
28
- identifier.number = build_code(parsed_hash).to_s
29
- elsif parsed_hash[:number]
30
- # A joint-published reference ("ISO/ASME 14414-2015") parses to a bare
31
- # `number` with no designator. The designator-only guard above dropped
32
- # it, so the document number was lost from BOTH the identifier and its
33
- # rendering: `to_s` was "ISO/ASME-2015". Pre-existing; recovering it
34
- # is what gives these ids an index key.
35
- identifier.number = parsed_hash[:number].to_s
26
+ identifier.code = build_code(parsed_hash)
36
27
  end
37
28
 
38
29
  # Set PTC suffix
@@ -5,19 +5,11 @@ require "lutaml/model"
5
5
  module Pubid
6
6
  module Asme
7
7
  module Components
8
- # Code component for ASME identifiers.
9
- #
10
- # Stays independent of Pubid::Components::Code because ASME uses
11
- # +designator+ (a flavor-specific letter prefix) plus +number+.
12
8
  class Code < Lutaml::Model::Serializable
13
- attribute :designator, :string
14
- attribute :number, :string
9
+ attribute :designator, :string # B, Y, BPVC, etc.
10
+ attribute :number, :string # 16.5, 14.43, III.1.NB, etc.
15
11
 
16
12
  def to_s
17
- render
18
- end
19
-
20
- def render(context: nil)
21
13
  "#{designator}#{number}"
22
14
  end
23
15
  end
@@ -4,15 +4,6 @@ module Pubid
4
4
  module Asme
5
5
  class Identifier < Pubid::Identifier
6
6
  def self.parse(str)
7
- unless str.is_a?(String)
8
- raise Pubid::Errors::InvalidInputError,
9
- Pubid::INPUT_NOT_A_STRING_MESSAGE
10
- end
11
-
12
- if str.length > Pubid::MAX_INPUT_LENGTH
13
- raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
14
- end
15
-
16
7
  parser = Parser.new
17
8
  builder = Builder.new
18
9
 
@@ -4,6 +4,66 @@ module Pubid
4
4
  module Asme
5
5
  module Identifiers
6
6
  class Base < SingleIdentifier
7
+ def to_s
8
+ # Handle joint published identifiers
9
+ parts = []
10
+ if first_publisher && first_code
11
+ # CSA B44.10/ASME A17.10 or API 579-2/ASME PTB-14 format
12
+ parts << first_publisher
13
+ parts << first_code
14
+ parts << "/#{second_publisher}" if second_publisher
15
+ parts << code.to_s if code && code.to_s != ""
16
+
17
+ elsif joint_publisher
18
+ # ISO/ASME or ASME/ANS format
19
+ parts << joint_publisher
20
+ parts << code.to_s if code && code.to_s != ""
21
+
22
+ else
23
+ # Standard ASME format
24
+ parts << publisher if publisher
25
+ parts << code.to_s if code
26
+
27
+ end
28
+ result = parts.join(" ")
29
+
30
+ # PTC suffix (space-separated)
31
+ if ptc_suffix
32
+ result += " #{ptc_suffix}"
33
+ end
34
+
35
+ # CSA dual-published (for ASME/CSA format)
36
+ if csa_number
37
+ result += "/CSA #{csa_number}"
38
+ end
39
+
40
+ # Handbook keyword
41
+ if handbook
42
+ result += " Handbook"
43
+ end
44
+
45
+ # Year
46
+ if draft_year
47
+ result += "-#{draft_year}"
48
+ elsif year
49
+ result += "-#{year}"
50
+ end
51
+
52
+ # Parenthetical revision (comes after year)
53
+ result += " #{parenthetical_revision}" if parenthetical_revision
54
+
55
+ # Language (can appear in rendered output)
56
+ result += " (#{language})" if language
57
+
58
+ # Reaffirmation
59
+ result += " (#{reaffirmation})" if reaffirmation
60
+
61
+ # Revision note
62
+ result += " #{revision_note}" if revision_note
63
+
64
+ # Normalize all em-dashes (–, —) and en-dashes to regular dash (-)
65
+ result.gsub(/[–—]/, "-")
66
+ end
7
67
  end
8
68
  end
9
69
  end
@@ -4,92 +4,8 @@ module Pubid
4
4
  module Asme
5
5
  module Identifiers
6
6
  class Standard < Base
7
- # --- Index columns -------------------------------------------------
8
- #
9
- # relaton-index sorts and bsearches every row on
10
- # `id.root.number.to_s`. ASME used to keep the code inside an
11
- # Asme::Components::Code under a `code` attribute, leaving the
12
- # inherited `number` nil and every row keyed "".
13
- #
14
- # `number` holds the WHOLE printed code — "B18.3", "A112.19.12",
15
- # "BPVC-CC-BPV" — not a designator/number split.
16
- #
17
- # The split looks tempting (it is what IEEE does) but it cannot key
18
- # this corpus: 152 of the 731 fixture ids are Boiler and Pressure
19
- # Vessel Code documents whose entire identity IS the designator
20
- # ("BPVC COMPLETE CODE BIND", "BPVC.CC.BPV") with no numeric part at
21
- # all. Splitting leaves every one of them with an empty key, and
22
- # inventing a number for them would be inventing data.
23
- #
24
- # Nothing is lost by joining: Components::Code#render is a plain
25
- # concatenation of designator and number, and the only readers of
26
- # `code` anywhere in lib/pubid/asme are `code.to_s` (renderer.rb,
27
- # urn_generator.rb). Keying on the whole code also clusters editions of
28
- # one document, which is what relaton narrows on — an ASME reference is
29
- # always written "ASME B18.3", never "18.3" alone.
30
- #
31
- # LANDMINE: `number` redefines the Components::Code attribute inherited
32
- # from ::Pubid::Identifier, which resolves nondeterministically when
33
- # declared on a class others inherit from. Standard is the only
34
- # concrete ASME type and has no subclasses, so it is declared here and
35
- # never on SingleIdentifier / Identifiers::Base.
36
- # spec/pubid/asme/root_number_spec.rb carries the tripwire and is only
37
- # meaningful under the full `rake` suite.
38
- # There is deliberately no `#code` reader here. An earlier draft had one
39
- # composing `Components::Code.new(number: number)` so the renderer and
40
- # the URN generator would not have to change — but because `number`
41
- # holds the whole printed code, that Code never carried a designator and
42
- # `code.to_s` equalled `number` for all 731 corpus ids. It wrapped a
43
- # string in an object whose only job was to unwrap to the same string.
44
- # Both readers now use `number` directly.
45
- #
46
- # ASTM keeps its composed `#code` (Identifiers::CodeNumber) for the
47
- # opposite reason: its renderer reads `code.letter` / `code.dual_m`
48
- # field-by-field, so the component there carries real structure.
49
- attribute :number, :string
50
-
51
- # MR slug. Before the index column landed, every ASME slug was just
52
- # "asme": 722 of 731 documents shared one filename, and `to_slug` is
53
- # what consumers use as an output filename.
54
- #
55
- # `handbook` is identity-bearing — it is in the serialized hash and in
56
- # `==`, and "ASME A17.1/CSA B44-2019" and "ASME A17.1/CSA B44
57
- # Handbook-2019" are different documents — so it has to reach the slug
58
- # too. CLAUDE.md's rule: a marker that only reaches `==` still lets two
59
- # documents share a filename.
60
- def mr_number_with_part
61
- mr_join(mr_sanitize(number), (handbook ? "handbook" : nil))
62
- end
63
-
64
- # ASME keeps its edition in a plain `year` string, not the inherited
65
- # `date`, so the base `mr_year` hook read nil and every edition of one
66
- # standard shared a slug.
67
- def mr_year
68
- year&.to_s
69
- end
70
-
71
- # ASME keeps a translation marker in a plain `language` string, not the
72
- # inherited `languages` collection the base hook reads. Without this,
73
- # "ASME B31.8-2016" and its Spanish edition "ASME B31.8 (SPANISH)-2016"
74
- # — different documents, and #== agrees — share one filename.
75
- def mr_languages
76
- language&.to_s&.downcase
77
- end
78
-
79
- # An ASME code legitimately contains "." (B18.3), "-" (BPVC-CC-BPV),
80
- # "&" (V&V) and spaces ("BPVC COMPLETE CODE BIND"). Renderers::MrString
81
- # joins SEGMENTS with ".", so a dot inside one breaks that structure —
82
- # filter by charset, the BIPM `mr_slug` precedent, rather than by an
83
- # enumerated escape list. The output emptiness check matters: a value
84
- # made only of out-of-charset characters collapses to "", which is
85
- # truthy in Ruby and would reach the renderer as a blank segment.
86
- def mr_sanitize(value)
87
- return nil if value.nil? || value.to_s.empty?
88
-
89
- sanitized = value.to_s.downcase
90
- .gsub(/[^a-z0-9-]+/, "-").gsub(/\A-+|-+\z/, "")
91
- sanitized.empty? ? nil : sanitized
92
- end
7
+ # Standard extends Base with no additional attributes
8
+ # All functionality inherited from Base
93
9
  end
94
10
  end
95
11
  end
@@ -4,7 +4,7 @@ require "parslet"
4
4
 
5
5
  module Pubid
6
6
  module Asme
7
- class Parser < ::Pubid::Parser::Grammar
7
+ class Parser < Parslet::Parser
8
8
  # Basic building blocks
9
9
  rule(:space) { str(" ") }
10
10
  # Regular dash, en-dash, em-dash
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Asme
5
+ class Scheme < Pubid::Scheme
6
+ class << self
7
+ def identifiers
8
+ @identifiers ||= [
9
+ Identifiers::Standard,
10
+ ].freeze
11
+ end
12
+
13
+ def supplement_identifiers
14
+ @supplement_identifiers ||= [].freeze
15
+ end
16
+
17
+ def typed_stages
18
+ @typed_stages ||= [].freeze
19
+ end
20
+
21
+ def supplement_typed_stages
22
+ @supplement_typed_stages ||= [].freeze
23
+ end
24
+
25
+ def locate_typed_stage_by_abbr(_abbr)
26
+ raise ArgumentError,
27
+ "ASME identifiers do not use typed stages"
28
+ end
29
+
30
+ def locate_identifier_klass_by_type_code(_type_code)
31
+ raise ArgumentError,
32
+ "ASME identifiers do not use type codes"
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -2,22 +2,13 @@
2
2
 
3
3
  module Pubid
4
4
  module Asme
5
- # Descends from Pubid::Asme::Identifier (the flavor base) so every concrete
6
- # ASME identifier is `is_a?(Pubid::Asme::Identifier)`.
7
- class SingleIdentifier < Identifier
5
+ class SingleIdentifier < Pubid::Identifier
8
6
  # Generate URN for this identifier
9
7
  #
10
8
  # @return [String] URN representation
11
9
 
12
10
  attribute :publisher, :string
13
- # The document code lives on the concrete leaf as a single `number`
14
- # column holding the WHOLE printed code ("B18.3", "BPVC-CC-BPV") — see
15
- # Identifiers::Standard, which explains why it is not split into
16
- # designator + number. It cannot be declared here: SingleIdentifier is
17
- # inherited by Identifiers::Base and Identifiers::Standard, and
18
- # redefining the `number` that ::Pubid::Identifier types as a
19
- # Components::Code on an inherited-from class resolves
20
- # nondeterministically under multi-flavor load.
11
+ attribute :code, Components::Code
21
12
  attribute :year, :string
22
13
  attribute :reaffirmation, :string # R2020
23
14
  attribute :language, :string # (SPANISH)
@@ -11,8 +11,8 @@ module Pubid
11
11
 
12
12
  parts << publisher_component
13
13
 
14
- if identifier.number
15
- parts << identifier.number.to_s
14
+ if identifier.code
15
+ parts << identifier.code.to_s
16
16
  end
17
17
 
18
18
  part = maybe(:part)