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
@@ -3,17 +3,17 @@
3
3
  module Pubid
4
4
  module Ashrae
5
5
  # Builder class for constructing ASHRAE identifier scheme from parsed data
6
- # Single Responsibility: Transform parsed data into identifier objects
6
+ # Single Responsibility: Transform parsed data into Scheme objects
7
7
  class Builder
8
8
  attr_reader :identifier_class
9
9
 
10
- def initialize(identifier_class = Identifier)
10
+ def initialize(identifier_class = Identifiers::Base)
11
11
  @identifier_class = identifier_class
12
12
  end
13
13
 
14
14
  # Build a scheme object from parsed data
15
15
  # @param parsed [Hash, Array] the parsed identifier data
16
- # @return [identifier] the constructed scheme object
16
+ # @return [Scheme] the constructed scheme object
17
17
  def build(parsed)
18
18
  # Parslet can return array of hashes - merge them
19
19
  parsed_hash = parsed.is_a?(Array) ? merge_parsed_array(parsed) : parsed
@@ -39,18 +39,6 @@ module Pubid
39
39
  return build_addendum_no_type(parsed_hash[:addendum_no_type])
40
40
  elsif parsed_hash[:standard_addendum]
41
41
  return build_standard_addendum(parsed_hash[:standard_addendum])
42
- # These two grammar rules had NO dispatch branch, so they fell through
43
- # to the plain-identifier path below. That path looks for
44
- # publisher/type/code at the TOP of the hash, finds only the wrapper
45
- # key, and builds an empty Standard — 123 corpus ids rendered as the
46
- # bare string "ASHRAE Standard ". Both subtrees are flat and carry
47
- # exactly the keys #build_addendum_from_identifier already reads.
48
- elsif parsed_hash[:addendum]
49
- return build_addendum_from_identifier(parsed_hash[:addendum])
50
- elsif parsed_hash[:publisher_base_addendum]
51
- return build_addendum_from_identifier(
52
- parsed_hash[:publisher_base_addendum],
53
- )
54
42
  end
55
43
 
56
44
  # Handle base identifier
@@ -65,7 +53,7 @@ module Pubid
65
53
 
66
54
  # Class method to build an identifier from parsed data
67
55
  # @param parsed [Hash, Array] the parsed identifier data
68
- # @return [Identifier] the constructed identifier object
56
+ # @return [Identifiers::Base] the constructed identifier object
69
57
  def self.build(parsed)
70
58
  new.build(parsed)
71
59
  end
@@ -83,7 +71,7 @@ module Pubid
83
71
 
84
72
  # Extract and normalize attributes from parsed data
85
73
  # @param parsed [Hash] the parsed data
86
- # @return [Hash] normalized attributes for identifier
74
+ # @return [Hash] normalized attributes for Scheme
87
75
  def extract_attributes(parsed)
88
76
  attributes = {}
89
77
 
@@ -101,7 +89,7 @@ module Pubid
101
89
  # code_with_year contains both code and year
102
90
  code_year_data = parsed[:code_with_year]
103
91
  if code_year_data && code_year_data[:code]
104
- attributes[:number] =
92
+ attributes[:code] =
105
93
  extract_value(code_year_data[:code])
106
94
  end
107
95
  if code_year_data && code_year_data[:year]
@@ -109,7 +97,7 @@ module Pubid
109
97
  extract_value(code_year_data[:year])
110
98
  end
111
99
  elsif parsed[:code]
112
- attributes[:number] = extract_value(parsed[:code])
100
+ attributes[:code] = extract_value(parsed[:code])
113
101
  end
114
102
 
115
103
  # Extract year if not already extracted from code_with_year
@@ -170,12 +158,12 @@ module Pubid
170
158
  def build_errata(parsed)
171
159
  base_attrs = extract_base_attributes(parsed)
172
160
  base_class = determine_identifier_class(base_attrs)
