pubid 2.0.0.pre.alpha.2 → 2.0.0.pre.alpha.4

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 (473) hide show
  1. checksums.yaml +4 -4
  2. data/README.adoc +5 -1
  3. data/data/nist/update_codes.yaml +25 -0
  4. data/lib/pubid/amca/builder.rb +2 -2
  5. data/lib/pubid/amca/identifier.rb +4 -55
  6. data/lib/pubid/amca/identifiers/base.rb +58 -47
  7. data/lib/pubid/amca/identifiers/interpretation.rb +0 -21
  8. data/lib/pubid/amca/identifiers/publication.rb +0 -17
  9. data/lib/pubid/amca/identifiers/standard.rb +0 -4
  10. data/lib/pubid/amca/renderer.rb +82 -0
  11. data/lib/pubid/amca/single_identifier.rb +0 -23
  12. data/lib/pubid/amca/urn_generator.rb +2 -1
  13. data/lib/pubid/amca/urn_parser.rb +28 -0
  14. data/lib/pubid/amca.rb +42 -1
  15. data/lib/pubid/ansi/builder.rb +5 -3
  16. data/lib/pubid/ansi/identifier.rb +1 -43
  17. data/lib/pubid/ansi/identifiers/american_national_standard.rb +2 -1
  18. data/lib/pubid/ansi/identifiers/standard.rb +2 -3
  19. data/lib/pubid/ansi/renderer.rb +53 -0
  20. data/lib/pubid/ansi/single_identifier.rb +2 -31
  21. data/lib/pubid/ansi/urn_generator.rb +3 -38
  22. data/lib/pubid/ansi/urn_parser.rb +23 -0
  23. data/lib/pubid/ansi.rb +38 -3
  24. data/lib/pubid/api/builder.rb +33 -74
  25. data/lib/pubid/api/identifier.rb +5 -52
  26. data/lib/pubid/api/identifiers/base.rb +2 -14
  27. data/lib/pubid/api/identifiers/bulletin.rb +0 -2
  28. data/lib/pubid/api/identifiers/continuous_operations_standard.rb +0 -2
  29. data/lib/pubid/api/identifiers/mpms.rb +0 -20
  30. data/lib/pubid/api/identifiers/publication.rb +0 -2
  31. data/lib/pubid/api/identifiers/recommended_practice.rb +0 -2
  32. data/lib/pubid/api/identifiers/specification.rb +0 -2
  33. data/lib/pubid/api/identifiers/standard.rb +0 -2
  34. data/lib/pubid/api/identifiers/technical_report.rb +0 -2
  35. data/lib/pubid/api/identifiers/typeless_standard.rb +0 -16
  36. data/lib/pubid/api/identifiers.rb +18 -0
  37. data/lib/pubid/api/renderer.rb +89 -0
  38. data/lib/pubid/api/single_identifier.rb +5 -20
  39. data/lib/pubid/api/urn_generator.rb +0 -18
  40. data/lib/pubid/api/urn_parser.rb +35 -0
  41. data/lib/pubid/api.rb +51 -5
  42. data/lib/pubid/ashrae/builder.rb +3 -3
  43. data/lib/pubid/ashrae/identifier.rb +7 -55
  44. data/lib/pubid/ashrae/identifiers/addenda_package.rb +0 -10
  45. data/lib/pubid/ashrae/identifiers/addendum.rb +0 -19
  46. data/lib/pubid/ashrae/identifiers/base.rb +29 -15
  47. data/lib/pubid/ashrae/identifiers/combined_addenda.rb +0 -15
  48. data/lib/pubid/ashrae/identifiers/errata.rb +0 -10
  49. data/lib/pubid/ashrae/identifiers/interpretation.rb +0 -10
  50. data/lib/pubid/ashrae/parser.rb +4 -0
  51. data/lib/pubid/ashrae/renderer.rb +117 -0
  52. data/lib/pubid/ashrae/single_identifier.rb +0 -13
  53. data/lib/pubid/ashrae/urn_generator.rb +0 -8
  54. data/lib/pubid/ashrae/urn_parser.rb +27 -0
  55. data/lib/pubid/ashrae.rb +46 -1
  56. data/lib/pubid/asme/components/code.rb +10 -2
  57. data/lib/pubid/asme/identifier.rb +0 -46
  58. data/lib/pubid/asme/identifiers/base.rb +0 -60
  59. data/lib/pubid/asme/renderer.rb +66 -0
  60. data/lib/pubid/asme/single_identifier.rb +3 -1
  61. data/lib/pubid/asme/urn_parser.rb +31 -0
  62. data/lib/pubid/asme.rb +42 -1
  63. data/lib/pubid/astm/components/code.rb +9 -0
  64. data/lib/pubid/{jis → astm}/components.rb +1 -1
  65. data/lib/pubid/astm/identifier.rb +0 -77
  66. data/lib/pubid/astm/identifiers/adjunct.rb +0 -8
  67. data/lib/pubid/astm/identifiers/data_series.rb +0 -14
  68. data/lib/pubid/astm/identifiers/iso_dual_published.rb +9 -34
  69. data/lib/pubid/astm/identifiers/manual.rb +0 -27
  70. data/lib/pubid/astm/identifiers/monograph.rb +0 -14
  71. data/lib/pubid/astm/identifiers/research_report.rb +0 -7
  72. data/lib/pubid/astm/identifiers/standard.rb +0 -39
  73. data/lib/pubid/astm/identifiers/technical_report.rb +0 -13
  74. data/lib/pubid/astm/identifiers/work_in_progress.rb +0 -11
  75. data/lib/pubid/astm/identifiers.rb +18 -0
  76. data/lib/pubid/astm/renderer.rb +172 -0
  77. data/lib/pubid/astm/single_identifier.rb +3 -11
  78. data/lib/pubid/astm/urn_parser.rb +30 -0
  79. data/lib/pubid/astm.rb +39 -27
  80. data/lib/pubid/bsi/builder.rb +21 -12
  81. data/lib/pubid/bsi/identifier.rb +5 -85
  82. data/lib/pubid/bsi/identifiers/addendum_document.rb +2 -36
  83. data/lib/pubid/bsi/identifiers/adopted_european_norm.rb +8 -48
  84. data/lib/pubid/bsi/identifiers/adopted_international_standard.rb +8 -39
  85. data/lib/pubid/bsi/identifiers/aerospace_standard.rb +2 -55
  86. data/lib/pubid/bsi/identifiers/amendment.rb +2 -22
  87. data/lib/pubid/bsi/identifiers/british_industrial_practice.rb +1 -6
  88. data/lib/pubid/bsi/identifiers/british_standard.rb +2 -1
  89. data/lib/pubid/bsi/identifiers/bundled_identifier.rb +3 -87
  90. data/lib/pubid/bsi/identifiers/committee_document.rb +0 -16
  91. data/lib/pubid/bsi/identifiers/consolidated_identifier.rb +3 -87
  92. data/lib/pubid/bsi/identifiers/corrigendum.rb +2 -10
  93. data/lib/pubid/bsi/identifiers/detailed_specification.rb +0 -36
  94. data/lib/pubid/bsi/identifiers/disc.rb +0 -29
  95. data/lib/pubid/bsi/identifiers/draft_document.rb +2 -46
  96. data/lib/pubid/bsi/identifiers/electronic_book.rb +2 -38
  97. data/lib/pubid/bsi/identifiers/expert_commentary.rb +2 -18
  98. data/lib/pubid/bsi/identifiers/explanatory_supplement.rb +0 -47
  99. data/lib/pubid/bsi/identifiers/flex.rb +0 -35
  100. data/lib/pubid/bsi/identifiers/handbook.rb +1 -15
  101. data/lib/pubid/bsi/identifiers/index.rb +0 -32
  102. data/lib/pubid/bsi/identifiers/method.rb +0 -41
  103. data/lib/pubid/bsi/identifiers/national_annex.rb +4 -29
  104. data/lib/pubid/bsi/identifiers/practice_guide.rb +1 -6
  105. data/lib/pubid/bsi/identifiers/publicly_available_specification.rb +2 -54
  106. data/lib/pubid/bsi/identifiers/published_document.rb +2 -54
  107. data/lib/pubid/bsi/identifiers/section.rb +0 -30
  108. data/lib/pubid/bsi/identifiers/set.rb +3 -20
  109. data/lib/pubid/bsi/identifiers/standalone_amendment.rb +0 -9
  110. data/lib/pubid/bsi/identifiers/supplement_document.rb +2 -24
  111. data/lib/pubid/bsi/identifiers/supplementary_index.rb +0 -46
  112. data/lib/pubid/bsi/identifiers/technical_specification.rb +2 -47
  113. data/lib/pubid/bsi/identifiers/test_method.rb +0 -32
  114. data/lib/pubid/bsi/identifiers/value_added_publication.rb +2 -17
  115. data/lib/pubid/bsi/identifiers.rb +0 -1
  116. data/lib/pubid/bsi/renderer.rb +1050 -0
  117. data/lib/pubid/bsi/single_identifier.rb +33 -78
  118. data/lib/pubid/bsi/urn_generator.rb +2 -3
  119. data/lib/pubid/bsi/urn_parser.rb +52 -0
  120. data/lib/pubid/bsi.rb +232 -2
  121. data/lib/pubid/builder/base.rb +57 -10
  122. data/lib/pubid/bundled_identifier.rb +0 -1
  123. data/lib/pubid/ccsds/builder.rb +4 -3
  124. data/lib/pubid/ccsds/identifier.rb +53 -68
  125. data/lib/pubid/ccsds/identifiers/base.rb +11 -61
  126. data/lib/pubid/ccsds/identifiers/corrigendum.rb +7 -6
  127. data/lib/pubid/ccsds/parser.rb +4 -2
  128. data/lib/pubid/ccsds/supplement_identifier.rb +15 -11
  129. data/lib/pubid/ccsds/urn_generator.rb +3 -3
  130. data/lib/pubid/ccsds/urn_parser.rb +20 -0
  131. data/lib/pubid/ccsds.rb +39 -1
  132. data/lib/pubid/cen_cenelec/builder.rb +12 -14
  133. data/lib/pubid/cen_cenelec/identifier.rb +11 -40
  134. data/lib/pubid/cen_cenelec/identifiers/adopted_european_norm.rb +9 -4
  135. data/lib/pubid/cen_cenelec/identifiers/amendment.rb +0 -10
  136. data/lib/pubid/cen_cenelec/identifiers/base.rb +2 -45
  137. data/lib/pubid/cen_cenelec/identifiers/cen_report.rb +2 -1
  138. data/lib/pubid/cen_cenelec/identifiers/cen_workshop_agreement.rb +2 -1
  139. data/lib/pubid/cen_cenelec/identifiers/consolidated_identifier.rb +0 -27
  140. data/lib/pubid/cen_cenelec/identifiers/corrigendum.rb +0 -15
  141. data/lib/pubid/cen_cenelec/identifiers/european_norm.rb +2 -1
  142. data/lib/pubid/cen_cenelec/identifiers/european_prestandard.rb +2 -8
  143. data/lib/pubid/cen_cenelec/identifiers/european_specification.rb +2 -1
  144. data/lib/pubid/cen_cenelec/identifiers/fragment.rb +0 -4
  145. data/lib/pubid/cen_cenelec/identifiers/harmonization_document.rb +2 -1
  146. data/lib/pubid/cen_cenelec/identifiers/technical_report.rb +2 -1
  147. data/lib/pubid/cen_cenelec/identifiers/technical_specification.rb +2 -1
  148. data/lib/pubid/cen_cenelec/renderer.rb +261 -0
  149. data/lib/pubid/cen_cenelec/single_identifier.rb +9 -90
  150. data/lib/pubid/cen_cenelec/urn_generator.rb +6 -6
  151. data/lib/pubid/cen_cenelec/urn_parser.rb +28 -0
  152. data/lib/pubid/cen_cenelec.rb +172 -1
  153. data/lib/pubid/cie/components/code.rb +8 -0
  154. data/lib/pubid/cie/identifier.rb +10 -57
  155. data/lib/pubid/cie/single_identifier.rb +4 -4
  156. data/lib/pubid/cie/urn_parser.rb +28 -0
  157. data/lib/pubid/cie.rb +47 -1
  158. data/lib/pubid/components/adoption.rb +104 -0
  159. data/lib/pubid/components/code.rb +22 -8
  160. data/lib/pubid/components/date.rb +23 -16
  161. data/lib/pubid/components/edition.rb +9 -6
  162. data/lib/pubid/components/iteration.rb +32 -0
  163. data/lib/pubid/components/language.rb +6 -4
  164. data/lib/pubid/components/locality.rb +10 -1
  165. data/lib/pubid/components/publisher.rb +9 -6
  166. data/lib/pubid/components/relationship.rb +151 -0
  167. data/lib/pubid/components/stage.rb +5 -14
  168. data/lib/pubid/components/supplement.rb +184 -0
  169. data/lib/pubid/components/type.rb +5 -15
  170. data/lib/pubid/components/typed_stage.rb +10 -11
  171. data/lib/pubid/components.rb +4 -1
  172. data/lib/pubid/core/update_codes.rb +28 -7
  173. data/lib/pubid/csa/identifier.rb +9 -59
  174. data/lib/pubid/csa/identifiers/base.rb +0 -123
  175. data/lib/pubid/csa/identifiers/cec.rb +0 -103
  176. data/lib/pubid/csa/identifiers/series.rb +0 -104
  177. data/lib/pubid/csa/renderer.rb +292 -0
  178. data/lib/pubid/csa/single_identifier.rb +1 -1
  179. data/lib/pubid/csa/urn_generator.rb +1 -1
  180. data/lib/pubid/csa/urn_parser.rb +33 -0
  181. data/lib/pubid/csa.rb +46 -1
  182. data/lib/pubid/etsi/components/code.rb +10 -9
  183. data/lib/pubid/etsi/components/version.rb +0 -5
  184. data/lib/pubid/etsi/identifier.rb +4 -55
  185. data/lib/pubid/etsi/identifiers/base.rb +31 -27
  186. data/lib/pubid/etsi/identifiers/supplement_identifier.rb +1 -11
  187. data/lib/pubid/etsi/renderer.rb +42 -0
  188. data/lib/pubid/etsi/urn_parser.rb +34 -0
  189. data/lib/pubid/etsi.rb +44 -1
  190. data/lib/pubid/export/exporter.rb +4 -46
  191. data/lib/pubid/export/flavor_exporter.rb +111 -278
  192. data/lib/pubid/export.rb +0 -6
  193. data/lib/pubid/identifier.rb +92 -18
  194. data/lib/pubid/identifier_metadata.rb +1 -1
  195. data/lib/pubid/idf/builder.rb +3 -3
  196. data/lib/pubid/idf/identifier.rb +7 -66
  197. data/lib/pubid/idf/identifiers/amendment.rb +2 -1
  198. data/lib/pubid/idf/identifiers/corrigendum.rb +2 -1
  199. data/lib/pubid/idf/identifiers/international_standard.rb +2 -1
  200. data/lib/pubid/idf/identifiers/reviewed_method.rb +2 -1
  201. data/lib/pubid/idf/parser.rb +3 -2
  202. data/lib/pubid/idf/renderer.rb +84 -0
  203. data/lib/pubid/idf/supplement_identifier.rb +2 -10
  204. data/lib/pubid/idf/urn_generator.rb +4 -39
  205. data/lib/pubid/idf/urn_parser.rb +25 -0
  206. data/lib/pubid/idf.rb +55 -1
  207. data/lib/pubid/iec/builder.rb +46 -64
  208. data/lib/pubid/iec/components/code.rb +8 -32
  209. data/lib/pubid/iec/components/publisher.rb +0 -1
  210. data/lib/pubid/iec/components.rb +14 -0
  211. data/lib/pubid/iec/identifier.rb +251 -213
  212. data/lib/pubid/iec/identifiers/amendment.rb +2 -3
  213. data/lib/pubid/iec/identifiers/base.rb +5 -33
  214. data/lib/pubid/iec/identifiers/component_specification.rb +3 -3
  215. data/lib/pubid/iec/identifiers/conformity_assessment.rb +1 -2
  216. data/lib/pubid/iec/identifiers/consolidated_identifier.rb +23 -26
  217. data/lib/pubid/iec/identifiers/corrigendum.rb +2 -3
  218. data/lib/pubid/iec/identifiers/fragment_identifier.rb +35 -24
  219. data/lib/pubid/iec/identifiers/guide.rb +0 -2
  220. data/lib/pubid/iec/identifiers/international_standard.rb +2 -3
  221. data/lib/pubid/iec/identifiers/interpretation_sheet.rb +2 -3
  222. data/lib/pubid/iec/identifiers/operational_document.rb +3 -3
  223. data/lib/pubid/iec/identifiers/publicly_available_specification.rb +2 -3
  224. data/lib/pubid/iec/identifiers/sheet_identifier.rb +17 -11
  225. data/lib/pubid/iec/identifiers/societal_technology_trend_report.rb +3 -3
  226. data/lib/pubid/iec/identifiers/systems_reference_document.rb +2 -3
  227. data/lib/pubid/iec/identifiers/technical_report.rb +2 -3
  228. data/lib/pubid/iec/identifiers/technical_specification.rb +2 -3
  229. data/lib/pubid/iec/identifiers/technology_report.rb +1 -2
  230. data/lib/pubid/iec/identifiers/test_report_form.rb +3 -35
  231. data/lib/pubid/iec/identifiers/vap_identifier.rb +24 -21
  232. data/lib/pubid/iec/identifiers/white_paper.rb +3 -3
  233. data/lib/pubid/iec/identifiers/working_document.rb +2 -50
  234. data/lib/pubid/iec/identifiers.rb +30 -0
  235. data/lib/pubid/iec/parser.rb +13 -12
  236. data/lib/pubid/iec/renderer.rb +254 -0
  237. data/lib/pubid/iec/single_identifier.rb +6 -12
  238. data/lib/pubid/iec/supplement_identifier.rb +58 -54
  239. data/lib/pubid/iec/urn_generator.rb +3 -3
  240. data/lib/pubid/iec/urn_parser.rb +3 -3
  241. data/lib/pubid/iec.rb +43 -67
  242. data/lib/pubid/ieee/builder.rb +12 -12
  243. data/lib/pubid/ieee/components/code.rb +8 -0
  244. data/lib/pubid/ieee/components/draft.rb +14 -0
  245. data/lib/pubid/ieee/components/relationship.rb +5 -149
  246. data/lib/pubid/ieee/identifier.rb +5 -52
  247. data/lib/pubid/ieee/identifiers/adopted_standard.rb +0 -9
  248. data/lib/pubid/ieee/identifiers/base.rb +221 -556
  249. data/lib/pubid/ieee/identifiers/conformance_identifier.rb +0 -10
  250. data/lib/pubid/ieee/identifiers/corrigendum.rb +0 -12
  251. data/lib/pubid/ieee/identifiers/csa_dual_published.rb +0 -10
  252. data/lib/pubid/ieee/identifiers/dual_identifier.rb +0 -4
  253. data/lib/pubid/ieee/identifiers/dual_published.rb +0 -4
  254. data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +0 -9
  255. data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +0 -10
  256. data/lib/pubid/ieee/identifiers/joint_development.rb +2 -0
  257. data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +0 -18
  258. data/lib/pubid/ieee/identifiers/parenthetical_identifier.rb +0 -6
  259. data/lib/pubid/ieee/identifiers/project_draft_identifier.rb +15 -0
  260. data/lib/pubid/ieee/identifiers/redlined_standard.rb +0 -7
  261. data/lib/pubid/ieee/identifiers/si_standard.rb +0 -38
  262. data/lib/pubid/ieee/identifiers/standard.rb +1 -1
  263. data/lib/pubid/ieee/pre_parser.rb +301 -0
  264. data/lib/pubid/ieee/renderer.rb +307 -0
  265. data/lib/pubid/ieee/urn_parser.rb +34 -0
  266. data/lib/pubid/ieee.rb +66 -1
  267. data/lib/pubid/ieee_debug.rb +0 -1
  268. data/lib/pubid/iho/builder.rb +2 -2
  269. data/lib/pubid/iho/identifier.rb +7 -59
  270. data/lib/pubid/iho/identifiers/base.rb +64 -31
  271. data/lib/pubid/iho/parser.rb +3 -3
  272. data/lib/pubid/iho/renderer.rb +30 -0
  273. data/lib/pubid/iho/urn_generator.rb +2 -2
  274. data/lib/pubid/iho/urn_parser.rb +58 -0
  275. data/lib/pubid/iho.rb +52 -1
  276. data/lib/pubid/iso/builder.rb +55 -53
  277. data/lib/pubid/iso/bundled_identifier.rb +51 -0
  278. data/lib/pubid/iso/components/code.rb +7 -19
  279. data/lib/pubid/iso/components/publisher.rb +10 -8
  280. data/lib/pubid/iso/components.rb +2 -4
  281. data/lib/pubid/iso/identifier.rb +219 -252
  282. data/lib/pubid/iso/identifiers/addendum.rb +9 -6
  283. data/lib/pubid/iso/identifiers/amendment.rb +8 -4
  284. data/lib/pubid/iso/identifiers/corrigendum.rb +4 -4
  285. data/lib/pubid/iso/identifiers/data.rb +0 -1
  286. data/lib/pubid/iso/identifiers/directives.rb +8 -2
  287. data/lib/pubid/iso/identifiers/directives_supplement.rb +43 -14
  288. data/lib/pubid/iso/identifiers/extract.rb +2 -2
  289. data/lib/pubid/iso/identifiers/guide.rb +0 -1
  290. data/lib/pubid/iso/identifiers/international_standard.rb +4 -4
  291. data/lib/pubid/iso/identifiers/international_standardized_profile.rb +4 -4
  292. data/lib/pubid/iso/identifiers/international_workshop_agreement.rb +10 -4
  293. data/lib/pubid/iso/identifiers/pas.rb +2 -2
  294. data/lib/pubid/iso/identifiers/recommendation.rb +2 -2
  295. data/lib/pubid/iso/identifiers/supplement.rb +11 -3
  296. data/lib/pubid/iso/identifiers/tc_document.rb +44 -15
  297. data/lib/pubid/iso/identifiers/technical_report.rb +4 -4
  298. data/lib/pubid/iso/identifiers/technical_specification.rb +2 -2
  299. data/lib/pubid/iso/identifiers/technology_trends_assessments.rb +2 -2
  300. data/lib/pubid/iso/identifiers.rb +0 -1
  301. data/lib/pubid/iso/normalizer.rb +89 -0
  302. data/lib/pubid/iso/parser.rb +22 -4
  303. data/lib/pubid/iso/single_identifier.rb +0 -4
  304. data/lib/pubid/iso/supplement_identifier.rb +15 -2
  305. data/lib/pubid/iso/urn_generator.rb +66 -182
  306. data/lib/pubid/iso/urn_parser.rb +12 -7
  307. data/lib/pubid/iso.rb +177 -2
  308. data/lib/pubid/itu/builder.rb +0 -12
  309. data/lib/pubid/itu/components/code.rb +9 -7
  310. data/lib/pubid/itu/components/sector.rb +15 -4
  311. data/lib/pubid/itu/components/series.rb +0 -4
  312. data/lib/pubid/itu/components.rb +11 -0
  313. data/lib/pubid/itu/identifier.rb +4 -116
  314. data/lib/pubid/itu/identifiers/amendment.rb +0 -2
  315. data/lib/pubid/itu/identifiers/annex.rb +0 -2
  316. data/lib/pubid/itu/identifiers/base.rb +124 -128
  317. data/lib/pubid/itu/identifiers/combined_identifier.rb +0 -2
  318. data/lib/pubid/itu/identifiers/corrigendum.rb +0 -2
  319. data/lib/pubid/itu/identifiers/recommendation.rb +0 -2
  320. data/lib/pubid/itu/identifiers/special_publication.rb +0 -2
  321. data/lib/pubid/itu/identifiers/supplement.rb +0 -2
  322. data/lib/pubid/itu/urn_parser.rb +23 -0
  323. data/lib/pubid/itu.rb +44 -1
  324. data/lib/pubid/jcgm/builder.rb +16 -8
  325. data/lib/pubid/jcgm/identifier.rb +0 -43
  326. data/lib/pubid/jcgm/identifiers/amendment.rb +0 -9
  327. data/lib/pubid/jcgm/identifiers/gum_guide.rb +0 -12
  328. data/lib/pubid/jcgm/renderer.rb +68 -0
  329. data/lib/pubid/jcgm/single_identifier.rb +0 -8
  330. data/lib/pubid/jcgm/urn_generator.rb +4 -6
  331. data/lib/pubid/jcgm/urn_parser.rb +23 -0
  332. data/lib/pubid/jcgm.rb +43 -2
  333. data/lib/pubid/jis/builder.rb +44 -52
  334. data/lib/pubid/jis/identifier.rb +120 -46
  335. data/lib/pubid/jis/identifiers/amendment.rb +1 -1
  336. data/lib/pubid/jis/identifiers/corrigendum.rb +16 -0
  337. data/lib/pubid/jis/identifiers/standard.rb +2 -1
  338. data/lib/pubid/jis/identifiers/technical_report.rb +2 -1
  339. data/lib/pubid/jis/identifiers/technical_specification.rb +2 -1
  340. data/lib/pubid/jis/identifiers.rb +1 -1
  341. data/lib/pubid/jis/parser.rb +31 -5
  342. data/lib/pubid/jis/renderer.rb +69 -0
  343. data/lib/pubid/jis/single_identifier.rb +6 -12
  344. data/lib/pubid/jis/supplement_identifier.rb +17 -14
  345. data/lib/pubid/jis/urn_parser.rb +23 -0
  346. data/lib/pubid/jis.rb +42 -2
  347. data/lib/pubid/nist/builder.rb +63 -1871
  348. data/lib/pubid/nist/caster.rb +1272 -0
  349. data/lib/pubid/nist/circular_supplement_builder.rb +291 -0
  350. data/lib/pubid/nist/components/code.rb +9 -20
  351. data/lib/pubid/nist/components/supplement.rb +2 -2
  352. data/lib/pubid/nist/components.rb +0 -1
  353. data/lib/pubid/nist/identifier.rb +8 -60
  354. data/lib/pubid/nist/identifiers/base.rb +564 -492
  355. data/lib/pubid/nist/identifiers/circular.rb +7 -2
  356. data/lib/pubid/nist/identifiers/circular_supplement.rb +2 -1
  357. data/lib/pubid/nist/identifiers/commercial_standard.rb +2 -1
  358. data/lib/pubid/nist/identifiers/commercial_standard_emergency.rb +6 -4
  359. data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +10 -3
  360. data/lib/pubid/nist/identifiers/crpl_report.rb +8 -8
  361. data/lib/pubid/nist/identifiers/dated_document.rb +49 -0
  362. data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +15 -24
  363. data/lib/pubid/nist/identifiers/grant_contractor_report.rb +2 -1
  364. data/lib/pubid/nist/identifiers/handbook.rb +2 -1
  365. data/lib/pubid/nist/identifiers/internal_report.rb +2 -1
  366. data/lib/pubid/nist/identifiers/letter_circular.rb +2 -1
  367. data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +5 -4
  368. data/lib/pubid/nist/identifiers/monograph.rb +7 -3
  369. data/lib/pubid/nist/identifiers/report.rb +4 -2
  370. data/lib/pubid/nist/identifiers/special_publication.rb +2 -1
  371. data/lib/pubid/nist/identifiers/technical_note.rb +3 -2
  372. data/lib/pubid/nist/identifiers.rb +1 -0
  373. data/lib/pubid/nist/parser.rb +62 -452
  374. data/lib/pubid/nist/parser_output_normalizer.rb +233 -0
  375. data/lib/pubid/nist/preprocessor.rb +428 -0
  376. data/lib/pubid/nist/renderer.rb +43 -0
  377. data/lib/pubid/nist/router.rb +148 -0
  378. data/lib/pubid/nist/series/base.rb +58 -0
  379. data/lib/pubid/nist/series/crpl.rb +13 -0
  380. data/lib/pubid/nist/series/fips.rb +14 -0
  381. data/lib/pubid/nist/series/ir.rb +60 -0
  382. data/lib/pubid/nist/series/letter_preserving.rb +15 -0
  383. data/lib/pubid/nist/series/mono.rb +19 -0
  384. data/lib/pubid/nist/series/ncstar.rb +20 -0
  385. data/lib/pubid/nist/series.rb +49 -0
  386. data/lib/pubid/nist/supplement_identifier.rb +3 -1
  387. data/lib/pubid/nist/urn_parser.rb +67 -0
  388. data/lib/pubid/nist.rb +86 -4
  389. data/lib/pubid/oiml/builder.rb +21 -3
  390. data/lib/pubid/oiml/components/code.rb +17 -0
  391. data/lib/pubid/oiml/identifier.rb +40 -46
  392. data/lib/pubid/oiml/identifiers/annex.rb +13 -46
  393. data/lib/pubid/oiml/identifiers/errata.rb +15 -0
  394. data/lib/pubid/oiml/identifiers.rb +1 -1
  395. data/lib/pubid/oiml/parser.rb +59 -12
  396. data/lib/pubid/oiml/renderer.rb +171 -0
  397. data/lib/pubid/oiml/single_identifier.rb +61 -42
  398. data/lib/pubid/oiml/supplement_identifier.rb +31 -17
  399. data/lib/pubid/oiml/urn_generator.rb +0 -8
  400. data/lib/pubid/oiml/urn_parser.rb +22 -0
  401. data/lib/pubid/oiml.rb +42 -1
  402. data/lib/pubid/plateau/identifier.rb +4 -55
  403. data/lib/pubid/plateau/identifiers/base.rb +45 -36
  404. data/lib/pubid/plateau/identifiers/handbook.rb +0 -6
  405. data/lib/pubid/plateau/identifiers/technical_report.rb +0 -4
  406. data/lib/pubid/plateau/renderer.rb +51 -0
  407. data/lib/pubid/plateau/supplement_identifier.rb +0 -4
  408. data/lib/pubid/plateau/urn_parser.rb +43 -0
  409. data/lib/pubid/plateau.rb +43 -1
  410. data/lib/pubid/renderers/directives_renderer.rb +22 -8
  411. data/lib/pubid/renderers/guide_renderer.rb +4 -2
  412. data/lib/pubid/renderers/human_readable.rb +18 -7
  413. data/lib/pubid/rendering/context.rb +28 -19
  414. data/lib/pubid/rendering.rb +0 -3
  415. data/lib/pubid/sae/components/date.rb +8 -0
  416. data/lib/pubid/sae/components/type.rb +5 -1
  417. data/lib/pubid/sae/identifier.rb +4 -35
  418. data/lib/pubid/sae/identifiers/base.rb +26 -31
  419. data/lib/pubid/sae/renderer.rb +36 -0
  420. data/lib/pubid/sae/urn_generator.rb +2 -10
  421. data/lib/pubid/sae/urn_parser.rb +36 -0
  422. data/lib/pubid/sae.rb +42 -1
  423. data/lib/pubid/urn_generator/base.rb +12 -12
  424. data/lib/pubid/urn_parser/base.rb +81 -0
  425. data/lib/pubid/urn_parser/errors.rb +9 -0
  426. data/lib/pubid/urn_parser.rb +14 -0
  427. data/lib/pubid/version.rb +1 -1
  428. data/lib/pubid.rb +45 -7
  429. data/lib/tasks/export.rake +6 -5
  430. data/lib/tasks/website-data.json +1940 -1882
  431. metadata +75 -45
  432. data/lib/pubid/amca/scheme.rb +0 -16
  433. data/lib/pubid/ansi/scheme.rb +0 -15
  434. data/lib/pubid/api/scheme.rb +0 -66
  435. data/lib/pubid/ashrae/scheme.rb +0 -53
  436. data/lib/pubid/asme/scheme.rb +0 -37
  437. data/lib/pubid/astm/scheme.rb +0 -55
  438. data/lib/pubid/bsi/identifiers/base.rb +0 -11
  439. data/lib/pubid/bsi/scheme.rb +0 -243
  440. data/lib/pubid/ccsds/scheme.rb +0 -57
  441. data/lib/pubid/cen_cenelec/scheme.rb +0 -164
  442. data/lib/pubid/cie/scheme.rb +0 -64
  443. data/lib/pubid/components/factory.rb +0 -50
  444. data/lib/pubid/csa/scheme.rb +0 -44
  445. data/lib/pubid/etsi/scheme.rb +0 -42
  446. data/lib/pubid/export/data_class_exporter.rb +0 -59
  447. data/lib/pubid/export/ieee_exporter.rb +0 -78
  448. data/lib/pubid/export/itu_exporter.rb +0 -66
  449. data/lib/pubid/export/nist_exporter.rb +0 -64
  450. data/lib/pubid/export/registry_exporter.rb +0 -90
  451. data/lib/pubid/export/scheme_exporter.rb +0 -70
  452. data/lib/pubid/identifier_registry.rb +0 -198
  453. data/lib/pubid/idf/scheme.rb +0 -61
  454. data/lib/pubid/iec/scheme.rb +0 -71
  455. data/lib/pubid/ieee/scheme.rb +0 -90
  456. data/lib/pubid/iho/scheme.rb +0 -29
  457. data/lib/pubid/iso/identifiers/base.rb +0 -115
  458. data/lib/pubid/iso/scheme.rb +0 -193
  459. data/lib/pubid/itu/scheme.rb +0 -174
  460. data/lib/pubid/jcgm/scheme.rb +0 -60
  461. data/lib/pubid/jis/components/code.rb +0 -59
  462. data/lib/pubid/jis/identifiers/base.rb +0 -72
  463. data/lib/pubid/jis/scheme.rb +0 -49
  464. data/lib/pubid/nist/components/publisher.rb +0 -24
  465. data/lib/pubid/nist/scheme.rb +0 -199
  466. data/lib/pubid/oiml/identifiers/base.rb +0 -36
  467. data/lib/pubid/oiml/scheme.rb +0 -46
  468. data/lib/pubid/plateau/scheme.rb +0 -45
  469. data/lib/pubid/rendering/base.rb +0 -73
  470. data/lib/pubid/rendering/common.rb +0 -211
  471. data/lib/pubid/rendering/format.rb +0 -25
  472. data/lib/pubid/sae/scheme.rb +0 -47
  473. data/lib/pubid/scheme.rb +0 -219
