pubid 2.0.0.pre.alpha.1 → 2.0.0.pre.alpha.3

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 (463) hide show
  1. checksums.yaml +4 -4
  2. data/README.adoc +5 -1
  3. data/data/nist/update_codes.yaml +27 -0
  4. data/lib/pubid/amca/builder.rb +2 -2
  5. data/lib/pubid/amca/identifier.rb +7 -0
  6. data/lib/pubid/amca/identifiers/base.rb +0 -26
  7. data/lib/pubid/amca/identifiers/interpretation.rb +0 -17
  8. data/lib/pubid/amca/identifiers/publication.rb +0 -13
  9. data/lib/pubid/amca/renderer.rb +82 -0
  10. data/lib/pubid/amca/single_identifier.rb +0 -23
  11. data/lib/pubid/amca/urn_parser.rb +28 -0
  12. data/lib/pubid/amca.rb +42 -1
  13. data/lib/pubid/ansi/builder.rb +5 -3
  14. data/lib/pubid/ansi/identifier.rb +1 -1
  15. data/lib/pubid/ansi/identifiers/american_national_standard.rb +2 -1
  16. data/lib/pubid/ansi/identifiers/standard.rb +2 -3
  17. data/lib/pubid/ansi/renderer.rb +53 -0
  18. data/lib/pubid/ansi/single_identifier.rb +2 -31
  19. data/lib/pubid/ansi/urn_generator.rb +3 -38
  20. data/lib/pubid/ansi/urn_parser.rb +23 -0
  21. data/lib/pubid/ansi.rb +38 -3
  22. data/lib/pubid/api/builder.rb +29 -74
  23. data/lib/pubid/api/identifier.rb +0 -4
  24. data/lib/pubid/api/identifiers/base.rb +0 -2
  25. data/lib/pubid/api/identifiers/bulletin.rb +0 -2
  26. data/lib/pubid/api/identifiers/continuous_operations_standard.rb +0 -2
  27. data/lib/pubid/api/identifiers/mpms.rb +1 -17
  28. data/lib/pubid/api/identifiers/publication.rb +0 -2
  29. data/lib/pubid/api/identifiers/recommended_practice.rb +0 -2
  30. data/lib/pubid/api/identifiers/specification.rb +0 -2
  31. data/lib/pubid/api/identifiers/standard.rb +0 -2
  32. data/lib/pubid/api/identifiers/technical_report.rb +0 -2
  33. data/lib/pubid/api/identifiers/typeless_standard.rb +1 -14
  34. data/lib/pubid/api/identifiers.rb +18 -0
  35. data/lib/pubid/api/renderer.rb +89 -0
  36. data/lib/pubid/api/single_identifier.rb +1 -13
  37. data/lib/pubid/api/urn_generator.rb +0 -18
  38. data/lib/pubid/api/urn_parser.rb +35 -0
  39. data/lib/pubid/api.rb +51 -5
  40. data/lib/pubid/ashrae/builder.rb +3 -3
  41. data/lib/pubid/ashrae/identifier.rb +6 -0
  42. data/lib/pubid/ashrae/identifiers/addenda_package.rb +0 -10
  43. data/lib/pubid/ashrae/identifiers/addendum.rb +0 -19
  44. data/lib/pubid/ashrae/identifiers/base.rb +3 -0
  45. data/lib/pubid/ashrae/identifiers/combined_addenda.rb +0 -15
  46. data/lib/pubid/ashrae/identifiers/errata.rb +0 -10
  47. data/lib/pubid/ashrae/identifiers/interpretation.rb +0 -10
  48. data/lib/pubid/ashrae/renderer.rb +117 -0
  49. data/lib/pubid/ashrae/single_identifier.rb +0 -13
  50. data/lib/pubid/ashrae/urn_generator.rb +0 -8
  51. data/lib/pubid/ashrae/urn_parser.rb +27 -0
  52. data/lib/pubid/ashrae.rb +42 -1
  53. data/lib/pubid/asme/components/code.rb +10 -2
  54. data/lib/pubid/asme/identifiers/base.rb +0 -60
  55. data/lib/pubid/asme/renderer.rb +66 -0
  56. data/lib/pubid/asme/urn_parser.rb +31 -0
  57. data/lib/pubid/asme.rb +42 -1
  58. data/lib/pubid/astm/components/code.rb +9 -0
  59. data/lib/pubid/{jis → astm}/components.rb +1 -1
  60. data/lib/pubid/astm/identifiers/adjunct.rb +0 -8
  61. data/lib/pubid/astm/identifiers/data_series.rb +0 -14
  62. data/lib/pubid/astm/identifiers/iso_dual_published.rb +9 -34
  63. data/lib/pubid/astm/identifiers/manual.rb +0 -27
  64. data/lib/pubid/astm/identifiers/monograph.rb +0 -14
  65. data/lib/pubid/astm/identifiers/research_report.rb +0 -7
  66. data/lib/pubid/astm/identifiers/standard.rb +0 -39
  67. data/lib/pubid/astm/identifiers/technical_report.rb +0 -13
  68. data/lib/pubid/astm/identifiers/work_in_progress.rb +0 -11
  69. data/lib/pubid/astm/identifiers.rb +18 -0
  70. data/lib/pubid/astm/renderer.rb +172 -0
  71. data/lib/pubid/astm/single_identifier.rb +0 -10
  72. data/lib/pubid/astm/urn_parser.rb +30 -0
  73. data/lib/pubid/astm.rb +39 -27
  74. data/lib/pubid/bsi/builder.rb +21 -12
  75. data/lib/pubid/bsi/identifier.rb +8 -2
  76. data/lib/pubid/bsi/identifiers/addendum_document.rb +3 -33
  77. data/lib/pubid/bsi/identifiers/adopted_european_norm.rb +11 -47
  78. data/lib/pubid/bsi/identifiers/adopted_international_standard.rb +11 -38
  79. data/lib/pubid/bsi/identifiers/aerospace_standard.rb +3 -53
  80. data/lib/pubid/bsi/identifiers/amendment.rb +3 -19
  81. data/lib/pubid/bsi/identifiers/british_industrial_practice.rb +2 -4
  82. data/lib/pubid/bsi/identifiers/british_standard.rb +2 -1
  83. data/lib/pubid/bsi/identifiers/bundled_identifier.rb +3 -84
  84. data/lib/pubid/bsi/identifiers/committee_document.rb +1 -14
  85. data/lib/pubid/bsi/identifiers/consolidated_identifier.rb +3 -84
  86. data/lib/pubid/bsi/identifiers/corrigendum.rb +3 -7
  87. data/lib/pubid/bsi/identifiers/detailed_specification.rb +1 -34
  88. data/lib/pubid/bsi/identifiers/disc.rb +1 -27
  89. data/lib/pubid/bsi/identifiers/draft_document.rb +3 -44
  90. data/lib/pubid/bsi/identifiers/electronic_book.rb +3 -36
  91. data/lib/pubid/bsi/identifiers/expert_commentary.rb +3 -15
  92. data/lib/pubid/bsi/identifiers/explanatory_supplement.rb +1 -45
  93. data/lib/pubid/bsi/identifiers/flex.rb +1 -33
  94. data/lib/pubid/bsi/identifiers/handbook.rb +2 -13
  95. data/lib/pubid/bsi/identifiers/index.rb +1 -30
  96. data/lib/pubid/bsi/identifiers/method.rb +1 -39
  97. data/lib/pubid/bsi/identifiers/national_annex.rb +5 -27
  98. data/lib/pubid/bsi/identifiers/practice_guide.rb +2 -4
  99. data/lib/pubid/bsi/identifiers/publicly_available_specification.rb +3 -52
  100. data/lib/pubid/bsi/identifiers/published_document.rb +3 -52
  101. data/lib/pubid/bsi/identifiers/section.rb +1 -28
  102. data/lib/pubid/bsi/identifiers/set.rb +3 -17
  103. data/lib/pubid/bsi/identifiers/standalone_amendment.rb +1 -7
  104. data/lib/pubid/bsi/identifiers/supplement_document.rb +3 -21
  105. data/lib/pubid/bsi/identifiers/supplementary_index.rb +1 -44
  106. data/lib/pubid/bsi/identifiers/technical_specification.rb +3 -45
  107. data/lib/pubid/bsi/identifiers/test_method.rb +1 -30
  108. data/lib/pubid/bsi/identifiers/value_added_publication.rb +3 -14
  109. data/lib/pubid/bsi/identifiers.rb +0 -1
  110. data/lib/pubid/bsi/renderer.rb +1050 -0
  111. data/lib/pubid/bsi/single_identifier.rb +6 -70
  112. data/lib/pubid/bsi/urn_generator.rb +2 -3
  113. data/lib/pubid/bsi/urn_parser.rb +52 -0
  114. data/lib/pubid/bsi.rb +224 -1
  115. data/lib/pubid/builder/base.rb +57 -10
  116. data/lib/pubid/bundled_identifier.rb +0 -1
  117. data/lib/pubid/ccsds/builder.rb +4 -3
  118. data/lib/pubid/ccsds/identifier.rb +66 -1
  119. data/lib/pubid/ccsds/identifiers/base.rb +11 -50
  120. data/lib/pubid/ccsds/identifiers/corrigendum.rb +7 -6
  121. data/lib/pubid/ccsds/parser.rb +4 -2
  122. data/lib/pubid/ccsds/single_identifier.rb +4 -1
  123. data/lib/pubid/ccsds/supplement_identifier.rb +15 -11
  124. data/lib/pubid/ccsds/urn_generator.rb +3 -3
  125. data/lib/pubid/ccsds/urn_parser.rb +20 -0
  126. data/lib/pubid/ccsds.rb +39 -1
  127. data/lib/pubid/cen_cenelec/builder.rb +12 -14
  128. data/lib/pubid/cen_cenelec/identifier.rb +8 -2
  129. data/lib/pubid/cen_cenelec/identifiers/adopted_european_norm.rb +13 -4
  130. data/lib/pubid/cen_cenelec/identifiers/amendment.rb +2 -8
  131. data/lib/pubid/cen_cenelec/identifiers/base.rb +5 -41
  132. data/lib/pubid/cen_cenelec/identifiers/cen_report.rb +2 -1
  133. data/lib/pubid/cen_cenelec/identifiers/cen_workshop_agreement.rb +2 -1
  134. data/lib/pubid/cen_cenelec/identifiers/consolidated_identifier.rb +2 -25
  135. data/lib/pubid/cen_cenelec/identifiers/corrigendum.rb +2 -13
  136. data/lib/pubid/cen_cenelec/identifiers/european_norm.rb +2 -1
  137. data/lib/pubid/cen_cenelec/identifiers/european_prestandard.rb +4 -7
  138. data/lib/pubid/cen_cenelec/identifiers/european_specification.rb +2 -1
  139. data/lib/pubid/cen_cenelec/identifiers/fragment.rb +2 -2
  140. data/lib/pubid/cen_cenelec/identifiers/harmonization_document.rb +2 -1
  141. data/lib/pubid/cen_cenelec/identifiers/technical_report.rb +2 -1
  142. data/lib/pubid/cen_cenelec/identifiers/technical_specification.rb +2 -1
  143. data/lib/pubid/cen_cenelec/renderer.rb +261 -0
  144. data/lib/pubid/cen_cenelec/single_identifier.rb +11 -89
  145. data/lib/pubid/cen_cenelec/urn_generator.rb +6 -6
  146. data/lib/pubid/cen_cenelec/urn_parser.rb +28 -0
  147. data/lib/pubid/cen_cenelec.rb +168 -1
  148. data/lib/pubid/cie/components/code.rb +8 -0
  149. data/lib/pubid/cie/identifier.rb +6 -4
  150. data/lib/pubid/cie/urn_parser.rb +28 -0
  151. data/lib/pubid/cie.rb +43 -1
  152. data/lib/pubid/components/adoption.rb +104 -0
  153. data/lib/pubid/components/code.rb +22 -8
  154. data/lib/pubid/components/date.rb +23 -16
  155. data/lib/pubid/components/edition.rb +9 -6
  156. data/lib/pubid/components/iteration.rb +32 -0
  157. data/lib/pubid/components/language.rb +6 -4
  158. data/lib/pubid/components/locality.rb +10 -1
  159. data/lib/pubid/components/publisher.rb +9 -6
  160. data/lib/pubid/components/relationship.rb +151 -0
  161. data/lib/pubid/components/stage.rb +5 -14
  162. data/lib/pubid/components/supplement.rb +184 -0
  163. data/lib/pubid/components/type.rb +5 -15
  164. data/lib/pubid/components/typed_stage.rb +11 -8
  165. data/lib/pubid/components.rb +4 -0
  166. data/lib/pubid/core/update_codes.rb +28 -7
  167. data/lib/pubid/csa/identifier.rb +0 -3
  168. data/lib/pubid/csa/identifiers/base.rb +2 -122
  169. data/lib/pubid/csa/identifiers/cec.rb +2 -101
  170. data/lib/pubid/csa/identifiers/series.rb +2 -102
  171. data/lib/pubid/csa/renderer.rb +292 -0
  172. data/lib/pubid/csa/urn_generator.rb +1 -1
  173. data/lib/pubid/csa/urn_parser.rb +33 -0
  174. data/lib/pubid/csa.rb +42 -1
  175. data/lib/pubid/etsi/components/code.rb +9 -2
  176. data/lib/pubid/etsi/identifiers/base.rb +1 -4
  177. data/lib/pubid/etsi/identifiers/supplement_identifier.rb +2 -9
  178. data/lib/pubid/etsi/renderer.rb +42 -0
  179. data/lib/pubid/etsi/urn_parser.rb +34 -0
  180. data/lib/pubid/etsi.rb +42 -1
  181. data/lib/pubid/export/exporter.rb +4 -46
  182. data/lib/pubid/export/flavor_exporter.rb +111 -278
  183. data/lib/pubid/export.rb +0 -6
  184. data/lib/pubid/identifier.rb +10 -18
  185. data/lib/pubid/identifier_facade.rb +114 -0
  186. data/lib/pubid/identifier_metadata.rb +1 -1
  187. data/lib/pubid/idf/builder.rb +3 -3
  188. data/lib/pubid/idf/identifier.rb +3 -6
  189. data/lib/pubid/idf/identifiers/amendment.rb +2 -1
  190. data/lib/pubid/idf/identifiers/corrigendum.rb +2 -1
  191. data/lib/pubid/idf/identifiers/international_standard.rb +2 -1
  192. data/lib/pubid/idf/identifiers/reviewed_method.rb +2 -1
  193. data/lib/pubid/idf/parser.rb +3 -2
  194. data/lib/pubid/idf/renderer.rb +84 -0
  195. data/lib/pubid/idf/supplement_identifier.rb +2 -10
  196. data/lib/pubid/idf/urn_generator.rb +4 -39
  197. data/lib/pubid/idf/urn_parser.rb +25 -0
  198. data/lib/pubid/idf.rb +51 -1
  199. data/lib/pubid/iec/builder.rb +48 -65
  200. data/lib/pubid/iec/components/code.rb +9 -32
  201. data/lib/pubid/iec/components/publisher.rb +1 -1
  202. data/lib/pubid/iec/components.rb +14 -0
  203. data/lib/pubid/iec/identifier.rb +276 -3
  204. data/lib/pubid/iec/identifiers/amendment.rb +2 -3
  205. data/lib/pubid/iec/identifiers/base.rb +8 -28
  206. data/lib/pubid/iec/identifiers/component_specification.rb +3 -3
  207. data/lib/pubid/iec/identifiers/conformity_assessment.rb +1 -2
  208. data/lib/pubid/iec/identifiers/consolidated_identifier.rb +27 -30
  209. data/lib/pubid/iec/identifiers/corrigendum.rb +2 -3
  210. data/lib/pubid/iec/identifiers/fragment_identifier.rb +37 -26
  211. data/lib/pubid/iec/identifiers/guide.rb +0 -2
  212. data/lib/pubid/iec/identifiers/international_standard.rb +2 -3
  213. data/lib/pubid/iec/identifiers/interpretation_sheet.rb +2 -3
  214. data/lib/pubid/iec/identifiers/operational_document.rb +3 -3
  215. data/lib/pubid/iec/identifiers/publicly_available_specification.rb +2 -3
  216. data/lib/pubid/iec/identifiers/sheet_identifier.rb +21 -15
  217. data/lib/pubid/iec/identifiers/societal_technology_trend_report.rb +3 -3
  218. data/lib/pubid/iec/identifiers/systems_reference_document.rb +2 -3
  219. data/lib/pubid/iec/identifiers/technical_report.rb +2 -3
  220. data/lib/pubid/iec/identifiers/technical_specification.rb +2 -3
  221. data/lib/pubid/iec/identifiers/technology_report.rb +1 -2
  222. data/lib/pubid/iec/identifiers/test_report_form.rb +5 -34
  223. data/lib/pubid/iec/identifiers/vap_identifier.rb +26 -23
  224. data/lib/pubid/iec/identifiers/white_paper.rb +3 -3
  225. data/lib/pubid/iec/identifiers/working_document.rb +4 -48
  226. data/lib/pubid/iec/identifiers.rb +30 -0
  227. data/lib/pubid/iec/parser.rb +20 -14
  228. data/lib/pubid/iec/renderer.rb +254 -0
  229. data/lib/pubid/iec/single_identifier.rb +6 -12
  230. data/lib/pubid/iec/supplement_identifier.rb +58 -54
  231. data/lib/pubid/iec/urn_generator.rb +57 -171
  232. data/lib/pubid/iec/urn_parser.rb +53 -252
  233. data/lib/pubid/iec.rb +40 -68
  234. data/lib/pubid/ieee/builder.rb +12 -12
  235. data/lib/pubid/ieee/components/code.rb +8 -0
  236. data/lib/pubid/ieee/components/draft.rb +14 -0
  237. data/lib/pubid/ieee/components/relationship.rb +5 -149
  238. data/lib/pubid/ieee/identifier.rb +6 -0
  239. data/lib/pubid/ieee/identifiers/adopted_standard.rb +1 -6
  240. data/lib/pubid/ieee/identifiers/base.rb +101 -458
  241. data/lib/pubid/ieee/identifiers/conformance_identifier.rb +1 -7
  242. data/lib/pubid/ieee/identifiers/corrigendum.rb +1 -9
  243. data/lib/pubid/ieee/identifiers/csa_dual_published.rb +1 -7
  244. data/lib/pubid/ieee/identifiers/dual_identifier.rb +1 -1
  245. data/lib/pubid/ieee/identifiers/dual_published.rb +1 -1
  246. data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +1 -6
  247. data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +1 -7
  248. data/lib/pubid/ieee/identifiers/joint_development.rb +2 -0
  249. data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +1 -15
  250. data/lib/pubid/ieee/identifiers/parenthetical_identifier.rb +1 -3
  251. data/lib/pubid/ieee/identifiers/project_draft_identifier.rb +15 -0
  252. data/lib/pubid/ieee/identifiers/redlined_standard.rb +1 -4
  253. data/lib/pubid/ieee/identifiers/si_standard.rb +1 -35
  254. data/lib/pubid/ieee/identifiers/standard.rb +1 -1
  255. data/lib/pubid/ieee/pre_parser.rb +301 -0
  256. data/lib/pubid/ieee/renderer.rb +307 -0
  257. data/lib/pubid/ieee/urn_parser.rb +34 -0
  258. data/lib/pubid/ieee.rb +62 -1
  259. data/lib/pubid/ieee_debug.rb +0 -1
  260. data/lib/pubid/iho/builder.rb +2 -2
  261. data/lib/pubid/iho/identifier.rb +8 -0
  262. data/lib/pubid/iho/identifiers/base.rb +49 -10
  263. data/lib/pubid/iho/identifiers/bibliographic.rb +0 -4
  264. data/lib/pubid/iho/identifiers/circular_letter.rb +0 -4
  265. data/lib/pubid/iho/identifiers/miscellaneous.rb +0 -4
  266. data/lib/pubid/iho/identifiers/publication.rb +0 -4
  267. data/lib/pubid/iho/identifiers/standard.rb +0 -4
  268. data/lib/pubid/iho/parser.rb +3 -3
  269. data/lib/pubid/iho/renderer.rb +30 -0
  270. data/lib/pubid/iho/urn_generator.rb +3 -3
  271. data/lib/pubid/iho/urn_parser.rb +58 -0
  272. data/lib/pubid/iho.rb +50 -1
  273. data/lib/pubid/iso/builder.rb +59 -53
  274. data/lib/pubid/iso/bundled_identifier.rb +51 -0
  275. data/lib/pubid/iso/components/code.rb +7 -19
  276. data/lib/pubid/iso/components/publisher.rb +10 -8
  277. data/lib/pubid/iso/components.rb +2 -4
  278. data/lib/pubid/iso/identifier.rb +233 -6
  279. data/lib/pubid/iso/identifiers/addendum.rb +9 -6
  280. data/lib/pubid/iso/identifiers/amendment.rb +8 -4
  281. data/lib/pubid/iso/identifiers/corrigendum.rb +4 -4
  282. data/lib/pubid/iso/identifiers/data.rb +0 -1
  283. data/lib/pubid/iso/identifiers/directives.rb +8 -2
  284. data/lib/pubid/iso/identifiers/directives_supplement.rb +43 -14
  285. data/lib/pubid/iso/identifiers/extract.rb +2 -2
  286. data/lib/pubid/iso/identifiers/guide.rb +0 -1
  287. data/lib/pubid/iso/identifiers/international_standard.rb +4 -4
  288. data/lib/pubid/iso/identifiers/international_standardized_profile.rb +4 -4
  289. data/lib/pubid/iso/identifiers/international_workshop_agreement.rb +10 -4
  290. data/lib/pubid/iso/identifiers/pas.rb +2 -2
  291. data/lib/pubid/iso/identifiers/recommendation.rb +2 -2
  292. data/lib/pubid/iso/identifiers/supplement.rb +11 -3
  293. data/lib/pubid/iso/identifiers/tc_document.rb +44 -15
  294. data/lib/pubid/iso/identifiers/technical_report.rb +4 -4
  295. data/lib/pubid/iso/identifiers/technical_specification.rb +2 -2
  296. data/lib/pubid/iso/identifiers/technology_trends_assessments.rb +2 -2
  297. data/lib/pubid/iso/identifiers.rb +0 -1
  298. data/lib/pubid/iso/normalizer.rb +89 -0
  299. data/lib/pubid/iso/parser.rb +26 -6
  300. data/lib/pubid/iso/single_identifier.rb +6 -3
  301. data/lib/pubid/iso/supplement_identifier.rb +15 -2
  302. data/lib/pubid/iso/urn_generator.rb +74 -176
  303. data/lib/pubid/iso/urn_parser.rb +28 -9
  304. data/lib/pubid/iso.rb +173 -2
  305. data/lib/pubid/itu/builder.rb +0 -12
  306. data/lib/pubid/itu/components/code.rb +8 -0
  307. data/lib/pubid/itu/components.rb +11 -0
  308. data/lib/pubid/itu/identifier.rb +6 -39
  309. data/lib/pubid/itu/identifiers/amendment.rb +0 -2
  310. data/lib/pubid/itu/identifiers/annex.rb +0 -2
  311. data/lib/pubid/itu/identifiers/base.rb +0 -6
  312. data/lib/pubid/itu/identifiers/combined_identifier.rb +0 -2
  313. data/lib/pubid/itu/identifiers/corrigendum.rb +0 -2
  314. data/lib/pubid/itu/identifiers/recommendation.rb +0 -2
  315. data/lib/pubid/itu/identifiers/special_publication.rb +0 -2
  316. data/lib/pubid/itu/identifiers/supplement.rb +0 -2
  317. data/lib/pubid/itu/urn_parser.rb +23 -0
  318. data/lib/pubid/itu.rb +42 -1
  319. data/lib/pubid/jcgm/builder.rb +16 -8
  320. data/lib/pubid/jcgm/identifiers/amendment.rb +2 -7
  321. data/lib/pubid/jcgm/identifiers/gum_guide.rb +2 -10
  322. data/lib/pubid/jcgm/renderer.rb +68 -0
  323. data/lib/pubid/jcgm/single_identifier.rb +1 -5
  324. data/lib/pubid/jcgm/urn_generator.rb +4 -6
  325. data/lib/pubid/jcgm/urn_parser.rb +23 -0
  326. data/lib/pubid/jcgm.rb +43 -2
  327. data/lib/pubid/jis/builder.rb +44 -52
  328. data/lib/pubid/jis/identifier.rb +132 -3
  329. data/lib/pubid/jis/identifiers/amendment.rb +1 -1
  330. data/lib/pubid/jis/identifiers/corrigendum.rb +16 -0
  331. data/lib/pubid/jis/identifiers/standard.rb +2 -1
  332. data/lib/pubid/jis/identifiers/technical_report.rb +2 -1
  333. data/lib/pubid/jis/identifiers/technical_specification.rb +2 -1
  334. data/lib/pubid/jis/identifiers.rb +1 -1
  335. data/lib/pubid/jis/parser.rb +31 -5
  336. data/lib/pubid/jis/renderer.rb +69 -0
  337. data/lib/pubid/jis/single_identifier.rb +6 -12
  338. data/lib/pubid/jis/supplement_identifier.rb +17 -14
  339. data/lib/pubid/jis/urn_parser.rb +23 -0
  340. data/lib/pubid/jis.rb +42 -2
  341. data/lib/pubid/nist/builder.rb +122 -1761
  342. data/lib/pubid/nist/caster.rb +1272 -0
  343. data/lib/pubid/nist/circular_supplement_builder.rb +291 -0
  344. data/lib/pubid/nist/components/code.rb +9 -20
  345. data/lib/pubid/nist/components/edition.rb +16 -0
  346. data/lib/pubid/nist/components/supplement.rb +88 -21
  347. data/lib/pubid/nist/components.rb +0 -1
  348. data/lib/pubid/nist/identifier.rb +25 -0
  349. data/lib/pubid/nist/identifiers/base.rb +206 -64
  350. data/lib/pubid/nist/identifiers/circular.rb +7 -2
  351. data/lib/pubid/nist/identifiers/circular_supplement.rb +3 -2
  352. data/lib/pubid/nist/identifiers/commercial_standard.rb +2 -1
  353. data/lib/pubid/nist/identifiers/commercial_standard_emergency.rb +6 -4
  354. data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +10 -3
  355. data/lib/pubid/nist/identifiers/crpl_report.rb +8 -11
  356. data/lib/pubid/nist/identifiers/dated_document.rb +49 -0
  357. data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +17 -16
  358. data/lib/pubid/nist/identifiers/grant_contractor_report.rb +2 -1
  359. data/lib/pubid/nist/identifiers/handbook.rb +2 -1
  360. data/lib/pubid/nist/identifiers/internal_report.rb +2 -1
  361. data/lib/pubid/nist/identifiers/letter_circular.rb +2 -1
  362. data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +5 -4
  363. data/lib/pubid/nist/identifiers/monograph.rb +7 -3
  364. data/lib/pubid/nist/identifiers/report.rb +4 -3
  365. data/lib/pubid/nist/identifiers/special_publication.rb +2 -1
  366. data/lib/pubid/nist/identifiers/technical_note.rb +3 -2
  367. data/lib/pubid/nist/identifiers.rb +1 -0
  368. data/lib/pubid/nist/parser.rb +67 -424
  369. data/lib/pubid/nist/parser_output_normalizer.rb +233 -0
  370. data/lib/pubid/nist/preprocessor.rb +416 -0
  371. data/lib/pubid/nist/renderer.rb +43 -0
  372. data/lib/pubid/nist/router.rb +148 -0
  373. data/lib/pubid/nist/series/base.rb +58 -0
  374. data/lib/pubid/nist/series/crpl.rb +13 -0
  375. data/lib/pubid/nist/series/fips.rb +14 -0
  376. data/lib/pubid/nist/series/ir.rb +60 -0
  377. data/lib/pubid/nist/series/letter_preserving.rb +15 -0
  378. data/lib/pubid/nist/series/mono.rb +19 -0
  379. data/lib/pubid/nist/series/ncstar.rb +20 -0
  380. data/lib/pubid/nist/series.rb +49 -0
  381. data/lib/pubid/nist/supplement_identifier.rb +11 -25
  382. data/lib/pubid/nist/urn_generator.rb +14 -8
  383. data/lib/pubid/nist/urn_parser.rb +67 -0
  384. data/lib/pubid/nist.rb +83 -4
  385. data/lib/pubid/oiml/components/code.rb +10 -0
  386. data/lib/pubid/oiml/identifiers/annex.rb +3 -45
  387. data/lib/pubid/oiml/identifiers/base.rb +2 -17
  388. data/lib/pubid/oiml/renderer.rb +161 -0
  389. data/lib/pubid/oiml/single_identifier.rb +6 -45
  390. data/lib/pubid/oiml/supplement_identifier.rb +4 -19
  391. data/lib/pubid/oiml/urn_generator.rb +0 -8
  392. data/lib/pubid/oiml/urn_parser.rb +22 -0
  393. data/lib/pubid/oiml.rb +42 -1
  394. data/lib/pubid/plateau/identifier.rb +23 -0
  395. data/lib/pubid/plateau/identifiers/handbook.rb +1 -3
  396. data/lib/pubid/plateau/identifiers/technical_report.rb +1 -1
  397. data/lib/pubid/plateau/renderer.rb +51 -0
  398. data/lib/pubid/plateau/supplement_identifier.rb +1 -1
  399. data/lib/pubid/plateau/urn_parser.rb +43 -0
  400. data/lib/pubid/plateau.rb +44 -1
  401. data/lib/pubid/renderers/base.rb +34 -0
  402. data/lib/pubid/renderers/directives_renderer.rb +27 -14
  403. data/lib/pubid/renderers/guide_renderer.rb +7 -1
  404. data/lib/pubid/renderers/human_readable.rb +31 -8
  405. data/lib/pubid/renderers/iwa_renderer.rb +5 -1
  406. data/lib/pubid/renderers/supplement_renderer.rb +4 -1
  407. data/lib/pubid/rendering/context.rb +33 -21
  408. data/lib/pubid/rendering.rb +0 -3
  409. data/lib/pubid/sae/components/date.rb +8 -0
  410. data/lib/pubid/sae/components/type.rb +5 -1
  411. data/lib/pubid/sae/identifiers/base.rb +2 -16
  412. data/lib/pubid/sae/renderer.rb +36 -0
  413. data/lib/pubid/sae/urn_generator.rb +2 -10
  414. data/lib/pubid/sae/urn_parser.rb +36 -0
  415. data/lib/pubid/sae.rb +42 -1
  416. data/lib/pubid/urn_generator/base.rb +12 -12
  417. data/lib/pubid/urn_parser/base.rb +81 -0
  418. data/lib/pubid/urn_parser/errors.rb +9 -0
  419. data/lib/pubid/urn_parser.rb +14 -0
  420. data/lib/pubid/version.rb +1 -1
  421. data/lib/pubid.rb +29 -7
  422. data/lib/tasks/website-data.json +1940 -1882
  423. metadata +77 -43
  424. data/lib/pubid/amca/scheme.rb +0 -16
  425. data/lib/pubid/ansi/scheme.rb +0 -15
  426. data/lib/pubid/api/scheme.rb +0 -66
  427. data/lib/pubid/ashrae/scheme.rb +0 -53
  428. data/lib/pubid/asme/scheme.rb +0 -37
  429. data/lib/pubid/astm/scheme.rb +0 -55
  430. data/lib/pubid/bsi/identifiers/base.rb +0 -11
  431. data/lib/pubid/bsi/scheme.rb +0 -243
  432. data/lib/pubid/ccsds/scheme.rb +0 -57
  433. data/lib/pubid/cen_cenelec/scheme.rb +0 -164
  434. data/lib/pubid/cie/scheme.rb +0 -64
  435. data/lib/pubid/csa/scheme.rb +0 -44
  436. data/lib/pubid/etsi/scheme.rb +0 -42
  437. data/lib/pubid/export/data_class_exporter.rb +0 -59
  438. data/lib/pubid/export/ieee_exporter.rb +0 -78
  439. data/lib/pubid/export/itu_exporter.rb +0 -66
  440. data/lib/pubid/export/nist_exporter.rb +0 -64
  441. data/lib/pubid/export/registry_exporter.rb +0 -90
  442. data/lib/pubid/export/scheme_exporter.rb +0 -70
  443. data/lib/pubid/identifier_registry.rb +0 -198
  444. data/lib/pubid/idf/scheme.rb +0 -61
  445. data/lib/pubid/iec/scheme.rb +0 -71
  446. data/lib/pubid/ieee/scheme.rb +0 -90
  447. data/lib/pubid/iho/scheme.rb +0 -29
  448. data/lib/pubid/iso/identifiers/base.rb +0 -115
  449. data/lib/pubid/iso/scheme.rb +0 -187
  450. data/lib/pubid/itu/scheme.rb +0 -174
  451. data/lib/pubid/jcgm/scheme.rb +0 -60
  452. data/lib/pubid/jis/components/code.rb +0 -59
  453. data/lib/pubid/jis/identifiers/base.rb +0 -72
  454. data/lib/pubid/jis/scheme.rb +0 -49
  455. data/lib/pubid/nist/components/publisher.rb +0 -24
  456. data/lib/pubid/nist/scheme.rb +0 -199
  457. data/lib/pubid/oiml/scheme.rb +0 -46
  458. data/lib/pubid/plateau/scheme.rb +0 -45
  459. data/lib/pubid/rendering/base.rb +0 -73
  460. data/lib/pubid/rendering/common.rb +0 -211
  461. data/lib/pubid/rendering/format.rb +0 -25
  462. data/lib/pubid/sae/scheme.rb +0 -47
  463. data/lib/pubid/scheme.rb +0 -207
