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
@@ -13,58 +13,21 @@ module Pubid
13
13
  #
14
14
  # @example Standard format
15
15
  # nesc = Pubid::Ieee.parse("C2-1997 National Electric Safety Code")
16
- # nesc.code.number # => "2" (prefix "C")
17
- # nesc.year # => "1997"
16
+ # nesc.code.value # => "C2"
17
+ # nesc.year.year # => 1997
18
18
  #
19
19
  # @example Handbook format
20
20
  # nesc = Pubid::Ieee.parse("2017 NESC Handbook, Premier Edition")
21
- # nesc.year # => "2017"
21
+ # nesc.year.year # => 2017
22
22
  # nesc.variant # => "Handbook"
23
23
  # nesc.edition # => "Premier Edition"
24
- #
25
- # Reparented onto Pubid::Ieee::Identifier (it used to descend from bare
26
- # Lutaml::Model::Serializable) so NESC shares `#root`, a polymorphic
27
- # `_type` and from_hash routing with every other IEEE type — see
28
- # Pubid::Ieee::Aiee::Identifier for the same migration. Three
29
- # attributes were reconciled against the base to avoid type collisions:
30
- #
31
- # `code` -> travels as the runtime `code_obj` (base #code returns
32
- # it); the concrete leaves serialize the flat split
33
- # columns via the CodeNumber mixin.
34
- # `year` -> the base's plain `:string` year (was a
35
- # Pubid::Components::Date), matching IEEE's scalar-date
36
- # convention. `nesc.year` is now "2017", not a component.
37
- # `draft` -> dropped; the base declares a `:string` `draft` (the draft
38
- # *designator*), so a boolean here would corrupt it. Test
39
- # draft-ness with `#draft?` / the Nesc::Draft class.
40
- #
41
- # This class is abstract and enforces it in #initialize: the builder
42
- # always instantiates a concrete leaf (Nesc::Edition for the plain
43
- # year-first form), because only leaves may redefine `number` as a
44
- # :string (see the CodeNumber mixin) and only leaves declare the
45
- # NESC-specific `polymorphic_name` that from_hash routes on.
46
- class Base < Pubid::Ieee::Identifier
47
- attribute :variant, :string # Handbook, Redline, etc.
48
- # Registered-trademark "(R)" after the full name or abbreviation
49
- attribute :registered, :boolean
50
- # Whether the "(NESC)"/"(NESC(R))" abbreviation suffix was present
51
- attribute :abbr_suffix, :boolean
52
- # Registered-trademark "(R)" inside the "(NESC(R))" suffix
53
- attribute :abbr_suffix_registered, :boolean
54
-
55
- # Guards the abstract contract — see the class docs. Ruby has no
56
- # `abstract`, and an instantiated Base would carry the derived
57
- # `_type` "pubid:ieee:base" (which from_hash cannot resolve back to
58
- # NESC) and a nil `number` (the empty relaton index key).
59
- def initialize(args = {}, **kwargs)
60
- if instance_of?(Base)
61
- raise NotImplementedError,
62
- "#{self.class} is abstract; instantiate a concrete NESC " \
63
- "type (Standard, Edition, Handbook, Redline, Draft)"
64
- end
65
-
66
- super
67
- end
24
+ class Base < Lutaml::Model::Serializable
25
+ attribute :code, Pubid::Ieee::Components::Code # "C2" code designation
26
+ attribute :year, Pubid::Components::Date # Publication year
27
+ attribute :variant, :string # Handbook, Redline, etc.
28
+ attribute :edition, :string # Edition notation
29
+ attribute :draft, :boolean # Draft flag
30
+ attribute :month, :string # For draft identifiers
68
31
 
69
32
  # Publisher portion for NESC identifiers
70
33
  #
@@ -73,52 +36,18 @@ module Pubid
73
36
  "NESC"
74
37
  end
75
38
 