@@ -20,41 +20,6 @@ module Pubid
20
20
  { key: :flex, title: "BSI Flex", short: "BSI Flex" }
21
21
  end
22
22
 
23
- def to_s(lang: :en, lang_single: false)
24
- parts = []
25
-
26
- # Publisher is always "BSI Flex"
27
- parts << "BSI Flex"
28
-
29
- # Number with part/subpart
30
- if number
31
- number_str = number.is_a?(Components::Code) ? number.value.to_s : number.to_s
32
- if part
33
- part_val = part.is_a?(Components::Code) ? part.value : part
34
- number_str += "-#{part_val}"
35
- end
36
- if subpart
37
- subpart_val = subpart.is_a?(Components::Code) ? subpart.value : subpart
38
- number_str += "-#{subpart_val}"
39
- end
40
- parts << number_str
41
- end
42
-
43
- result = parts.join(" ")
44
-
45
- # Edition comes before date for Flex
46
- result += " v#{edition}" if edition
47
-
48
- # Date
49
- if date
50
- year_val = date.is_a?(Components::Date) ? date.year : date.to_i
51
- result += ":#{year_val}"
52
- # Month if present
53
- result += "-#{format('%02d', month)}" if month
54
- end
55
-
56
- result
57
- end
58
23
  end
59
24
  end
