pubid 2.0.0.pre.alpha.7 → 2.0.0.pre.alpha.9
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.
- checksums.yaml +4 -4
- data/README.adoc +9 -50
- data/data/bipm/update_codes.yaml +9 -0
- data/data/iec/update_codes.yaml +3 -0
- data/data/ieee/update_codes.yaml +107 -1
- data/data/nist/series.yaml +155 -0
- data/data/nist/update_codes.yaml +8 -0
- data/lib/pubid/adobe/builder.rb +52 -0
- data/lib/pubid/adobe/identifier.rb +49 -0
- data/lib/pubid/adobe/identifiers/publication.rb +31 -0
- data/lib/pubid/adobe/identifiers/tech_note.rb +32 -0
- data/lib/pubid/adobe/identifiers.rb +10 -0
- data/lib/pubid/adobe/parser.rb +128 -0
- data/lib/pubid/adobe/renderer.rb +39 -0
- data/lib/pubid/adobe/urn_generator.rb +42 -0
- data/lib/pubid/adobe/urn_parser.rb +69 -0
- data/lib/pubid/adobe.rb +60 -0
- data/lib/pubid/amca/builder.rb +2 -2
- data/lib/pubid/amca/identifier.rb +1 -3
- data/lib/pubid/amca/identifiers/base.rb +1 -6
- data/lib/pubid/amca/identifiers/interpretation.rb +1 -1
- data/lib/pubid/amca/identifiers/publication.rb +1 -1
- data/lib/pubid/amca/identifiers/standard.rb +1 -1
- data/lib/pubid/amca/identifiers.rb +0 -1
- data/lib/pubid/amca/single_identifier.rb +1 -1
- data/lib/pubid/amca.rb +3 -3
- data/lib/pubid/ashrae/builder.rb +22 -22
- data/lib/pubid/ashrae/identifier.rb +3 -4
- data/lib/pubid/ashrae/identifiers/addenda_package.rb +1 -1
- data/lib/pubid/ashrae/identifiers/addendum.rb +1 -1
- data/lib/pubid/ashrae/identifiers/base.rb +14 -8
- data/lib/pubid/ashrae/identifiers/combined_addenda.rb +1 -1
- data/lib/pubid/ashrae/identifiers.rb +0 -1
- data/lib/pubid/ashrae/parser.rb +14 -9
- data/lib/pubid/ashrae/renderer.rb +19 -19
- data/lib/pubid/ashrae/single_identifier.rb +1 -1
- data/lib/pubid/ashrae/supplement_identifier.rb +6 -6
- data/lib/pubid/ashrae.rb +3 -3
- data/lib/pubid/bipm/builder.rb +107 -0
- data/lib/pubid/bipm/identifier.rb +160 -0
- data/lib/pubid/bipm/identifiers/committee_document.rb +24 -0
- data/lib/pubid/bipm/identifiers/guide.rb +24 -0
- data/lib/pubid/bipm/identifiers/meeting.rb +41 -0
- data/lib/pubid/bipm/identifiers/mep.rb +21 -0
- data/lib/pubid/bipm/identifiers/metrologia_article.rb +24 -0
- data/lib/pubid/bipm/identifiers/si_brochure.rb +20 -0
- data/lib/pubid/bipm/identifiers.rb +15 -0
- data/lib/pubid/bipm/parser.rb +184 -0
- data/lib/pubid/bipm/renderer.rb +110 -0
- data/lib/pubid/bipm/urn_generator.rb +58 -0
- data/lib/pubid/bipm/urn_parser.rb +52 -0
- data/lib/pubid/bipm.rb +86 -0
- data/lib/pubid/bsi/builder.rb +14 -14
- data/lib/pubid/bsi/identifier.rb +0 -1
- data/lib/pubid/bsi/identifiers/addendum_document.rb +2 -2
- data/lib/pubid/bsi/identifiers/amendment.rb +4 -4
- data/lib/pubid/bsi/identifiers/consolidated_identifier.rb +6 -0
- data/lib/pubid/bsi/identifiers/corrigendum.rb +4 -4
- data/lib/pubid/bsi/identifiers/expert_commentary.rb +5 -5
- data/lib/pubid/bsi/identifiers/supplement_document.rb +2 -2
- data/lib/pubid/bsi/identifiers/value_added_publication.rb +6 -6
- data/lib/pubid/bsi/renderer.rb +8 -8
- data/lib/pubid/bsi/single_identifier.rb +48 -0
- data/lib/pubid/builder/base.rb +5 -3
- data/lib/pubid/bundled_identifier.rb +3 -3
- data/lib/pubid/calconnect/builder.rb +38 -0
- data/lib/pubid/calconnect/identifier.rb +117 -0
- data/lib/pubid/calconnect/identifiers/standard.rb +29 -0
- data/lib/pubid/calconnect/identifiers.rb +9 -0
- data/lib/pubid/calconnect/parser.rb +54 -0
- data/lib/pubid/calconnect/renderer.rb +36 -0
- data/lib/pubid/calconnect/urn_generator.rb +33 -0
- data/lib/pubid/calconnect/urn_parser.rb +34 -0
- data/lib/pubid/calconnect.rb +77 -0
- data/lib/pubid/ccsds/builder.rb +1 -1
- data/lib/pubid/ccsds/identifier.rb +1 -1
- data/lib/pubid/ccsds/identifiers/corrigendum.rb +2 -2
- data/lib/pubid/ccsds/supplement_identifier.rb +6 -6
- data/lib/pubid/ccsds/urn_generator.rb +3 -3
- data/lib/pubid/cen_cenelec/builder.rb +46 -12
- data/lib/pubid/cen_cenelec/identifiers/amendment.rb +2 -2
- data/lib/pubid/cen_cenelec/identifiers/consolidated_identifier.rb +6 -0
- data/lib/pubid/cen_cenelec/identifiers/corrigendum.rb +2 -2
- data/lib/pubid/cen_cenelec/identifiers/european_norm.rb +60 -3
- data/lib/pubid/cen_cenelec/identifiers/fragment.rb +2 -2
- data/lib/pubid/cen_cenelec/renderer.rb +5 -5
- data/lib/pubid/cen_cenelec/supplement_identifier.rb +5 -5
- data/lib/pubid/cen_cenelec/urn_generator.rb +1 -1
- data/lib/pubid/cen_cenelec.rb +76 -72
- data/lib/pubid/cie/builder.rb +139 -24
- data/lib/pubid/cie/identifier.rb +7 -3
- data/lib/pubid/cie/identifiers/bundle.rb +32 -4
- data/lib/pubid/cie/identifiers/code_attributes.rb +52 -0
- data/lib/pubid/cie/identifiers/conference.rb +9 -4
- data/lib/pubid/cie/identifiers/corrigendum.rb +17 -23
- data/lib/pubid/cie/identifiers/dual_published.rb +4 -4
- data/lib/pubid/cie/identifiers/identical.rb +7 -7
- data/lib/pubid/cie/identifiers/joint_published.rb +8 -8
- data/lib/pubid/cie/identifiers/proceedings.rb +39 -0
- data/lib/pubid/cie/identifiers/standard.rb +33 -7
- data/lib/pubid/cie/identifiers/supplement.rb +24 -22
- data/lib/pubid/cie/identifiers/tutorial_bundle.rb +6 -2
- data/lib/pubid/cie/identifiers.rb +2 -0
- data/lib/pubid/cie/parser.rb +54 -5
- data/lib/pubid/cie/single_identifier.rb +40 -1
- data/lib/pubid/cie/supplement_identifier.rb +29 -16
- data/lib/pubid/cie/urn_generator.rb +11 -8
- data/lib/pubid/cie.rb +0 -1
- data/lib/pubid/components/date.rb +21 -5
- data/lib/pubid/csa/builder.rb +1 -1
- data/lib/pubid/csa/composite_identifier.rb +17 -1
- data/lib/pubid/csa/identifier.rb +48 -3
- data/lib/pubid/csa/identifiers/bundled.rb +6 -0
- data/lib/pubid/csa/identifiers/combined.rb +6 -0
- data/lib/pubid/csa/identifiers/package.rb +2 -2
- data/lib/pubid/csa/parser.rb +6 -6
- data/lib/pubid/csa/wrapper_identifier.rb +17 -0
- data/lib/pubid/doi/builder.rb +18 -0
- data/lib/pubid/doi/identifier.rb +46 -0
- data/lib/pubid/doi/identifiers/resource.rb +30 -0
- data/lib/pubid/doi/identifiers.rb +9 -0
- data/lib/pubid/doi/parser.rb +52 -0
- data/lib/pubid/doi/renderer.rb +13 -0
- data/lib/pubid/doi.rb +55 -0
- data/lib/pubid/easc/builder.rb +55 -0
- data/lib/pubid/easc/identifier.rb +61 -0
- data/lib/pubid/easc/identifiers/pmg.rb +20 -0
- data/lib/pubid/easc/identifiers/rmg.rb +19 -0
- data/lib/pubid/easc/identifiers.rb +10 -0
- data/lib/pubid/easc/parser.rb +80 -0
- data/lib/pubid/easc/renderer.rb +48 -0
- data/lib/pubid/easc/urn_generator.rb +46 -0
- data/lib/pubid/easc/urn_parser.rb +57 -0
- data/lib/pubid/easc.rb +52 -0
- data/lib/pubid/ecma/builder.rb +31 -0
- data/lib/pubid/ecma/identifier.rb +76 -0
- data/lib/pubid/ecma/identifiers/memento.rb +30 -0
- data/lib/pubid/ecma/identifiers/standard.rb +31 -0
- data/lib/pubid/ecma/identifiers/technical_report.rb +31 -0
- data/lib/pubid/ecma/identifiers.rb +11 -0
- data/lib/pubid/ecma/parser.rb +41 -0
- data/lib/pubid/ecma/renderer.rb +46 -0
- data/lib/pubid/ecma/urn_generator.rb +25 -0
- data/lib/pubid/ecma/urn_parser.rb +35 -0
- data/lib/pubid/ecma.rb +67 -0
- data/lib/pubid/etsi/builder.rb +7 -3
- data/lib/pubid/etsi/identifier.rb +1 -3
- data/lib/pubid/etsi/identifiers/base.rb +28 -10
- data/lib/pubid/etsi/identifiers/etsi_standard.rb +128 -4
- data/lib/pubid/etsi/identifiers/supplement_identifier.rb +35 -3
- data/lib/pubid/etsi/identifiers.rb +0 -1
- data/lib/pubid/etsi/parser.rb +8 -2
- data/lib/pubid/etsi/renderer.rb +8 -2
- data/lib/pubid/etsi.rb +5 -5
- data/lib/pubid/export/exporter.rb +2 -1
- data/lib/pubid/export/flavor_exporter.rb +18 -3
- data/lib/pubid/gb/builder.rb +45 -0
- data/lib/pubid/gb/identifier.rb +64 -0
- data/lib/pubid/gb/identifiers/standard.rb +34 -0
- data/lib/pubid/gb/identifiers.rb +9 -0
- data/lib/pubid/gb/parser.rb +63 -0
- data/lib/pubid/gb/renderer.rb +35 -0
- data/lib/pubid/gb.rb +87 -0
- data/lib/pubid/gost/builder.rb +148 -0
- data/lib/pubid/gost/identifier.rb +49 -0
- data/lib/pubid/gost/identifiers/foreign_reference.rb +25 -0
- data/lib/pubid/gost/identifiers/harmonized.rb +39 -0
- data/lib/pubid/gost/identifiers/identical_adoption.rb +39 -0
- data/lib/pubid/gost/identifiers/interstate_standard.rb +20 -0
- data/lib/pubid/gost/identifiers/national_standard.rb +19 -0
- data/lib/pubid/gost/identifiers.rb +13 -0
- data/lib/pubid/gost/parser.rb +97 -0
- data/lib/pubid/gost/renderer.rb +48 -0
- data/lib/pubid/gost/urn_generator.rb +46 -0
- data/lib/pubid/gost/urn_parser.rb +52 -0
- data/lib/pubid/gost.rb +49 -0
- data/lib/pubid/iala/builder.rb +22 -27
- data/lib/pubid/iala/identifier.rb +27 -2
- data/lib/pubid/iala/identifiers/advice.rb +1 -1
- data/lib/pubid/iala/identifiers/annex.rb +14 -12
- data/lib/pubid/iala/identifiers/general_assembly.rb +5 -2
- data/lib/pubid/iala/identifiers/guideline.rb +3 -1
- data/lib/pubid/iala/identifiers/letter.rb +1 -1
- data/lib/pubid/iala/identifiers/manual.rb +3 -1
- data/lib/pubid/iala/identifiers/model_course.rb +3 -1
- data/lib/pubid/iala/identifiers/recommendation.rb +3 -1
- data/lib/pubid/iala/identifiers/report.rb +1 -1
- data/lib/pubid/iala/identifiers/resolution.rb +1 -1
- data/lib/pubid/iala/identifiers/standard.rb +3 -1
- data/lib/pubid/iala/identifiers.rb +0 -1
- data/lib/pubid/iala/renderer.rb +1 -1
- data/lib/pubid/iala/urn_generator.rb +1 -1
- data/lib/pubid/iala/urn_parser.rb +19 -2
- data/lib/pubid/iala.rb +4 -4
- data/lib/pubid/iana/builder.rb +20 -0
- data/lib/pubid/iana/identifier.rb +72 -0
- data/lib/pubid/iana/identifiers/registry.rb +33 -0
- data/lib/pubid/iana/identifiers.rb +9 -0
- data/lib/pubid/iana/parser.rb +38 -0
- data/lib/pubid/iana/renderer.rb +29 -0
- data/lib/pubid/iana/urn_generator.rb +15 -0
- data/lib/pubid/iana/urn_parser.rb +24 -0
- data/lib/pubid/iana.rb +69 -0
- data/lib/pubid/identifier.rb +210 -23
- data/lib/pubid/idf/builder.rb +1 -1
- data/lib/pubid/idf/parser.rb +2 -2
- data/lib/pubid/idf/renderer.rb +1 -1
- data/lib/pubid/idf/supplement_identifier.rb +3 -3
- data/lib/pubid/iec/builder.rb +35 -25
- data/lib/pubid/iec/identifier.rb +47 -2
- data/lib/pubid/iec/identifiers/base.rb +2 -2
- data/lib/pubid/iec/identifiers/consolidated_identifier.rb +6 -0
- data/lib/pubid/iec/identifiers/fragment_identifier.rb +11 -11
- data/lib/pubid/iec/identifiers/international_standard.rb +8 -5
- data/lib/pubid/iec/identifiers/sheet_identifier.rb +12 -12
- data/lib/pubid/iec/identifiers/technical_group.rb +30 -0
- data/lib/pubid/iec/identifiers/technical_report.rb +1 -1
- data/lib/pubid/iec/identifiers/technical_specification.rb +1 -1
- data/lib/pubid/iec/identifiers/vap_identifier.rb +12 -12
- data/lib/pubid/iec/identifiers.rb +1 -0
- data/lib/pubid/iec/parser.rb +51 -10
- data/lib/pubid/iec/renderer.rb +18 -8
- data/lib/pubid/iec/single_identifier.rb +1 -1
- data/lib/pubid/iec/supplement_identifier.rb +32 -19
- data/lib/pubid/iec.rb +1 -6
- data/lib/pubid/ieee/aiee/builder.rb +17 -3
- data/lib/pubid/ieee/aiee/identifier.rb +45 -61
- data/lib/pubid/ieee/builder.rb +341 -68
- data/lib/pubid/ieee/compaction.rb +121 -0
- data/lib/pubid/ieee/components/draft.rb +47 -7
- data/lib/pubid/ieee/identifier.rb +1 -3
- data/lib/pubid/ieee/identifiers/adopted_standard.rb +30 -5
- data/lib/pubid/ieee/identifiers/amendment.rb +40 -0
- data/lib/pubid/ieee/identifiers/base.rb +106 -13
- data/lib/pubid/ieee/identifiers/code_number.rb +82 -0
- data/lib/pubid/ieee/identifiers/conformance_identifier.rb +6 -2
- data/lib/pubid/ieee/identifiers/corrigendum.rb +17 -2
- data/lib/pubid/ieee/identifiers/csa_dual_published.rb +3 -3
- data/lib/pubid/ieee/identifiers/dual_identifier.rb +3 -3
- data/lib/pubid/ieee/identifiers/dual_published.rb +3 -3
- data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +102 -5
- data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +2 -1
- data/lib/pubid/ieee/identifiers/joint_development.rb +56 -11
- data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +1 -1
- data/lib/pubid/ieee/identifiers/nesc/base.rb +90 -19
- data/lib/pubid/ieee/identifiers/nesc/draft.rb +20 -5
- data/lib/pubid/ieee/identifiers/nesc/edition.rb +32 -0
- data/lib/pubid/ieee/identifiers/nesc/handbook.rb +16 -5
- data/lib/pubid/ieee/identifiers/nesc/redline.rb +11 -2
- data/lib/pubid/ieee/identifiers/nesc/standard.rb +18 -3
- data/lib/pubid/ieee/identifiers/nesc.rb +1 -0
- data/lib/pubid/ieee/identifiers/parenthetical_identifier.rb +3 -3
- data/lib/pubid/ieee/identifiers/project_draft_identifier.rb +14 -6
- data/lib/pubid/ieee/identifiers/redlined_standard.rb +4 -4
- data/lib/pubid/ieee/identifiers/si_standard.rb +4 -1
- data/lib/pubid/ieee/identifiers/standard.rb +4 -1
- data/lib/pubid/ieee/identifiers/supplement_identifier.rb +26 -7
- data/lib/pubid/ieee/identifiers.rb +2 -1
- data/lib/pubid/ieee/ire/builder.rb +7 -6
- data/lib/pubid/ieee/ire/identifier.rb +48 -33
- data/lib/pubid/ieee/nesc/builder.rb +33 -20
- data/lib/pubid/ieee/nesc/parser.rb +15 -14
- data/lib/pubid/ieee/parser.rb +461 -43
- data/lib/pubid/ieee/pre_parser.rb +1 -1
- data/lib/pubid/ieee/renderer.rb +154 -57
- data/lib/pubid/ieee/typed_stages.rb +12 -1
- data/lib/pubid/ieee/urn_generator.rb +3 -5
- data/lib/pubid/ieee.rb +56 -3
- data/lib/pubid/ietf/builder.rb +62 -0
- data/lib/pubid/ietf/identifier.rb +5 -0
- data/lib/pubid/ietf/identifiers/base.rb +75 -0
- data/lib/pubid/ietf/identifiers/bcp.rb +25 -0
- data/lib/pubid/ietf/identifiers/fyi.rb +25 -0
- data/lib/pubid/ietf/identifiers/internet_draft.rb +29 -0
- data/lib/pubid/ietf/identifiers/rfc.rb +25 -0
- data/lib/pubid/ietf/identifiers/std.rb +25 -0
- data/lib/pubid/ietf/identifiers.rb +13 -0
- data/lib/pubid/ietf/parser.rb +43 -0
- data/lib/pubid/ietf/renderer.rb +26 -0
- data/lib/pubid/ietf/urn_generator.rb +23 -0
- data/lib/pubid/ietf/urn_parser.rb +35 -0
- data/lib/pubid/ietf.rb +76 -0
- data/lib/pubid/iho/identifier.rb +1 -3
- data/lib/pubid/iho/identifiers/base.rb +1 -7
- data/lib/pubid/iho/identifiers/bibliographic.rb +1 -1
- data/lib/pubid/iho/identifiers/circular_letter.rb +1 -1
- data/lib/pubid/iho/identifiers/miscellaneous.rb +1 -1
- data/lib/pubid/iho/identifiers/publication.rb +1 -1
- data/lib/pubid/iho/identifiers/standard.rb +1 -1
- data/lib/pubid/iho/identifiers.rb +0 -1
- data/lib/pubid/iho.rb +7 -7
- data/lib/pubid/isbn/builder.rb +44 -0
- data/lib/pubid/isbn/check_digit.rb +53 -0
- data/lib/pubid/isbn/identifier.rb +63 -0
- data/lib/pubid/isbn/identifiers/book.rb +30 -0
- data/lib/pubid/isbn/identifiers.rb +9 -0
- data/lib/pubid/isbn/parser.rb +45 -0
- data/lib/pubid/isbn/renderer.rb +16 -0
- data/lib/pubid/isbn.rb +52 -0
- data/lib/pubid/iso/builder.rb +9 -4
- data/lib/pubid/iso/combined_identifier.rb +2 -2
- data/lib/pubid/iso/identifier.rb +17 -1
- data/lib/pubid/iso/identifiers/directives_supplement.rb +8 -8
- data/lib/pubid/iso/normalizer.rb +2 -2
- data/lib/pubid/iso/parser.rb +16 -12
- data/lib/pubid/iso/supplement_identifier.rb +19 -6
- data/lib/pubid/iso/urn_generator.rb +4 -1
- data/lib/pubid/iso/urn_parser.rb +1 -1
- data/lib/pubid/itu/builder.rb +230 -29
- data/lib/pubid/itu/components/code.rb +48 -5
- data/lib/pubid/itu/components/designation.rb +35 -0
- data/lib/pubid/itu/components.rb +1 -0
- data/lib/pubid/itu/identifier.rb +1 -3
- data/lib/pubid/itu/identifiers/addendum.rb +15 -0
- data/lib/pubid/itu/identifiers/amendment.rb +6 -28
- data/lib/pubid/itu/identifiers/annex.rb +13 -2
- data/lib/pubid/itu/identifiers/annex_of_recommendation.rb +87 -0
- data/lib/pubid/itu/identifiers/appendix_of_recommendation.rb +92 -0
- data/lib/pubid/itu/identifiers/base.rb +341 -23
- data/lib/pubid/itu/identifiers/combined_identifier.rb +99 -23
- data/lib/pubid/itu/identifiers/corrigendum.rb +16 -23
- data/lib/pubid/itu/identifiers/errata.rb +15 -0
- data/lib/pubid/itu/identifiers/handbook.rb +38 -0
- data/lib/pubid/itu/identifiers/question.rb +63 -0
- data/lib/pubid/itu/identifiers/recommendation.rb +3 -2
- data/lib/pubid/itu/identifiers/report.rb +39 -0
- data/lib/pubid/itu/identifiers/special_publication.rb +3 -1
- data/lib/pubid/itu/identifiers/standard_serialization.rb +58 -0
- data/lib/pubid/itu/identifiers/supplement.rb +119 -14
- data/lib/pubid/itu/identifiers.rb +10 -1
- data/lib/pubid/itu/model.rb +1 -1
- data/lib/pubid/itu/parser.rb +480 -26
- data/lib/pubid/itu/urn_generator.rb +36 -6
- data/lib/pubid/itu/urn_parser.rb +8 -0
- data/lib/pubid/itu.rb +11 -3
- data/lib/pubid/jcgm/builder.rb +23 -13
- data/lib/pubid/jcgm/identifiers/amendment.rb +0 -2
- data/lib/pubid/jcgm/identifiers/corrigendum.rb +34 -0
- data/lib/pubid/jcgm/identifiers/gum_guide.rb +3 -3
- data/lib/pubid/jcgm/identifiers/meeting.rb +47 -0
- data/lib/pubid/jcgm/identifiers.rb +2 -0
- data/lib/pubid/jcgm/parser.rb +66 -6
- data/lib/pubid/jcgm/renderer.rb +26 -12
- data/lib/pubid/jcgm/single_identifier.rb +74 -5
- data/lib/pubid/jcgm/supplement_identifier.rb +39 -4
- data/lib/pubid/jcgm/urn_generator.rb +21 -13
- data/lib/pubid/jcgm/urn_parser.rb +15 -3
- data/lib/pubid/jis/identifier.rb +52 -0
- data/lib/pubid/nist/builder.rb +29 -9
- data/lib/pubid/nist/caster.rb +7 -45
- data/lib/pubid/nist/circular_supplement_builder.rb +7 -5
- data/lib/pubid/nist/components/supplement.rb +5 -2
- data/lib/pubid/nist/configuration.rb +7 -1
- data/lib/pubid/nist/identifier.rb +1 -3
- data/lib/pubid/nist/identifiers/base.rb +121 -37
- data/lib/pubid/nist/identifiers/circular.rb +1 -1
- data/lib/pubid/nist/identifiers/commercial_standard.rb +1 -1
- data/lib/pubid/nist/identifiers/commercial_standard_emergency.rb +1 -1
- data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +1 -1
- data/lib/pubid/nist/identifiers/crpl_report.rb +1 -1
- data/lib/pubid/nist/identifiers/dated_document.rb +1 -1
- data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +1 -1
- data/lib/pubid/nist/identifiers/grant_contractor_report.rb +1 -1
- data/lib/pubid/nist/identifiers/handbook.rb +1 -1
- data/lib/pubid/nist/identifiers/internal_report.rb +1 -1
- data/lib/pubid/nist/identifiers/letter_circular.rb +1 -1
- data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +1 -1
- data/lib/pubid/nist/identifiers/monograph.rb +1 -1
- data/lib/pubid/nist/identifiers/ncstar.rb +2 -2
- data/lib/pubid/nist/identifiers/nsrds.rb +1 -1
- data/lib/pubid/nist/identifiers/owmwp.rb +1 -1
- data/lib/pubid/nist/identifiers/report.rb +1 -1
- data/lib/pubid/nist/identifiers/special_publication.rb +10 -1
- data/lib/pubid/nist/identifiers/technical_note.rb +1 -1
- data/lib/pubid/nist/identifiers.rb +0 -1
- data/lib/pubid/nist/parser.rb +29 -4
- data/lib/pubid/nist/preprocessor.rb +15 -0
- data/lib/pubid/nist/router.rb +3 -2
- data/lib/pubid/nist/series/ir.rb +0 -3
- data/lib/pubid/nist/supplement_identifier.rb +9 -9
- data/lib/pubid/nist.rb +13 -12
- data/lib/pubid/oasis/builder.rb +77 -0
- data/lib/pubid/oasis/identifier.rb +82 -0
- data/lib/pubid/oasis/identifiers/standard.rb +29 -0
- data/lib/pubid/oasis/identifiers.rb +9 -0
- data/lib/pubid/oasis/parser.rb +34 -0
- data/lib/pubid/oasis/renderer.rb +29 -0
- data/lib/pubid/oasis/urn_generator.rb +25 -0
- data/lib/pubid/oasis/urn_parser.rb +22 -0
- data/lib/pubid/oasis.rb +74 -0
- data/lib/pubid/ogc/builder.rb +33 -0
- data/lib/pubid/ogc/identifier.rb +77 -0
- data/lib/pubid/ogc/identifiers/document.rb +26 -0
- data/lib/pubid/ogc/identifiers.rb +10 -0
- data/lib/pubid/ogc/parser.rb +40 -0
- data/lib/pubid/ogc/renderer.rb +33 -0
- data/lib/pubid/ogc/urn_generator.rb +14 -0
- data/lib/pubid/ogc/urn_parser.rb +22 -0
- data/lib/pubid/ogc.rb +71 -0
- data/lib/pubid/oiml/builder.rb +31 -7
- data/lib/pubid/oiml/identifier.rb +9 -1
- data/lib/pubid/oiml/parser.rb +11 -12
- data/lib/pubid/oiml/renderer.rb +13 -13
- data/lib/pubid/oiml/single_identifier.rb +20 -0
- data/lib/pubid/oiml/supplement_identifier.rb +9 -9
- data/lib/pubid/oiml/urn_parser.rb +23 -6
- data/lib/pubid/oiml.rb +4 -0
- data/lib/pubid/omg/builder.rb +19 -0
- data/lib/pubid/omg/identifier.rb +44 -0
- data/lib/pubid/omg/identifiers/specification.rb +32 -0
- data/lib/pubid/omg/identifiers.rb +9 -0
- data/lib/pubid/omg/parser.rb +40 -0
- data/lib/pubid/omg/renderer.rb +19 -0
- data/lib/pubid/omg.rb +51 -0
- data/lib/pubid/parsers/mr_string.rb +101 -7
- data/lib/pubid/plateau/builder.rb +8 -4
- data/lib/pubid/plateau/identifier.rb +1 -3
- data/lib/pubid/plateau/identifiers/base.rb +1 -6
- data/lib/pubid/plateau/identifiers/handbook.rb +1 -1
- data/lib/pubid/plateau/identifiers/technical_report.rb +1 -1
- data/lib/pubid/plateau/identifiers.rb +0 -1
- data/lib/pubid/plateau/parser.rb +15 -5
- data/lib/pubid/plateau/renderer.rb +1 -1
- data/lib/pubid/plateau/supplement_identifier.rb +11 -11
- data/lib/pubid/plateau.rb +4 -4
- data/lib/pubid/renderers/human_readable.rb +3 -1
- data/lib/pubid/renderers/mr_string.rb +46 -4
- data/lib/pubid/renderers/supplement_renderer.rb +1 -1
- data/lib/pubid/rendering/supplement.rb +4 -4
- data/lib/pubid/sae/builder.rb +1 -1
- data/lib/pubid/sae/identifier.rb +1 -3
- data/lib/pubid/sae/identifiers/base.rb +10 -7
- data/lib/pubid/sae/identifiers.rb +0 -1
- data/lib/pubid/sae.rb +3 -3
- data/lib/pubid/tgpp/builder.rb +41 -0
- data/lib/pubid/tgpp/identifier.rb +91 -0
- data/lib/pubid/tgpp/identifiers/technical_report.rb +32 -0
- data/lib/pubid/tgpp/identifiers/technical_specification.rb +33 -0
- data/lib/pubid/tgpp/identifiers.rb +11 -0
- data/lib/pubid/tgpp/parser.rb +62 -0
- data/lib/pubid/tgpp/renderer.rb +36 -0
- data/lib/pubid/tgpp/urn_generator.rb +20 -0
- data/lib/pubid/tgpp/urn_parser.rb +28 -0
- data/lib/pubid/tgpp.rb +78 -0
- data/lib/pubid/type_resolver.rb +59 -0
- data/lib/pubid/un/builder.rb +42 -0
- data/lib/pubid/un/identifier.rb +37 -0
- data/lib/pubid/un/identifiers/document.rb +24 -0
- data/lib/pubid/un/identifiers.rb +9 -0
- data/lib/pubid/un/parser.rb +25 -0
- data/lib/pubid/un/renderer.rb +11 -0
- data/lib/pubid/un.rb +46 -0
- data/lib/pubid/version.rb +1 -1
- data/lib/pubid/w3c/builder.rb +55 -0
- data/lib/pubid/w3c/identifier.rb +101 -0
- data/lib/pubid/w3c/identifiers/candidate_recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/candidate_recommendation_draft.rb +31 -0
- data/lib/pubid/w3c/identifiers/draft_note.rb +31 -0
- data/lib/pubid/w3c/identifiers/note.rb +30 -0
- data/lib/pubid/w3c/identifiers/obsolete_recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/proposed_edited_recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/proposed_recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/standard.rb +12 -0
- data/lib/pubid/w3c/identifiers/superseded_recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/working_draft.rb +30 -0
- data/lib/pubid/w3c/identifiers.rb +25 -0
- data/lib/pubid/w3c/parser.rb +43 -0
- data/lib/pubid/w3c/renderer.rb +35 -0
- data/lib/pubid/w3c/urn_generator.rb +18 -0
- data/lib/pubid/w3c/urn_parser.rb +36 -0
- data/lib/pubid/w3c.rb +67 -0
- data/lib/pubid/xsf/builder.rb +17 -0
- data/lib/pubid/xsf/identifier.rb +62 -0
- data/lib/pubid/xsf/identifiers/xep.rb +31 -0
- data/lib/pubid/xsf/identifiers.rb +9 -0
- data/lib/pubid/xsf/parser.rb +25 -0
- data/lib/pubid/xsf/renderer.rb +23 -0
- data/lib/pubid/xsf/urn_generator.rb +13 -0
- data/lib/pubid/xsf/urn_parser.rb +18 -0
- data/lib/pubid/xsf.rb +76 -0
- data/lib/pubid.rb +25 -1
- metadata +205 -4
- data/lib/pubid/cie/components/code.rb +0 -80
- data/lib/pubid/iala/identifiers/base.rb +0 -14
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
# CalConnect (The Calendaring and Scheduling Consortium) flavor.
|
|
5
|
+
#
|
|
6
|
+
# Parses/renders the "CC …" numbering, e.g. "CC 18011:2018",
|
|
7
|
+
# "CC/DIR 10006:2019", "CC/Adv 0707.1:2007". Modeled on Pubid::Jis: a single
|
|
8
|
+
# flat identifier type (Identifiers::Standard) with no supplement layer.
|
|
9
|
+
module Calconnect
|
|
10
|
+
extend Pubid::PrefixesSupport
|
|
11
|
+
|
|
12
|
+
# Sole CalConnect publisher/leading token. Series letters (A, WD, R, S, CD,
|
|
13
|
+
# DIR, Adv, FDS) follow "CC/" and never lead a reference, so they are
|
|
14
|
+
# excluded per the PrefixesSupport inclusion policy.
|
|
15
|
+
PREFIXES = ["CC"].freeze
|
|
16
|
+
|
|
17
|
+
autoload :Builder, "#{__dir__}/calconnect/builder"
|
|
18
|
+
autoload :Identifier, "#{__dir__}/calconnect/identifier"
|
|
19
|
+
autoload :Identifiers, "#{__dir__}/calconnect/identifiers"
|
|
20
|
+
autoload :Parser, "#{__dir__}/calconnect/parser"
|
|
21
|
+
autoload :Renderer, "#{__dir__}/calconnect/renderer"
|
|
22
|
+
autoload :UrnGenerator, "#{__dir__}/calconnect/urn_generator"
|
|
23
|
+
autoload :UrnParser, "#{__dir__}/calconnect/urn_parser"
|
|
24
|
+
|
|
25
|
+
# Parse a CalConnect identifier string
|
|
26
|
+
def self.parse(identifier)
|
|
27
|
+
if identifier.length > Pubid::MAX_INPUT_LENGTH
|
|
28
|
+
raise ArgumentError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
Identifier.parse(identifier)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Per-flavor format registry: inherits global formats, overrides :human
|
|
35
|
+
Identifier.format_registry = FormatRegistry.new(parent: Identifier.format_registry)
|
|
36
|
+
Identifier.format_registry.register(:human, renderer: Calconnect::Renderer)
|
|
37
|
+
|
|
38
|
+
# Auto-discover all identifier types from the Identifiers namespace
|
|
39
|
+
# @return [Array<Class>] identifier classes that define a self.type Hash
|
|
40
|
+
def self.identifier_types
|
|
41
|
+
@identifier_types ||= Identifiers.constants
|
|
42
|
+
.filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
|
|
43
|
+
.select { |c| c.is_a?(Class) && c.singleton_methods(false).include?(:type) }
|
|
44
|
+
.select { |c| c.type.is_a?(Hash) }
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Build typed stage index from identifier types
|
|
48
|
+
# @return [Array<Pubid::Components::TypedStage>] all typed stages
|
|
49
|
+
def self.all_typed_stages
|
|
50
|
+
@all_typed_stages ||= identifier_types.flat_map do |klass|
|
|
51
|
+
if klass.const_defined?(:TYPED_STAGES)
|
|
52
|
+
klass.const_get(:TYPED_STAGES)
|
|
53
|
+
else
|
|
54
|
+
[]
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Lookup: type code -> identifier class
|
|
60
|
+
# @param code [String, Symbol] the type key to find
|
|
61
|
+
# @return [Class, nil] the matching identifier class
|
|
62
|
+
def self.locate_type(code)
|
|
63
|
+
identifier_types.find { |t| t.type[:key].to_s == code.to_s }
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Lookup: abbreviation -> typed stage
|
|
67
|
+
# @param abbr [String, Symbol] the abbreviation to find
|
|
68
|
+
# @return [Pubid::Components::TypedStage, nil] the matching typed stage
|
|
69
|
+
def self.locate_stage(abbr)
|
|
70
|
+
abbr_str = abbr.to_s.upcase
|
|
71
|
+
all_typed_stages.find { |s| s.abbr.any? { |a| a.to_s.upcase == abbr_str } }
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Register CalConnect flavor with the registry
|
|
77
|
+
Pubid::Registry.register(:calconnect, Pubid::Calconnect)
|
data/lib/pubid/ccsds/builder.rb
CHANGED
|
@@ -47,7 +47,7 @@ module Pubid
|
|
|
47
47
|
# If multiple corrigenda exist, we build the last one wrapping the base
|
|
48
48
|
corr_numbers.reduce(base) do |current_base, cor_num|
|
|
49
49
|
Identifiers::Corrigendum.new(
|
|
50
|
-
|
|
50
|
+
base: current_base,
|
|
51
51
|
number: cor_num,
|
|
52
52
|
)
|
|
53
53
|
end
|
|
@@ -10,7 +10,7 @@ module Pubid
|
|
|
10
10
|
#
|
|
11
11
|
# Keeping the root abstract (it is never itself a serialized type, so it is
|
|
12
12
|
# absent from CCSDS_TYPE_MAP) is what breaks the polymorphic recursion a
|
|
13
|
-
# supplement's `
|
|
13
|
+
# supplement's `base` would otherwise hit if it pointed at a
|
|
14
14
|
# concrete type that is also its own superclass.
|
|
15
15
|
class Identifier < ::Pubid::Identifier
|
|
16
16
|
# CCSDS stores every code component as a plain string (the Builder passes
|
|
@@ -25,14 +25,14 @@ module Pubid
|
|
|
25
25
|
# attribute (mirroring ISO), so it serializes via Base's key_value as
|
|
26
26
|
# { _type, number: '1', base: {...} } with no corrigendum-specific map.
|
|
27
27
|
def to_s
|
|
28
|
-
base_str =
|
|
28
|
+
base_str = base.to_s
|
|
29
29
|
"#{base_str} Cor. #{number}"
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
def ==(other)
|
|
33
33
|
return false unless other.is_a?(Corrigendum)
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
base == other.base && number == other.number
|
|
36
36
|
end
|
|
37
37
|
end
|
|
38
38
|
end
|
|
@@ -4,28 +4,28 @@ module Pubid
|
|
|
4
4
|
module Ccsds
|
|
5
5
|
# Base class for CCSDS supplements (corrigenda, amendments, etc.).
|
|
6
6
|
# Descends from the abstract root (not the concrete Base) and points
|
|
7
|
-
# `
|
|
7
|
+
# `base` at the root, so the polymorphic attribute never
|
|
8
8
|
# resolves to its own superclass — which is what prevents lutaml from
|
|
9
9
|
# recursing forever while building a supplement from a hash.
|
|
10
10
|
class SupplementIdentifier < Identifier
|
|
11
|
-
attribute :
|
|
11
|
+
attribute :base, Identifier, polymorphic: true
|
|
12
12
|
|
|
13
13
|
# Serialize the supplemented identifier under "base" (matches ISO/JIS).
|
|
14
|
-
# The key stays `
|
|
14
|
+
# The key stays `base` for the attribute/getter, which
|
|
15
15
|
# relaton-index's get_id_number relies on. A supplement's own code
|
|
16
16
|
# attributes (number/part/edition/...) stay nil — they live inside
|
|
17
17
|
# `base` — so the merged root key_value omits them here, keeping the
|
|
18
18
|
# serialization lean and non-duplicated.
|
|
19
19
|
key_value do
|
|
20
|
-
map "base", to: :
|
|
20
|
+
map "base", to: :base
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
def <=>(other)
|
|
24
24
|
return nil unless other.is_a?(SupplementIdentifier)
|
|
25
25
|
|
|
26
26
|
# Compare base identifiers first
|
|
27
|
-
if
|
|
28
|
-
base_cmp =
|
|
27
|
+
if base && other.base
|
|
28
|
+
base_cmp = base <=> other.base
|
|
29
29
|
return base_cmp unless base_cmp.zero?
|
|
30
30
|
end
|
|
31
31
|
|
|
@@ -91,14 +91,14 @@ module Pubid
|
|
|
91
91
|
|
|
92
92
|
while current.is_a?(SupplementIdentifier)
|
|
93
93
|
supplement_chain.unshift(current)
|
|
94
|
-
current = current.
|
|
94
|
+
current = current.base
|
|
95
95
|
end
|
|
96
96
|
|
|
97
97
|
base_gen = self.class.new(current)
|
|
98
98
|
base_urn = base_gen.generate_base_urn
|
|
99
99
|
|
|
100
|
-
|
|
101
|
-
parts <<
|
|
100
|
+
base_part = base_urn.sub(/^urn:ccsds:/, "")
|
|
101
|
+
parts << base_part
|
|
102
102
|
|
|
103
103
|
supplement_chain.each do |supp|
|
|
104
104
|
if supp.number && !supp.number.to_s.empty?
|
|
@@ -33,6 +33,22 @@ module Pubid
|
|
|
33
33
|
return build_standalone_supplement(data)
|
|
34
34
|
end
|
|
35
35
|
|
|
36
|
+
# Implicit adoption: when an EN has no explicit "IEC" prefix but
|
|
37
|
+
# the number falls in the IEC range (60000-79999), treat it as an
|
|
38
|
+
# adoption of the corresponding IEC standard. The lower ISO-only
|
|
39
|
+
# range (1-59999) is intentionally NOT mapped here — too many
|
|
40
|
+
# existing CEN publications (EN Guide N, EN N as a real CEN-assigned
|
|
41
|
+
# number) would change type. Callers who want explicit adoption
|
|
42
|
+
# can still write "EN ISO 12345".
|
|
43
|
+
# (https://github.com/pubid/pubid/issues/249)
|
|
44
|
+
# Skip when parts are present — they would be lost when we rebuild
|
|
45
|
+
# the identifier from just the base number.
|
|
46
|
+
if data[:publisher]&.to_s == "EN" && !data[:adopted_string] &&
|
|
47
|
+
data[:parts].to_a.empty? &&
|
|
48
|
+
(adopted = build_implicit_adoption(data))
|
|
49
|
+
return adopted
|
|
50
|
+
end
|
|
51
|
+
|
|
36
52
|
# Extract supplements before building base identifier (only plus/bundled)
|
|
37
53
|
supplements_data = extract_supplements(data)
|
|
38
54
|
|
|
@@ -56,18 +72,18 @@ module Pubid
|
|
|
56
72
|
base_data.delete(:amendment_number)
|
|
57
73
|
base_data.delete(:fragment_number)
|
|
58
74
|
|
|
59
|
-
|
|
60
|
-
assign_attributes(
|
|
75
|
+
base = locate_identifier_klass(base_data).new
|
|
76
|
+
assign_attributes(base, base_data)
|
|
61
77
|
|
|
62
78
|
# Build Amendment identifier wrapping the base
|
|
63
79
|
amendment = Identifiers::Amendment.new(
|
|
64
|
-
|
|
80
|
+
base: base,
|
|
65
81
|
amendment_number: data[:amendment_number].to_s,
|
|
66
82
|
)
|
|
67
83
|
|
|
68
84
|
# Build Fragment wrapping the amendment
|
|
69
85
|
Identifiers::Fragment.new(
|
|
70
|
-
|
|
86
|
+
base: amendment,
|
|
71
87
|
fragment_number: data[:fragment_number].to_s,
|
|
72
88
|
)
|
|
73
89
|
end
|
|
@@ -207,6 +223,24 @@ module Pubid
|
|
|
207
223
|
)
|
|
208
224
|
end
|
|
209
225
|
|
|
226
|
+
# Implicit adoption by number range. Returns an AdoptedEuropeanNorm
|
|
227
|
+
# wrapping the IEC identifier that the EN number implies, or nil if the
|
|
228
|
+
# number doesn't fall in the IEC range. Limited to IEC range only —
|
|
229
|
+
# see the call site comment for why the ISO range is excluded.
|
|
230
|
+
def build_implicit_adoption(data)
|
|
231
|
+
number = data[:number].to_s
|
|
232
|
+
num_str = number.to_s.strip
|
|
233
|
+
return nil unless num_str.match?(/\A\d{1,6}\z/)
|
|
234
|
+
|
|
235
|
+
num = num_str.to_i
|
|
236
|
+
return nil unless (60_000..79_999).cover?(num)
|
|
237
|
+
|
|
238
|
+
Identifiers::AdoptedEuropeanNorm.new(
|
|
239
|
+
publisher: ["EN"],
|
|
240
|
+
adopted_identifier: Pubid::Iec.parse("IEC #{num_str}"),
|
|
241
|
+
)
|
|
242
|
+
end
|
|
243
|
+
|
|
210
244
|
def build_env_adopted_identifier(data)
|
|
211
245
|
# Parse the adopted identifier string
|
|
212
246
|
adopted_str = data[:adopted_string]&.to_s&.strip
|
|
@@ -225,17 +259,17 @@ module Pubid
|
|
|
225
259
|
)
|
|
226
260
|
end
|
|
227
261
|
|
|
228
|
-
def wrap_with_consolidated(
|
|
262
|
+
def wrap_with_consolidated(base, supplements_data)
|
|
229
263
|
supplement_ids = supplements_data.map do |supp|
|
|
230
264
|
if supp[:type] == :amendment
|
|
231
265
|
Identifiers::Amendment.new(
|
|
232
|
-
|
|
266
|
+
base: base,
|
|
233
267
|
amendment_number: supp[:number],
|
|
234
268
|
amendment_year: supp[:year]&.to_i,
|
|
235
269
|
)
|
|
236
270
|
else
|
|
237
271
|
corr_attrs = {
|
|
238
|
-
|
|
272
|
+
base: base,
|
|
239
273
|
corrigendum_number: supp[:number],
|
|
240
274
|
corrigendum_year: supp[:year]&.to_i,
|
|
241
275
|
}
|
|
@@ -245,7 +279,7 @@ module Pubid
|
|
|
245
279
|
end
|
|
246
280
|
|
|
247
281
|
Identifiers::ConsolidatedIdentifier.new(
|
|
248
|
-
identifiers: [
|
|
282
|
+
identifiers: [base] + supplement_ids,
|
|
249
283
|
)
|
|
250
284
|
end
|
|
251
285
|
|
|
@@ -294,8 +328,8 @@ module Pubid
|
|
|
294
328
|
# Build base identifier first (without supplements)
|
|
295
329
|
base_data = data.dup
|
|
296
330
|
base_data.delete(:supplements)
|
|
297
|
-
|
|
298
|
-
assign_attributes(
|
|
331
|
+
base = locate_identifier_klass(base_data).new
|
|
332
|
+
assign_attributes(base, base_data)
|
|
299
333
|
|
|
300
334
|
# Get the first supplement (slash means only one supplement)
|
|
301
335
|
supp_array = data[:supplements]
|
|
@@ -305,13 +339,13 @@ module Pubid
|
|
|
305
339
|
# Build appropriate supplement identifier
|
|
306
340
|
if supp_data[:amd_number]
|
|
307
341
|
Identifiers::Amendment.new(
|
|
308
|
-
|
|
342
|
+
base: base,
|
|
309
343
|
amendment_number: supp_data[:amd_number].to_s,
|
|
310
344
|
amendment_year: supp_data[:amd_year]&.to_i,
|
|
311
345
|
)
|
|
312
346
|
else
|
|
313
347
|
corr_attrs = {
|
|
314
|
-
|
|
348
|
+
base: base,
|
|
315
349
|
corrigendum_number: supp_data[:cor_number]&.to_s,
|
|
316
350
|
corrigendum_year: (supp_data[:cor_year] || supp_data[:year])&.to_i,
|
|
317
351
|
}
|
|
@@ -6,12 +6,12 @@ module Pubid
|
|
|
6
6
|
# Amendment Identifier
|
|
7
7
|
# Contains a base identifier plus amendment parameters
|
|
8
8
|
class Amendment < Base
|
|
9
|
-
attribute :
|
|
9
|
+
attribute :base, Base, polymorphic: true
|
|
10
10
|
attribute :amendment_number, :string
|
|
11
11
|
attribute :amendment_year, :integer
|
|
12
12
|
|
|
13
13
|
def publisher
|
|
14
|
-
|
|
14
|
+
base&.publisher
|
|
15
15
|
end
|
|
16
16
|
end
|
|
17
17
|
end
|
|
@@ -28,6 +28,12 @@ module Pubid
|
|
|
28
28
|
def type
|
|
29
29
|
identifiers&.first&.type
|
|
30
30
|
end
|
|
31
|
+
|
|
32
|
+
# The origin document. Members live in `identifiers` (not `base`), so
|
|
33
|
+
# walk the first member to its root.
|
|
34
|
+
def root
|
|
35
|
+
identifiers&.first&.root || self
|
|
36
|
+
end
|
|
31
37
|
end
|
|
32
38
|
end
|
|
33
39
|
end
|
|
@@ -6,13 +6,13 @@ module Pubid
|
|
|
6
6
|
# Corrigendum Identifier
|
|
7
7
|
# Contains a base identifier plus corrigendum parameters
|
|
8
8
|
class Corrigendum < Base
|
|
9
|
-
attribute :
|
|
9
|
+
attribute :base, Base, polymorphic: true
|
|
10
10
|
attribute :corrigendum_number, :string
|
|
11
11
|
attribute :corrigendum_year, :integer
|
|
12
12
|
attribute :corrigendum_month, :string
|
|
13
13
|
|
|
14
14
|
def publisher
|
|
15
|
-
|
|
15
|
+
base&.publisher
|
|
16
16
|
end
|
|
17
17
|
end
|
|
18
18
|
end
|
|
@@ -6,29 +6,86 @@ module Pubid
|
|
|
6
6
|
# European Norm (EN) identifier
|
|
7
7
|
class EuropeanNorm < SingleIdentifier
|
|
8
8
|
TYPED_STAGES = [
|
|
9
|
+
# Published (puben): 60.00-60.60 + publication milestones (65.xx)
|
|
9
10
|
Components::TypedStage.new(
|
|
10
11
|
code: :puben,
|
|
11
12
|
stage_code: :published,
|
|
12
13
|
type_code: :en,
|
|
13
14
|
abbr: ["EN"],
|
|
14
15
|
name: "European Norm",
|
|
15
|
-
harmonized_stages: %w[60.00 60.60],
|
|
16
|
+
harmonized_stages: %w[60.00 60.55 60.60 65.31 65.51 65.62],
|
|
16
17
|
),
|
|
18
|
+
# Preliminary (pwien): proposal/WI stages
|
|
19
|
+
Components::TypedStage.new(
|
|
20
|
+
code: :pwien,
|
|
21
|
+
stage_code: :preliminary,
|
|
22
|
+
type_code: :en,
|
|
23
|
+
abbr: ["pWI EN"],
|
|
24
|
+
name: "Preliminary Work Item EN",
|
|
25
|
+
harmonized_stages: %w[00.60 10.98 10.99 20.60],
|
|
26
|
+
),
|
|
27
|
+
# Proposal (pren): working draft stages + split/merge interruption end
|
|
17
28
|
Components::TypedStage.new(
|
|
18
29
|
code: :pren,
|
|
19
30
|
stage_code: :proposal,
|
|
20
31
|
type_code: :en,
|
|
21
32
|
abbr: ["prEN"],
|
|
22
33
|
name: "Proposal European Norm",
|
|
23
|
-
harmonized_stages: %w[30.00 30.20 30.60 30.92 30.98 30.99],
|
|
34
|
+
harmonized_stages: %w[30.00 30.20 30.60 30.92 30.97 30.98 30.99],
|
|
24
35
|
),
|
|
36
|
+
# Final Proposal (fpren): enquiry stages
|
|
25
37
|
Components::TypedStage.new(
|
|
26
38
|
code: :fpren,
|
|
27
39
|
stage_code: :final_proposal,
|
|
28
40
|
type_code: :en,
|
|
29
41
|
abbr: ["FprEN"],
|
|
30
42
|
name: "Final Proposal European Norm",
|
|
31
|
-
harmonized_stages: %w[40.00 40.20 40.60 40.92 40.98 40.99],
|
|
43
|
+
harmonized_stages: %w[40.00 40.20 40.60 40.92 40.97 40.98 40.99],
|
|
44
|
+
),
|
|
45
|
+
# Formal Vote (fven): COCOR + FV dispatch stages
|
|
46
|
+
Components::TypedStage.new(
|
|
47
|
+
code: :fven,
|
|
48
|
+
stage_code: :formal_vote,
|
|
49
|
+
type_code: :en,
|
|
50
|
+
abbr: ["FV prEN"],
|
|
51
|
+
name: "Formal Vote EN",
|
|
52
|
+
harmonized_stages: %w[43.20 43.60 43.97 43.98 45.97 45.98 45.99],
|
|
53
|
+
),
|
|
54
|
+
# Vote (ven): enquiry/vote stages
|
|
55
|
+
Components::TypedStage.new(
|
|
56
|
+
code: :ven,
|
|
57
|
+
stage_code: :vote,
|
|
58
|
+
type_code: :en,
|
|
59
|
+
abbr: ["vEN"],
|
|
60
|
+
name: "Vote EN",
|
|
61
|
+
harmonized_stages: %w[50.20 50.60 50.97 50.98],
|
|
62
|
+
),
|
|
63
|
+
# Review (rven): 2-year review stages
|
|
64
|
+
Components::TypedStage.new(
|
|
65
|
+
code: :rven,
|
|
66
|
+
stage_code: :review,
|
|
67
|
+
type_code: :en,
|
|
68
|
+
abbr: ["rvEN"],
|
|
69
|
+
name: "Review EN",
|
|
70
|
+
harmonized_stages: %w[90.00 90.20 90.60 90.92 90.93 90.98],
|
|
71
|
+
),
|
|
72
|
+
# Reactivation (racen): re-activation stage
|
|
73
|
+
Components::TypedStage.new(
|
|
74
|
+
code: :racen,
|
|
75
|
+
stage_code: :reactivation,
|
|
76
|
+
type_code: :en,
|
|
77
|
+
abbr: ["racEN"],
|
|
78
|
+
name: "Re-activated EN",
|
|
79
|
+
harmonized_stages: %w[96.60],
|
|
80
|
+
),
|
|
81
|
+
# Withdrawn (wden): withdrawal stage
|
|
82
|
+
Components::TypedStage.new(
|
|
83
|
+
code: :wden,
|
|
84
|
+
stage_code: :withdrawn,
|
|
85
|
+
type_code: :en,
|
|
86
|
+
abbr: ["wdEN"],
|
|
87
|
+
name: "Withdrawn EN",
|
|
88
|
+
harmonized_stages: %w[99.60],
|
|
32
89
|
),
|
|
33
90
|
].freeze
|
|
34
91
|
|
|
@@ -6,11 +6,11 @@ module Pubid
|
|
|
6
6
|
# Fragment Identifier - wraps an Amendment with a fragment number
|
|
7
7
|
# Example: "EN 60038 AMD1 FRAG2" = Fragment 2 of Amendment 1 to EN 60038
|
|
8
8
|
class Fragment < Base
|
|
9
|
-
attribute :
|
|
9
|
+
attribute :base, Amendment
|
|
10
10
|
attribute :fragment_number, :string
|
|
11
11
|
|
|
12
12
|
def publisher
|
|
13
|
-
|
|
13
|
+
base&.base&.publisher
|
|
14
14
|
end
|
|
15
15
|
end
|
|
16
16
|
end
|
|
@@ -190,8 +190,8 @@ module Pubid
|
|
|
190
190
|
|
|
191
191
|
# Amendment: "EN 196-3:2005/A1:2008"
|
|
192
192
|
def render_amendment(id)
|
|
193
|
-
result = if id.
|
|
194
|
-
"#{id.
|
|
193
|
+
result = if id.base
|
|
194
|
+
"#{id.base}/A#{id.amendment_number}"
|
|
195
195
|
else
|
|
196
196
|
"/A#{id.amendment_number}"
|
|
197
197
|
end
|
|
@@ -201,8 +201,8 @@ module Pubid
|
|
|
201
201
|
|
|
202
202
|
# Corrigendum: "EN 60038/AC1:2012"
|
|
203
203
|
def render_corrigendum(id)
|
|
204
|
-
if id.
|
|
205
|
-
result = id.
|
|
204
|
+
if id.base
|
|
205
|
+
result = id.base.to_s
|
|
206
206
|
result += "/AC"
|
|
207
207
|
result += id.corrigendum_number if id.corrigendum_number && !id.corrigendum_number.empty?
|
|
208
208
|
else
|
|
@@ -245,7 +245,7 @@ module Pubid
|
|
|
245
245
|
|
|
246
246
|
# Fragment: "EN 60038 AMD1 FRAG2"
|
|
247
247
|
def render_fragment(id)
|
|
248
|
-
"#{id.
|
|
248
|
+
"#{id.base} FRAG#{id.fragment_number}"
|
|
249
249
|
end
|
|
250
250
|
|
|
251
251
|
# EuropeanPrestandard: "ENV ISO 8601" or falls through to SingleIdentifier
|
|
@@ -5,27 +5,27 @@ require "lutaml/model"
|
|
|
5
5
|
module Pubid
|
|
6
6
|
module CenCenelec
|
|
7
7
|
class SupplementIdentifier < Identifiers::Base
|
|
8
|
-
attribute :
|
|
8
|
+
attribute :base, Identifiers::Base, polymorphic: true
|
|
9
9
|
attribute :number, Components::Code
|
|
10
10
|
attribute :date, Components::Date
|
|
11
11
|
attribute :stage, Components::Stage
|
|
12
12
|
attribute :type, Components::Type
|
|
13
13
|
attribute :typed_stage, Components::TypedStage
|
|
14
14
|
|
|
15
|
-
# Delegate methods to
|
|
15
|
+
# Delegate methods to base for convenient access
|
|
16
16
|
def publisher
|
|
17
|
-
|
|
17
|
+
base&.publisher
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
def copublishers
|
|
21
|
-
|
|
21
|
+
base&.copublishers
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
def <=>(other)
|
|
25
25
|
return nil unless other.is_a?(SupplementIdentifier)
|
|
26
26
|
|
|
27
27
|
# Compare base identifiers first
|
|
28
|
-
base_cmp =
|
|
28
|
+
base_cmp = base <=> other.base
|
|
29
29
|
return base_cmp unless base_cmp.zero?
|
|
30
30
|
|
|
31
31
|
# Then compare numbers
|