pubid 1.15.19 → 2.0.0.pre.alpha.2

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 (604) 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 +89 -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 +57 -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 +55 -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 +68 -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 +57 -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 +61 -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 +92 -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 +87 -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 +84 -0
  160. data/lib/pubid/ccsds/identifiers/base.rb +89 -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 +77 -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 +52 -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 +71 -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/factory.rb +50 -0
  219. data/lib/pubid/components/language.rb +37 -0
  220. data/lib/pubid/components/locality.rb +10 -0
  221. data/lib/pubid/components/publisher.rb +36 -0
  222. data/lib/pubid/components/stage.rb +54 -0
  223. data/lib/pubid/components/type.rb +58 -0
  224. data/lib/pubid/components/typed_stage.rb +59 -0
  225. data/lib/pubid/components.rb +16 -0
  226. data/lib/pubid/core/pattern_doc_generator.rb +272 -0
  227. data/lib/pubid/core/update_codes.rb +77 -0
  228. data/lib/pubid/core.rb +8 -0
  229. data/lib/pubid/csa/builder.rb +671 -0
  230. data/lib/pubid/csa/components/code.rb +9 -0
  231. data/lib/pubid/csa/components.rb +9 -0
  232. data/lib/pubid/csa/composite_identifier.rb +27 -0
  233. data/lib/pubid/csa/identifier.rb +513 -0
  234. data/lib/pubid/csa/identifiers/base.rb +133 -0
  235. data/lib/pubid/csa/identifiers/bundled.rb +125 -0
  236. data/lib/pubid/csa/identifiers/canadian_adopted.rb +82 -0
  237. data/lib/pubid/csa/identifiers/cec.rb +129 -0
  238. data/lib/pubid/csa/identifiers/combined.rb +130 -0
  239. data/lib/pubid/csa/identifiers/csa_adopted.rb +78 -0
  240. data/lib/pubid/csa/identifiers/package.rb +65 -0
  241. data/lib/pubid/csa/identifiers/series.rb +127 -0
  242. data/lib/pubid/csa/identifiers/standard.rb +10 -0
  243. data/lib/pubid/csa/identifiers.rb +17 -0
  244. data/lib/pubid/csa/parser.rb +445 -0
  245. data/lib/pubid/csa/scheme.rb +44 -0
  246. data/lib/pubid/csa/single_identifier.rb +30 -0
  247. data/lib/pubid/csa/urn_generator.rb +80 -0
  248. data/lib/pubid/csa/wrapper_identifier.rb +31 -0
  249. data/lib/pubid/csa.rb +25 -0
  250. data/lib/pubid/etsi/builder.rb +133 -0
  251. data/lib/pubid/etsi/components/code.rb +42 -0
  252. data/lib/pubid/etsi/components/version.rb +37 -0
  253. data/lib/pubid/etsi/components.rb +10 -0
  254. data/lib/pubid/etsi/identifier.rb +57 -0
  255. data/lib/pubid/etsi/identifiers/amendment.rb +15 -0
  256. data/lib/pubid/etsi/identifiers/base.rb +38 -0
  257. data/lib/pubid/etsi/identifiers/corrigendum.rb +15 -0
  258. data/lib/pubid/etsi/identifiers/etsi_standard.rb +19 -0
  259. data/lib/pubid/etsi/identifiers/supplement_identifier.rb +91 -0
  260. data/lib/pubid/etsi/identifiers.rb +14 -0
  261. data/lib/pubid/etsi/parser.rb +133 -0
  262. data/lib/pubid/etsi/scheme.rb +42 -0
  263. data/lib/pubid/etsi/urn_generator.rb +76 -0
  264. data/lib/pubid/etsi.rb +21 -0
  265. data/lib/pubid/export/auditor.rb +89 -0
  266. data/lib/pubid/export/data_class_exporter.rb +59 -0
  267. data/lib/pubid/export/exporter.rb +74 -0
  268. data/lib/pubid/export/flavor_exporter.rb +402 -0
  269. data/lib/pubid/export/ieee_exporter.rb +78 -0
  270. data/lib/pubid/export/itu_exporter.rb +66 -0
  271. data/lib/pubid/export/nist_exporter.rb +64 -0
  272. data/lib/pubid/export/registry_exporter.rb +90 -0
  273. data/lib/pubid/export/result.rb +97 -0
  274. data/lib/pubid/export/scheme_exporter.rb +70 -0
  275. data/lib/pubid/export.rb +18 -0
  276. data/lib/pubid/format_detector.rb +16 -0
  277. data/lib/pubid/format_registry.rb +42 -0
  278. data/lib/pubid/identifier.rb +242 -0
  279. data/lib/pubid/identifier_metadata.rb +148 -0
  280. data/lib/pubid/identifier_registry.rb +198 -0
  281. data/lib/pubid/idf/builder.rb +82 -0
  282. data/lib/pubid/idf/identifier.rb +129 -0
  283. data/lib/pubid/idf/identifiers/amendment.rb +27 -0
  284. data/lib/pubid/idf/identifiers/corrigendum.rb +27 -0
  285. data/lib/pubid/idf/identifiers/international_standard.rb +123 -0
  286. data/lib/pubid/idf/identifiers/reviewed_method.rb +100 -0
  287. data/lib/pubid/idf/identifiers.rb +13 -0
  288. data/lib/pubid/idf/parser.rb +143 -0
  289. data/lib/pubid/idf/scheme.rb +61 -0
  290. data/lib/pubid/idf/single_identifier.rb +19 -0
  291. data/lib/pubid/idf/supplement_identifier.rb +43 -0
  292. data/lib/pubid/idf/urn_generator.rb +84 -0
  293. data/lib/pubid/idf.rb +25 -0
  294. data/lib/pubid/iec/builder.rb +458 -0
  295. data/lib/pubid/iec/components/code.rb +60 -0
  296. data/lib/pubid/iec/components/consolidated_amendment.rb +59 -0
  297. data/lib/pubid/iec/components/publisher.rb +36 -0
  298. data/lib/pubid/iec/components/sheet.rb +32 -0
  299. data/lib/pubid/iec/components/trf_info.rb +38 -0
  300. data/lib/pubid/iec/components/vap_suffix.rb +41 -0
  301. data/lib/pubid/iec/identifier.rb +256 -0
  302. data/lib/pubid/iec/identifiers/amendment.rb +94 -0
  303. data/lib/pubid/iec/identifiers/base.rb +82 -0
  304. data/lib/pubid/iec/identifiers/component_specification.rb +39 -0
  305. data/lib/pubid/iec/identifiers/conformity_assessment.rb +39 -0
  306. data/lib/pubid/iec/identifiers/consolidated_identifier.rb +82 -0
  307. data/lib/pubid/iec/identifiers/corrigendum.rb +94 -0
  308. data/lib/pubid/iec/identifiers/fragment_identifier.rb +137 -0
  309. data/lib/pubid/iec/identifiers/guide.rb +104 -0
  310. data/lib/pubid/iec/identifiers/international_standard.rb +147 -0
  311. data/lib/pubid/iec/identifiers/interpretation_sheet.rb +104 -0
  312. data/lib/pubid/iec/identifiers/operational_document.rb +39 -0
  313. data/lib/pubid/iec/identifiers/publicly_available_specification.rb +101 -0
  314. data/lib/pubid/iec/identifiers/sheet_identifier.rb +62 -0
  315. data/lib/pubid/iec/identifiers/societal_technology_trend_report.rb +40 -0
  316. data/lib/pubid/iec/identifiers/systems_reference_document.rb +40 -0
  317. data/lib/pubid/iec/identifiers/technical_report.rb +132 -0
  318. data/lib/pubid/iec/identifiers/technical_specification.rb +132 -0
  319. data/lib/pubid/iec/identifiers/technology_report.rb +39 -0
  320. data/lib/pubid/iec/identifiers/test_report_form.rb +78 -0
  321. data/lib/pubid/iec/identifiers/vap_identifier.rb +73 -0
  322. data/lib/pubid/iec/identifiers/white_paper.rb +39 -0
  323. data/lib/pubid/iec/identifiers/working_document.rb +96 -0
  324. data/lib/pubid/iec/parser.rb +417 -0
  325. data/lib/pubid/iec/rendering_style.rb +113 -0
  326. data/lib/pubid/iec/scheme.rb +71 -0
  327. data/lib/pubid/iec/single_identifier.rb +80 -0
  328. data/lib/pubid/iec/supplement_identifier.rb +161 -0
  329. data/lib/pubid/iec/urn_generator.rb +79 -0
  330. data/lib/pubid/iec/urn_parser.rb +90 -0
  331. data/lib/pubid/iec.rb +85 -0
  332. data/lib/pubid/ieee/aiee/builder.rb +71 -0
  333. data/lib/pubid/ieee/aiee/identifier.rb +105 -0
  334. data/lib/pubid/ieee/aiee/parser.rb +130 -0
  335. data/lib/pubid/ieee/aiee.rb +11 -0
  336. data/lib/pubid/ieee/builder.rb +1237 -0
  337. data/lib/pubid/ieee/components/code.rb +102 -0
  338. data/lib/pubid/ieee/components/draft.rb +93 -0
  339. data/lib/pubid/ieee/components/relationship.rb +157 -0
  340. data/lib/pubid/ieee/components/typed_stage.rb +100 -0
  341. data/lib/pubid/ieee/identifier.rb +54 -0
  342. data/lib/pubid/ieee/identifiers/adopted_standard.rb +33 -0
  343. data/lib/pubid/ieee/identifiers/base.rb +591 -0
  344. data/lib/pubid/ieee/identifiers/conformance_identifier.rb +35 -0
  345. data/lib/pubid/ieee/identifiers/corrigendum.rb +37 -0
  346. data/lib/pubid/ieee/identifiers/csa_dual_published.rb +51 -0
  347. data/lib/pubid/ieee/identifiers/dual_identifier.rb +18 -0
  348. data/lib/pubid/ieee/identifiers/dual_published.rb +28 -0
  349. data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +27 -0
  350. data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +34 -0
  351. data/lib/pubid/ieee/identifiers/joint_development.rb +172 -0
  352. data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +51 -0
  353. data/lib/pubid/ieee/identifiers/nesc/base.rb +56 -0
  354. data/lib/pubid/ieee/identifiers/nesc/draft.rb +28 -0
  355. data/lib/pubid/ieee/identifiers/nesc/handbook.rb +32 -0
  356. data/lib/pubid/ieee/identifiers/nesc/redline.rb +26 -0
  357. data/lib/pubid/ieee/identifiers/nesc/standard.rb +26 -0
  358. data/lib/pubid/ieee/identifiers/nesc.rb +15 -0
  359. data/lib/pubid/ieee/identifiers/parenthetical_identifier.rb +20 -0
  360. data/lib/pubid/ieee/identifiers/project_draft_identifier.rb +26 -0
  361. data/lib/pubid/ieee/identifiers/redlined_standard.rb +33 -0
  362. data/lib/pubid/ieee/identifiers/si_standard.rb +73 -0
  363. data/lib/pubid/ieee/identifiers/standard.rb +41 -0
  364. data/lib/pubid/ieee/identifiers/supplement_identifier.rb +23 -0
  365. data/lib/pubid/ieee/identifiers.rb +33 -0
  366. data/lib/pubid/ieee/ire/builder.rb +61 -0
  367. data/lib/pubid/ieee/ire/identifier.rb +58 -0
  368. data/lib/pubid/ieee/ire/parser.rb +91 -0
  369. data/lib/pubid/ieee/ire.rb +11 -0
  370. data/lib/pubid/ieee/nesc/builder.rb +101 -0
  371. data/lib/pubid/ieee/nesc/parser.rb +154 -0
  372. data/lib/pubid/ieee/nesc.rb +10 -0
  373. data/lib/pubid/ieee/parser.rb +1226 -0
  374. data/lib/pubid/ieee/scheme.rb +90 -0
  375. data/lib/pubid/ieee/typed_stages.rb +172 -0
  376. data/lib/pubid/ieee/urn_generator.rb +188 -0
  377. data/lib/pubid/ieee.rb +32 -0
  378. data/lib/pubid/ieee_debug.rb +31 -0
  379. data/lib/pubid/iho/builder.rb +37 -0
  380. data/lib/pubid/iho/identifier.rb +61 -0
  381. data/lib/pubid/iho/identifiers/base.rb +41 -0
  382. data/lib/pubid/iho/identifiers/bibliographic.rb +16 -0
  383. data/lib/pubid/iho/identifiers/circular_letter.rb +15 -0
  384. data/lib/pubid/iho/identifiers/miscellaneous.rb +16 -0
  385. data/lib/pubid/iho/identifiers/publication.rb +15 -0
  386. data/lib/pubid/iho/identifiers/standard.rb +15 -0
  387. data/lib/pubid/iho/identifiers.rb +14 -0
  388. data/lib/pubid/iho/parser.rb +68 -0
  389. data/lib/pubid/iho/scheme.rb +29 -0
  390. data/lib/pubid/iho/urn_generator.rb +29 -0
  391. data/lib/pubid/iho.rb +21 -0
  392. data/lib/pubid/iso/builder.rb +309 -0
  393. data/lib/pubid/iso/bundled_identifier.rb +85 -0
  394. data/lib/pubid/iso/combined_identifier.rb +22 -0
  395. data/lib/pubid/iso/components/code.rb +36 -0
  396. data/lib/pubid/iso/components/publisher.rb +60 -0
  397. data/lib/pubid/iso/components.rb +12 -0
  398. data/lib/pubid/iso/format_resolver.rb +45 -0
  399. data/lib/pubid/iso/identifier.rb +330 -0
  400. data/lib/pubid/iso/identifiers/addendum.rb +104 -0
  401. data/lib/pubid/iso/identifiers/amendment.rb +128 -0
  402. data/lib/pubid/iso/identifiers/base.rb +115 -0
  403. data/lib/pubid/iso/identifiers/corrigendum.rb +108 -0
  404. data/lib/pubid/iso/identifiers/data.rb +76 -0
  405. data/lib/pubid/iso/identifiers/directives.rb +59 -0
  406. data/lib/pubid/iso/identifiers/directives_supplement.rb +119 -0
  407. data/lib/pubid/iso/identifiers/extract.rb +30 -0
  408. data/lib/pubid/iso/identifiers/guide.rb +100 -0
  409. data/lib/pubid/iso/identifiers/international_standard.rb +168 -0
  410. data/lib/pubid/iso/identifiers/international_standardized_profile.rb +94 -0
  411. data/lib/pubid/iso/identifiers/international_workshop_agreement.rb +89 -0
  412. data/lib/pubid/iso/identifiers/pas.rb +93 -0
  413. data/lib/pubid/iso/identifiers/recommendation.rb +45 -0
  414. data/lib/pubid/iso/identifiers/supplement.rb +87 -0
  415. data/lib/pubid/iso/identifiers/tc_document.rb +108 -0
  416. data/lib/pubid/iso/identifiers/technical_report.rb +103 -0
  417. data/lib/pubid/iso/identifiers/technical_specification.rb +102 -0
  418. data/lib/pubid/iso/identifiers/technology_trends_assessments.rb +95 -0
  419. data/lib/pubid/iso/identifiers.rb +33 -0
  420. data/lib/pubid/iso/parser.rb +512 -0
  421. data/lib/pubid/iso/rendering_style.rb +120 -0
  422. data/lib/pubid/iso/scheme.rb +193 -0
  423. data/lib/pubid/iso/single_identifier.rb +64 -0
  424. data/lib/pubid/iso/supplement_identifier.rb +27 -0
  425. data/lib/pubid/iso/urn_generator.rb +426 -0
  426. data/lib/pubid/iso/urn_parser.rb +437 -0
  427. data/lib/pubid/iso/utilities.rb +86 -0
  428. data/lib/pubid/iso.rb +50 -0
  429. data/lib/pubid/itu/builder.rb +171 -0
  430. data/lib/pubid/itu/components/code.rb +39 -0
  431. data/lib/pubid/itu/components/sector.rb +35 -0
  432. data/lib/pubid/itu/components/series.rb +29 -0
  433. data/lib/pubid/itu/i18n.rb +9 -0
  434. data/lib/pubid/itu/i18n.yaml +30 -0
  435. data/lib/pubid/itu/identifier.rb +118 -0
  436. data/lib/pubid/itu/identifiers/amendment.rb +43 -0
  437. data/lib/pubid/itu/identifiers/annex.rb +74 -0
  438. data/lib/pubid/itu/identifiers/base.rb +154 -0
  439. data/lib/pubid/itu/identifiers/combined_identifier.rb +47 -0
  440. data/lib/pubid/itu/identifiers/corrigendum.rb +44 -0
  441. data/lib/pubid/itu/identifiers/recommendation.rb +16 -0
  442. data/lib/pubid/itu/identifiers/special_publication.rb +31 -0
  443. data/lib/pubid/itu/identifiers/supplement.rb +46 -0
  444. data/lib/pubid/itu/identifiers.rb +16 -0
  445. data/lib/pubid/itu/model.rb +111 -0
  446. data/lib/pubid/itu/parser.rb +225 -0
  447. data/lib/pubid/itu/scheme.rb +174 -0
  448. data/lib/pubid/itu/urn_generator.rb +105 -0
  449. data/lib/pubid/itu.rb +22 -0
  450. data/lib/pubid/jcgm/builder.rb +88 -0
  451. data/lib/pubid/jcgm/components/publisher.rb +20 -0
  452. data/lib/pubid/jcgm/components.rb +9 -0
  453. data/lib/pubid/jcgm/identifier.rb +54 -0
  454. data/lib/pubid/jcgm/identifiers/amendment.rb +35 -0
  455. data/lib/pubid/jcgm/identifiers/guide.rb +21 -0
  456. data/lib/pubid/jcgm/identifiers/gum_guide.rb +51 -0
  457. data/lib/pubid/jcgm/identifiers.rb +11 -0
  458. data/lib/pubid/jcgm/parser.rb +84 -0
  459. data/lib/pubid/jcgm/scheme.rb +60 -0
  460. data/lib/pubid/jcgm/single_identifier.rb +48 -0
  461. data/lib/pubid/jcgm/supplement_identifier.rb +16 -0
  462. data/lib/pubid/jcgm/urn_generator.rb +110 -0
  463. data/lib/pubid/jcgm.rb +31 -0
  464. data/lib/pubid/jis/builder.rb +124 -0
  465. data/lib/pubid/jis/components/code.rb +59 -0
  466. data/lib/pubid/jis/components.rb +9 -0
  467. data/lib/pubid/jis/identifier.rb +61 -0
  468. data/lib/pubid/jis/identifiers/amendment.rb +16 -0
  469. data/lib/pubid/jis/identifiers/base.rb +72 -0
  470. data/lib/pubid/jis/identifiers/explanation.rb +22 -0
  471. data/lib/pubid/jis/identifiers/japanese_industrial_standard.rb +16 -0
  472. data/lib/pubid/jis/identifiers/standard.rb +27 -0
  473. data/lib/pubid/jis/identifiers/technical_report.rb +31 -0
  474. data/lib/pubid/jis/identifiers/technical_specification.rb +31 -0
  475. data/lib/pubid/jis/identifiers.rb +17 -0
  476. data/lib/pubid/jis/parser.rb +109 -0
  477. data/lib/pubid/jis/scheme.rb +49 -0
  478. data/lib/pubid/jis/single_identifier.rb +37 -0
  479. data/lib/pubid/jis/supplement_identifier.rb +47 -0
  480. data/lib/pubid/jis/urn_generator.rb +25 -0
  481. data/lib/pubid/jis.rb +23 -0
  482. data/lib/pubid/lutaml/no_store_registration.rb +30 -0
  483. data/lib/pubid/nist/builder.rb +2269 -0
  484. data/lib/pubid/nist/components/code.rb +38 -0
  485. data/lib/pubid/nist/components/edition.rb +134 -0
  486. data/lib/pubid/nist/components/issue_number.rb +28 -0
  487. data/lib/pubid/nist/components/part.rb +77 -0
  488. data/lib/pubid/nist/components/publisher.rb +24 -0
  489. data/lib/pubid/nist/components/stage.rb +53 -0
  490. data/lib/pubid/nist/components/supplement.rb +188 -0
  491. data/lib/pubid/nist/components/translation.rb +42 -0
  492. data/lib/pubid/nist/components/update.rb +103 -0
  493. data/lib/pubid/nist/components/version.rb +35 -0
  494. data/lib/pubid/nist/components/volume.rb +32 -0
  495. data/lib/pubid/nist/components.rb +19 -0
  496. data/lib/pubid/nist/configuration.rb +77 -0
  497. data/lib/pubid/nist/identifier.rb +62 -0
  498. data/lib/pubid/nist/identifiers/base.rb +578 -0
  499. data/lib/pubid/nist/identifiers/circular.rb +68 -0
  500. data/lib/pubid/nist/identifiers/circular_supplement.rb +50 -0
  501. data/lib/pubid/nist/identifiers/commercial_standard.rb +41 -0
  502. data/lib/pubid/nist/identifiers/commercial_standard_emergency.rb +56 -0
  503. data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +56 -0
  504. data/lib/pubid/nist/identifiers/crpl_report.rb +132 -0
  505. data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +104 -0
  506. data/lib/pubid/nist/identifiers/grant_contractor_report.rb +35 -0
  507. data/lib/pubid/nist/identifiers/handbook.rb +50 -0
  508. data/lib/pubid/nist/identifiers/internal_report.rb +56 -0
  509. data/lib/pubid/nist/identifiers/letter_circular.rb +45 -0
  510. data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +65 -0
  511. data/lib/pubid/nist/identifiers/monograph.rb +69 -0
  512. data/lib/pubid/nist/identifiers/ncstar.rb +41 -0
  513. data/lib/pubid/nist/identifiers/nsrds.rb +41 -0
  514. data/lib/pubid/nist/identifiers/owmwp.rb +35 -0
  515. data/lib/pubid/nist/identifiers/report.rb +67 -0
  516. data/lib/pubid/nist/identifiers/special_publication.rb +36 -0
  517. data/lib/pubid/nist/identifiers/technical_note.rb +90 -0
  518. data/lib/pubid/nist/identifiers.rb +33 -0
  519. data/lib/pubid/nist/parser.rb +1117 -0
  520. data/lib/pubid/nist/scheme.rb +199 -0
  521. data/lib/pubid/nist/supplement_identifier.rb +67 -0
  522. data/lib/pubid/nist/urn_generator.rb +133 -0
  523. data/lib/pubid/nist.rb +37 -0
  524. data/lib/pubid/oiml/builder.rb +189 -0
  525. data/lib/pubid/oiml/components/code.rb +20 -0
  526. data/lib/pubid/oiml/components.rb +9 -0
  527. data/lib/pubid/oiml/identifier.rb +61 -0
  528. data/lib/pubid/oiml/identifiers/amendment.rb +13 -0
  529. data/lib/pubid/oiml/identifiers/annex.rb +62 -0
  530. data/lib/pubid/oiml/identifiers/base.rb +36 -0
  531. data/lib/pubid/oiml/identifiers/basic_publication.rb +13 -0
  532. data/lib/pubid/oiml/identifiers/document.rb +13 -0
  533. data/lib/pubid/oiml/identifiers/expert_report.rb +13 -0
  534. data/lib/pubid/oiml/identifiers/guide.rb +13 -0
  535. data/lib/pubid/oiml/identifiers/recommendation.rb +13 -0
  536. data/lib/pubid/oiml/identifiers/seminar_report.rb +13 -0
  537. data/lib/pubid/oiml/identifiers/vocabulary.rb +13 -0
  538. data/lib/pubid/oiml/identifiers.rb +18 -0
  539. data/lib/pubid/oiml/parser.rb +173 -0
  540. data/lib/pubid/oiml/scheme.rb +46 -0
  541. data/lib/pubid/oiml/single_identifier.rb +90 -0
  542. data/lib/pubid/oiml/supplement_identifier.rb +43 -0
  543. data/lib/pubid/oiml/urn_generator.rb +64 -0
  544. data/lib/pubid/oiml.rb +26 -0
  545. data/lib/pubid/parser/common_parse_methods.rb +13 -0
  546. data/lib/pubid/parser/common_parse_rules.rb +56 -0
  547. data/lib/pubid/parser.rb +8 -0
  548. data/lib/pubid/parsers/base.rb +11 -0
  549. data/lib/pubid/parsers/mr_string.rb +93 -0
  550. data/lib/pubid/plateau/builder.rb +50 -0
  551. data/lib/pubid/plateau/identifier.rb +57 -0
  552. data/lib/pubid/plateau/identifiers/annex.rb +16 -0
  553. data/lib/pubid/plateau/identifiers/base.rb +51 -0
  554. data/lib/pubid/plateau/identifiers/handbook.rb +34 -0
  555. data/lib/pubid/plateau/identifiers/technical_report.rb +20 -0
  556. data/lib/pubid/plateau/identifiers.rb +12 -0
  557. data/lib/pubid/plateau/parser.rb +63 -0
  558. data/lib/pubid/plateau/scheme.rb +45 -0
  559. data/lib/pubid/plateau/supplement_identifier.rb +72 -0
  560. data/lib/pubid/plateau/urn_generator.rb +29 -0
  561. data/lib/pubid/plateau.rb +26 -0
  562. data/lib/pubid/renderers/base.rb +53 -0
  563. data/lib/pubid/renderers/directives_renderer.rb +61 -0
  564. data/lib/pubid/renderers/guide_renderer.rb +24 -0
  565. data/lib/pubid/renderers/human_readable.rb +70 -0
  566. data/lib/pubid/renderers/iwa_renderer.rb +20 -0
  567. data/lib/pubid/renderers/mr_string.rb +16 -0
  568. data/lib/pubid/renderers/supplement_renderer.rb +36 -0
  569. data/lib/pubid/renderers/urn.rb +11 -0
  570. data/lib/pubid/renderers.rb +14 -0
  571. data/lib/pubid/rendering/base.rb +73 -0
  572. data/lib/pubid/rendering/common.rb +211 -0
  573. data/lib/pubid/rendering/context.rb +159 -0
  574. data/lib/pubid/rendering/date.rb +27 -0
  575. data/lib/pubid/rendering/format.rb +25 -0
  576. data/lib/pubid/rendering/language.rb +21 -0
  577. data/lib/pubid/rendering/numbering.rb +24 -0
  578. data/lib/pubid/rendering/publisher.rb +25 -0
  579. data/lib/pubid/rendering/stage.rb +38 -0
  580. data/lib/pubid/rendering/supplement.rb +46 -0
  581. data/lib/pubid/rendering.rb +16 -0
  582. data/lib/pubid/sae/builder.rb +32 -0
  583. data/lib/pubid/sae/components/code.rb +9 -0
  584. data/lib/pubid/sae/components/date.rb +19 -0
  585. data/lib/pubid/sae/components/type.rb +19 -0
  586. data/lib/pubid/sae/components.rb +11 -0
  587. data/lib/pubid/sae/identifier.rb +37 -0
  588. data/lib/pubid/sae/identifiers/base.rb +42 -0
  589. data/lib/pubid/sae/identifiers.rb +9 -0
  590. data/lib/pubid/sae/parser.rb +55 -0
  591. data/lib/pubid/sae/scheme.rb +47 -0
  592. data/lib/pubid/sae/urn_generator.rb +38 -0
  593. data/lib/pubid/sae.rb +19 -0
  594. data/lib/pubid/scheme.rb +219 -0
  595. data/lib/pubid/urn_generator/base.rb +110 -0
  596. data/lib/pubid/utils/string_normalizer.rb +196 -0
  597. data/lib/pubid/utils.rb +7 -0
  598. data/lib/pubid/version.rb +3 -1
  599. data/lib/pubid.rb +137 -13
  600. data/lib/tasks/docs.rake +37 -0
  601. data/lib/tasks/export.rake +38 -0
  602. data/lib/tasks/website-data.json +7488 -0
  603. metadata +616 -171
  604. data/lib/pubid/registry.rb +0 -30