60
25
  end
@@ -5,7 +5,7 @@ module Pubid
5
5
  module Identifiers
6
6
  # BSI Handbook
7
7
  # Examples: "Handbook 17:1963", "HB 10146:1998"
8
- class Handbook < Base
8
+ class Handbook < SingleIdentifier
9
9
  attribute :number, Bsi::Components::Code
10
10
  attribute :part, Bsi::Components::Code
11
11
  attribute :date, Bsi::Components::Date
@@ -19,20 +19,6 @@ module Pubid
19
19
  }
20
20
  end
21
21
 
22
- def to_s(lang: :en, lang_single: false)
23
- # Use preserved original abbreviation, default to "Handbook"
24
- abbr = original_abbr || "Handbook"
25
-
26
- number_str = number.is_a?(Components::Code) ? number.value.to_s : number.to_s
27
- if part
28
- part_val = part.is_a?(Components::Code) ? part.value : part
29
- number_str += "-#{part_val.to_s.strip}"
30
- end
31
-
32
- result = "#{abbr} #{number_str}"
33
- result += ":#{date.year}" if date
34
- result
35
- end
36
22
  end
37
23
  end
38
24
  end
@@ -24,38 +24,6 @@ module Pubid
24
24
  { key: :index, title: "Index", short: "Index" }