173
- base = base_class.new(**base_attrs)
161
+ base_identifier = base_class.new(**base_attrs)
174
162
 
175
163
  errata_date = extract_errata_date(parsed[:errata_date])
176
164
 
177
165
  Identifiers::Errata.new(
178
- base: base,
166
+ base_identifier: base_identifier,
179
167
  errata_date: errata_date,
180
168
  )
181
169
  end
@@ -186,10 +174,10 @@ module Pubid
186
174
  def build_interpretation(parsed)
187
175
  base_attrs = extract_base_attributes(parsed)
188
176
  base_class = determine_identifier_class(base_attrs)
189
- base = base_class.new(**base_attrs)
177
+ base_identifier = base_class.new(**base_attrs)
190
178
 
191
179
  Identifiers::Interpretation.new(
192
- base: base,
180
+ base_identifier: base_identifier,
193
181
  )
194
182
  end
195
183
 
@@ -199,13 +187,13 @@ module Pubid
199
187
  def build_addendum_from_identifier(parsed)
200
188
  base_attrs = extract_base_attributes(parsed)
201
189
  base_class = determine_identifier_class(base_attrs)
202
- base = base_class.new(**base_attrs)
190
+ base_identifier = base_class.new(**base_attrs)
203
191
 
204
192
  addendum_code = extract_value(parsed[:addendum_code])
205
193
  addendum_date = extract_addendum_date(parsed[:addendum_year])
206
194
 
207
195
  Identifiers::Addendum.new(
208
- base: base,
196
+ base_identifier: base_identifier,
209
197
  addendum_code: addendum_code,
210
198
  addendum_date: addendum_date,
211
199
  )
@@ -217,17 +205,17 @@ module Pubid
217
205
  def build_publisher_addendum(parsed)
218
206
  base_attrs = {
219
207
  type: extract_value(parsed[:type]),
220
- number: extract_value(parsed[:code]),
208
+ code: extract_value(parsed[:code]),
221
209
  year: extract_value(parsed[:year]),
222
210
  }
223
211
  base_class = determine_identifier_class(base_attrs)
224
- base = base_class.new(**base_attrs)
212
+ base_identifier = base_class.new(**base_attrs)
225
213
 
226
214
  addendum_code = extract_value(parsed[:addendum_code])
227
215
  addendum_date = extract_addendum_date(parsed[:addendum_year])
228
216
 
229
217
  Identifiers::Addendum.new(
230
- base: base,
218
+ base_identifier: base_identifier,
231
219
  addendum_code: addendum_code,
232
220
  addendum_date: addendum_date,
233
221
  )
@@ -240,17 +228,17 @@ module Pubid
240
228
  base_attrs = {
241
229
  copublisher: extract_value(parsed[:copublisher]),
242
230
  type: extract_value(parsed[:type]) || "Standard",
243
- number: extract_value(parsed[:code]),
231
+ code: extract_value(parsed[:code]),
244
232
  year: extract_value(parsed[:year]),
245
233
  }
246
234
  base_class = determine_identifier_class(base_attrs)
247
- base = base_class.new(**base_attrs)
235
+ base_identifier = base_class.new(**base_attrs)
248
236
 
249
237
  addendum_code = extract_value(parsed[:addendum_code])
250
238
  addendum_date = extract_addendum_date(parsed[:addendum_year])
251
239
 
252
240
  Identifiers::Addendum.new(
253
- base: base,
241
+ base_identifier: base_identifier,
254
242
  addendum_code: addendum_code,
255
243
  addendum_date: addendum_date,
256
244
  )
@@ -272,7 +260,7 @@ module Pubid
272
260
  if parsed[:code_with_year]
273
261
  code_year_data = parsed[:code_with_year]
274
262
  if code_year_data && code_year_data[:code]
275
- base_attrs[:number] =
263
+ base_attrs[:code] =
276
264
  extract_value(code_year_data[:code])
277
265
  end