@@ -0,0 +1,101 @@
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
+ # Publicly Available Specification identifier class
9
+ # Single Responsibility: Represents IEC PAS documents
10
+ class PubliclyAvailableSpecification < Base
11
+ # Convert v1 hash-based TYPED_STAGES to v2 object-based
12
+ # From gems/pubid-iec/lib/pubid/iec/identifier/publicly_available_specification.rb
13
+ TYPED_STAGES = [
14
+ Pubid::Components::TypedStage.new(
15
+ code: :pwi_pas,
16
+ stage_code: :pwi,
17
+ type_code: :pas,
18
+ abbr: ["PWI PAS"],
19
+ name: "Preliminary Work Item Publicly Available Specification",
20
+ harmonized_stages: %w[00.00 00.20 00.60 00.98 00.99],
21
+ ),
22
+ Pubid::Components::TypedStage.new(
23
+ code: :np_pas,
24
+ stage_code: :np,
25
+ type_code: :pas,
26
+ abbr: ["NP PAS"],
27
+ name: "New Proposal Publicly Available Specification",
28
+ harmonized_stages: %w[10.00 10.20 10.60 10.92 10.98],
29
+ ),
30
+ Pubid::Components::TypedStage.new(
31
+ code: :anw_pas,
32
+ stage_code: :anw,
33
+ type_code: :pas,
34
+ abbr: ["ANW PAS"],
35
+ name: "Approved New Work Item Publicly Available Specification",
36
+ harmonized_stages: %w[10.99 20.00],
37
+ ),
38
+ Pubid::Components::TypedStage.new(
39
+ code: :wd_pas,
40
+ stage_code: :wd,
41
+ type_code: :pas,
42
+ abbr: ["WD PAS"],
43
+ name: "Working Draft Publicly Available Specification",
44
+ harmonized_stages: %w[20.20 20.60 20.98 20.99],
45
+ ),
46
+ Pubid::Components::TypedStage.new(
47
+ code: :cdpas,
48
+ stage_code: :cd,
49
+ type_code: :pas,
50
+ abbr: ["CDPAS"],
51
+ name: "Committee Draft Publicly Available 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: :dpas,
56
+ stage_code: :draft,
57
+ type_code: :pas,
58
+ abbr: ["DPAS"],
59
+ name: "Draft Publicly Available 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: :pas,
64
+ stage_code: :published,
65
+ type_code: :pas,
66
+ abbr: ["PAS"],
67
+ name: "Publicly Available 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 PAS
74
+ PROJECT_STAGES = {
75
+ PRVDPAS: {
76
+ abbr: "PRVDPAS",
77
+ name: "Preparation of RVDPAS",
78
+ harmonized_stages: %w[50.60],
79
+ },
80
+ }.freeze
81
+
82
+ def self.type
83
+ { key: :pas, title: "Publicly Available Specification", short: "PAS" }
84
+ end
85
+
86
+ # Override publisher_portion to add PAS or DPAS stage
87
+ def publisher_portion
88
+ result = publisher.to_s
89
+
90
+ if typed_stage
91
+ abbr = typed_stage.abbreviation
92
+ # PAS uses space for all stages
93
+ result += " #{abbr}" unless abbr.empty?
94
+ end
95
+
96
+ result
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,62 @@
1
+ require_relative "../identifier"
2
+ # frozen_string_literal: true
3
+
4
+ module Pubid
5
+ module Iec
6
+ module Identifiers
7
+ # Sheet Identifier
8
+ # Single Responsibility: Wraps another identifier with sheet number and year
9
+ # Example: "IEC 60695-2-1/1:1994" = Sheet 1 of IEC 60695-2-1 from 1994
10
+ class SheetIdentifier < Identifier
11
+ attribute :base_identifier, Identifier, polymorphic: true
12
+ attribute :sheet_number, :string
13
+ attribute :year, :string, default: -> {}
14
+
15
+ def to_s(lang: :en, lang_single: false, with_edition: false)
16
+ parts = []
17
+
18
+ # Render base identifier
19
+ parts << base_identifier.to_s(lang: lang, lang_single: lang_single,
20
+ with_edition: with_edition)
21
+
22
+ # Add sheet notation /N
23
+ parts << "/#{sheet_number}"
24
+
25
+ # Add year if present
26
+ parts << ":#{year}" if year
27
+
28
+ parts.join
29
+ end
30
+
31
+ # Delegate common attributes to base_identifier
32
+ def publisher
33
+ base_identifier&.publisher
34
+ end
35
+
36
+ def copublishers
37
+ base_identifier&.copublishers
38
+ end
39
+
40
+ def code
41
+ base_identifier&.code
42
+ end
43
+
44
+ def number
45
+ base_identifier&.number
46
+ end
47
+
48
+ def date
49
+ base_identifier&.date
50
+ end
51
+
52
+ def stage
53
+ base_identifier&.stage
54
+ end
55
+
56
+ def typed_stage
57
+ base_identifier&.typed_stage
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,40 @@
1
+ require_relative "base"
2
+ require_relative "../../components/typed_stage"
3
+
4
+ module Pubid
5
+ module Iec
6
+ module Identifiers
7
+ # Societal Technology Trend Report identifier class
8
+ # Single Responsibility: Represents IEC STTR documents
9
+ class SocietalTechnologyTrendReport < Base
10
+ # Societal Technology Trend Reports have full phrase as type abbreviation
11
+ TYPED_STAGES = [
12
+ Pubid::Components::TypedStage.new(
13
+ code: :sttr,
14
+ stage_code: :published,
15
+ type_code: :sttr,
16
+ abbr: ["Trend Report"],
17
+ name: "Societal and Technology Trend Report",
18
+ harmonized_stages: %w[60.00 60.60],
19
+ ),
20
+ ].freeze
21
+
22
+ def self.type
23
+ { key: :sttr, title: "Societal and Technology Trend Report",
24
+ short: "Trend Report" }
25
+ end
26
+
27
+ # Override publisher_portion to add Trend Report
28
+ def publisher_portion
29
+ result = publisher.to_s
30
+
31
+ if typed_stage && typed_stage.abbreviation == "Trend Report"
32
+ result += " Trend Report"
33
+ end
34
+
35
+ result
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,40 @@
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
+ # Systems Reference Document identifier class
9
+ # Single Responsibility: Represents IEC SRD documents
10
+ class SystemsReferenceDocument < Base
11
+ # Systems Reference Documents have SRD as type abbreviation
12
+ TYPED_STAGES = [
13
+ Pubid::Components::TypedStage.new(
14
+ code: :srd,
15
+ stage_code: :published,
16
+ type_code: :srd,
17
+ abbr: ["SRD"],
18
+ name: "Systems Reference Document",
19
+ harmonized_stages: %w[60.00 60.60],
20
+ ),
21
+ ].freeze
22
+
23
+ def self.type
24
+ { key: :srd, title: "Systems Reference Document", short: "SRD" }
25
+ end
26
+
27
+ # Override publisher_portion to add SRD
28
+ def publisher_portion
29
+ result = publisher.to_s
30
+
31
+ if typed_stage && typed_stage.abbreviation == "SRD"
32
+ result += " SRD"
33
+ end
34
+
35
+ result
36
+ end
37
+ end
38
+ end
39
+ end
40
+ 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 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,73 @@
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 stage
64
+ base_identifier&.stage
65
+ end
66
+
67
+ def typed_stage
68
+ base_identifier&.typed_stage
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end