76
- # Whether this is a draft of the code. NESC has no `draft` attribute
77
- # of its own (the base's `draft` is the draft designator string), so
78
- # draft-ness lives in the class.
79
- #
80
- # @return [Boolean]
81
- def draft?
82
- is_a?(Nesc::Draft)
83
- end
84
-
85
- # Rendering for year-first NESC identifiers (the C2-code standard form
86
- # overrides this in Nesc::Standard). IEEE catalogues the year-first
87
- # editions with the "IEEE Std" prefix, so it is prepended here.
39
+ # Base rendering - override in subclasses
88
40
  #
89
- # @param trademark [Boolean] append the IEEE trademark symbol (™/®)
90
41
  # @return [String] String representation
91
- def to_s(trademark: false, **opts)
92
- result = ["IEEE Std", year, name_portion].compact.join(" ")
93
- result += trademark_symbol if trademark
94
- annotate_plain_render(result, **opts)
95
- end
96
-
97
- # Trademark symbol for this document's own code. A NESC string starts
98
- # with the publication *year*, so the string-scanning
99
- # Pubid::Ieee.trademark_symbol would pick the wrong field — an
100
- # edition year of 2030 would silently render ®.
101
- #
102
- # @return [String] "®" or "™"
103
- def trademark_symbol
104
- Pubid::Ieee.trademark_symbol_for(code_obj&.number,
105
- code_obj&.prefix,
106
- publishers: [publisher])
107
- end
108
-
109
- # The document-name portion, including the registered marks and the
110
- # optional "(NESC(R))" abbreviation suffix.
111
- #
112
- # @return [String] e.g. "National Electrical Safety Code(R) (NESC(R))"
113
- def name_portion
114
- name = "National Electrical Safety Code"
115
- name += "(R)" if registered
116
- if abbr_suffix
117
- suffix = "NESC"
118
- suffix += "(R)" if abbr_suffix_registered
119
- name += " (#{suffix})"
42
+ def to_s
43
+ parts = []
44
+ if code && year
45
+ parts << "#{code}-#{year.year}"
46
+ elsif year
47
+ parts << year.year.to_s
120
48
  end
121
- name
49
+ parts << "National Electrical Safety Code"
50
+ parts.join(" ")
122
51
  end
123
52
  end
124
53
  end
@@ -10,31 +10,16 @@ module Pubid
10
10
  # that are under development or review.
11
11
  #
12
12
  # @example
13
- # nesc = Pubid::Ieee.parse("Draft NESC, June 2011")
14
- # nesc.to_s
15
- # # => "Draft National Electrical Safety Code, June 2011"
16
- #
17
- # NOTE: the spelled-out "Draft National Electrical Safety Code, …" form
18
- # is claimed by the generic IEEE grammar before it reaches the NESC
19
- # sub-parser, so it does not currently build this class. Pre-existing
20
- # dispatcher gap, pinned in spec/pubid/ieee/ire_nesc_roundtrip_spec.rb.
13
+ # nesc = Pubid::Ieee.parse("Draft National Electrical Safety Code, January 2016")
14
+ # nesc.to_s # => "Draft National Electrical Safety Code, January 2016"
21
15
  class Draft < Base
22
- include Pubid::Ieee::Identifiers::CodeNumber
23
-
24
- def self.polymorphic_name
25
- "pubid:ieee:nesc-draft"
26
- end
27
-
28
16
  # Render draft identifier
29
17
  #
30
- # @param trademark [Boolean] append the IEEE trademark symbol (™/®)
31
18
  # @return [String] Draft format with optional month and year
32
- def to_s(trademark: false, **opts)
19
+ def to_s
33
20
  parts = ["Draft National Electrical Safety Code"]
34
- parts << ", #{month} #{year}" if month && year
35
- result = parts.join
36
- result += trademark_symbol if trademark
37
- annotate_plain_render(result, **opts)
21
+ parts << ", #{month} #{year.year}" if month && year
22
+ parts.join
38
23
  end
39
24
  end
40
25
  end
@@ -11,30 +11,19 @@ module Pubid
11
11
  #
12
12
  # @example Basic handbook
13
13
  # nesc = Pubid::Ieee.parse("2012 NESC Handbook")
14
- # nesc.to_s # => "IEEE Std 2012 NESC Handbook"
14
+ # nesc.to_s # => "2012 NESC Handbook"
15
15
  #