25
25
  end
26
26
 
27
- def to_s(lang: :en, lang_single: false)
28
- # Build string representation - Index has special format
29
- parts = []
30
-
31
- # Publisher (BS)
32
- parts << publisher.to_s if publisher
33
-
34
- # Number
35
- if number
36
- number_str = number.is_a?(Components::Code) ? number.value.to_s : number.to_s
37
- parts << number_str
38
- end
39
-
40
- result = parts.join(" ")
41
-
42
- # Index suffix with colon or space format
43
- result += if issue_number
44
- " Index Issue #{issue_number}"
45
- elsif index_format == "colon"
46
- ":Index"
47
- else
48
- " Index"
49
- end
50
-
51
- # Date
52
- if date
53
- year_val = date.is_a?(Components::Date) ? date.year : date.to_i
54
- result += ":#{year_val}"
55
- end
56
-
57
- result
58
- end
59
27
  end
60
28
  end
61
29
  end
@@ -29,47 +29,6 @@ module Pubid
29
29
  { key: :method, title: "Method", short: "Method" }
30
30
  end
31
31
 
32
- def to_s(lang: :en, lang_single: false)
33
- # Build string representation - Method has three formats
34
- parts = []
35
-
36
- # Publisher (BS)
37
- parts << publisher.to_s if publisher
38
-
39
- # Number with part (e.g., "2782-1")
40
- if number
41
- number_str = number.is_a?(Components::Code) ? number.value.to_s : number.to_s
42
- # Add part if present (e.g., "2782" + "-" + "1")
43
- if part
44
- part_val = part.is_a?(Components::Code) ? part.value : part
45
- number_str += "-#{part_val}"
46
- end
47
- parts << number_str
48
- end
49
-
50
- result = parts.join(" ")
51
-
52
- # Method suffix with appropriate format
53
- if method_to
54
- # Range format: ":Methods X to Y"
55
- result += ":Methods #{method_code} to #{method_to}"
56
- elsif method_and
57
- # And format: ":Methods X and Y"
58
- result += ":Methods #{method_code} and #{method_and}"
59
- else
60
- # Basic format: singular or plural
61
- method_word = is_plural ? "Methods" : "Method"
62
- result += ":#{method_word} #{method_code}"
63
- end
64
-
65
- # Date
66
- if date
67
- year_val = date.is_a?(Components::Date) ? date.year : date.to_i
68
- result += ":#{year_val}"
69
- end
70
-
71
- result
72
- end
73
32
  end