278
266
  if code_year_data && code_year_data[:year]
@@ -282,13 +270,13 @@ module Pubid
282
270
  end
283
271
 
284
272
  base_class = determine_identifier_class(base_attrs)
285
- base = base_class.new(**base_attrs)
273
+ base_identifier = base_class.new(**base_attrs)
286
274
 
287
275
  addendum_code = extract_value(parsed[:addendum_code])
288
276
  addendum_date = extract_addendum_date(parsed[:addendum_year])
289
277
 
290
278
  Identifiers::Addendum.new(
291
- base: base,
279
+ base_identifier: base_identifier,
292
280
  addendum_code: addendum_code,
293
281
  addendum_date: addendum_date,
294
282
  )
@@ -310,7 +298,7 @@ module Pubid
310
298
  if parsed[:code_with_year]
311
299
  code_year_data = parsed[:code_with_year]
312
300
  if code_year_data && code_year_data[:code]
313
- base_attrs[:number] =
301
+ base_attrs[:code] =
314
302
  extract_value(code_year_data[:code])
315
303
  end
316
304
  if code_year_data && code_year_data[:year]
@@ -320,13 +308,13 @@ module Pubid
320
308
  end
321
309
 
322
310
  base_class = determine_identifier_class(base_attrs)
323
- base = base_class.new(**base_attrs)
311
+ base_identifier = base_class.new(**base_attrs)
324
312
 
325
313
  addendum_code = extract_value(parsed[:addendum_code])
326
314
  addendum_date = extract_addendum_date(parsed[:addendum_year])
327
315
 
328
316
  Identifiers::Addendum.new(
329
- base: base,
317
+ base_identifier: base_identifier,
330
318
  addendum_code: addendum_code,
331
319
  addendum_date: addendum_date,
332
320
  )
@@ -338,13 +326,13 @@ module Pubid
338
326
  def build_standard_addendum(parsed)
339
327
  base_attrs = extract_base_attributes(parsed)
340
328
  base_class = determine_identifier_class(base_attrs)
341
- base = base_class.new(**base_attrs)
329
+ base_identifier = base_class.new(**base_attrs)
342
330
 
343
331
  addendum_code = extract_value(parsed[:addendum_code])
344
332
  addendum_date = extract_addendum_date(parsed[:addendum_year])
345
333
 
346
334
  Identifiers::Addendum.new(
347
- base: base,
335
+ base_identifier: base_identifier,
348
336
  addendum_code: addendum_code,
349
337
  addendum_date: addendum_date,
350
338
  )
@@ -361,7 +349,7 @@ module Pubid
361
349
  if parsed[:code_with_year]
362
350
  code_year_data = parsed[:code_with_year]
363
351
  if code_year_data && code_year_data[:code]
364
- base_attrs[:number] =
352
+ base_attrs[:code] =
365
353
  extract_value(code_year_data[:code])
366
354
  end
367
355
  if code_year_data && code_year_data[:year]
@@ -370,7 +358,7 @@ module Pubid
370
358
  end
371
359
  else
372
360
  base_attrs[:type] = extract_value(parsed[:type]) || "Standard"
373
- base_attrs[:number] = extract_value(parsed[:code])
361
+ base_attrs[:code] = extract_value(parsed[:code])
374
362
  base_attrs[:year] = extract_value(parsed[:year])
375
363
  end
376
364
 
@@ -384,7 +372,7 @@ module Pubid
384
372
  end
385
373
 
386
374
  base_class = determine_identifier_class(base_attrs)
387
- base = base_class.new(**base_attrs)
375
+ base_identifier = base_class.new(**base_attrs)
388
376
 
389
377
  # Build the addendum_codes string from first code and additional codes
390
378
  first_code = extract_value(parsed[:addendum_code])
@@ -418,7 +406,7 @@ module Pubid
418
406
  end
419
407
 