16
16
  # @example With edition
17
17
  # nesc = Pubid::Ieee.parse("2017 NESC Handbook, Premier Edition")
18
- # nesc.to_s # => "IEEE Std 2017 NESC Handbook, Premier Edition"
18
+ # nesc.to_s # => "2017 NESC Handbook, Premier Edition"
19
19
  class Handbook < Base
20
- include Pubid::Ieee::Identifiers::CodeNumber
21
-
22
- def self.polymorphic_name
23
- "pubid:ieee:nesc-handbook"
24
- end
25
-
26
20
  # Render handbook identifier
27
21
  #
28
- # @param trademark [Boolean] append the IEEE trademark symbol (™/®)
29
22
  # @return [String] YYYY NESC Handbook format with optional edition
30
- def to_s(trademark: false, **opts)
31
- abbr = "NESC"
32
- abbr += "(R)" if registered
33
- parts = [["IEEE Std", year, "#{abbr} Handbook"].compact.join(" ")]
23
+ def to_s
24
+ parts = ["#{year.year} NESC Handbook"]
34
25
  parts << ", #{edition}" if edition
35
- result = parts.join
36
- result += trademark_symbol if trademark
37
- annotate_plain_render(result, **opts)
26
+ parts.join
38
27
  end
39
28
  end
40
29
  end
@@ -13,20 +13,11 @@ module Pubid
13
13
  # nesc = Pubid::Ieee.parse("2017 NESC Redline")
14
14
  # nesc.to_s # => "2017 NESC Redline"
15
15
  class Redline < Base
16
- include Pubid::Ieee::Identifiers::CodeNumber
17
-
18
- def self.polymorphic_name
19
- "pubid:ieee:nesc-redline"
20
- end
21
-
22
16
  # Render redline identifier
23
17
  #
24
- # @param trademark [Boolean] append the IEEE trademark symbol (™/®)
25
18
  # @return [String] YYYY NESC Redline format
26
- def to_s(trademark: false, **opts)
27
- result = [year, "NESC Redline"].compact.join(" ")
28
- result += trademark_symbol if trademark
29
- annotate_plain_render(result, **opts)
19
+ def to_s
20
+ "#{year.year} NESC Redline"
30
21
  end
31
22
  end
32
23
  end
@@ -13,26 +13,11 @@ module Pubid
13
13
  # nesc = Pubid::Ieee.parse("C2-1997 National Electric Safety Code")
14
14
  # nesc.to_s # => "C2-1997 National Electrical Safety Code"
15
15
  class Standard < Base
16
- include Pubid::Ieee::Identifiers::CodeNumber
17
-
18
- # Distinct from Identifiers::Standard, whose derived polymorphic name
19
- # is also "pubid:ieee:standard".
20
- def self.polymorphic_name
21
- "pubid:ieee:nesc-standard"
22
- end
23
-
24
16
  # Render standard NESC identifier
25
17
  #
26
- # @param trademark [Boolean] append the IEEE trademark symbol (™/®)
27
- # @return [String] C2-YYYY format (bare "C2" when the year is absent,
28
- # e.g. a partial reference produced by `#exclude(:year)`)
29
- def to_s(trademark: false, **opts)
30
- # Unlike the year-first NESC editions, this form renders a code, so
31
- # the mark goes after it and before the year — as everywhere else.
32
- code_part = "C2"
33
- code_part += trademark_symbol if trademark
34
- code_part += "-#{year}" if year
35
- annotate_plain_render("#{code_part} National Electrical Safety Code", **opts)
18
+ # @return [String] C2-YYYY format
19
+ def to_s
20
+ "C2-#{year.year} National Electrical Safety Code"
36
21
  end
37
22
  end
38
23
  end
@@ -6,7 +6,6 @@ module Pubid
6
6
  module Nesc
7
7
  autoload :Base, "#{__dir__}/nesc/base"
8
8
  autoload :Draft, "#{__dir__}/nesc/draft"
9
- autoload :Edition, "#{__dir__}/nesc/edition"
10
9
  autoload :Handbook, "#{__dir__}/nesc/handbook"