74
33
  end
75
34
  end
@@ -6,8 +6,8 @@ module Pubid
6
6
  # National Annex (NA) identifier
7
7
  # Can have own supplements: "NA+A1:2012 to BASE"
8
8
  class NationalAnnex < SingleIdentifier
9
- attribute :na_supplements, Base, polymorphic: true, collection: true # Supplements on the NA itself
10
- attribute :base_doc, Base, polymorphic: true # The identifier after "to"
9
+ attribute :na_supplements, ::Pubid::Identifier, polymorphic: true, collection: true # Supplements on the NA itself
10
+ attribute :base_doc, ::Pubid::Identifier, polymorphic: true # The identifier after "to"
11
11
 
12
12
  TYPED_STAGES = [
13
13
  Pubid::Components::TypedStage.new(
@@ -21,7 +21,8 @@ module Pubid
21
21
  ].freeze
22
22
 
23
23
  def self.type
24
- { key: :na, title: "National Annex", short: "NA" }
24
+ { key: :na,
25
+ web: :national_annex, title: "National Annex", short: "NA" }
25
26
  end
26
27
 
27
28
  # Delegation methods to access wrapped base_doc attributes
@@ -41,32 +42,6 @@ module Pubid
41
42
  base_doc&.subpart || super
42
43
  end
43
44
 
44
- def to_s(lang: :en, lang_single: false)
45
- result = "NA"
46
-
47
- # Add NA supplements if present
48
- if na_supplements&.any?
49
- na_supplements.each do |supp|
50
- if supp.is_a?(Amendment)
51
- result += "+A#{supp.amendment_number}:#{supp.amendment_year}"
52
- elsif supp.is_a?(Corrigendum)
53
- result += "+C#{supp.corrigendum_number}:#{supp.corrigendum_year}"
54
- end
55
- end
56
- end
57
-
58
- result += " to "
59
-
60
- # Render the base identifier (what this NA is for)
61
- result += if base_doc
62
- base_doc.to_s
63
- else
64
- # Fallback to parent rendering
65
- super
66
- end
67
-
68
- result
69
- end
70
45
  end
71
46
  end
72
47
  end
@@ -5,7 +5,7 @@ module Pubid
5
5
  module Identifiers
6
6
  # BSI Practice Guide (PP - Published Practice)
7
7
  # Examples: "PP 888:1982", "PP 7307:1986", "PP 7722:2006"
8
- class PracticeGuide < Base
8
+ class PracticeGuide < SingleIdentifier
9
9
  attribute :number, Bsi::Components::Code
10
10
  attribute :date, Bsi::Components::Date
11
11
 
@@ -16,11 +16,6 @@ module Pubid
16
16
  }