420
408
  Identifiers::CombinedAddenda.new(
421
- base: base,
409
+ base_identifier: base_identifier,
422
410
  addendum_codes: addendum_codes_str,
423
411
  )
424
412
  end
@@ -429,12 +417,12 @@ module Pubid
429
417
  def build_addenda_package(parsed)
430
418
  base_attrs = extract_base_attributes(parsed)
431
419
  base_class = determine_identifier_class(base_attrs)
432
- base = base_class.new(**base_attrs)
420
+ base_identifier = base_class.new(**base_attrs)
433
421
 
434
422
  package_description = extract_value(parsed[:package_description])
435
423
 
436
424
  Identifiers::AddendaPackage.new(
437
- base: base,
425
+ base_identifier: base_identifier,
438
426
  package_description: package_description,
439
427
  )
440
428
  end
@@ -443,15 +431,6 @@ module Pubid
443
431
  # @param parsed [Hash] the parsed data
444
432
  # @return [Hash] attributes for base identifier
445
433
  def extract_base_attributes(parsed)
446
- # Unwrap the `:base` subtree the supplement grammars nest the base
447
- # document under. Builder#build does this for the plain-identifier
448
- # path, but the five supplement builders that call this method all
449
- # passed the WHOLE parse hash — so every lookup below missed and the
450
- # base was built with nothing. 318 Errata rendered as the identical
451
- # string "ASHRAE Standard Errata"; doing it here fixes all five call
452
- # sites at once, rather than repeating the unwrap in each.
453
- parsed = parsed[:base] if parsed.is_a?(Hash) && parsed[:base]
454
-
455
434
  attributes = {}
456
435
 
457
436
  if parsed[:publisher]
@@ -469,7 +448,7 @@ module Pubid
469
448
  if parsed[:code_with_year]
470
449
  code_year_data = parsed[:code_with_year]
471
450
  if code_year_data && code_year_data[:code]
472
- attributes[:number] =
451
+ attributes[:code] =
473
452
  extract_value(code_year_data[:code])
474
453
  end
475
454
  if code_year_data && code_year_data[:year]
@@ -477,7 +456,7 @@ module Pubid
477
456
  extract_value(code_year_data[:year])
478
457
  end
479
458
  else
480
- attributes[:number] = extract_value(parsed[:code]) if parsed[:code]
459
+ attributes[:code] = extract_value(parsed[:code]) if parsed[:code]
481
460
  attributes[:year] = extract_value(parsed[:year]) if parsed[:year]
482
461
  end
483
462
 
@@ -1,8 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # The ASHRAE flavor base class is Pubid::Ashrae::Identifier — a real
4
- # Pubid::Identifier subclass that every concrete ASHRAE identifier descends
5
- # from, so `is_a?` identity and the shared polymorphic `from_hash` work natively
6
- # (no facade needed). Its body and `.parse` live in identifiers/base.rb; this
7
- # file just ensures it is loaded when a consumer references
8
- # Pubid::Ashrae::Identifier directly.
3
+ module Pubid
4
+ module Ashrae
5
+ module Identifier
6
+ # Parse an ASHRAE identifier string into an identifier object
7
+ # @param identifier [String] The ASHRAE identifier string to parse
8
+ # @return [Identifiers::Base] The appropriate identifier object
9
+ # @raise [Parslet::ParseFailed] If parsing fails
10
+ def self.parse(identifier)
11
+ parsed = Parser.parse(identifier)
12
+ Builder.build(parsed)
13
+ rescue Parslet::ParseFailed => e
14
+ raise "Failed to parse ASHRAE identifier '#{identifier}': #{e.message}"
15
+ end
16
+ end
17
+ end
18
+ end
@@ -14,12 +14,6 @@ module Pubid
14
14
  class AddendaPackage < SupplementIdentifier
15
15
  attribute :package_description, :string # e.g., "Addenda Supplement Package"
16
16
 