11
10
  autoload :Redline, "#{__dir__}/nesc/redline"
12
11
  autoload :Standard, "#{__dir__}/nesc/standard"
@@ -5,9 +5,15 @@ module Pubid
5
5
  module Identifiers
6
6
  # Parenthetical Identifier - wraps identifier with parenthetical annotation
7
7
  # Example: "IEEE Standard No 18-1968 (ANSI C55.1-1968)"
8
- class ParentheticalIdentifier < Identifier
9
- attribute :base, Identifier, polymorphic: true
10
- attribute :parenthetical_identifier, Identifier, polymorphic: true
8
+ class ParentheticalIdentifier < Base
9
+ attribute :base_identifier, Base, polymorphic: true
10
+ attribute :parenthetical_identifier, Base, polymorphic: true
11
+
12
+ def to_s
13
+ result = base_identifier.to_s
14
+ result += " (#{parenthetical_identifier})" if parenthetical_identifier
15
+ result
16
+ end
11
17
  end
12
18
  end
13
19
  end
@@ -8,40 +8,17 @@ module Pubid
8
8
  # where P1234 is the project number and D5 is the draft version
9
9
  # This is distinct from a StandardIdentifier - the "P" indicates project status,
10
10
  # not a code prefix like "C" in "C57.12"
11
- class ProjectDraftIdentifier < Identifier
12
- # Reliable string `number` for relaton's index key (see CodeNumber).
13
- # Its #initialize `super` chains through CodeNumber, which sets `number`
14
- # from the (P-stripped) code after the parent builds code_obj.
15
- include CodeNumber
16
-
17
- TYPED_STAGES = [
18
- Components::TypedStage.new(
19
- abbr: ["P"],
20
- stage_code: "draft",
21
- type_code: "draft",
22
- ieee_draft_equivalent: "P",
23
- approval_status: "unapproved",
24
- project_status: true,
25
- ),
26
- ].freeze
27
-
28
- def self.type
29
- { key: :P, title: "Project Draft", short: "P" }
30
- end
31
-
32
- # Override initialize to strip "P" prefix from code before creating Code
33
- # object. The "P" is reflected in the typed_stage, not in the Code
34
- # component itself. Accepts keyword args or a single positional hash (the
35
- # base #exclude/matching rebuild passes the latter).
36
- def initialize(args = {}, **kwargs)
37
- args = kwargs.empty? ? args.dup : args.merge(kwargs)
11
+ class ProjectDraftIdentifier < Base
12
+ # Override initialize to strip "P" prefix from code before creating Code object
13
+ # The "P" is reflected in the typed_stage, not in the Code component itself
14
+ def initialize(**args)
38
15
  # If code is provided with "P" prefix (e.g., "P1234"), strip it
39
16
  if args[:code].is_a?(String) && args[:code].start_with?("P")
40
17
  args[:code] = args[:code][1..] # Strip leading "P"
41
18
  end
42
19
 
43
- # Call parent initialize with modified code (positional hash)
44
- super(args)
20
+ # Call parent initialize with modified code
21
+ super
45
22
  end
46
23
  end
47
24
  end
@@ -7,18 +7,25 @@ module Pubid
7
7
  # IEEE standard with optional revision note, marked as redline
8
8
  # Example: "IEEE Std 1018-2013 (Revison of IEEE Std 1018-2004) - Redline"
9
9
  # Contains: base standard + optional revision standard + redline flag
10
- class RedlinedStandard < Identifier
10
+ class RedlinedStandard < Base
11
11
  # The current standard identifier
12
- attribute :base, Identifier, polymorphic: true
12
+ attribute :base_identifier, Base, polymorphic: true
13
13
 
14
14
  # Optional: the standard this revises
15
- attribute :revision_of, Identifier, polymorphic: true
15
+ attribute :revision_of, Base, polymorphic: true
16
16
 
17
17
  # Redline flag (always true for this class)
18
18
  attribute :redline, :boolean, default: -> { true }
19
19
 