17
17
  end
18
18
 
19
- def to_s(lang: :en, lang_single: false)
20
- result = "PP #{number}"
21
- result += ":#{date.year}" if date
22
- result
23
- end
24
19
  end
25
20
  end
26
21
  end
@@ -17,62 +17,10 @@ module Pubid
17
17
  ].freeze
18
18
 
19
19
  def self.type
20
- { key: :pas, title: "Publicly Available Specification", short: "PAS" }
20
+ { key: :pas,
21
+ web: :publicly_available_specification, title: "Publicly Available Specification", short: "PAS" }
21
22
  end
22
23
 
23
- def to_s(lang: :en, lang_single: false)
24
- # Build string representation - PAS uses type abbreviation as prefix
25
- parts = []
26
-
27
- # Use type abbreviation (PAS) instead of publisher (BS)
28
- type_abbr = type&.abbr || "PAS"
29
- parts << type_abbr
30
-
31
- # Number with part and subpart
32
- if number
33
- number_str = number.is_a?(Components::Code) ? number.value.to_s : number.to_s
34
-
35
- # Collection (second number with slash, e.g., PAS 2035/2030)
36
- if second_number
37
- second_val = second_number.is_a?(Components::Code) ? second_number.value : second_number
38
- number_str += "/#{second_val}"
39
- end
40
-
41
- # Part and subpart
42
- if part
43
- part_val = part.is_a?(Components::Code) ? part.value : part
44
- number_str += "-#{part_val.to_s.strip}"
45
- end
46
- if subpart
47
- subpart_val = subpart.is_a?(Components::Code) ? subpart.value : subpart
48
- number_str += "-#{subpart_val.to_s.strip}"
49
- end
50
-
51
- parts << number_str
52
- end
53
-
54
- result = parts.join(" ")
55
-
56
- # Date
57
- if date
58
- year_val = date.is_a?(Components::Date) ? date.year : date.to_i
59
- result += ":#{year_val}"
60
- # Month if present
61
- result += "-#{format('%02d', month)}" if month
62
- end
63
-
64
- # Edition
65
- result += " v#{edition}" if edition
66
-
67
- # Translation
68
- if translation_lang
69
- result += " (#{translation_lang})"
70
- elsif translation_upper
71
- result += " (#{translation_upper})"
72
- end
73
-
74
- result
75
- end
76
24
  end