17
- # See Errata.
18
- def mr_supplement_suffix
19
- ["pkg", mr_sanitize(package_description)]
20
- .compact.reject(&:empty?).join(".")
21
- end
22
-
23
17
  TYPED_STAGES = [
24
18
  Components::TypedStage.new(
25
19
  abbr: ["Addenda Supplement Package", "Addenda Package"],
@@ -33,8 +27,18 @@ module Pubid
33
27
  short: "Addenda Package" }
34
28
  end
35
29
 
30
+ def to_s
31
+ return base_identifier.to_s unless base_identifier
32
+
33
+ # Format: ASHRAE Standard 52.2-1999: Addenda Supplement Package
34
+ result = "ASHRAE #{base_identifier.type || 'Standard'} #{base_identifier.code}"
35
+ result += "-#{base_identifier.year}" if base_identifier.year
36
+ result += ": Addenda #{package_description}" if package_description
37
+ result
38
+ end
39
+
36
40
  def copublisher
37
- base&.copublisher
41
+ base_identifier&.copublisher
38
42
  end
39
43
  end
40
44
  end
@@ -15,14 +15,6 @@ module Pubid
15
15
  attribute :addendum_code, :string # a, b, c, ..., aa, ab, ..., ba, etc.
16
16
  attribute :addendum_date, :string # Optional date (January 22, 2019)
17
17
 
18
- # See Errata: the renderer must recurse into `base`. The addendum
19
- # letter is what distinguishes addendum a from addendum b of one
20
- # standard, so it belongs in the slug as well as in `==`.
21
- def mr_supplement_suffix
22
- ["add", addendum_code&.to_s&.downcase]
23
- .compact.reject(&:empty?).join(".")
24
- end
25
-
26
18
  TYPED_STAGES = [
27
19
  Components::TypedStage.new(
28
20
  abbr: ["Addendum", "Addenda"],
@@ -35,8 +27,27 @@ module Pubid
35
27
  { key: :addendum, title: "ASHRAE Addendum", short: "Addendum" }
36
28
  end
37
29
 
30
+ def to_s
31
+ return base_identifier.to_s unless base_identifier
32
+
33
+ # Determine base type name for rendering
34
+ base_type = base_identifier.type || "Standard"
35
+
36
+ if copublisher
37
+ # Format: ANSI/ASHRAE Addendum a to ANSI/ASHRAE Standard 15-2019
38
+ result = "#{copublisher} Addendum #{addendum_code} to #{base_identifier}"
39
+ else
40
+ # Format: ASHRAE Addendum a to Standard 15-2001
41
+ result = "ASHRAE Addendum #{addendum_code} to #{base_type} #{base_identifier.code}"
42
+ result += "-#{base_identifier.year}" if base_identifier.year
43
+ end
44
+
45
+ result += " (#{addendum_date})" if addendum_date
46
+ result
47
+ end
48
+
38
49
  def copublisher
39
- base&.copublisher
50
+ base_identifier&.copublisher
40
51
  end
41
52
  end
42
53
  end
@@ -2,117 +2,21 @@
2
2
 
3
3
  module Pubid
4
4
  module Ashrae
5
- # Base class for all ASHRAE identifiers. Canonical name
6
- # Pubid::Ashrae::Identifier; every concrete ASHRAE identifier descends from it.
7
- class Identifier < ::Pubid::Identifier
8
- # Parse an ASHRAE identifier string into an identifier object
9
- # @param identifier [String] The ASHRAE identifier string to parse
10
- # @return [Pubid::Ashrae::Identifier] The appropriate identifier object
11
- # @raise [Pubid::Errors::ParseError] If parsing fails
12
- def self.parse(identifier)
13
- parsed = Parser.parse(identifier)
14
- Builder.build(parsed)
15
- end
16
-
17
- attribute :publisher, :string, default: "ASHRAE"
18
- # The document number used to live here as `attribute :code, :string`,
19
- # leaving the `number` inherited from ::Pubid::Identifier nil — so
20
- # relaton-index, which sorts and bsearches on `id.root.number.to_s`,
21
- # keyed all 3,619 ASHRAE rows on "".
22
- #
23
- # It is now `attribute :number, :string` on the two single-document
24
- # LEAVES (Identifiers::Standard and Identifiers::Guideline), never here:
25
- # this class is inherited by BOTH SingleIdentifier and
26
- # SupplementIdentifier, and redefining the parent's Components::Code-typed
27
- # `number` on an inherited-from class resolves nondeterministically under
28
- # multi-flavor load. The supplement types carry no number of their own —
29
- # they reach it through #root, which walks `base`.
30
- attribute :year, :string
31
- attribute :type, :string
32
- attribute :suffix, :string # R (revision), P (proposed), etc.
33
- attribute :amendment, :string
34
- attribute :reaffirmed, :string
35
- attribute :copublisher, :string
36
-
37
- # --- MR slug hooks -------------------------------------------------
38
- #
39
- # ASHRAE supplied none, and every base hook looks for something ASHRAE
40
- # does not use: `mr_type` reads a typed_stage, `mr_year` reads a
41
- # Components::Date. With `number` nil too, ALL 3,619 ids collapsed onto
42
- # the single slug "ashrae" — the worst collapse measured in the gem, and
43
- # `to_slug` is what consumers use as an output FILENAME.
44
- #
45
- # `type` distinguishes a Guideline from a Standard of the same number
46
- # (Guideline 0 and Standard 0 are different documents), so it has to
47
- # reach the slug and not only `==`.
48
- def mr_type
49
- type&.to_s&.downcase
50
- end
51
-
52
- # ASHRAE keeps its edition in a plain `year` string, not the inherited
53
- # `date`, so the base hook read nil and every edition of one standard
54
- # shared a slug.
55
- def mr_year
56
- year&.to_s
57
- end
58
-
59
- # `copublisher` is in `==` and in `to_s`, so by the project rule it has to
60
- # reach the slug too: "ASHRAE Standard 15-2019 Addendum a" and
61
- # "ANSI/ASHRAE Addendum a to ANSI/ASHRAE Standard 15-2019" have different
62
- # hashes and would otherwise share a filename. (Whether those two strings
63
- # ought to normalise to ONE identifier is a separate question, and not one
64
- # the slug should paper over.)
65
- def mr_publisher
66
- mr_sanitize(copublisher || publisher)
67
- end
68
-
69
- # Both trailing markers are identity-bearing and must reach the slug, not
70
- # only `==`: `reaffirmed` ("RA 2017") separates "ANSI/ASHRAE Standard
71
- # 206-2013 (RA 2017)" from the plain "…206-2013", and `suffix` ("R" for
72
- # revision, "P" for proposed) separates "ASHRAE Guideline 27-2019" from
73
- # "…27-2019R". Their hashes differ, so their filenames must too.
74
- # Uses the shared #mr_join rather than a bare `compact.join("-")`, so it
75
- # returns nil instead of "" when nothing survives: MrString's own
76
- # `compact` drops nil but not the empty string, and a blank segment
77
- # yields a double dot in the joined slug.
78
- def mr_number_with_part
79
- mr_join(mr_sanitize(number),
80
- (reaffirmed ? "ra#{mr_sanitize(reaffirmed)}" : nil),
81
- mr_sanitize(suffix))
82
- end
83
-
84
- # An ASHRAE value can carry characters outside the [a-z0-9.-] charset
85
- # Renderers::MrString documents: a comma in the code "90A,B,C", a slash
86
- # in the copublisher "ANSI/ASHRAE", spaces in a package description.
87
- # Filter BY CHARSET (the BIPM `mr_slug` precedent) rather than by an
88
- # enumerated escape list, so a character introduced later cannot reach a
89
- # filename.
90
- #
91
- # Public alongside the hooks above rather than tucked behind `private`,
92
- # since the whole MR surface here is public, and the supplement types
93
- # call it from their own mr_supplement_suffix. The output emptiness check
94
- # matters: a value made only of out-of-charset characters collapses to
95
- # "", which is truthy in Ruby and would reach the renderer as a blank
96
- # segment, producing a double dot in the joined slug.
97
- def mr_sanitize(value)
98
- return nil if value.nil? || value.to_s.empty?
99
-
100
- sanitized = value.to_s.downcase
101
- .gsub(%r{[^a-z0-9.-]+}, "-").gsub(%r{\A-+|-+\z}, "")
102
- sanitized.empty? ? nil : sanitized
103
- end
104
-
105
- # ASHRAE stores the publication year in a plain :string scalar, not a
106
- # Components::Date, so the base #exclude's :year->:date remap cannot nil
107
- # it. Reset the scalar directly (mirroring CSA/BIPM) so a year-less
108
- # partial reference is a year wildcard under
109
- # matches?(other, ignore: [:year]). super still recurses into the nested
110
- # `base` of wrapper types (Errata/Addendum/…), which carry no year scalar.
111
- def exclude(*args)
112
- result = super
113
- year_keys = args & %i[year date]
114
- result.year = nil if !year_keys.empty? && result.respond_to?(:year=)
115
- result
5
+ module Identifiers
6
+ # Base class for all ASHRAE identifiers
7
+ class Base < Pubid::Identifier
8
+ attribute :publisher, :string, default: "ASHRAE"
9
+ attribute :code, :string
10
+ attribute :year, :string
11
+ attribute :type, :string
12
+ attribute :suffix, :string # R (revision), P (proposed), etc.
13
+ attribute :amendment, :string
14
+ attribute :reaffirmed, :string
15
+ attribute :copublisher, :string
16
+
17
+ def self.parse(string)
18
+ Ashrae::Identifier.parse(string)
19
+ end
116
20
  end
117
21
  end
118
22
  end
@@ -14,13 +14,6 @@ module Pubid
14
14
  attribute :addendum_codes, :string # Multiple codes like "c and d"
15
15
  attribute :connector, :string # "and" or ","
16
16
 
17
- # See Errata. The whole letter list is the identity here — "Addenda a,
18
- # b" and "Addenda c, d" of one standard are different documents.
19
- def mr_supplement_suffix
20
- ["adds", mr_sanitize(addendum_codes)]
21
- .compact.reject(&:empty?).join(".")
22
- end
23
-
24
17
  TYPED_STAGES = [
25
18
  Components::TypedStage.new(
26
19
  abbr: ["Addenda", "Combined Addenda"],
@@ -34,8 +27,23 @@ module Pubid
34
27
  short: "Addenda" }
35
28
  end
36
29
 
30
+ def to_s
31
+ return base_identifier.to_s unless base_identifier
32
+
33
+ base_type = base_identifier.type || "Standard"
34
+ if addendum_codes
35
+ # Format: ASHRAE Addenda c and d to Standard 15-1994
36
+ result = "ASHRAE Addenda #{addendum_codes} to #{base_type} #{base_identifier.code}"
37
+ else
38
+ # Format: ASHRAE Addenda to Standard 15-1994 (no specific codes)
39
+ result = "ASHRAE Addenda to #{base_type} #{base_identifier.code}"
40
+ end
41
+ result += "-#{base_identifier.year}" if base_identifier.year
42
+ result
43
+ end
44
+
37
45
  def copublisher
38
- base&.copublisher
46
+ base_identifier&.copublisher
39
47
  end
40
48
  end
41
49
  end
@@ -13,15 +13,6 @@ module Pubid
13
13
  class Errata < SupplementIdentifier
14
14
  attribute :errata_date, :string
15
15
 
16
- # Make Renderers::MrString recurse into `base` instead of slugging the
17
- # supplement flat off attributes it does not have. Without it every
18
- # erratum of every standard shared one filename, and `to_slug` is what
19
- # consumers use as an output filename.
20
- def mr_supplement_suffix
21
- ["errata", mr_sanitize(errata_date)]
22
- .compact.reject(&:empty?).join(".")
23
- end
24
-
25
16
  TYPED_STAGES = [
26
17
  Components::TypedStage.new(
27
18
  abbr: ["Errata"],
@@ -33,6 +24,16 @@ module Pubid
33
24
  def self.type
34
25
  { key: :errata, title: "ASHRAE Errata", short: "Errata" }
35
26
  end
27
+
28
+ def to_s
29
+ return base_identifier.to_s unless base_identifier
30
+
31
+ # Format: ASHRAE Guideline 0-2005 Errata (September 28, 2011)
32
+ result = base_identifier.to_s
33
+ result += " Errata"
34
+ result += " (#{errata_date})" if errata_date
35
+ result
36
+ end
36
37
  end
37
38
  end
38
39
  end
@@ -8,9 +8,6 @@ module Pubid
8
8
  # ASHRAE Guideline identifier
9
9
  # Example: ASHRAE Guideline 0-2019, ASHRAE Guideline 1.5
10
10
  class Guideline < SingleIdentifier
11
- # The relaton index key. Declared on the LEAF, not on the shared
12
- # Identifier that SupplementIdentifier also inherits — see base.rb.
13
- attribute :number, :string
14
11
  attribute :type, :string, default: "Guideline"
15
12
 
16
13
  TYPED_STAGES = [
@@ -11,22 +11,6 @@ module Pubid
11
11
  # - Interpretations for Standard 15.2-2022
12
12
  # - Interpretations for Standard 52.1-1992
13
13
  class Interpretation < SupplementIdentifier
14
- # Mirrors its four sibling supplement types: without it
15
- # Renderers::MrString slugs the interpretation FLAT off attributes it
16
- # does not have, instead of recursing into `base`.
17
- #
18
- # Currently unreachable, and NOT because of alternation ordering:
19
- # rule(:interpretation_identifier) is reached and does match, but it
20
- # never wraps its output in `.as(:interpretation_identifier)`, so
21
- # Builder#build's branch for that key is dead code and the tree falls
22
- # through to the plain-Standard path (pre-existing; pinned in
23
- # spec/pubid/ashrae/root_number_spec.rb, hand-off
24
- # ashrae-interpretation-collapses-onto-base). Added anyway so that
25
- # fixing the dispatch does not silently ship malformed filenames.
26
- def mr_supplement_suffix
27
- "interp"
28
- end
29
-
30
14
  TYPED_STAGES = [
31
15
  Components::TypedStage.new(
32
16
  abbr: ["Interpretations"],
@@ -39,6 +23,16 @@ module Pubid
39
23
  { key: :interpretation, title: "ASHRAE Interpretations",
40
24
  short: "Interpretations" }
41
25
  end
26
+
27
+ def to_s
28
+ return base_identifier.to_s unless base_identifier
29
+
30
+ # Format: Interpretations for Standard 15.2-2022
31
+ base_type = base_identifier.type || "Standard"
32
+ result = "Interpretations for #{base_type} #{base_identifier.code}"
33
+ result += "-#{base_identifier.year}" if base_identifier.year
34
+ result
35
+ end
42
36
  end
43
37
  end
44
38
  end
@@ -8,9 +8,6 @@ module Pubid
8
8
  # ASHRAE Standard identifier
9
9
  # Example: ASHRAE Standard 15-2024, ASHRAE Standard 90.1-2022
10
10
  class Standard < SingleIdentifier
11
- # The relaton index key. Declared on the LEAF, not on the shared
12
- # Identifier that SupplementIdentifier also inherits — see base.rb.
13
- attribute :number, :string
14
11
  attribute :type, :string, default: "Standard"
15
12
 
16
13
  TYPED_STAGES = [