20
+ def to_s
21
+ result = base_identifier.to_s
22
+ result += " (Revision of #{revision_of})" if revision_of
23
+ result += " - Redline" if redline
24
+ result
25
+ end
26
+
20
27
  def publisher
21
- base&.publisher || "IEEE"
28
+ base_identifier&.publisher || "IEEE"
22
29
  end
23
30
  end
24
31
  end
@@ -8,10 +8,7 @@ module Pubid
8
8
  # Handles both:
9
9
  # - SI: Published standards (IEEE/ASTM SI 10-1997)
10
10
  # - PSI: Proposed SI (drafts: IEEE/ASTM PSI 10/D2, October 2015)
11
- class SiStandard < Identifier
12
- # Reliable string `number` for relaton's index key (see CodeNumber).
13
- include CodeNumber
14
-
11
+ class SiStandard < Base
15
12
  # TYPED_STAGES for SI standards
16
13
  TYPED_STAGES = [
17
14
  Components::TypedStage.new(
@@ -32,6 +29,44 @@ module Pubid
32
29
 
33
30
  # Use proper Draft component (Lutaml::Model object)
34
31
  attr_accessor :draft_obj
32
+
33
+ def to_s
34
+ parts = []
35
+
36
+ # Publisher (IEEE/ASTM)
37
+ parts << "IEEE/ASTM"
38
+
39
+ # Type (SI or PSI based on typed_stage)
40
+ parts << if typed_stage&.abbr&.include?("PSI")
41
+ "PSI"
42
+ else
43
+ "SI"
44
+ end
45
+
46
+ # Code (number) with draft version for PSI
47
+ code_part = code.to_s
48
+ if draft_obj
49
+ # Use Draft component's version attribute
50
+ code_part += "/D#{draft_obj.version}"
51
+ end
52
+ parts << code_part if code
53
+
54
+ # Date
55
+ if month && year
56
+ parts << ", #{month} #{year}"
57
+ elsif year
58
+ parts << "-#{year}"
59
+ end
60
+
61
+ # Relationships (if present)
62
+ result = parts.join(" ")
63
+ if relationships && !relationships.empty?
64
+ rel_strs = relationships.map(&:to_s)
65
+ result += " (#{rel_strs.join(' / ')})"
66
+ end
67
+
68
+ result
69
+ end
35
70
  end
36
71
  end
37
72
  end
@@ -17,10 +17,7 @@ module Pubid
17
17
  # std = Pubid::Ieee.parse("ANSI/IEEE Std 500-1984")
18
18
  # std.publisher # => "IEEE"
19
19
  # std.copublisher # => ["ANSI"]
20
- class Standard < Identifier
21
- # Reliable string `number` for relaton's index key (see CodeNumber).
22
- include CodeNumber
23
-
20
+ class Standard < Base
24
21
  # TYPED_STAGES for published IEEE standards
25
22
  # Standards use "Std" abbreviation for published state
26
23
  TYPED_STAGES = [
@@ -32,7 +29,7 @@ module Pubid
32
29
  ].freeze
33
30
 
34
31
  def self.type
35
- { key: :std, web: :standard, title: "Standard", short: "Std" }
32
+ { key: :std, title: "Standard", short: "Std" }
36
33
  end
37
34
 
38
35
  # Render standard IEEE format
@@ -3,38 +3,19 @@
3
3
  module Pubid
4
4
  module Ieee
5
5
  module Identifiers
6
- # Identifier class for supplement identifiers (amendments, corrigenda, interpretations, etc.)
6
+ # Base class for supplement identifiers (amendments, corrigenda, interpretations, etc.)
7
7
  # Supplements modify or add to a base document
8
- class SupplementIdentifier < Identifier
9
- attribute :base, Identifier, polymorphic: true
8
+ class SupplementIdentifier < Base
9
+ attribute :base_identifier, Base, polymorphic: true
10
10
 
11
- # Delegate publisher to base
11
+ # Delegate publisher to base_identifier
12
12
  def publisher
13
- base&.publisher
13
+ base_identifier&.publisher
14
14
  end
15
15
 
16
- # Delegate code to base if not overridden
16
+ # Delegate code to base_identifier if not overridden
17
17
  def code
18
- base&.code
19
- end
20
-
21
- # `publisher` is a pure delegation to `base`, so it must never be
22
- # serialized independently on the wrapper. lutaml's default-tracking
23
- # otherwise emits it asymmetrically — omitted on the parse path (the
24
- # wrapper's own attribute is never assigned) but present after
25
- # `from_hash` (deserialization assigns it) — which breaks the canonical
26
- # `to_hash` round-trip for a supplement whose base carries a non-default
27
- # publisher (e.g. an ANSI/ISO corrigendum). The truth lives in `base`.
28
- def to_hash(*args)
29
- hash = super
30
- if hash.is_a?(::Hash)
31
- # `publisher` and `code` are delegated to `base`; never serialize
32
- # them on the wrapper (they'd duplicate base.publisher/base.number
33
- # and, for publisher, desync across parse vs from_hash).
34
- hash.delete("publisher")
35
- hash.delete("code")
36
- end
37
- hash
18
+ base_identifier&.code
38
19
  end
39
20
  end
40
21
  end
@@ -4,10 +4,9 @@ module Pubid
4
4
  module Ieee
5
5
  module Identifiers
6
6
  autoload :AdoptedStandard, "#{__dir__}/identifiers/adopted_standard"
7
- autoload :Amendment, "#{__dir__}/identifiers/amendment"
7
+ autoload :Base, "#{__dir__}/identifiers/base"
8
8
  autoload :ConformanceIdentifier,
9
9
  "#{__dir__}/identifiers/conformance_identifier"
10
- autoload :CodeNumber, "#{__dir__}/identifiers/code_number"
11
10
  autoload :Corrigendum, "#{__dir__}/identifiers/corrigendum"
12
11
  autoload :CsaDualPublished, "#{__dir__}/identifiers/csa_dual_published"
13
12
  autoload :DualIdentifier, "#{__dir__}/identifiers/dual_identifier"
@@ -14,12 +14,11 @@ module Pubid
14
14
  # Extract type
15
15
  attributes[:type] = extract_value(parsed[:type])
16
16
 
17
- # Extract the document designation. It travels as `code:` so the base
18
- # initializer parses it into `code_obj` and the CodeNumber mixin
19
- # hoists the flat split columns (number/prefix/parts/separator) that
20
- # relaton indexes on.
17
+ # Extract number
21
18
  number_str = extract_value(parsed[:number])
22
- attributes[:code] = number_str if number_str
19
+ if number_str
20
+ attributes[:number] = Components::Code.parse(number_str)
21
+ end
23
22
 
24
23
  # Extract year - handle both short (52) and full (1952) formats
25
24
  year_str = extract_value(parsed[:year])
@@ -29,13 +28,13 @@ module Pubid
29
28
  if year_int.between?(12, 63)
30
29
  year_int += 1900
31
30
  end
32
- attributes[:year] = year_int.to_s
31
+ attributes[:year] = year_int
33
32
  end
34
33
 
35
34
  # Override with full_year if present
36
35
  full_year_str = extract_value(parsed[:full_year])
37
36
  if full_year_str
38
- attributes[:year] = full_year_str.to_i.to_s
37
+ attributes[:year] = full_year_str.to_i
39
38
  end
40
39
 
41
40
  # Create identifier
@@ -5,36 +5,32 @@ require "lutaml/model"
5
5
  module Pubid
6
6
  module Ieee
7
7
  module Ire
8
- # IRE identifiers (Institute of Radio Engineers: 1912-1963).
9
- #
10
- # Reparented onto Pubid::Ieee::Identifier + the CodeNumber mixin for the
11
- # same reasons AIEE was (see Pubid::Ieee::Aiee::Identifier): descending
12
- # from bare Lutaml::Model::Serializable left IRE without `#root` (relaton
13
- # keys its index on `id.root.number.to_s` -> NoMethodError), without a
14
- # polymorphic `_type` (so `from_hash` could not route back), and — because
15
- # an IRE object was not a ::Pubid::Identifier — unassignable to
16
- # Identifiers::AdoptedStandard#adopted_identifiers, which raised
17
- # Lutaml::Model::IncorrectModelError on `to_hash` for the IRE-adopted
18
- # forms ("IEEE Std 159-1972 (52 IRE 7 S2)").
19
- #
20
- # The document designation ("7.S2") is carried in the shared `code_obj`
21
- # and serialized as the flat split columns (number/prefix/parts/
22
- # separator); the publication year uses the base's plain `:string` `year`
23
- # (IRE previously declared its own `:integer` one, which would collide).
24
- class Identifier < Pubid::Ieee::Identifier
25
- include Pubid::Ieee::Identifiers::CodeNumber
26
-
8
+ # Base class for IRE identifiers
9
+ # IRE (Institute of Radio Engineers): 1912-1963
10
+ class Identifier < Lutaml::Model::Serializable
27
11
  attribute :publisher, :string, default: -> { "IRE" }
28
- # IRE spells its type word out when present ("Trans.", "Standard",
29
- # "Std") and omits it otherwise, so the base's "Std" default must go —
30
- # else "52 IRE 7.S2" would render as "52 IRE Std 7.S2".
31
- attribute :type, :string, default: -> {}
12
+ attribute :type, :string # "Trans.", "Standard", "Std"
13
+ attribute :number, Components::Code
14
+ attribute :year, :integer
15
+
16
+ def initialize(**args)
17
+ super()
18
+
19
+ # Handle number as string or Code object
20
+ if args[:number].is_a?(String)
21
+ self.number = Components::Code.parse(args[:number])
22
+ elsif args[:number]
23
+ self.number = args[:number]
24
+ end
32
25
 
33
- # A distinct polymorphic name so from_hash routes to IRE. The derived
34
- # default (last name segment "Identifier") would be
35
- # "pubid:ieee:identifier", colliding with the base class.
36
- def self.polymorphic_name
37
- "pubid:ieee:ire"
26
+ # Set other attributes
27
+ attrs = self.class.attributes
28
+ args.each do |key, value|
29
+ next if key == :number
30
+
31
+ setter = :"#{key}="
32
+ public_send(setter, value) if attrs.key?(key)
33
+ end
38
34
  end
39
35
 
40
36
  # Parse IRE identifier string
@@ -44,28 +40,17 @@ module Pubid
44
40
  builder.build(parsed)
45
41
  end
46
42
 
47
- def to_s(trademark: false, **opts)
43
+ def to_s
44
+ parts = []
48
45
  # Year comes FIRST in IRE format - render as 2-digit short year
49
- result = [(short_year if year), publisher, type, code&.to_s]
50
- .compact.join(" ")
51
- # The code is the last token, so the end of the string already *is*
52
- # the code boundary — but the symbol is picked from the code, not by
53
- # scanning the string (which starts with the year).
54
- if trademark
55
- result += Pubid::Ieee.trademark_symbol_for(code_obj&.number,
56
- code_obj&.prefix,
57
- publishers: [publisher])
46
+ if year
47
+ short_year = year.between?(1900, 1999) ? year - 1900 : year
48
+ parts << short_year.to_s
58
49
  end
59
- annotate_plain_render(result, **opts)
60
- end
61
-
62
- private
63
-
64
- # IRE prints the publication year first, abbreviated to two digits for
65
- # the 20th century ("1952" => "52").
66
- def short_year
67
- value = year.to_i
68
- (value.between?(1900, 1999) ? value - 1900 : value).to_s
50
+ parts << publisher
51
+ parts << type if type
52
+ parts << number.to_s if number
53
+ parts.join(" ")
69
54
  end
70
55
  end
71
56
  end
@@ -7,7 +7,7 @@ module Pubid
7
7
  module Ire
8
8
  # Parser for IRE (Institute of Radio Engineers) identifiers
9
9
  # Historical period: 1912-1963 (merged into IEEE in 1963)
10
- class Parser < ::Pubid::Parser::Grammar
10
+ class Parser < Parslet::Parser
11
11
  # Basic building blocks
12
12
  rule(:space) { str(" ") }
13
13
  rule(:space?) { space.maybe }