pubid 1.15.18 → 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 (601) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/README.adoc +2041 -53
  4. data/archived-gems/pubid-ccsds/update_codes.yaml +1 -0
  5. data/archived-gems/pubid-iec/stages.yaml +129 -0
  6. data/archived-gems/pubid-iec/update_codes.yaml +67 -0
  7. data/archived-gems/pubid-ieee/update_codes.yaml +104 -0
  8. data/archived-gems/pubid-iso/stages.yaml +106 -0
  9. data/archived-gems/pubid-iso/update_codes.yaml +4 -0
  10. data/archived-gems/pubid-itu/i18n.yaml +13 -0
  11. data/archived-gems/pubid-itu/series.yaml +42 -0
  12. data/archived-gems/pubid-nist/publishers.yaml +6 -0
  13. data/archived-gems/pubid-nist/series.yaml +121 -0
  14. data/archived-gems/pubid-nist/stages.yaml +16 -0
  15. data/archived-gems/pubid-nist/update_codes.yaml +93 -0
  16. data/archived-gems/pubid-plateau/update_codes.yaml +6 -0
  17. data/data/ccsds/update_codes.yaml +1 -0
  18. data/data/iec/update_codes.yaml +67 -0
  19. data/data/ieee/update_codes.yaml +104 -0
  20. data/data/iso/update_codes.yaml +21 -0
  21. data/data/nist/update_codes.yaml +87 -0
  22. data/data/plateau/update_codes.yaml +6 -0
  23. data/lib/pubid/amca/builder.rb +176 -0
  24. data/lib/pubid/amca/identifier.rb +18 -0
  25. data/lib/pubid/amca/identifiers/base.rb +64 -0
  26. data/lib/pubid/amca/identifiers/interpretation.rb +51 -0
  27. data/lib/pubid/amca/identifiers/publication.rb +47 -0
  28. data/lib/pubid/amca/identifiers/standard.rb +22 -0
  29. data/lib/pubid/amca/identifiers.rb +12 -0
  30. data/lib/pubid/amca/parser.rb +153 -0
  31. data/lib/pubid/amca/scheme.rb +16 -0
  32. data/lib/pubid/amca/single_identifier.rb +33 -0
  33. data/lib/pubid/amca/urn_generator.rb +50 -0
  34. data/lib/pubid/amca.rb +26 -0
  35. data/lib/pubid/ansi/builder.rb +52 -0
  36. data/lib/pubid/ansi/identifier.rb +13 -0
  37. data/lib/pubid/ansi/identifiers/american_national_standard.rb +12 -0
  38. data/lib/pubid/ansi/identifiers/standard.rb +16 -0
  39. data/lib/pubid/ansi/identifiers.rb +11 -0
  40. data/lib/pubid/ansi/parser.rb +91 -0
  41. data/lib/pubid/ansi/scheme.rb +15 -0
  42. data/lib/pubid/ansi/single_identifier.rb +45 -0
  43. data/lib/pubid/ansi/urn_generator.rb +76 -0
  44. data/lib/pubid/ansi.rb +27 -0
  45. data/lib/pubid/api/builder.rb +85 -0
  46. data/lib/pubid/api/components/code.rb +9 -0
  47. data/lib/pubid/api/identifier.rb +21 -0
  48. data/lib/pubid/api/identifiers/base.rb +24 -0
  49. data/lib/pubid/api/identifiers/bulletin.rb +15 -0
  50. data/lib/pubid/api/identifiers/continuous_operations_standard.rb +15 -0
  51. data/lib/pubid/api/identifiers/mpms.rb +44 -0
  52. data/lib/pubid/api/identifiers/publication.rb +15 -0
  53. data/lib/pubid/api/identifiers/recommended_practice.rb +15 -0
  54. data/lib/pubid/api/identifiers/specification.rb +15 -0
  55. data/lib/pubid/api/identifiers/standard.rb +15 -0
  56. data/lib/pubid/api/identifiers/technical_report.rb +15 -0
  57. data/lib/pubid/api/identifiers/typeless_standard.rb +27 -0
  58. data/lib/pubid/api/parser.rb +140 -0
  59. data/lib/pubid/api/scheme.rb +66 -0
  60. data/lib/pubid/api/single_identifier.rb +46 -0
  61. data/lib/pubid/api/urn_generator.rb +41 -0
  62. data/lib/pubid/api.rb +17 -0
  63. data/lib/pubid/ashrae/builder.rb +498 -0
  64. data/lib/pubid/ashrae/identifier.rb +18 -0
  65. data/lib/pubid/ashrae/identifiers/addenda_package.rb +46 -0
  66. data/lib/pubid/ashrae/identifiers/addendum.rb +55 -0
  67. data/lib/pubid/ashrae/identifiers/base.rb +23 -0
  68. data/lib/pubid/ashrae/identifiers/combined_addenda.rb +51 -0
  69. data/lib/pubid/ashrae/identifiers/errata.rb +40 -0
  70. data/lib/pubid/ashrae/identifiers/guideline.rb +38 -0
  71. data/lib/pubid/ashrae/identifiers/interpretation.rb +39 -0
  72. data/lib/pubid/ashrae/identifiers/standard.rb +38 -0
  73. data/lib/pubid/ashrae/identifiers.rb +16 -0
  74. data/lib/pubid/ashrae/parser.rb +724 -0
  75. data/lib/pubid/ashrae/scheme.rb +53 -0
  76. data/lib/pubid/ashrae/single_identifier.rb +23 -0
  77. data/lib/pubid/ashrae/supplement_identifier.rb +23 -0
  78. data/lib/pubid/ashrae/urn_generator.rb +59 -0
  79. data/lib/pubid/ashrae.rb +21 -0
  80. data/lib/pubid/asme/builder.rb +153 -0
  81. data/lib/pubid/asme/components/code.rb +18 -0
  82. data/lib/pubid/asme/identifier.rb +15 -0
  83. data/lib/pubid/asme/identifiers/base.rb +70 -0
  84. data/lib/pubid/asme/identifiers/standard.rb +12 -0
  85. data/lib/pubid/asme/identifiers.rb +10 -0
  86. data/lib/pubid/asme/parser.rb +308 -0
  87. data/lib/pubid/asme/scheme.rb +37 -0
  88. data/lib/pubid/asme/single_identifier.rb +29 -0
  89. data/lib/pubid/asme/urn_generator.rb +133 -0
  90. data/lib/pubid/asme.rb +21 -0
  91. data/lib/pubid/astm/builder.rb +159 -0
  92. data/lib/pubid/astm/components/code.rb +33 -0
  93. data/lib/pubid/astm/identifier.rb +15 -0
  94. data/lib/pubid/astm/identifiers/adjunct.rb +21 -0
  95. data/lib/pubid/astm/identifiers/base.rb +13 -0
  96. data/lib/pubid/astm/identifiers/data_series.rb +25 -0
  97. data/lib/pubid/astm/identifiers/iso_dual_published.rb +74 -0
  98. data/lib/pubid/astm/identifiers/manual.rb +40 -0
  99. data/lib/pubid/astm/identifiers/monograph.rb +25 -0
  100. data/lib/pubid/astm/identifiers/research_report.rb +18 -0
  101. data/lib/pubid/astm/identifiers/standard.rb +52 -0
  102. data/lib/pubid/astm/identifiers/technical_report.rb +23 -0
  103. data/lib/pubid/astm/identifiers/work_in_progress.rb +21 -0
  104. data/lib/pubid/astm/parser.rb +244 -0
  105. data/lib/pubid/astm/scheme.rb +55 -0
  106. data/lib/pubid/astm/single_identifier.rb +25 -0
  107. data/lib/pubid/astm/urn_generator.rb +99 -0
  108. data/lib/pubid/astm.rb +38 -0
  109. data/lib/pubid/bsi/builder.rb +1483 -0
  110. data/lib/pubid/bsi/components/code.rb +11 -0
  111. data/lib/pubid/bsi/components/date.rb +11 -0
  112. data/lib/pubid/bsi/components/publisher.rb +11 -0
  113. data/lib/pubid/bsi/components/type.rb +11 -0
  114. data/lib/pubid/bsi/identifier.rb +27 -0
  115. data/lib/pubid/bsi/identifiers/addendum_document.rb +64 -0
  116. data/lib/pubid/bsi/identifiers/adopted_european_norm.rb +95 -0
  117. data/lib/pubid/bsi/identifiers/adopted_international_standard.rb +82 -0
  118. data/lib/pubid/bsi/identifiers/aerospace_standard.rb +118 -0
  119. data/lib/pubid/bsi/identifiers/amendment.rb +40 -0
  120. data/lib/pubid/bsi/identifiers/base.rb +11 -0
  121. data/lib/pubid/bsi/identifiers/british_industrial_practice.rb +27 -0
  122. data/lib/pubid/bsi/identifiers/british_standard.rb +33 -0
  123. data/lib/pubid/bsi/identifiers/bundled_identifier.rb +114 -0
  124. data/lib/pubid/bsi/identifiers/committee_document.rb +51 -0
  125. data/lib/pubid/bsi/identifiers/consolidated_identifier.rb +152 -0
  126. data/lib/pubid/bsi/identifiers/corrigendum.rb +28 -0
  127. data/lib/pubid/bsi/identifiers/detailed_specification.rb +69 -0
  128. data/lib/pubid/bsi/identifiers/disc.rb +56 -0
  129. data/lib/pubid/bsi/identifiers/draft_document.rb +71 -0
  130. data/lib/pubid/bsi/identifiers/electronic_book.rb +52 -0
  131. data/lib/pubid/bsi/identifiers/expert_commentary.rb +47 -0
  132. data/lib/pubid/bsi/identifiers/explanatory_supplement.rb +82 -0
  133. data/lib/pubid/bsi/identifiers/flex.rb +61 -0
  134. data/lib/pubid/bsi/identifiers/handbook.rb +39 -0
  135. data/lib/pubid/bsi/identifiers/index.rb +62 -0
  136. data/lib/pubid/bsi/identifiers/method.rb +76 -0
  137. data/lib/pubid/bsi/identifiers/national_annex.rb +73 -0
  138. data/lib/pubid/bsi/identifiers/practice_guide.rb +27 -0
  139. data/lib/pubid/bsi/identifiers/publicly_available_specification.rb +79 -0
  140. data/lib/pubid/bsi/identifiers/published_document.rb +79 -0
  141. data/lib/pubid/bsi/identifiers/section.rb +62 -0
  142. data/lib/pubid/bsi/identifiers/set.rb +46 -0
  143. data/lib/pubid/bsi/identifiers/standalone_amendment.rb +40 -0
  144. data/lib/pubid/bsi/identifiers/supplement_document.rb +51 -0
  145. data/lib/pubid/bsi/identifiers/supplementary_index.rb +81 -0
  146. data/lib/pubid/bsi/identifiers/technical_specification.rb +79 -0
  147. data/lib/pubid/bsi/identifiers/test_method.rb +67 -0
  148. data/lib/pubid/bsi/identifiers/value_added_publication.rb +52 -0
  149. data/lib/pubid/bsi/identifiers.rb +52 -0
  150. data/lib/pubid/bsi/model.rb +196 -0
  151. data/lib/pubid/bsi/parser.rb +659 -0
  152. data/lib/pubid/bsi/scheme.rb +243 -0
  153. data/lib/pubid/bsi/single_identifier.rb +129 -0
  154. data/lib/pubid/bsi/urn_generator.rb +84 -0
  155. data/lib/pubid/bsi.rb +32 -0
  156. data/lib/pubid/builder/base.rb +138 -0
  157. data/lib/pubid/bundled_identifier.rb +126 -0
  158. data/lib/pubid/ccsds/builder.rb +56 -0
  159. data/lib/pubid/ccsds/identifier.rb +16 -0
  160. data/lib/pubid/ccsds/identifiers/base.rb +78 -0
  161. data/lib/pubid/ccsds/identifiers/base_BASE_88929.rb +70 -0
  162. data/lib/pubid/ccsds/identifiers/corrigendum.rb +39 -0
  163. data/lib/pubid/ccsds/identifiers.rb +10 -0
  164. data/lib/pubid/ccsds/parser.rb +71 -0
  165. data/lib/pubid/ccsds/scheme.rb +57 -0
  166. data/lib/pubid/ccsds/single_identifier.rb +74 -0
  167. data/lib/pubid/ccsds/supplement_identifier.rb +33 -0
  168. data/lib/pubid/ccsds/urn_generator.rb +115 -0
  169. data/lib/pubid/ccsds.rb +21 -0
  170. data/lib/pubid/cen_cenelec/builder.rb +330 -0
  171. data/lib/pubid/cen_cenelec/identifier.rb +15 -0
  172. data/lib/pubid/cen_cenelec/identifiers/adopted_european_norm.rb +40 -0
  173. data/lib/pubid/cen_cenelec/identifiers/amendment.rb +29 -0
  174. data/lib/pubid/cen_cenelec/identifiers/base.rb +75 -0
  175. data/lib/pubid/cen_cenelec/identifiers/cen_report.rb +28 -0
  176. data/lib/pubid/cen_cenelec/identifiers/cen_workshop_agreement.rb +27 -0
  177. data/lib/pubid/cen_cenelec/identifiers/cenelec_harmonization_document.rb +28 -0
  178. data/lib/pubid/cen_cenelec/identifiers/consolidated_identifier.rb +61 -0
  179. data/lib/pubid/cen_cenelec/identifiers/corrigendum.rb +35 -0
  180. data/lib/pubid/cen_cenelec/identifiers/european_norm.rb +41 -0
  181. data/lib/pubid/cen_cenelec/identifiers/european_prestandard.rb +37 -0
  182. data/lib/pubid/cen_cenelec/identifiers/european_specification.rb +28 -0
  183. data/lib/pubid/cen_cenelec/identifiers/fragment.rb +22 -0
  184. data/lib/pubid/cen_cenelec/identifiers/guide.rb +27 -0
  185. data/lib/pubid/cen_cenelec/identifiers/harmonization_document.rb +27 -0
  186. data/lib/pubid/cen_cenelec/identifiers/technical_report.rb +27 -0
  187. data/lib/pubid/cen_cenelec/identifiers/technical_specification.rb +35 -0
  188. data/lib/pubid/cen_cenelec/identifiers.rb +32 -0
  189. data/lib/pubid/cen_cenelec/parser.rb +144 -0
  190. data/lib/pubid/cen_cenelec/scheme.rb +164 -0
  191. data/lib/pubid/cen_cenelec/single_identifier.rb +130 -0
  192. data/lib/pubid/cen_cenelec/supplement_identifier.rb +48 -0
  193. data/lib/pubid/cen_cenelec/urn_generator.rb +129 -0
  194. data/lib/pubid/cen_cenelec.rb +21 -0
  195. data/lib/pubid/cie/builder.rb +399 -0
  196. data/lib/pubid/cie/components/code.rb +72 -0
  197. data/lib/pubid/cie/components/language.rb +58 -0
  198. data/lib/pubid/cie/identifier.rb +18 -0
  199. data/lib/pubid/cie/identifiers/bundle.rb +20 -0
  200. data/lib/pubid/cie/identifiers/conference.rb +32 -0
  201. data/lib/pubid/cie/identifiers/corrigendum.rb +40 -0
  202. data/lib/pubid/cie/identifiers/dual_published.rb +41 -0
  203. data/lib/pubid/cie/identifiers/identical.rb +64 -0
  204. data/lib/pubid/cie/identifiers/joint_published.rb +52 -0
  205. data/lib/pubid/cie/identifiers/standard.rb +58 -0
  206. data/lib/pubid/cie/identifiers/supplement.rb +45 -0
  207. data/lib/pubid/cie/identifiers/tutorial_bundle.rb +20 -0
  208. data/lib/pubid/cie/identifiers.rb +17 -0
  209. data/lib/pubid/cie/parser.rb +347 -0
  210. data/lib/pubid/cie/scheme.rb +64 -0
  211. data/lib/pubid/cie/single_identifier.rb +30 -0
  212. data/lib/pubid/cie/supplement_identifier.rb +26 -0
  213. data/lib/pubid/cie/urn_generator.rb +123 -0
  214. data/lib/pubid/cie.rb +28 -0
  215. data/lib/pubid/components/code.rb +33 -0
  216. data/lib/pubid/components/date.rb +49 -0
  217. data/lib/pubid/components/edition.rb +32 -0
  218. data/lib/pubid/components/language.rb +37 -0
  219. data/lib/pubid/components/locality.rb +10 -0
  220. data/lib/pubid/components/publisher.rb +36 -0
  221. data/lib/pubid/components/stage.rb +54 -0
  222. data/lib/pubid/components/type.rb +58 -0
  223. data/lib/pubid/components/typed_stage.rb +55 -0
  224. data/lib/pubid/components.rb +15 -0
  225. data/lib/pubid/core/pattern_doc_generator.rb +272 -0
  226. data/lib/pubid/core/update_codes.rb +77 -0
  227. data/lib/pubid/core.rb +8 -0
  228. data/lib/pubid/csa/builder.rb +671 -0
  229. data/lib/pubid/csa/components/code.rb +9 -0
  230. data/lib/pubid/csa/components.rb +9 -0
  231. data/lib/pubid/csa/composite_identifier.rb +27 -0
  232. data/lib/pubid/csa/identifier.rb +457 -0
  233. data/lib/pubid/csa/identifiers/base.rb +133 -0
  234. data/lib/pubid/csa/identifiers/bundled.rb +125 -0
  235. data/lib/pubid/csa/identifiers/canadian_adopted.rb +82 -0
  236. data/lib/pubid/csa/identifiers/cec.rb +129 -0
  237. data/lib/pubid/csa/identifiers/combined.rb +130 -0
  238. data/lib/pubid/csa/identifiers/csa_adopted.rb +78 -0
  239. data/lib/pubid/csa/identifiers/package.rb +65 -0
  240. data/lib/pubid/csa/identifiers/series.rb +127 -0
  241. data/lib/pubid/csa/identifiers/standard.rb +10 -0
  242. data/lib/pubid/csa/identifiers.rb +17 -0
  243. data/lib/pubid/csa/parser.rb +445 -0
  244. data/lib/pubid/csa/scheme.rb +44 -0
  245. data/lib/pubid/csa/single_identifier.rb +30 -0
  246. data/lib/pubid/csa/urn_generator.rb +80 -0
  247. data/lib/pubid/csa/wrapper_identifier.rb +31 -0
  248. data/lib/pubid/csa.rb +25 -0
  249. data/lib/pubid/etsi/builder.rb +133 -0
  250. data/lib/pubid/etsi/components/code.rb +42 -0
  251. data/lib/pubid/etsi/components/version.rb +37 -0
  252. data/lib/pubid/etsi/components.rb +10 -0
  253. data/lib/pubid/etsi/identifier.rb +14 -0
  254. data/lib/pubid/etsi/identifiers/amendment.rb +15 -0
  255. data/lib/pubid/etsi/identifiers/base.rb +38 -0
  256. data/lib/pubid/etsi/identifiers/corrigendum.rb +15 -0
  257. data/lib/pubid/etsi/identifiers/etsi_standard.rb +19 -0
  258. data/lib/pubid/etsi/identifiers/supplement_identifier.rb +91 -0
  259. data/lib/pubid/etsi/identifiers.rb +14 -0
  260. data/lib/pubid/etsi/parser.rb +133 -0
  261. data/lib/pubid/etsi/scheme.rb +42 -0
  262. data/lib/pubid/etsi/urn_generator.rb +76 -0
  263. data/lib/pubid/etsi.rb +21 -0
  264. data/lib/pubid/export/auditor.rb +89 -0
  265. data/lib/pubid/export/data_class_exporter.rb +59 -0
  266. data/lib/pubid/export/exporter.rb +74 -0
  267. data/lib/pubid/export/flavor_exporter.rb +402 -0
  268. data/lib/pubid/export/ieee_exporter.rb +78 -0
  269. data/lib/pubid/export/itu_exporter.rb +66 -0
  270. data/lib/pubid/export/nist_exporter.rb +64 -0
  271. data/lib/pubid/export/registry_exporter.rb +90 -0
  272. data/lib/pubid/export/result.rb +97 -0
  273. data/lib/pubid/export/scheme_exporter.rb +70 -0
  274. data/lib/pubid/export.rb +18 -0
  275. data/lib/pubid/format_detector.rb +16 -0
  276. data/lib/pubid/format_registry.rb +42 -0
  277. data/lib/pubid/identifier.rb +235 -0
  278. data/lib/pubid/identifier_metadata.rb +148 -0
  279. data/lib/pubid/identifier_registry.rb +198 -0
  280. data/lib/pubid/idf/builder.rb +82 -0
  281. data/lib/pubid/idf/identifier.rb +69 -0
  282. data/lib/pubid/idf/identifiers/amendment.rb +27 -0
  283. data/lib/pubid/idf/identifiers/corrigendum.rb +27 -0
  284. data/lib/pubid/idf/identifiers/international_standard.rb +123 -0
  285. data/lib/pubid/idf/identifiers/reviewed_method.rb +100 -0
  286. data/lib/pubid/idf/identifiers.rb +13 -0
  287. data/lib/pubid/idf/parser.rb +143 -0
  288. data/lib/pubid/idf/scheme.rb +61 -0
  289. data/lib/pubid/idf/single_identifier.rb +19 -0
  290. data/lib/pubid/idf/supplement_identifier.rb +43 -0
  291. data/lib/pubid/idf/urn_generator.rb +84 -0
  292. data/lib/pubid/idf.rb +25 -0
  293. data/lib/pubid/iec/builder.rb +457 -0
  294. data/lib/pubid/iec/components/code.rb +59 -0
  295. data/lib/pubid/iec/components/consolidated_amendment.rb +59 -0
  296. data/lib/pubid/iec/components/publisher.rb +35 -0
  297. data/lib/pubid/iec/components/sheet.rb +32 -0
  298. data/lib/pubid/iec/components/trf_info.rb +38 -0
  299. data/lib/pubid/iec/components/vap_suffix.rb +41 -0
  300. data/lib/pubid/iec/identifier.rb +21 -0
  301. data/lib/pubid/iec/identifiers/amendment.rb +94 -0
  302. data/lib/pubid/iec/identifiers/base.rb +78 -0
  303. data/lib/pubid/iec/identifiers/component_specification.rb +39 -0
  304. data/lib/pubid/iec/identifiers/conformity_assessment.rb +39 -0
  305. data/lib/pubid/iec/identifiers/consolidated_identifier.rb +86 -0
  306. data/lib/pubid/iec/identifiers/corrigendum.rb +94 -0
  307. data/lib/pubid/iec/identifiers/fragment_identifier.rb +141 -0
  308. data/lib/pubid/iec/identifiers/guide.rb +104 -0
  309. data/lib/pubid/iec/identifiers/international_standard.rb +147 -0
  310. data/lib/pubid/iec/identifiers/interpretation_sheet.rb +104 -0
  311. data/lib/pubid/iec/identifiers/operational_document.rb +39 -0
  312. data/lib/pubid/iec/identifiers/publicly_available_specification.rb +101 -0
  313. data/lib/pubid/iec/identifiers/sheet_identifier.rb +66 -0
  314. data/lib/pubid/iec/identifiers/societal_technology_trend_report.rb +40 -0
  315. data/lib/pubid/iec/identifiers/systems_reference_document.rb +40 -0
  316. data/lib/pubid/iec/identifiers/technical_report.rb +132 -0
  317. data/lib/pubid/iec/identifiers/technical_specification.rb +132 -0
  318. data/lib/pubid/iec/identifiers/technology_report.rb +39 -0
  319. data/lib/pubid/iec/identifiers/test_report_form.rb +78 -0
  320. data/lib/pubid/iec/identifiers/vap_identifier.rb +77 -0
  321. data/lib/pubid/iec/identifiers/white_paper.rb +39 -0
  322. data/lib/pubid/iec/identifiers/working_document.rb +96 -0
  323. data/lib/pubid/iec/parser.rb +412 -0
  324. data/lib/pubid/iec/rendering_style.rb +113 -0
  325. data/lib/pubid/iec/scheme.rb +71 -0
  326. data/lib/pubid/iec/single_identifier.rb +80 -0
  327. data/lib/pubid/iec/supplement_identifier.rb +161 -0
  328. data/lib/pubid/iec/urn_generator.rb +193 -0
  329. data/lib/pubid/iec/urn_parser.rb +289 -0
  330. data/lib/pubid/iec.rb +85 -0
  331. data/lib/pubid/ieee/aiee/builder.rb +71 -0
  332. data/lib/pubid/ieee/aiee/identifier.rb +105 -0
  333. data/lib/pubid/ieee/aiee/parser.rb +130 -0
  334. data/lib/pubid/ieee/aiee.rb +11 -0
  335. data/lib/pubid/ieee/builder.rb +1237 -0
  336. data/lib/pubid/ieee/components/code.rb +102 -0
  337. data/lib/pubid/ieee/components/draft.rb +93 -0
  338. data/lib/pubid/ieee/components/relationship.rb +157 -0
  339. data/lib/pubid/ieee/components/typed_stage.rb +100 -0
  340. data/lib/pubid/ieee/identifier.rb +13 -0
  341. data/lib/pubid/ieee/identifiers/adopted_standard.rb +33 -0
  342. data/lib/pubid/ieee/identifiers/base.rb +591 -0
  343. data/lib/pubid/ieee/identifiers/conformance_identifier.rb +35 -0
  344. data/lib/pubid/ieee/identifiers/corrigendum.rb +37 -0
  345. data/lib/pubid/ieee/identifiers/csa_dual_published.rb +51 -0
  346. data/lib/pubid/ieee/identifiers/dual_identifier.rb +18 -0
  347. data/lib/pubid/ieee/identifiers/dual_published.rb +28 -0
  348. data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +27 -0
  349. data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +34 -0
  350. data/lib/pubid/ieee/identifiers/joint_development.rb +172 -0
  351. data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +51 -0
  352. data/lib/pubid/ieee/identifiers/nesc/base.rb +56 -0
  353. data/lib/pubid/ieee/identifiers/nesc/draft.rb +28 -0
  354. data/lib/pubid/ieee/identifiers/nesc/handbook.rb +32 -0
  355. data/lib/pubid/ieee/identifiers/nesc/redline.rb +26 -0
  356. data/lib/pubid/ieee/identifiers/nesc/standard.rb +26 -0
  357. data/lib/pubid/ieee/identifiers/nesc.rb +15 -0
  358. data/lib/pubid/ieee/identifiers/parenthetical_identifier.rb +20 -0
  359. data/lib/pubid/ieee/identifiers/project_draft_identifier.rb +26 -0
  360. data/lib/pubid/ieee/identifiers/redlined_standard.rb +33 -0
  361. data/lib/pubid/ieee/identifiers/si_standard.rb +73 -0
  362. data/lib/pubid/ieee/identifiers/standard.rb +41 -0
  363. data/lib/pubid/ieee/identifiers/supplement_identifier.rb +23 -0
  364. data/lib/pubid/ieee/identifiers.rb +33 -0
  365. data/lib/pubid/ieee/ire/builder.rb +61 -0
  366. data/lib/pubid/ieee/ire/identifier.rb +58 -0
  367. data/lib/pubid/ieee/ire/parser.rb +91 -0
  368. data/lib/pubid/ieee/ire.rb +11 -0
  369. data/lib/pubid/ieee/nesc/builder.rb +101 -0
  370. data/lib/pubid/ieee/nesc/parser.rb +154 -0
  371. data/lib/pubid/ieee/nesc.rb +10 -0
  372. data/lib/pubid/ieee/parser.rb +1226 -0
  373. data/lib/pubid/ieee/scheme.rb +90 -0
  374. data/lib/pubid/ieee/typed_stages.rb +172 -0
  375. data/lib/pubid/ieee/urn_generator.rb +188 -0
  376. data/lib/pubid/ieee.rb +32 -0
  377. data/lib/pubid/ieee_debug.rb +31 -0
  378. data/lib/pubid/iho/builder.rb +37 -0
  379. data/lib/pubid/iho/identifier.rb +19 -0
  380. data/lib/pubid/iho/identifiers/base.rb +41 -0
  381. data/lib/pubid/iho/identifiers/bibliographic.rb +20 -0
  382. data/lib/pubid/iho/identifiers/circular_letter.rb +19 -0
  383. data/lib/pubid/iho/identifiers/miscellaneous.rb +20 -0
  384. data/lib/pubid/iho/identifiers/publication.rb +19 -0
  385. data/lib/pubid/iho/identifiers/standard.rb +19 -0
  386. data/lib/pubid/iho/identifiers.rb +14 -0
  387. data/lib/pubid/iho/parser.rb +68 -0
  388. data/lib/pubid/iho/scheme.rb +29 -0
  389. data/lib/pubid/iho/urn_generator.rb +29 -0
  390. data/lib/pubid/iho.rb +21 -0
  391. data/lib/pubid/iso/builder.rb +305 -0
  392. data/lib/pubid/iso/bundled_identifier.rb +85 -0
  393. data/lib/pubid/iso/combined_identifier.rb +22 -0
  394. data/lib/pubid/iso/components/code.rb +36 -0
  395. data/lib/pubid/iso/components/publisher.rb +60 -0
  396. data/lib/pubid/iso/components.rb +12 -0
  397. data/lib/pubid/iso/format_resolver.rb +45 -0
  398. data/lib/pubid/iso/identifier.rb +69 -0
  399. data/lib/pubid/iso/identifiers/addendum.rb +104 -0
  400. data/lib/pubid/iso/identifiers/amendment.rb +128 -0
  401. data/lib/pubid/iso/identifiers/base.rb +115 -0
  402. data/lib/pubid/iso/identifiers/corrigendum.rb +108 -0
  403. data/lib/pubid/iso/identifiers/data.rb +76 -0
  404. data/lib/pubid/iso/identifiers/directives.rb +59 -0
  405. data/lib/pubid/iso/identifiers/directives_supplement.rb +119 -0
  406. data/lib/pubid/iso/identifiers/extract.rb +30 -0
  407. data/lib/pubid/iso/identifiers/guide.rb +100 -0
  408. data/lib/pubid/iso/identifiers/international_standard.rb +168 -0
  409. data/lib/pubid/iso/identifiers/international_standardized_profile.rb +94 -0
  410. data/lib/pubid/iso/identifiers/international_workshop_agreement.rb +89 -0
  411. data/lib/pubid/iso/identifiers/pas.rb +93 -0
  412. data/lib/pubid/iso/identifiers/recommendation.rb +45 -0
  413. data/lib/pubid/iso/identifiers/supplement.rb +87 -0
  414. data/lib/pubid/iso/identifiers/tc_document.rb +108 -0
  415. data/lib/pubid/iso/identifiers/technical_report.rb +103 -0
  416. data/lib/pubid/iso/identifiers/technical_specification.rb +102 -0
  417. data/lib/pubid/iso/identifiers/technology_trends_assessments.rb +95 -0
  418. data/lib/pubid/iso/identifiers.rb +33 -0
  419. data/lib/pubid/iso/parser.rb +510 -0
  420. data/lib/pubid/iso/rendering_style.rb +120 -0
  421. data/lib/pubid/iso/scheme.rb +187 -0
  422. data/lib/pubid/iso/single_identifier.rb +61 -0
  423. data/lib/pubid/iso/supplement_identifier.rb +27 -0
  424. data/lib/pubid/iso/urn_generator.rb +412 -0
  425. data/lib/pubid/iso/urn_parser.rb +423 -0
  426. data/lib/pubid/iso/utilities.rb +86 -0
  427. data/lib/pubid/iso.rb +50 -0
  428. data/lib/pubid/itu/builder.rb +171 -0
  429. data/lib/pubid/itu/components/code.rb +39 -0
  430. data/lib/pubid/itu/components/sector.rb +35 -0
  431. data/lib/pubid/itu/components/series.rb +29 -0
  432. data/lib/pubid/itu/i18n.rb +9 -0
  433. data/lib/pubid/itu/i18n.yaml +30 -0
  434. data/lib/pubid/itu/identifier.rb +53 -0
  435. data/lib/pubid/itu/identifiers/amendment.rb +43 -0
  436. data/lib/pubid/itu/identifiers/annex.rb +74 -0
  437. data/lib/pubid/itu/identifiers/base.rb +154 -0
  438. data/lib/pubid/itu/identifiers/combined_identifier.rb +47 -0
  439. data/lib/pubid/itu/identifiers/corrigendum.rb +44 -0
  440. data/lib/pubid/itu/identifiers/recommendation.rb +16 -0
  441. data/lib/pubid/itu/identifiers/special_publication.rb +31 -0
  442. data/lib/pubid/itu/identifiers/supplement.rb +46 -0
  443. data/lib/pubid/itu/identifiers.rb +16 -0
  444. data/lib/pubid/itu/model.rb +111 -0
  445. data/lib/pubid/itu/parser.rb +225 -0
  446. data/lib/pubid/itu/scheme.rb +174 -0
  447. data/lib/pubid/itu/urn_generator.rb +105 -0
  448. data/lib/pubid/itu.rb +22 -0
  449. data/lib/pubid/jcgm/builder.rb +88 -0
  450. data/lib/pubid/jcgm/components/publisher.rb +20 -0
  451. data/lib/pubid/jcgm/components.rb +9 -0
  452. data/lib/pubid/jcgm/identifier.rb +11 -0
  453. data/lib/pubid/jcgm/identifiers/amendment.rb +35 -0
  454. data/lib/pubid/jcgm/identifiers/guide.rb +21 -0
  455. data/lib/pubid/jcgm/identifiers/gum_guide.rb +51 -0
  456. data/lib/pubid/jcgm/identifiers.rb +11 -0
  457. data/lib/pubid/jcgm/parser.rb +84 -0
  458. data/lib/pubid/jcgm/scheme.rb +60 -0
  459. data/lib/pubid/jcgm/single_identifier.rb +48 -0
  460. data/lib/pubid/jcgm/supplement_identifier.rb +16 -0
  461. data/lib/pubid/jcgm/urn_generator.rb +110 -0
  462. data/lib/pubid/jcgm.rb +31 -0
  463. data/lib/pubid/jis/builder.rb +124 -0
  464. data/lib/pubid/jis/components/code.rb +59 -0
  465. data/lib/pubid/jis/components.rb +9 -0
  466. data/lib/pubid/jis/identifier.rb +18 -0
  467. data/lib/pubid/jis/identifiers/amendment.rb +16 -0
  468. data/lib/pubid/jis/identifiers/base.rb +72 -0
  469. data/lib/pubid/jis/identifiers/explanation.rb +22 -0
  470. data/lib/pubid/jis/identifiers/japanese_industrial_standard.rb +16 -0
  471. data/lib/pubid/jis/identifiers/standard.rb +27 -0
  472. data/lib/pubid/jis/identifiers/technical_report.rb +31 -0
  473. data/lib/pubid/jis/identifiers/technical_specification.rb +31 -0
  474. data/lib/pubid/jis/identifiers.rb +17 -0
  475. data/lib/pubid/jis/parser.rb +109 -0
  476. data/lib/pubid/jis/scheme.rb +49 -0
  477. data/lib/pubid/jis/single_identifier.rb +37 -0
  478. data/lib/pubid/jis/supplement_identifier.rb +47 -0
  479. data/lib/pubid/jis/urn_generator.rb +25 -0
  480. data/lib/pubid/jis.rb +23 -0
  481. data/lib/pubid/lutaml/no_store_registration.rb +30 -0
  482. data/lib/pubid/nist/builder.rb +2100 -0
  483. data/lib/pubid/nist/components/code.rb +38 -0
  484. data/lib/pubid/nist/components/edition.rb +118 -0
  485. data/lib/pubid/nist/components/issue_number.rb +28 -0
  486. data/lib/pubid/nist/components/part.rb +77 -0
  487. data/lib/pubid/nist/components/publisher.rb +24 -0
  488. data/lib/pubid/nist/components/stage.rb +53 -0
  489. data/lib/pubid/nist/components/supplement.rb +121 -0
  490. data/lib/pubid/nist/components/translation.rb +42 -0
  491. data/lib/pubid/nist/components/update.rb +103 -0
  492. data/lib/pubid/nist/components/version.rb +35 -0
  493. data/lib/pubid/nist/components/volume.rb +32 -0
  494. data/lib/pubid/nist/components.rb +19 -0
  495. data/lib/pubid/nist/configuration.rb +77 -0
  496. data/lib/pubid/nist/identifiers/base.rb +499 -0
  497. data/lib/pubid/nist/identifiers/circular.rb +68 -0
  498. data/lib/pubid/nist/identifiers/circular_supplement.rb +50 -0
  499. data/lib/pubid/nist/identifiers/commercial_standard.rb +41 -0
  500. data/lib/pubid/nist/identifiers/commercial_standard_emergency.rb +56 -0
  501. data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +56 -0
  502. data/lib/pubid/nist/identifiers/crpl_report.rb +135 -0
  503. data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +94 -0
  504. data/lib/pubid/nist/identifiers/grant_contractor_report.rb +35 -0
  505. data/lib/pubid/nist/identifiers/handbook.rb +50 -0
  506. data/lib/pubid/nist/identifiers/internal_report.rb +56 -0
  507. data/lib/pubid/nist/identifiers/letter_circular.rb +45 -0
  508. data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +65 -0
  509. data/lib/pubid/nist/identifiers/monograph.rb +69 -0
  510. data/lib/pubid/nist/identifiers/ncstar.rb +41 -0
  511. data/lib/pubid/nist/identifiers/nsrds.rb +41 -0
  512. data/lib/pubid/nist/identifiers/owmwp.rb +35 -0
  513. data/lib/pubid/nist/identifiers/report.rb +68 -0
  514. data/lib/pubid/nist/identifiers/special_publication.rb +36 -0
  515. data/lib/pubid/nist/identifiers/technical_note.rb +90 -0
  516. data/lib/pubid/nist/identifiers.rb +33 -0
  517. data/lib/pubid/nist/parser.rb +1084 -0
  518. data/lib/pubid/nist/scheme.rb +199 -0
  519. data/lib/pubid/nist/supplement_identifier.rb +83 -0
  520. data/lib/pubid/nist/urn_generator.rb +127 -0
  521. data/lib/pubid/nist.rb +36 -0
  522. data/lib/pubid/oiml/builder.rb +189 -0
  523. data/lib/pubid/oiml/components/code.rb +20 -0
  524. data/lib/pubid/oiml/components.rb +9 -0
  525. data/lib/pubid/oiml/identifier.rb +11 -0
  526. data/lib/pubid/oiml/identifiers/amendment.rb +13 -0
  527. data/lib/pubid/oiml/identifiers/annex.rb +62 -0
  528. data/lib/pubid/oiml/identifiers/base.rb +36 -0
  529. data/lib/pubid/oiml/identifiers/basic_publication.rb +13 -0
  530. data/lib/pubid/oiml/identifiers/document.rb +13 -0
  531. data/lib/pubid/oiml/identifiers/expert_report.rb +13 -0
  532. data/lib/pubid/oiml/identifiers/guide.rb +13 -0
  533. data/lib/pubid/oiml/identifiers/recommendation.rb +13 -0
  534. data/lib/pubid/oiml/identifiers/seminar_report.rb +13 -0
  535. data/lib/pubid/oiml/identifiers/vocabulary.rb +13 -0
  536. data/lib/pubid/oiml/identifiers.rb +18 -0
  537. data/lib/pubid/oiml/parser.rb +173 -0
  538. data/lib/pubid/oiml/scheme.rb +46 -0
  539. data/lib/pubid/oiml/single_identifier.rb +90 -0
  540. data/lib/pubid/oiml/supplement_identifier.rb +43 -0
  541. data/lib/pubid/oiml/urn_generator.rb +64 -0
  542. data/lib/pubid/oiml.rb +26 -0
  543. data/lib/pubid/parser/common_parse_methods.rb +13 -0
  544. data/lib/pubid/parser/common_parse_rules.rb +56 -0
  545. data/lib/pubid/parser.rb +8 -0
  546. data/lib/pubid/parsers/base.rb +11 -0
  547. data/lib/pubid/parsers/mr_string.rb +93 -0
  548. data/lib/pubid/plateau/builder.rb +50 -0
  549. data/lib/pubid/plateau/identifiers/annex.rb +16 -0
  550. data/lib/pubid/plateau/identifiers/base.rb +51 -0
  551. data/lib/pubid/plateau/identifiers/handbook.rb +34 -0
  552. data/lib/pubid/plateau/identifiers/technical_report.rb +20 -0
  553. data/lib/pubid/plateau/identifiers.rb +12 -0
  554. data/lib/pubid/plateau/parser.rb +63 -0
  555. data/lib/pubid/plateau/scheme.rb +45 -0
  556. data/lib/pubid/plateau/supplement_identifier.rb +72 -0
  557. data/lib/pubid/plateau/urn_generator.rb +29 -0
  558. data/lib/pubid/plateau.rb +25 -0
  559. data/lib/pubid/renderers/base.rb +19 -0
  560. data/lib/pubid/renderers/directives_renderer.rb +62 -0
  561. data/lib/pubid/renderers/guide_renderer.rb +20 -0
  562. data/lib/pubid/renderers/human_readable.rb +58 -0
  563. data/lib/pubid/renderers/iwa_renderer.rb +16 -0
  564. data/lib/pubid/renderers/mr_string.rb +16 -0
  565. data/lib/pubid/renderers/supplement_renderer.rb +33 -0
  566. data/lib/pubid/renderers/urn.rb +11 -0
  567. data/lib/pubid/renderers.rb +14 -0
  568. data/lib/pubid/rendering/base.rb +73 -0
  569. data/lib/pubid/rendering/common.rb +211 -0
  570. data/lib/pubid/rendering/context.rb +156 -0
  571. data/lib/pubid/rendering/date.rb +27 -0
  572. data/lib/pubid/rendering/format.rb +25 -0
  573. data/lib/pubid/rendering/language.rb +21 -0
  574. data/lib/pubid/rendering/numbering.rb +24 -0
  575. data/lib/pubid/rendering/publisher.rb +25 -0
  576. data/lib/pubid/rendering/stage.rb +38 -0
  577. data/lib/pubid/rendering/supplement.rb +46 -0
  578. data/lib/pubid/rendering.rb +16 -0
  579. data/lib/pubid/sae/builder.rb +32 -0
  580. data/lib/pubid/sae/components/code.rb +9 -0
  581. data/lib/pubid/sae/components/date.rb +19 -0
  582. data/lib/pubid/sae/components/type.rb +19 -0
  583. data/lib/pubid/sae/components.rb +11 -0
  584. data/lib/pubid/sae/identifier.rb +14 -0
  585. data/lib/pubid/sae/identifiers/base.rb +42 -0
  586. data/lib/pubid/sae/identifiers.rb +9 -0
  587. data/lib/pubid/sae/parser.rb +55 -0
  588. data/lib/pubid/sae/scheme.rb +47 -0
  589. data/lib/pubid/sae/urn_generator.rb +38 -0
  590. data/lib/pubid/sae.rb +19 -0
  591. data/lib/pubid/scheme.rb +207 -0
  592. data/lib/pubid/urn_generator/base.rb +110 -0
  593. data/lib/pubid/utils/string_normalizer.rb +196 -0
  594. data/lib/pubid/utils.rb +7 -0
  595. data/lib/pubid/version.rb +3 -1
  596. data/lib/pubid.rb +137 -13
  597. data/lib/tasks/docs.rake +37 -0
  598. data/lib/tasks/export.rake +38 -0
  599. data/lib/tasks/website-data.json +7488 -0
  600. metadata +613 -171
  601. data/lib/pubid/registry.rb +0 -30