77
25
  end
78
26
  end
@@ -17,62 +17,10 @@ module Pubid
17
17
  ].freeze
18
18
 
19
19
  def self.type
20
- { key: :pd, title: "Published Document", short: "PD" }
20
+ { key: :pd,
21
+ web: :published_document, title: "Published Document", short: "PD" }
21
22
  end
22
23
 
23
- def to_s(lang: :en, lang_single: false)
24
- # Build string representation - PD uses type abbreviation as prefix
25
- parts = []
26
-
27
- # Use type abbreviation (PD) instead of publisher (BS)
28
- type_abbr = type&.abbr || "PD"
29
- parts << type_abbr
30
-
31
- # Number with part and subpart
32
- if number
33
- number_str = number.is_a?(Components::Code) ? number.value.to_s : number.to_s
34
-
35
- # Collection (second number with slash, e.g., PD 6430/1)
36
- if second_number
37
- second_val = second_number.is_a?(Components::Code) ? second_number.value : second_number
38
- number_str += "/#{second_val}"
39
- end
40
-
41
- # Part and subpart
42
- if part
43
- part_val = part.is_a?(Components::Code) ? part.value : part
44
- number_str += "-#{part_val.to_s.strip}"
45
- end
46
- if subpart
47
- subpart_val = subpart.is_a?(Components::Code) ? subpart.value : subpart
48
- number_str += "-#{subpart_val.to_s.strip}"
49
- end
50
-
51
- parts << number_str
52
- end
53
-
54
- result = parts.join(" ")
55
-
56
- # Date
57
- if date
58
- year_val = date.is_a?(Components::Date) ? date.year : date.to_i
59
- result += ":#{year_val}"
60
- # Month if present
61
- result += "-#{format('%02d', month)}" if month
62
- end
63
-
64
- # Edition
65
- result += " v#{edition}" if edition
66
-
67
- # Translation
68
- if translation_lang
69
- result += " (#{translation_lang})"
70
- elsif translation_upper
71
- result += " (#{translation_upper})"
72
- end
73
-
74
- result
75
- end
76
24
  end
77
25
  end
78
26
  end
@@ -26,36 +26,6 @@ module Pubid
26
26
  { key: :section, title: "Section", short: "Section" }
27
27
  end
28
28
 
29
- def to_s(lang: :en, lang_single: false)
30
- # Build string representation - Section has two formats
31
- parts = []
32
-
33
- # Publisher (DD, BS, etc.)
34
- parts << publisher.to_s if publisher
35
-
36
- # Number
37
- if number
38
- number_str = number.is_a?(Components::Code) ? number.value.to_s : number.to_s
39
- parts << number_str
40
- end
41
-
42
- result = parts.join(" ")
43
-
44
- # Section suffix with colon or space format
45
- result += if section_format == "colon"
46
- ":Section #{section_id}"
47
- else
48
- " Section #{section_id}"
49
- end
50
-
51
- # Date
52
- if date
53
- year_val = date.is_a?(Components::Date) ? date.year : date.to_i
54
- result += ":#{year_val}"
55
- end
56
-
57
- result
58
- end
59
29
  end
60
30
  end
61
31
  end
@@ -12,28 +12,11 @@ module Pubid
12
12
  # Examples:
13
13
  # BS ISO 20400 + BS ISO 44001+BS ISO 44002
14
14
  # BS ISO 9001+BS ISO 14001
15
- class Set < Base
16
- attribute :identifiers, Base, collection: true, polymorphic: true
15
+ class Set < SingleIdentifier
16
+ attribute :identifiers, ::Pubid::Identifier, collection: true,
17
+ polymorphic: true
17
18
  attribute :separators, :string, collection: true # Should all be " + "
18
19
 
19
- def to_s(lang: :en, lang_single: false)
20
- return "" if identifiers.nil? || identifiers.empty?
21
-
22
- parts = []
23
-
24
- identifiers.each_with_index do |id, i|
25
- # Render each identifier
26
- parts << id.to_s
27
-
28
- # Add separator (always " + " between identifiers)
29
- if i < identifiers.length - 1
30
- parts << " + "
31
- end
32
- end
33
-
34
- parts.join
35
- end
36
-
37
20
  def <=>(other)
38
21
  return nil unless other.is_a?(Set)
39
22
 
@@ -25,15 +25,6 @@ module Pubid
25
25
  { key: :standalone_amendment, title: "Amendment", short: "AMD" }
26
26
  end
27
27
 
28
- def to_s(lang: :en, lang_single: false)
29
- base = if corrigendum
30
- "AMD Corrigendum #{amendment_number}"
31
- else
32
- "AMD #{amendment_number}"
33
- end
34
-
35
- parenthesized ? "(#{base})" : base
36
- end
37
28
  end
38
29
  end
39
30
  end
@@ -8,8 +8,8 @@ module Pubid
8
8
  # Supports both forward and reverse formats:
9
9
  # Forward: "BS 1000:Supplement No. 1:1972", "BS 1722-1 Supplement No. 1:1974"
10
10
  # Reverse: "Supplement No. 1 (1970) to BS 1831:1969"