@@ -1,59 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "lutaml/model"
4
-
5
- module Pubid
6
- module Jis
7
- module Components
8
- # Represents a JIS code with series letter, number, and optional parts
9
- # Examples:
10
- # A 0001 => series: "A", number: 1, parts: []
11
- # B 0060-1 => series: "B", number: 60, parts: [1]
12
- # C 61000-3-2 => series: "C", number: 61000, parts: [3, 2]
13
- # C 5401-2-001 => series: "C", number: 5401, parts: [2, 1] (with formatting)
14
- class Code < Lutaml::Model::Serializable
15
- attribute :series, :string # Single letter A-Z
16
- attribute :number, :integer # Required number
17
- attribute :parts, :integer, collection: true # Optional multi-level parts
18
-
19
- # Store original string representations for formatting
20
- attr_accessor :number_string, :part_strings
21
-
22
- def initialize(series:, number:, parts: nil, number_string: nil,
23
- part_strings: nil)
24
- @series = series
25
- @number = number
26
- @parts = parts || []
27
- @number_string = number_string || format_number(number)
28
- @part_strings = part_strings || @parts.map(&:to_s)
29
- end
30
-
31
- # Render as "SERIES NUMBER[-PART[-SUBPART[...]]]"
32
- def to_s
33
- result = "#{series} #{number_string}"
34
- result += part_strings.map { |p| "-#{p}" }.join if part_strings&.any?
35
- result
36
- end
37
-
38
- def ==(other)
39
- return false unless other.is_a?(Code)
40
-
41
- series == other.series &&
42
- number == other.number &&
43
- parts == other.parts
44
- end
45
-
46
- private
47
-
48
- def format_number(num)
49
- # Preserve leading zeros: pad to 4 digits if less than 1000
50
- if num < 1000
51
- num.to_s.rjust(4, "0")
52
- else
53
- num.to_s
54
- end
55
- end
56
- end
57
- end
58
- end
59
- end
@@ -1,72 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Pubid
4
- module Jis
5
- module Identifiers
6
- # Base class for all JIS identifiers
7
- # Provides common attributes and behavior
8
- class Base < Pubid::Identifier
9
- # Generate URN for this identifier
10
- #
11
- # @return [String] URN representation
12
-
13
- attribute :code, Pubid::Jis::Components::Code
14
- attribute :year, :integer
15
- attribute :language, :string # "E" or "J"
16
- attribute :all_parts, :boolean, default: -> { false }
17
-
18
- def initialize(code: nil, series: nil, number: nil, parts: nil,
19
- year: nil, language: nil, all_parts: false)
20
- if code
21
- @code = code
22
- elsif series && number
23
- @code = Components::Code.new(
24
- series: series,
25
- number: number,
26
- parts: parts || [],
27
- )
28
- end
29
- @year = year
30
- @language = language
31
- @all_parts = all_parts
32
- end
33
-
34
- # Publisher is always JIS
35
- def publisher
36
- "JIS"
37
- end
38
-
39
- def all_parts?
40
- all_parts == true
41
- end
42
-
43
- # Comparison with all_parts logic
44
- # When either identifier has all_parts=true, compare only series and number
45
- def ==(other)
46
- return false unless other.is_a?(Base)
47
-
48
- if all_parts? || other.all_parts?
49
- # Compare only series and number, ignore year, parts, all_parts
50
- return code.series == other.code.series &&
51
- code.number == other.code.number
52
- end
53
-
54
- # Normal full comparison
55
- code == other.code &&
56
- year == other.year &&
57
- language == other.language &&
58
- all_parts == other.all_parts
59
- end
60
-
61
- # Basic string representation (override in subclasses)
62
- def to_s
63
- parts = [publisher, code.to_s]
64
- parts << ":#{year}" if year
65
- parts << "(#{language})" if language
66
- parts << "(規格群)" if all_parts?
67
- parts.join(" ")
68
- end
69
- end
70
- end
71
- end
72
- end
@@ -1,49 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Pubid
4
- module Jis
5
- class Scheme < Pubid::Scheme
6
- class << self
7
- def identifiers
8
- [
9
- Identifiers::Standard,
10
- Identifiers::TechnicalReport,
11
- Identifiers::TechnicalSpecification,
12
- ]
13
- end
14
-
15
- def typed_stages
16
- identifiers.flat_map { |klass| klass::TYPED_STAGES }
17
- end
18
-
19
- def locate_typed_stage_by_abbr(abbr)
20
- abbr = "JIS" if abbr.nil? || abbr.to_s.empty?
21
-
22
- typed_stage = typed_stages.detect do |ts|
23
- ts.abbr.include?(abbr)
24
- end
25
-
26
- unless typed_stage
27
- raise ArgumentError,
28
- "Unknown type abbreviation: '#{abbr}'"
29
- end
30
-
31
- typed_stage
32
- end
33
-
34
- def locate_identifier_klass_by_type_code(type_code)
35
- identifier_klass = identifiers.detect do |klass|
36
- klass.type[:key].to_s == type_code.to_s
37
- end
38
-
39
- unless identifier_klass
40
- raise ArgumentError,
41
- "Unknown type code: #{type_code}"
42
- end
43
-
44
- identifier_klass
45
- end
46
- end
47
- end
48
- end
49
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "lutaml/model"
4
-
5
- module Pubid
6
- module Nist
7
- module Components
8
- # Publisher component for NIST identifiers
9
- # Handles NIST and NBS publishers
10
- class Publisher < Lutaml::Model::Serializable
11
- attribute :publisher, :string
12
-
13
- def to_s
14
- publisher
15
- end
16
-
17
- # Alias for compatibility
18
- def body
19
- publisher
20
- end
21
- end
22
- end
23
- end
24
- end
@@ -1,199 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Pubid
4
- module Nist
5
- # Scheme class for NIST identifier registry
6
- # Single Responsibility: Identifier class registry and series-to-class mapping
7
- class Scheme < Pubid::Scheme
8
- class << self
9
- # Aggregate TYPED_STAGES from all identifier classes
10
- # @return [Array<Components::TypedStage>] all typed stages
11
- def typed_stages
12
- @typed_stages ||= identifiers
13
- .reject { |klass| klass == Identifiers::Base } # Skip Base fallback class
14
- .flat_map(&:typed_stages)
15
- .freeze
16
- end
17
-
18
- # Locate TypedStage by abbreviation
19
- # @param abbr [String, Symbol] the type abbreviation
20
- # @return [Components::TypedStage] the matching typed stage
21
- # @raise [ArgumentError] if abbreviation not found
22
- def locate_typed_stage_by_abbr(abbr)
23
- abbr_str = abbr.to_s.upcase
24
- typed_stages.find do |ts|
25
- ts.abbr.any? { |a| a.to_s.upcase == abbr_str }
26
- end || raise(ArgumentError, "Unknown type abbreviation: #{abbr}")
27
- end
28
-
29
- # Locate identifier class by type code
30
- # @param type_code [String, Symbol] the type code
31
- # @return [Class] the identifier class
32
- # @raise [ArgumentError] if type code not found
33
- def locate_identifier_klass_by_type_code(type_code)
34
- type_str = type_code.to_s
35
- identifiers
36
- .reject { |klass| klass == Identifiers::Base } # Skip Base fallback class
37
- .find do |klass|
38
- klass.typed_stages.any? { |ts| ts.type_code.to_s == type_str }
39
- end || raise(ArgumentError, "Unknown type code: #{type_code}")
40
- end
41
-
42
- # Locate identifier class by series and pattern
43
- # @param parsed_hash [Hash] the parsed identifier data
44
- # @return [Class] the identifier class
45
- def locate_identifier_klass(parsed_hash)
46
- series = parsed_hash[:series]&.to_s
47
-
48
- # Handle compound series that include publisher (both space and dot separated)
49
- if series&.start_with?("NBS ")
50
- simple_series = series.sub("NBS ", "")
51
-
52
- # Check for CIRC supplement
53
- if simple_series == "CIRC"
54
- if has_supplement?(parsed_hash)
55
- return Identifiers::CircularSupplement
56
- else
57
- return Identifiers::Circular
58
- end
59
- end
60
-
61
- # Use simple series for lookup (TYPED_STAGES abbr handles compound forms)
62
- series = simple_series
63
- elsif series&.start_with?("NBS.")
64
- # Handle dot-separated patterns (e.g., "NBS.LCIRC" after preprocessing)
65
- simple_series = series.sub("NBS.", "")
66
-
67
- # Check for LCIRC supplement (dot-separated variant)
68
- if simple_series == "LCIRC"
69
- if has_supplement?(parsed_hash)
70
- return Identifiers::CircularSupplement
71
- else
72
- return Identifiers::LetterCircular
73
- end
74
- end
75
-
76
- # Check for CIRC supplement (dot-separated variant)
77
- if simple_series == "CIRC"
78
- if has_supplement?(parsed_hash)
79
- return Identifiers::CircularSupplement
80
- else
81
- return Identifiers::Circular
82
- end
83
- end
84
-
85
- # Use simple series for lookup
86
- series = simple_series
87
- elsif series&.start_with?("NIST.")
88
- # Handle dot-separated NIST patterns
89
- simple_series = series.sub("NIST.", "")
90
-
91
- # Check for LCIRC supplement (dot-separated variant)
92
- if simple_series == "LCIRC"
93
- if has_supplement?(parsed_hash)
94
- return Identifiers::CircularSupplement
95
- else
96
- return Identifiers::LetterCircular
97
- end
98
- end
99
-
100
- # Use simple series for lookup
101
- series = simple_series
102
- end
103
-
104
- # Check for CS variants (works for both compound "NBS CS" and simple "CS")
105
- if series == "CS"
106
- first_num = parsed_hash[:first_number]
107
-
108
- # Check for CSM (monthly) - v#n# pattern inside first_number hash
109
- if first_num.is_a?(Hash) && first_num[:volume_number] && first_num[:issue_number]
110
- return Identifiers::CommercialStandardsMonthly
111
- end
112
-
113
- # Check for CS-E (emergency) - e-prefix with 3+ digits
114
- # Handle Parslet::Slice by converting to string
115
- first_num_str = first_num.is_a?(String) ? first_num.to_str : first_num.to_s
116
-
117
- # Match e104 or e104 (when "e104-43" is split into first+second)
118
- if /^e\d{3,}/.match?(first_num_str)
119
- return Identifiers::CommercialStandardEmergency
120
- end
121
- end
122
-
123
- # Look up using TYPED_STAGES registry (replaces series_to_class_map)
124
- # This handles simple series, compound series (via abbr array), and all variants
125
- begin
126
- typed_stage = locate_typed_stage_by_abbr(series)
127
- type_code = typed_stage.type_code
128
- locate_identifier_klass_by_type_code(type_code)
129
- rescue ArgumentError
130
- # Fallback to Base for unmapped series (e.g., "AMS", "VTS")
131
- Identifiers::Base
132
- end
133
- end
134
-
135
- # Check if parsed hash has supplement indicators
136
- def has_supplement?(parsed_hash)
137
- parsed_hash[:supplement] ||
138
- parsed_hash[:supplement_date_range] ||
139
- parsed_hash[:supplement_date] ||
140
- parsed_hash[:supplement_slash_year] ||
141
- parsed_hash[:supplement_with_rev]
142
- end
143
-
144
- # All identifier classes
145
- # @return [Array<Class>] list of all identifier classes
146
- def identifiers
147
- @identifiers ||= [
148
- Identifiers::SpecialPublication,
149
- Identifiers::FederalInformationProcessingStandards,
150
- Identifiers::InteragencyReport,
151
- Identifiers::Handbook,
152
- Identifiers::TechnicalNote,
153
- Identifiers::Circular,
154
- Identifiers::CircularSupplement,
155
- Identifiers::CrplReport,
156
- Identifiers::Report,
157
- Identifiers::Monograph,
158
- Identifiers::MiscellaneousPublication,
159
- Identifiers::GrantContractorReport,
160
- Identifiers::Ncstar,
161
- Identifiers::Owmwp,
162
- Identifiers::Nsrds,
163
- Identifiers::LetterCircular,
164
- Identifiers::CommercialStandard,
165
- Identifiers::CommercialStandardEmergency,
166
- Identifiers::CommercialStandardsMonthly,
167
- Identifiers::Base, # Fallback for unmapped series
168
- ].freeze
169
- end
170
-
171
- # Check if series is valid
172
- # @param series_code [String] the series code
173
- # @return [Boolean] true if series is valid
174
- def valid_series?(series_code)
175
- VALID_SERIES.include?(series_code)
176
- end
177
-
178
- # All valid series codes (comprehensive list)
179
- VALID_SERIES = [
180
- # Major series with dedicated classes
181
- "SP", "FIPS", "IR", "HB", "TN",
182
- # Specialized series with dedicated classes
183
- "CIRC", "CRPL", "CS", "CSM",
184
- # Other series (use Base class)
185
- "GCR", "AMS", "BSS", "BMS", "BH", "MONO", "MP",
186
- "NCSTAR", "NSRDS", "CSWP", "VTS", "AI", "OWMWP",
187
- "PC", "RPT", "SIBS", "TIBM", "TTB", "EAB",
188
- "JPCRD", "JRES", "CIS", "HR", "IRPL", "IP",
189
- "LC", "PS", "LCIRC",
190
- # Compound series
191
- "BRPD-CRPL-D", "CRPL-F-A", "CRPL-F-B", "CS-E",
192
- "CSRC Building Block", "CSRC Use Case", "CSRC Book",
193
- "ITL Bulletin", "NIST LC", "NIST PS", "NIST DCI",
194
- "NIST Other", "NSRDS-NBS"
195
- ].freeze
196
- end
197
- end
198
- end
199
- end
@@ -1,46 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Pubid
4
- module Oiml
5
- class Scheme < Pubid::Scheme
6
- class << self
7
- def identifiers
8
- @identifiers ||= [
9
- Identifiers::BasicPublication,
10
- Identifiers::Document,
11
- Identifiers::ExpertReport,
12
- Identifiers::Guide,
13
- Identifiers::Recommendation,
14
- Identifiers::SeminarReport,
15
- Identifiers::Vocabulary,
16
- ].freeze
17
- end
18
-
19
- def supplement_identifiers
20
- @supplement_identifiers ||= [
21
- Identifiers::Amendment,
22
- Identifiers::Annex,
23
- ].freeze
24
- end
25
-
26
- def typed_stages
27
- @typed_stages ||= [].freeze
28
- end
29
-
30
- def supplement_typed_stages
31
- @supplement_typed_stages ||= [].freeze
32
- end
33
-
34
- def locate_typed_stage_by_abbr(_abbr)
35
- raise ArgumentError,
36
- "OIML identifiers do not use typed stages"
37
- end
38
-
39
- def locate_identifier_klass_by_type_code(_type_code)
40
- raise ArgumentError,
41
- "OIML identifiers do not use type codes"
42
- end
43
- end
44
- end
45
- end
46
- end
@@ -1,45 +0,0 @@
1
- require "lutaml/model"
2
- # frozen_string_literal: true
3
-
4
- module Pubid
5
- module Plateau
6
- class Scheme < Lutaml::Model::Serializable
7
- attribute :type, :string
8
- attribute :number, :integer
9
- attribute :annex, :integer, default: -> {}
10
- attribute :edition, :string, default: -> {}
11
-
12
- def to_s
13
- result = "PLATEAU #{type_string} #{formatted_number}"
14
- result += formatted_annex if annex
15
- result += " #{formatted_edition}" if edition
16
- result
17
- end
18
-
19
- private
20
-
21
- def type_string
22
- case type
23
- when "Handbook"
24
- "Handbook"
25
- when "Technical Report"
26
- "Technical Report"
27
- else
28
- type
29
- end
30
- end
31
-
32
- def formatted_number
33
- "#%02d" % number
34
- end
35
-
36
- def formatted_annex
37
- "-#{annex}"
38
- end
39
-
40
- def formatted_edition
41
- "第#{edition}版"
42
- end
43
- end
44
- end
45
- end
@@ -1,73 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "publisher"
4
- require_relative "numbering"
5
- require_relative "date"
6
- require_relative "supplement"
7
- require_relative "stage"
8
- require_relative "language"
9
- require_relative "format"
10
-
11
- module Pubid
12
- module Rendering
13
- module Base
14
- include Pubid::Rendering::Publisher
15
- include Pubid::Rendering::Numbering
16
- include Pubid::Rendering::Date
17
- include Pubid::Rendering::Supplement
18
- include Pubid::Rendering::Stage
19
- include Pubid::Rendering::Language
20
- include Pubid::Rendering::Format
21
-
22
- # Base rendering method to be composed by subclasses
23
- # @param options [Hash] rendering options
24
- # @return [String] formatted identifier string
25
- def render_base(**options)
26
- parts = []
27
-
28
- # Publisher/copublisher
29
- pub = maybe(:publisher)
30
- if pub
31
- parts << render_publisher(pub,
32
- maybe(:copublishers), **options)
33
- end
34
-
35
- # Numbering (number, part, subpart)
36
- num = maybe(:number)
37
- if num
38
- parts << render_numbering(num, maybe(:part),
39
- maybe(:subpart), **options)
40
- end
41
-
42
- # Date
43
- d = maybe(:date)
44
- if d
45
- parts << render_date(d, **options)
46
- end
47
-
48
- # Stage and type
49
- stg = maybe(:stage)
50
- if stg
51
- parts << render_stage(stg, maybe(:type),
52
- has_copublisher: maybe(:copublishers)&.any?, **options)
53
- end
54
-
55
- # Language codes
56
- langs = maybe(:languages)
57
- if langs&.any?
58
- parts << render_languages(langs, **options)
59
- end
60
-
61
- parts.compact.join
62
- end
63
-
64
- private
65
-
66
- def maybe(method_name)
67
- return nil unless self.class.attributes.key?(method_name)
68
-
69
- public_send(method_name)
70
- end
71
- end
72
- end
73
- end