@@ -0,0 +1,132 @@
1
+ require_relative "base"
2
+ # frozen_string_literal: true
3
+ require_relative "../../components/typed_stage"
4
+
5
+ module Pubid
6
+ module Iec
7
+ module Identifiers
8
+ # Technical Report identifier class
9
+ # Single Responsibility: Represents IEC Technical Report documents
10
+ class TechnicalReport < Base
11
+ # Convert v1 hash-based TYPED_STAGES to v2 object-based
12
+ # From gems/pubid-iec/lib/pubid/iec/identifier/technical_report.rb
13
+ TYPED_STAGES = [
14
+ Pubid::Components::TypedStage.new(
15
+ code: :pwi_tr,
16
+ stage_code: :pwi,
17
+ type_code: :tr,
18
+ abbr: ["PWI TR"],
19
+ name: "Preliminary Work Item Technical Report",
20
+ harmonized_stages: %w[00.00 00.20 00.60 00.98 00.99],
21
+ ),
22
+ Pubid::Components::TypedStage.new(
23
+ code: :np_tr,
24
+ stage_code: :np,
25
+ type_code: :tr,
26
+ abbr: ["NP TR"],
27
+ name: "New Proposal Technical Report",
28
+ harmonized_stages: %w[10.00 10.20 10.60 10.92 10.98],
29
+ ),
30
+ Pubid::Components::TypedStage.new(
31
+ code: :anw_tr,
32
+ stage_code: :anw,
33
+ type_code: :tr,
34
+ abbr: ["ANW TR"],
35
+ name: "Approved New Work Item Technical Report",
36
+ harmonized_stages: %w[10.99 20.00],
37
+ ),
38
+ Pubid::Components::TypedStage.new(
39
+ code: :wd_tr,
40
+ stage_code: :wd,
41
+ type_code: :tr,
42
+ abbr: ["WD TR"],
43
+ name: "Working Draft Technical Report",
44
+ harmonized_stages: %w[20.20 20.60 20.98 20.99],
45
+ ),
46
+ Pubid::Components::TypedStage.new(
47
+ code: :cd_tr,
48
+ stage_code: :cd,
49
+ type_code: :tr,
50
+ abbr: ["CD TR"],
51
+ name: "Committee Draft Technical Report",
52
+ harmonized_stages: %w[30.00 30.20 30.60 30.92 30.98 30.99],
53
+ ),
54
+ Pubid::Components::TypedStage.new(
55
+ code: :dtr,
56
+ stage_code: :draft,
57
+ type_code: :tr,
58
+ abbr: ["DTR"],
59
+ name: "Draft Technical Report",
60
+ harmonized_stages: %w[50.00 50.20 50.60 50.92 50.98 50.99],
61
+ ),
62
+ Pubid::Components::TypedStage.new(
63
+ code: :tr,
64
+ stage_code: :published,
65
+ type_code: :tr,
66
+ abbr: ["TR"],
67
+ name: "Technical Report",
68
+ harmonized_stages: %w[60.00 60.60 90.20 90.60 90.92 90.93 90.99
69
+ 95.20 95.60 95.92 95.99],
70
+ ),
71
+ ].freeze
72
+
73
+ # Project stages specific to Technical Reports
74
+ # These are IEC-specific workflow stages
75
+ PROJECT_STAGES = {
76
+ adtr: {
77
+ abbr: "ADTR",
78
+ name: "Approved for DTR",
79
+ harmonized_stages: %w[40.99],
80
+ },
81
+ cdtr: {
82
+ abbr: "CDTR",
83
+ name: "Draft circulated as DTR",
84
+ harmonized_stages: %w[50.20],
85
+ },
86
+ dtrm: {
87
+ abbr: "DTRM",
88
+ name: "Rejected DTR to be discussed at meeting",
89
+ harmonized_stages: %w[50.92],
90
+ },
91
+ ndtr: {
92
+ abbr: "NDTR",
93
+ name: "DTR rejected",
94
+ harmonized_stages: %w[50.92],
95
+ },
96
+ prvdtr: {
97
+ abbr: "PRVDTR",
98
+ name: "Preparation of RVDTR",
99
+ harmonized_stages: %w[50.60],
100
+ },
101
+ tdtr: {
102
+ abbr: "TDTR",
103
+ name: "Translation of DTR",
104
+ harmonized_stages: %w[50.00],
105
+ },
106
+ }.freeze
107
+
108
+ def self.type
109
+ { key: :tr, title: "Technical Report", short: "TR" }
110
+ end
111
+
112
+ # Override publisher_portion to handle TR formatting
113
+ # If copublishers exist, use parent implementation
114
+ def publisher_portion
115
+ # If copublishers, delegate to parent (SingleIdentifier) which handles them
116
+ return super if copublishers&.any?
117
+
118
+ # No copublishers: simple TR formatting
119
+ result = publisher.to_s
120
+
121
+ if typed_stage
122
+ abbr = typed_stage.abbreviation
123
+ # For TR: always use space (IEC convention for ALL publishers)
124
+ result += " #{abbr}" unless abbr.empty?
125
+ end
126
+
127
+ result
128
+ end
129
+ end
130
+ end
131
+ end
132
+ end
@@ -0,0 +1,132 @@
1
+ require_relative "base"
2
+ # frozen_string_literal: true
3
+ require_relative "../../components/typed_stage"
4
+
5
+ module Pubid
6
+ module Iec
7
+ module Identifiers
8
+ # Technical Specification identifier class
9
+ # Single Responsibility: Represents IEC Technical Specification documents
10
+ class TechnicalSpecification < Base
11
+ # Convert v1 hash-based TYPED_STAGES to v2 object-based
12
+ # From gems/pubid-iec/lib/pubid/iec/identifier/technical_specification.rb
13
+ TYPED_STAGES = [
14
+ Pubid::Components::TypedStage.new(
15
+ code: :pwi_ts,
16
+ stage_code: :pwi,
17
+ type_code: :ts,
18
+ abbr: ["PWI TS"],
19
+ name: "Preliminary Work Item Technical Specification",
20
+ harmonized_stages: %w[00.00 00.20 00.60 00.98 00.99],
21
+ ),
22
+ Pubid::Components::TypedStage.new(
23
+ code: :np_ts,
24
+ stage_code: :np,
25
+ type_code: :ts,
26
+ abbr: ["NP TS"],
27
+ name: "New Proposal Technical Specification",
28
+ harmonized_stages: %w[10.00 10.20 10.60 10.92 10.98],
29
+ ),
30
+ Pubid::Components::TypedStage.new(
31
+ code: :anw_ts,
32
+ stage_code: :anw,
33
+ type_code: :ts,
34
+ abbr: ["ANW TS"],
35
+ name: "Approved New Work Item Technical Specification",
36
+ harmonized_stages: %w[10.99 20.00],
37
+ ),
38
+ Pubid::Components::TypedStage.new(
39
+ code: :wd_ts,
40
+ stage_code: :wd,
41
+ type_code: :ts,
42
+ abbr: ["WD TS"],
43
+ name: "Working Draft Technical Specification",
44
+ harmonized_stages: %w[20.20 20.60 20.98 20.99],
45
+ ),
46
+ Pubid::Components::TypedStage.new(
47
+ code: :cd_ts,
48
+ stage_code: :cd,
49
+ type_code: :ts,
50
+ abbr: ["CD TS"],
51
+ name: "Committee Draft Technical Specification",
52
+ harmonized_stages: %w[30.00 30.20 30.60 30.92 30.98 30.99],
53
+ ),
54
+ Pubid::Components::TypedStage.new(
55
+ code: :dts,
56
+ stage_code: :draft,
57
+ type_code: :ts,
58
+ abbr: ["DTS"],
59
+ name: "Draft Technical Specification",
60
+ harmonized_stages: %w[50.00 50.20 50.60 50.92 50.98 50.99],
61
+ ),
62
+ Pubid::Components::TypedStage.new(
63
+ code: :ts,
64
+ stage_code: :published,
65
+ type_code: :ts,
66
+ abbr: ["TS"],
67
+ name: "Technical Specification",
68
+ harmonized_stages: %w[60.00 60.60 90.20 90.60 90.92 90.93 90.99
69
+ 95.20 95.60 95.92 95.99],
70
+ ),
71
+ ].freeze
72
+
73
+ # Project stages specific to Technical Specifications
74
+ # These are IEC-specific workflow stages
75
+ PROJECT_STAGES = {
76
+ adts: {
77
+ abbr: "ADTS",
78
+ name: "Approved for DTS",
79
+ harmonized_stages: %w[40.99],
80
+ },
81
+ cdts: {
82
+ abbr: "CDTS",
83
+ name: "Draft circulated as DTS",
84
+ harmonized_stages: %w[50.20],
85
+ },
86
+ dtsm: {
87
+ abbr: "DTSM",
88
+ name: "Rejected DTS to be discussed at meeting",
89
+ harmonized_stages: %w[50.92],
90
+ },
91
+ ndts: {
92
+ abbr: "NDTS",
93
+ name: "DTS rejected",
94
+ harmonized_stages: %w[50.92],
95
+ },
96
+ prvdts: {
97
+ abbr: "PRVDTS",
98
+ name: "Preparation of RVDTS",
99
+ harmonized_stages: %w[50.60],
100
+ },
101
+ tdts: {
102
+ abbr: "TDTS",
103
+ name: "Translation of DTS",
104
+ harmonized_stages: %w[50.00],
105
+ },
106
+ }.freeze
107
+
108
+ def self.type
109
+ { key: :ts, title: "Technical Specification", short: "TS" }
110
+ end
111
+
112
+ # Override publisher_portion to handle TS formatting
113
+ # If copublishers exist, use parent implementation
114
+ def publisher_portion
115
+ # If copublishers, delegate to parent (SingleIdentifier) which handles them
116
+ return super if copublishers&.any?
117
+
118
+ # No copublishers: simple TS formatting
119
+ result = publisher.to_s
120
+
121
+ if typed_stage
122
+ abbr = typed_stage.abbreviation
123
+ # TS uses space for all stages
124
+ result += " #{abbr}" unless abbr.empty?
125
+ end
126
+
127
+ result
128
+ end
129
+ end
130
+ end
131
+ end
132
+ end
@@ -0,0 +1,39 @@
1
+ require_relative "base"
2
+ require_relative "../../components/typed_stage"
3
+
4
+ module Pubid
5
+ module Iec
6
+ module Identifiers
7
+ # Technology Report identifier class
8
+ # Single Responsibility: Represents IEC Technology Report documents
9
+ class TechnologyReport < Base
10
+ # Technology Reports have full phrase as type abbreviation
11
+ TYPED_STAGES = [
12
+ Pubid::Components::TypedStage.new(
13
+ code: :tec,
14
+ stage_code: :published,
15
+ type_code: :tec,
16
+ abbr: ["Technology Report"],
17
+ name: "Technology Report",
18
+ harmonized_stages: %w[60.00 60.60],
19
+ ),
20
+ ].freeze
21
+
22
+ def self.type
23
+ { key: :tec, title: "Technology Report", short: "Technology Report" }
24
+ end
25
+
26
+ # Override publisher_portion to add Technology Report
27
+ def publisher_portion
28
+ result = publisher.to_s
29
+
30
+ if typed_stage && typed_stage.abbreviation == "Technology Report"
31
+ result += " Technology Report"
32
+ end
33
+
34
+ result
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,78 @@
1
+ require_relative "base"
2
+ # frozen_string_literal: true
3
+ require_relative "../../components/typed_stage"
4
+
5
+ module Pubid
6
+ module Iec
7
+ module Identifiers
8
+ # Test Report Form identifier class
9
+ # Single Responsibility: Represents IEC TRF documents
10
+ # Can embed CISPR identifiers for IECEE TRF format
11
+ class TestReportForm < Base
12
+ # TRF can embed a CISPR identifier (MODEL-DRIVEN)
13
+ attribute :cispr_identifier, Identifier, polymorphic: true, default: -> {
14
+ }
15
+
16
+ # TRF has type abbreviation for parsing
17
+ TYPED_STAGES = [
18
+ Pubid::Components::TypedStage.new(
19
+ code: :trf,
20
+ stage_code: :published,
21
+ type_code: :trf,
22
+ abbr: ["TRF"],
23
+ name: "Test Report Form",
24
+ harmonized_stages: %w[60.00 60.60],
25
+ ),
26
+ ].freeze
27
+
28
+ def self.type
29
+ { key: :trf, title: "Test Report Form", short: "TRF" }
30
+ end
31
+
32
+ # Override publisher_portion to add TRF with space
33
+ def publisher_portion
34
+ result = publisher.to_s
35
+
36
+ if typed_stage && typed_stage.abbreviation == "TRF"
37
+ result += " TRF"
38
+ end
39
+
40
+ result
41
+ end
42
+
43
+ # TRF uses special rendering
44
+ def to_s(_format = :short)
45
+ parts = []
46
+
47
+ # Publisher and type portion
48
+ parts << publisher_portion
49
+
50
+ # If CISPR identifier embedded, render it with TRF date
51
+ if cispr_identifier
52
+ cispr_parts = []
53
+ cispr_parts << cispr_identifier.publisher.body
54
+
55
+ # Build number portion with part
56
+ num_str = cispr_identifier.number.to_s
57
+ num_str += "-#{cispr_identifier.part}" if cispr_identifier.part && cispr_identifier.part.to_s != ""
58
+ cispr_parts << num_str
59
+
60
+ # Join with space and add TRF year
61
+ cispr_str = cispr_parts.join(" ")
62
+ cispr_str += ":#{date.year}" if date
63
+
64
+ parts << " #{cispr_str}"
65
+ else
66
+ # Normal TRF: number portion
67
+ parts << number_portion
68
+ end
69
+
70
+ # TRF info if present (handles version, decision sheet, etc.)
71
+ parts << trf_info.to_s if trf_info && !trf_info.empty?
72
+
73
+ parts.compact.join
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,77 @@
1
+ require_relative "../identifier"
2
+ # frozen_string_literal: true
3
+ require_relative "../components/vap_suffix"
4
+
5
+ module Pubid
6
+ module Iec
7
+ module Identifiers
8
+ # VAP (Version/Compilation) Identifier
9
+ # Single Responsibility: Wraps another identifier with VAP type suffix
10
+ # Examples: "IEC 61666:2010+AMD1:2021 CSV"
11
+ class VapIdentifier < Identifier
12
+ attribute :base_identifier, Identifier, polymorphic: true
13
+ attribute :vap_suffix, Components::VapSuffix
14
+ attribute :edition, ::Pubid::Components::Edition, default: -> {}
15
+
16
+ # VAP types mapping
17
+ TYPE_MAP = {
18
+ "CSV" => "Consolidated version (with Supplements)",
19
+ "CMV" => "Compiled Maintenance Version",
20
+ "RLV" => "Redline Version (shows changes)",
21
+ "SER" => "Serial version",
22
+ }.freeze
23
+
24
+ def to_s(lang: :en, lang_single: false, with_edition: false)
25
+ parts = []
26
+
27
+ # Render base identifier WITHOUT edition (edition goes at VAP level)
28
+ parts << base_identifier.to_s(lang: lang, lang_single: lang_single,
29
+ with_edition: false)
30
+
31
+ # Add VAP suffix with space
32
+ if vap_suffix
33
+ parts << " #{vap_suffix}"
34
+ end
35
+
36
+ # Add edition after VAP suffix if present
37
+ parts << " #{edition}" if edition&.number
38
+
39
+ parts.compact.join
40
+ end
41
+
42
+ # Delegate common attributes to base_identifier
43
+ def publisher
44
+ base_identifier&.publisher
45
+ end
46
+
47
+ def copublishers
48
+ base_identifier&.copublishers
49
+ end
50
+
51
+ def code
52
+ base_identifier&.code
53
+ end
54
+
55
+ def number
56
+ base_identifier&.number
57
+ end
58
+
59
+ def date
60
+ base_identifier&.date
61
+ end
62
+
63
+ def type
64
+ :vap
65
+ end
66
+
67
+ def stage
68
+ base_identifier&.stage
69
+ end
70
+
71
+ def typed_stage
72
+ base_identifier&.typed_stage
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,39 @@
1
+ require_relative "base"
2
+ require_relative "../../components/typed_stage"
3
+
4
+ module Pubid
5
+ module Iec
6
+ module Identifiers
7
+ # White Paper identifier class
8
+ # Single Responsibility: Represents IEC White Paper documents
9
+ class WhitePaper < Base
10
+ # White Papers have full phrase as type abbreviation
11
+ TYPED_STAGES = [
12
+ Pubid::Components::TypedStage.new(
13
+ code: :wp,
14
+ stage_code: :published,
15
+ type_code: :wp,
16
+ abbr: ["White Paper"],
17
+ name: "White Paper",
18
+ harmonized_stages: %w[60.00 60.60],
19
+ ),
20
+ ].freeze
21
+
22
+ def self.type
23
+ { key: :wp, title: "White Paper", short: "White Paper" }
24
+ end
25
+
26
+ # Override publisher_portion to add White Paper
27
+ def publisher_portion
28
+ result = publisher.to_s
29
+
30
+ if typed_stage && typed_stage.abbreviation == "White Paper"
31
+ result += " White Paper"
32
+ end
33
+
34
+ result
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,96 @@
1
+ require_relative "base"
2
+ # frozen_string_literal: true
3
+ require_relative "../../components/stage"
4
+
5
+ module Pubid
6
+ module Iec
7
+ module Identifiers
8
+ # Working Document identifier class
9
+ # Single Responsibility: Represents IEC Working Documents with TC attribution
10
+ # Also handles Working Programmes with PWI/PNW stage-first format
11
+ # Formats:
12
+ # Working Programme: "PWI TR 100-36 ED1"
13
+ # Working Document: "100/3705(F)/FDIS"
14
+ class WorkingDocument < Base
15
+ attribute :technical_committee, :string, default: -> {}
16
+ attribute :wd_number, :string, default: -> {}
17
+ attribute :wd_language, :string, default: -> {}
18
+ attribute :wd_stage, :string, default: -> {}
19
+ attribute :wp_stage, :string, default: -> {}
20
+ attribute :wp_type, :string, default: -> {}
21
+
22
+ # Working documents have no TYPED_STAGES - they use PROJECT_STAGES only
23
+ TYPED_STAGES = [].freeze
24
+
25
+ # Working document stages
26
+ PROJECT_STAGES = {}.freeze
27
+
28
+ def self.type
29
+ { key: :wd, title: "Working Document", short: "WD" }
30
+ end
31
+
32
+ # Return stage object for PWI/PNW stage
33
+ def stage
34
+ return nil unless wp_stage
35
+
36
+ # Map PWI/PNW to stage codes
37
+ stage_map = {
38
+ "PWI" => "pwi",
39
+ "PNW" => "pnw",
40
+ }
41
+ stage_code = stage_map[wp_stage]
42
+ return nil unless stage_code
43
+
44
+ @stage ||= ::Pubid::Components::Stage.new(stage_code: stage_code)
45
+ end
46
+
47
+ def to_s(_format = :short)
48
+ # Working Programme format: "PWI TR 100-36 ED1" or "IEC/PWI 60038"
49
+ if wp_stage
50
+ parts = []
51
+ # Include publisher if present (for IEC/PWI format)
52
+ if publisher
53
+ parts << publisher.body
54
+ if copublishers&.any?
55
+ parts << "/#{copublishers.map(&:body).join('/')}"
56
+ end
57
+ parts << "/"
58
+ end
59
+ parts << wp_stage
60
+ # Only add wp_type if it exists and is not empty/whitespace
61
+ if wp_type && !wp_type.strip.empty?
62
+ parts << " #{wp_type.strip}"
63
+ end
64
+
65
+ # Render full number with parts
66
+ if number
67
+ num_str = number.to_s
68
+ num_str += "-#{part}" if part && part.to_s != ""
69
+ num_str += "-#{subpart}" if subpart && subpart.to_s != ""
70
+ parts << " #{num_str}"
71
+ end
72
+
73
+ parts << " #{edition}" if edition&.number
74
+ return parts.join
75
+ end
76
+
77
+ # Working Document format: "100/3705(F)/FDIS"
78
+ parts = []
79
+
80
+ parts << technical_committee if technical_committee
81
+
82
+ # Number with optional language
83
+ if wd_number
84
+ num_part = wd_number.to_s
85
+ num_part += "(#{wd_language})" if wd_language
86
+ parts << num_part
87
+ end
88
+
89
+ parts << wd_stage if wd_stage
90
+
91
+ parts.join("/")
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end