11
- class SupplementDocument < Base
12
- attribute :base_identifier, Base, polymorphic: true
11
+ class SupplementDocument < SingleIdentifier
12
+ attribute :base_identifier, ::Pubid::Identifier, polymorphic: true
13
13
  attribute :supplement_number, :string
14
14
  attribute :supplement_year, :integer
15
15
  attribute :supplement_type, :string, default: -> {
@@ -20,28 +20,6 @@ module Pubid
20
20
  ":"
21
21
  } # Separator before Supplement (":" or " ")
22
22
 
23
- def to_s
24
- base_str = base_identifier.to_s
25
-
26
- if reverse_format
27
- # Reverse format: "Supplement No. 1 (1970) to BS 1831:1969"
28
- supplement_str = if supplement_type == "No."
29
- "Supplement No. #{supplement_number} (#{supplement_year})"
30
- else
31
- "Supplement #{supplement_number} (#{supplement_year})"
32
- end
33
- "#{supplement_str} to #{base_str}"
34
- else
35
- # Forward format: "BS 1000:Supplement No. 1:1972" or "BS 1722-1 Supplement No. 1:1974"
36
- supplement_str = if supplement_type == "No."
37
- "#{separator}Supplement No. #{supplement_number}:#{supplement_year}"
38
- else
39
- "#{separator}Supplement #{supplement_number}:#{supplement_year}"
40
- end
41
- "#{base_str}#{supplement_str}"
42
- end
43
- end
44
-
45
23
  def publisher
46
24
  base_identifier&.publisher
47
25
  end
@@ -29,52 +29,6 @@ module Pubid
29
29
  }
30
30
  end
31
31
 
32
- def to_s(lang: :en, lang_single: false)
33
- # Supplementary Index format: BS {number} Supplementary Index:{year}
34
- parts = []
35
- parts << "BS"
36
-
37
- # Number with part/subpart
38
- if number
39
- number_str = if number.is_a?(Components::Code)
40
- number.value.to_s
41
- else
42
- number.to_s
43
- end
44
-
45
- # Part and subpart
46
- if part
47
- part_val = if part.is_a?(Components::Code)
48
- part.value
49
- else
50
- part
51
- end
52
- number_str += "-#{part_val}"
53
- end
54
- if subpart
55
- subpart_val = if supart.is_a?(Components::Code)
56
- subpart.value
57
- else
58
- subpart
59
- end
60
- number_str += "-#{subpart_val}"
61
- end
62
-
63
- parts << number_str
64
- end
65
-
66
- result = parts.join(" ")
67
-
68
- # Date
69
- if date
70
- year_val = date.is_a?(Components::Date) ? date.year : date.to_i
71
- result += " Supplementary Index:#{year_val}"
72
- # Month if present
73
- result += "-#{format('%02d', month)}" if month
74
- end
75
-
76
- result
77
- end
78
32
  end
79
33
  end
80
34
  end
@@ -24,55 +24,10 @@ module Pubid
24
24
  ].freeze
25
25
 
26
26
  def self.type
27
- { key: :ts, title: "Technical Specification", short: "TS" }
27
+ { key: :ts,
28
+ web: :technical_specification, title: "Technical Specification", short: "TS" }
28
29
  end
29
30
 
30
- def to_s(lang: :en, lang_single: false)
31
- # Technical specifications use a simple format: TS {number}:{year}
32
- parts = []
33
- parts << "TS"
34
-
35
- # Number with part/subpart
36
- if number
37
- number_str = if number.is_a?(Components::Code)
38
- number.value.to_s
39
- else
40
- number.to_s
41
- end
42
-
43
- # Part and subpart
44
- if part
45
- part_val = if part.is_a?(Components::Code)
46
- part.value
47
- else
48
- part
49
- end
50
- number_str += "-#{part_val}"
51
- end
52
- if subpart
53
- subpart_val = if supart.is_a?(Components::Code)
54
- subpart.value
55
- else
56
- subpart
57
- end
58
- number_str += "-#{subpart_val}"
59
- end
60
-
61
- parts << number_str
62
- end
63
-
64
- result = parts.join(" ")
65
-
66
- # Date
67
- if date
68
- year_val = date.is_a?(Components::Date) ? date.year : date.to_i
69
- result += ":#{year_val}"
70
- # Month if present
71
- result += "-#{format('%02d', month)}" if month
72
- end
73
-
74
- result
75
- end
76
31
  end
77
32
  end
78
33
  end
@@ -29,38 +29,6 @@ module Pubid
29
29
  { key: :test_method, title: "Test Method", short: "BS" }
30
30
  end
31
31
 
32
- def to_s(lang: :en, lang_single: false)
33
- # Test Method format: BS {number}:{test_series}:{test_id}:{year}
34
- parts = []
35
-
36
- # Publisher (BS)
37
- parts << "BS"
38
-
39
- # Number
40
- if number
41
- number_str = if number.is_a?(Components::Code)
42
- number.value.to_s
43
- else
44
- number.to_s
45
- end
46
- parts << number_str
47
- end
48
-
49
- result = parts.join(" ")
50
-
51
- # Test series and test ID suffixes
52
- if test_series && test_id
53
- result += ":#{test_series}:#{test_id}"
54
- end
55
-
56
- # Date
57
- if date
58
- year_val = date.is_a?(Components::Date) ? date.year : date.to_i
59
- result += ":#{year_val}"
60
- end
61
-
62
- result
63
- end
64
32
  end
65
33
  end
66
34
  end
@@ -11,25 +11,10 @@ module Pubid
11
11
  # PD 5500:2018+A3:2020 PDF
12
12
  # PAS 96:2017 - TC
13
13
  # PP 7722:2006 BOOK
14
- class ValueAddedPublication < Base
15
- attribute :base_identifier, Base, polymorphic: true
14
+ class ValueAddedPublication < SingleIdentifier
15
+ attribute :base_identifier, ::Pubid::Identifier, polymorphic: true
16
16
  attribute :format, :string, values: ["PDF", "TC", "BOOK"]
17
17
 
18
- def to_s(lang: :en, lang_single: false)
19
- base_str = base_identifier.to_s(lang: lang, lang_single: lang_single)
20
-
21
- case format
22
- when "TC"
23
- "#{base_str} - TC"
24
- when "PDF"
25
- "#{base_str} PDF"
26
- when "BOOK"
27
- "#{base_str} BOOK"
28
- else
29
- base_str
30
- end
31
- end
32
-
33
18
  # Delegate common attributes to base_identifier
34
19
  def publisher
35
20
  base_identifier&.publisher
@@ -10,7 +10,6 @@ module Pubid
10
10
  "#{__dir__}/identifiers/adopted_international_standard"
11
11
  autoload :AerospaceStandard, "#{__dir__}/identifiers/aerospace_standard"
12
12
  autoload :Amendment, "#{__dir__}/identifiers/amendment"
13
- autoload :Base, "#{__dir__}/identifiers/base"
14
13
  autoload :BritishIndustrialPractice,
15
14
  "#{__dir__}/identifiers/british_industrial_practice"
16
15
  autoload :BritishStandard, "#{__dir__}/identifiers/british_standard"