pubid 2.0.0.pre.alpha.8 → 2.0.0.pre.alpha.11
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 +33 -11
- data/conformance/pending.yaml +4 -0
- 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/{archived-gems/pubid-nist → data/nist}/series.yaml +34 -0
- data/data/nist/update_codes.yaml +8 -0
- data/lib/pubid/adobe/builder.rb +52 -0
- data/lib/pubid/adobe/identifier.rb +47 -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 +136 -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 +61 -0
- data/lib/pubid/amca/builder.rb +4 -4
- data/lib/pubid/amca/identifier.rb +1 -3
- data/lib/pubid/amca/identifiers/base.rb +50 -33
- data/lib/pubid/amca/identifiers/interpretation.rb +18 -10
- data/lib/pubid/amca/identifiers/publication.rb +14 -10
- data/lib/pubid/amca/identifiers/standard.rb +3 -1
- data/lib/pubid/amca/identifiers.rb +0 -1
- data/lib/pubid/amca/parser.rb +1 -1
- data/lib/pubid/amca/renderer.rb +4 -4
- data/lib/pubid/amca/single_identifier.rb +1 -1
- data/lib/pubid/amca/urn_generator.rb +2 -2
- data/lib/pubid/amca.rb +5 -4
- data/lib/pubid/ansi/builder.rb +2 -2
- data/lib/pubid/ansi/identifier.rb +18 -0
- data/lib/pubid/ansi/parser.rb +1 -1
- data/lib/pubid/ansi/renderer.rb +2 -2
- data/lib/pubid/ansi.rb +5 -5
- data/lib/pubid/api/builder.rb +16 -2
- data/lib/pubid/api/identifier.rb +25 -4
- data/lib/pubid/api/identifiers/mpms.rb +10 -8
- data/lib/pubid/api/parser.rb +1 -1
- data/lib/pubid/api/renderer.rb +16 -7
- data/lib/pubid/api/single_identifier.rb +5 -12
- data/lib/pubid/api.rb +1 -0
- data/lib/pubid/ashrae/builder.rb +53 -32
- data/lib/pubid/ashrae/identifier.rb +3 -4
- data/lib/pubid/ashrae/identifiers/addenda_package.rb +7 -1
- data/lib/pubid/ashrae/identifiers/addendum.rb +9 -1
- data/lib/pubid/ashrae/identifiers/base.rb +94 -12
- data/lib/pubid/ashrae/identifiers/combined_addenda.rb +8 -1
- data/lib/pubid/ashrae/identifiers/errata.rb +9 -0
- data/lib/pubid/ashrae/identifiers/guideline.rb +3 -0
- data/lib/pubid/ashrae/identifiers/interpretation.rb +16 -0
- data/lib/pubid/ashrae/identifiers/standard.rb +3 -0
- data/lib/pubid/ashrae/identifiers.rb +0 -1
- data/lib/pubid/ashrae/parser.rb +37 -17
- data/lib/pubid/ashrae/renderer.rb +20 -20
- data/lib/pubid/ashrae/single_identifier.rb +1 -1
- data/lib/pubid/ashrae/supplement_identifier.rb +21 -6
- data/lib/pubid/ashrae/urn_generator.rb +8 -2
- data/lib/pubid/ashrae.rb +10 -4
- data/lib/pubid/asme/builder.rb +11 -2
- data/lib/pubid/asme/identifier.rb +9 -0
- data/lib/pubid/asme/identifiers/standard.rb +86 -2
- data/lib/pubid/asme/parser.rb +1 -1
- data/lib/pubid/asme/renderer.rb +3 -3
- data/lib/pubid/asme/single_identifier.rb +8 -1
- data/lib/pubid/asme/urn_generator.rb +2 -2
- data/lib/pubid/asme.rb +1 -0
- data/lib/pubid/astm/builder.rb +10 -3
- data/lib/pubid/astm/identifier.rb +9 -0
- data/lib/pubid/astm/identifiers/adjunct.rb +16 -1
- data/lib/pubid/astm/identifiers/code_number.rb +81 -0
- data/lib/pubid/astm/identifiers/data_series.rb +2 -0
- data/lib/pubid/astm/identifiers/iso_dual_published.rb +16 -0
- data/lib/pubid/astm/identifiers/manual.rb +10 -0
- data/lib/pubid/astm/identifiers/monograph.rb +2 -0
- data/lib/pubid/astm/identifiers/research_report.rb +10 -0
- data/lib/pubid/astm/identifiers/standard.rb +10 -0
- data/lib/pubid/astm/identifiers/technical_report.rb +2 -0
- data/lib/pubid/astm/identifiers/work_in_progress.rb +2 -0
- data/lib/pubid/astm/identifiers.rb +1 -0
- data/lib/pubid/astm/parser.rb +1 -1
- data/lib/pubid/astm/renderer.rb +1 -1
- data/lib/pubid/astm/single_identifier.rb +31 -1
- data/lib/pubid/astm/urn_generator.rb +7 -5
- data/lib/pubid/astm.rb +1 -0
- data/lib/pubid/bipm/builder.rb +163 -0
- data/lib/pubid/bipm/identifier.rb +285 -0
- data/lib/pubid/bipm/identifiers/committee_document.rb +36 -0
- data/lib/pubid/bipm/identifiers/guide.rb +35 -0
- data/lib/pubid/bipm/identifiers/meeting.rb +53 -0
- data/lib/pubid/bipm/identifiers/mep.rb +33 -0
- data/lib/pubid/bipm/identifiers/metrologia_article.rb +48 -0
- data/lib/pubid/bipm/identifiers/si_brochure.rb +33 -0
- data/lib/pubid/bipm/identifiers.rb +15 -0
- data/lib/pubid/bipm/parser.rb +237 -0
- data/lib/pubid/bipm/renderer.rb +118 -0
- data/lib/pubid/bipm/urn_generator.rb +58 -0
- data/lib/pubid/bipm/urn_parser.rb +60 -0
- data/lib/pubid/bipm.rb +92 -0
- data/lib/pubid/bsi/builder.rb +62 -52
- data/lib/pubid/bsi/identifier.rb +0 -1
- data/lib/pubid/bsi/identifiers/addendum_document.rb +2 -2
- data/lib/pubid/bsi/identifiers/adopted_european_norm.rb +36 -7
- data/lib/pubid/bsi/identifiers/adopted_international_standard.rb +7 -6
- data/lib/pubid/bsi/identifiers/amendment.rb +4 -4
- data/lib/pubid/bsi/identifiers/british_industrial_practice.rb +0 -1
- data/lib/pubid/bsi/identifiers/bundled_identifier.rb +10 -0
- data/lib/pubid/bsi/identifiers/committee_document.rb +10 -1
- 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/handbook.rb +0 -2
- data/lib/pubid/bsi/identifiers/practice_guide.rb +0 -1
- data/lib/pubid/bsi/identifiers/set.rb +11 -0
- data/lib/pubid/bsi/identifiers/standalone_amendment.rb +10 -1
- 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/parser.rb +1 -1
- data/lib/pubid/bsi/renderer.rb +71 -59
- data/lib/pubid/bsi/single_identifier.rb +64 -7
- data/lib/pubid/bsi/urn_generator.rb +11 -2
- data/lib/pubid/bsi.rb +7 -1
- data/lib/pubid/builder/base.rb +23 -11
- data/lib/pubid/bundled_identifier.rb +19 -9
- data/lib/pubid/calconnect/builder.rb +38 -0
- data/lib/pubid/calconnect/identifier.rb +121 -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 +83 -0
- data/lib/pubid/ccsds/builder.rb +1 -1
- data/lib/pubid/ccsds/identifier.rb +10 -3
- data/lib/pubid/ccsds/identifiers/base.rb +4 -2
- data/lib/pubid/ccsds/identifiers/corrigendum.rb +4 -4
- data/lib/pubid/ccsds/parser.rb +1 -1
- data/lib/pubid/ccsds/single_identifier.rb +2 -2
- data/lib/pubid/ccsds/supplement_identifier.rb +6 -6
- data/lib/pubid/ccsds/urn_generator.rb +3 -3
- data/lib/pubid/ccsds.rb +1 -0
- data/lib/pubid/cen_cenelec/builder.rb +131 -72
- data/lib/pubid/cen_cenelec/identifier.rb +115 -3
- data/lib/pubid/cen_cenelec/identifiers/adopted_european_norm.rb +27 -16
- data/lib/pubid/cen_cenelec/identifiers/amendment.rb +46 -6
- data/lib/pubid/cen_cenelec/identifiers/base.rb +8 -9
- data/lib/pubid/cen_cenelec/identifiers/cen_report.rb +1 -1
- data/lib/pubid/cen_cenelec/identifiers/cen_workshop_agreement.rb +1 -1
- data/lib/pubid/cen_cenelec/identifiers/cenelec_harmonization_document.rb +1 -1
- data/lib/pubid/cen_cenelec/identifiers/consolidated_identifier.rb +29 -14
- data/lib/pubid/cen_cenelec/identifiers/corrigendum.rb +47 -8
- data/lib/pubid/cen_cenelec/identifiers/european_norm.rb +60 -3
- data/lib/pubid/cen_cenelec/identifiers/european_prestandard.rb +27 -2
- data/lib/pubid/cen_cenelec/identifiers/european_specification.rb +1 -1
- data/lib/pubid/cen_cenelec/identifiers/fragment.rb +15 -5
- data/lib/pubid/cen_cenelec/identifiers/guide.rb +1 -1
- data/lib/pubid/cen_cenelec/identifiers/harmonization_document.rb +1 -1
- data/lib/pubid/cen_cenelec/identifiers/technical_report.rb +1 -1
- data/lib/pubid/cen_cenelec/identifiers/technical_specification.rb +1 -1
- data/lib/pubid/cen_cenelec/parser.rb +1 -1
- data/lib/pubid/cen_cenelec/renderer.rb +55 -60
- data/lib/pubid/cen_cenelec/single_identifier.rb +20 -2
- data/lib/pubid/cen_cenelec/urn_generator.rb +66 -44
- data/lib/pubid/cen_cenelec.rb +104 -82
- data/lib/pubid/cie/builder.rb +149 -24
- data/lib/pubid/cie/identifier.rb +13 -4
- data/lib/pubid/cie/identifiers/bundle.rb +35 -5
- data/lib/pubid/cie/identifiers/code_attributes.rb +52 -0
- data/lib/pubid/cie/identifiers/conference.rb +11 -6
- data/lib/pubid/cie/identifiers/corrigendum.rb +17 -23
- data/lib/pubid/cie/identifiers/dual_published.rb +6 -6
- data/lib/pubid/cie/identifiers/identical.rb +9 -9
- data/lib/pubid/cie/identifiers/joint_published.rb +10 -10
- data/lib/pubid/cie/identifiers/proceedings.rb +41 -0
- data/lib/pubid/cie/identifiers/standard.rb +43 -8
- data/lib/pubid/cie/identifiers/supplement.rb +27 -25
- data/lib/pubid/cie/identifiers/tutorial_bundle.rb +7 -3
- data/lib/pubid/cie/identifiers.rb +2 -0
- data/lib/pubid/cie/parser.rb +55 -6
- 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 +7 -2
- data/lib/pubid/components/date.rb +21 -5
- data/lib/pubid/conformance/checks.rb +72 -0
- data/lib/pubid/conformance/corpus/case.rb +55 -0
- data/lib/pubid/conformance/corpus.rb +36 -0
- data/lib/pubid/conformance/generator.rb +212 -0
- data/lib/pubid/conformance/pending.rb +63 -0
- data/lib/pubid/conformance/runner.rb +153 -0
- data/lib/pubid/conformance.rb +55 -0
- data/lib/pubid/core.rb +2 -0
- data/lib/pubid/csa/builder.rb +48 -48
- data/lib/pubid/csa/composite_identifier.rb +18 -7
- data/lib/pubid/csa/identifier.rb +187 -80
- data/lib/pubid/csa/identifiers/bundled.rb +25 -9
- data/lib/pubid/csa/identifiers/canadian_adopted.rb +13 -13
- data/lib/pubid/csa/identifiers/cec.rb +44 -4
- data/lib/pubid/csa/identifiers/combined.rb +97 -69
- data/lib/pubid/csa/identifiers/csa_adopted.rb +4 -4
- data/lib/pubid/csa/identifiers/package.rb +4 -4
- data/lib/pubid/csa/parser.rb +12 -8
- data/lib/pubid/csa/renderer.rb +13 -5
- data/lib/pubid/csa/single_identifier.rb +93 -4
- data/lib/pubid/csa/urn_generator.rb +9 -2
- data/lib/pubid/csa/wrapper_identifier.rb +43 -10
- data/lib/pubid/csa.rb +7 -1
- data/lib/pubid/doi/builder.rb +18 -0
- data/lib/pubid/doi/identifier.rb +49 -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 +56 -0
- data/lib/pubid/easc/builder.rb +55 -0
- data/lib/pubid/easc/identifier.rb +59 -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 +88 -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 +53 -0
- data/lib/pubid/ecma/builder.rb +45 -0
- data/lib/pubid/ecma/identifier.rb +147 -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 +76 -0
- data/lib/pubid/ecma/renderer.rb +67 -0
- data/lib/pubid/ecma/urn_generator.rb +46 -0
- data/lib/pubid/ecma/urn_parser.rb +51 -0
- data/lib/pubid/ecma.rb +68 -0
- data/lib/pubid/errors.rb +80 -0
- data/lib/pubid/etsi/builder.rb +13 -4
- data/lib/pubid/etsi/identifier.rb +1 -3
- data/lib/pubid/etsi/identifiers/base.rb +43 -11
- data/lib/pubid/etsi/identifiers/etsi_standard.rb +207 -4
- data/lib/pubid/etsi/identifiers/supplement_identifier.rb +45 -3
- data/lib/pubid/etsi/identifiers.rb +0 -1
- data/lib/pubid/etsi/parser.rb +9 -3
- data/lib/pubid/etsi/renderer.rb +8 -2
- data/lib/pubid/etsi.rb +6 -5
- data/lib/pubid/evs/builder.rb +26 -0
- data/lib/pubid/evs/identifier.rb +37 -0
- data/lib/pubid/evs/identifiers/national_adoption.rb +17 -0
- data/lib/pubid/evs/identifiers.rb +9 -0
- data/lib/pubid/evs/parser.rb +27 -0
- data/lib/pubid/evs/renderer.rb +30 -0
- data/lib/pubid/evs/urn_generator.rb +30 -0
- data/lib/pubid/evs/urn_parser.rb +80 -0
- data/lib/pubid/evs.rb +90 -0
- data/lib/pubid/export/exporter.rb +2 -1
- data/lib/pubid/export/flavor_exporter.rb +18 -3
- data/lib/pubid/export.rb +1 -0
- data/lib/pubid/format_detector.rb +1 -0
- data/lib/pubid/gb/builder.rb +45 -0
- data/lib/pubid/gb/identifier.rb +67 -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 +88 -0
- data/lib/pubid/gost/builder.rb +185 -0
- data/lib/pubid/gost/identifier.rb +47 -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 +105 -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 +50 -0
- data/lib/pubid/iala/builder.rb +22 -27
- data/lib/pubid/iala/identifier.rb +36 -8
- data/lib/pubid/iala/identifiers/advice.rb +1 -1
- data/lib/pubid/iala/identifiers/annex.rb +10 -10
- 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/parser.rb +10 -2
- data/lib/pubid/iala/renderer.rb +1 -1
- data/lib/pubid/iala/urn_generator.rb +1 -1
- data/lib/pubid/iala/urn_parser.rb +24 -3
- data/lib/pubid/iala.rb +5 -4
- data/lib/pubid/iana/builder.rb +22 -0
- data/lib/pubid/iana/identifier.rb +140 -0
- data/lib/pubid/iana/identifiers/registry.rb +69 -0
- data/lib/pubid/iana/identifiers.rb +9 -0
- data/lib/pubid/iana/parser.rb +38 -0
- data/lib/pubid/iana/renderer.rb +32 -0
- data/lib/pubid/iana/urn_generator.rb +19 -0
- data/lib/pubid/iana/urn_parser.rb +24 -0
- data/lib/pubid/iana.rb +70 -0
- data/lib/pubid/identifier.rb +797 -26
- data/lib/pubid/identifier_metadata.rb +1 -0
- data/lib/pubid/idf/builder.rb +4 -4
- data/lib/pubid/idf/identifier.rb +18 -9
- data/lib/pubid/idf/parser.rb +3 -3
- data/lib/pubid/idf/renderer.rb +5 -5
- data/lib/pubid/idf/supplement_identifier.rb +3 -3
- data/lib/pubid/idf/urn_generator.rb +1 -1
- data/lib/pubid/idf.rb +7 -1
- data/lib/pubid/iec/builder.rb +49 -32
- data/lib/pubid/iec/components.rb +0 -1
- data/lib/pubid/iec/identifier.rb +112 -77
- data/lib/pubid/iec/identifiers/amendment.rb +6 -2
- data/lib/pubid/iec/identifiers/base.rb +2 -2
- data/lib/pubid/iec/identifiers/component_specification.rb +0 -10
- data/lib/pubid/iec/identifiers/conformity_assessment.rb +0 -10
- data/lib/pubid/iec/identifiers/consolidated_identifier.rb +6 -0
- data/lib/pubid/iec/identifiers/corrigendum.rb +2 -2
- data/lib/pubid/iec/identifiers/fragment_identifier.rb +13 -15
- data/lib/pubid/iec/identifiers/guide.rb +0 -16
- data/lib/pubid/iec/identifiers/international_standard.rb +22 -6
- data/lib/pubid/iec/identifiers/operational_document.rb +0 -10
- data/lib/pubid/iec/identifiers/publicly_available_specification.rb +0 -12
- data/lib/pubid/iec/identifiers/sheet_identifier.rb +12 -12
- data/lib/pubid/iec/identifiers/societal_technology_trend_report.rb +0 -10
- data/lib/pubid/iec/identifiers/systems_reference_document.rb +0 -10
- data/lib/pubid/iec/identifiers/technical_group.rb +30 -0
- data/lib/pubid/iec/identifiers/technical_report.rb +1 -18
- data/lib/pubid/iec/identifiers/technical_specification.rb +1 -18
- data/lib/pubid/iec/identifiers/technology_report.rb +0 -10
- data/lib/pubid/iec/identifiers/test_report_form.rb +0 -11
- data/lib/pubid/iec/identifiers/vap_identifier.rb +12 -12
- data/lib/pubid/iec/identifiers/white_paper.rb +0 -10
- data/lib/pubid/iec/identifiers/working_document.rb +24 -10
- data/lib/pubid/iec/identifiers.rb +1 -0
- data/lib/pubid/iec/parser.rb +53 -28
- data/lib/pubid/iec/renderer.rb +31 -18
- data/lib/pubid/iec/single_identifier.rb +34 -11
- data/lib/pubid/iec/supplement_identifier.rb +32 -19
- data/lib/pubid/iec/urn_generator.rb +227 -61
- data/lib/pubid/iec/urn_parser.rb +42 -4
- data/lib/pubid/iec.rb +2 -6
- data/lib/pubid/ieee/aiee/builder.rb +17 -3
- data/lib/pubid/ieee/aiee/identifier.rb +46 -62
- data/lib/pubid/ieee/aiee/parser.rb +1 -1
- data/lib/pubid/ieee/builder.rb +386 -69
- 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 +62 -5
- data/lib/pubid/ieee/identifiers/amendment.rb +40 -0
- data/lib/pubid/ieee/identifiers/base.rb +148 -18
- 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 +24 -3
- data/lib/pubid/ieee/identifiers/dual_identifier.rb +3 -3
- data/lib/pubid/ieee/identifiers/dual_published.rb +58 -3
- data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +102 -5
- data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +25 -1
- data/lib/pubid/ieee/identifiers/joint_development.rb +64 -15
- data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +58 -6
- 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/ire/parser.rb +1 -1
- data/lib/pubid/ieee/nesc/builder.rb +33 -20
- data/lib/pubid/ieee/nesc/parser.rb +16 -15
- data/lib/pubid/ieee/parser.rb +462 -44
- data/lib/pubid/ieee/pre_parser.rb +1 -1
- data/lib/pubid/ieee/renderer.rb +158 -57
- data/lib/pubid/ieee/typed_stages.rb +12 -1
- data/lib/pubid/ieee/urn_generator.rb +35 -8
- data/lib/pubid/ieee.rb +63 -4
- data/lib/pubid/ieee_debug.rb +1 -0
- data/lib/pubid/ietf/builder.rb +78 -0
- data/lib/pubid/ietf/identifier.rb +5 -0
- data/lib/pubid/ietf/identifiers/base.rb +72 -0
- data/lib/pubid/ietf/identifiers/bcp.rb +36 -0
- data/lib/pubid/ietf/identifiers/fyi.rb +36 -0
- data/lib/pubid/ietf/identifiers/internet_draft.rb +45 -0
- data/lib/pubid/ietf/identifiers/rfc.rb +27 -0
- data/lib/pubid/ietf/identifiers/serialization.rb +51 -0
- data/lib/pubid/ietf/identifiers/std.rb +36 -0
- data/lib/pubid/ietf/identifiers.rb +14 -0
- data/lib/pubid/ietf/parser.rb +61 -0
- data/lib/pubid/ietf/renderer.rb +64 -0
- data/lib/pubid/ietf/urn_generator.rb +37 -0
- data/lib/pubid/ietf/urn_parser.rb +43 -0
- data/lib/pubid/ietf.rb +86 -0
- data/lib/pubid/iho/identifier.rb +1 -3
- data/lib/pubid/iho/identifiers/base.rb +11 -10
- 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/parser.rb +1 -1
- data/lib/pubid/iho.rb +8 -7
- data/lib/pubid/isbn/builder.rb +44 -0
- data/lib/pubid/isbn/check_digit.rb +53 -0
- data/lib/pubid/isbn/identifier.rb +81 -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 +53 -0
- data/lib/pubid/iso/builder.rb +9 -4
- data/lib/pubid/iso/bundled_identifier.rb +5 -3
- data/lib/pubid/iso/combined_identifier.rb +6 -4
- data/lib/pubid/iso/identifier.rb +29 -8
- data/lib/pubid/iso/identifiers/directives_supplement.rb +12 -12
- data/lib/pubid/iso/normalizer.rb +2 -2
- data/lib/pubid/iso/parser.rb +17 -13
- 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/iso.rb +7 -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 +7 -29
- 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 +357 -25
- 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 +481 -27
- data/lib/pubid/itu/urn_generator.rb +36 -6
- data/lib/pubid/itu/urn_parser.rb +8 -0
- data/lib/pubid/itu.rb +12 -3
- data/lib/pubid/jcgm/builder.rb +24 -14
- data/lib/pubid/jcgm/identifier.rb +10 -0
- 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 +74 -7
- data/lib/pubid/jcgm/renderer.rb +33 -12
- data/lib/pubid/jcgm/single_identifier.rb +84 -6
- 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 +164 -10
- data/lib/pubid/jcgm.rb +10 -0
- data/lib/pubid/jis/identifier.rb +62 -3
- data/lib/pubid/jis/parser.rb +1 -1
- data/lib/pubid/jis.rb +1 -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/stage.rb +2 -2
- data/lib/pubid/nist/components/supplement.rb +5 -2
- data/lib/pubid/nist/configuration.rb +6 -2
- data/lib/pubid/nist/identifier.rb +1 -3
- data/lib/pubid/nist/identifiers/base.rb +133 -39
- data/lib/pubid/nist/identifiers/circular.rb +10 -3
- data/lib/pubid/nist/identifiers/circular_supplement.rb +14 -5
- 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 +8 -2
- data/lib/pubid/nist/identifiers/crpl_report.rb +8 -2
- 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 +10 -3
- data/lib/pubid/nist/identifiers/internal_report.rb +13 -6
- data/lib/pubid/nist/identifiers/letter_circular.rb +1 -1
- data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +15 -7
- data/lib/pubid/nist/identifiers/monograph.rb +15 -8
- 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 +15 -7
- 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 +27 -4
- data/lib/pubid/nist/preprocessor.rb +15 -0
- data/lib/pubid/nist/router.rb +2 -2
- data/lib/pubid/nist/series/ir.rb +0 -3
- data/lib/pubid/nist/supplement_identifier.rb +24 -9
- data/lib/pubid/nist.rb +19 -13
- data/lib/pubid/oasis/builder.rb +79 -0
- data/lib/pubid/oasis/identifier.rb +160 -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 +80 -0
- data/lib/pubid/ogc/builder.rb +33 -0
- data/lib/pubid/ogc/identifier.rb +81 -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 +72 -0
- data/lib/pubid/oiml/builder.rb +36 -8
- data/lib/pubid/oiml/identifier.rb +9 -1
- data/lib/pubid/oiml/identifiers/basic_publication.rb +2 -0
- data/lib/pubid/oiml/identifiers/bulletin.rb +36 -0
- data/lib/pubid/oiml/identifiers/code_number.rb +90 -0
- data/lib/pubid/oiml/identifiers/document.rb +2 -0
- data/lib/pubid/oiml/identifiers/expert_report.rb +2 -0
- data/lib/pubid/oiml/identifiers/guide.rb +2 -0
- data/lib/pubid/oiml/identifiers/recommendation.rb +2 -0
- data/lib/pubid/oiml/identifiers/seminar_report.rb +2 -0
- data/lib/pubid/oiml/identifiers/vocabulary.rb +2 -0
- data/lib/pubid/oiml/identifiers.rb +1 -0
- data/lib/pubid/oiml/parser.rb +12 -13
- data/lib/pubid/oiml/renderer.rb +13 -13
- data/lib/pubid/oiml/single_identifier.rb +41 -37
- data/lib/pubid/oiml/supplement_identifier.rb +36 -9
- data/lib/pubid/oiml/urn_parser.rb +23 -6
- data/lib/pubid/oiml.rb +10 -0
- data/lib/pubid/omg/builder.rb +20 -0
- data/lib/pubid/omg/identifier.rb +61 -0
- data/lib/pubid/omg/identifiers/specification.rb +32 -0
- data/lib/pubid/omg/identifiers.rb +9 -0
- data/lib/pubid/omg/parser.rb +93 -0
- data/lib/pubid/omg/renderer.rb +31 -0
- data/lib/pubid/omg.rb +52 -0
- data/lib/pubid/parser/grammar.rb +74 -0
- data/lib/pubid/parser.rb +2 -0
- data/lib/pubid/parsers/mr_string.rb +120 -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 +16 -6
- data/lib/pubid/plateau/renderer.rb +1 -1
- data/lib/pubid/plateau/supplement_identifier.rb +11 -11
- data/lib/pubid/plateau.rb +14 -4
- data/lib/pubid/prefixes_support.rb +1 -0
- data/lib/pubid/renderers/annotator.rb +233 -0
- data/lib/pubid/renderers/base.rb +13 -0
- data/lib/pubid/renderers/directives_renderer.rb +3 -3
- data/lib/pubid/renderers/human_readable.rb +6 -4
- data/lib/pubid/renderers/mr_string.rb +54 -6
- data/lib/pubid/renderers/supplement_renderer.rb +1 -1
- data/lib/pubid/renderers.rb +1 -0
- data/lib/pubid/rendering/numbering.rb +25 -7
- data/lib/pubid/rendering/supplement.rb +4 -4
- data/lib/pubid/rendering.rb +1 -0
- data/lib/pubid/sae/builder.rb +1 -1
- data/lib/pubid/sae/identifier.rb +1 -3
- data/lib/pubid/sae/identifiers/base.rb +19 -9
- data/lib/pubid/sae/identifiers.rb +0 -1
- data/lib/pubid/sae/parser.rb +1 -1
- data/lib/pubid/sae.rb +4 -3
- data/lib/pubid/schema/declaration.rb +33 -0
- data/lib/pubid/schema/error.rb +14 -0
- data/lib/pubid/schema/identifier_type.rb +23 -0
- data/lib/pubid/schema/loader.rb +117 -0
- data/lib/pubid/schema/typed_stage.rb +24 -0
- data/lib/pubid/schema.rb +25 -0
- data/lib/pubid/tgpp/builder.rb +41 -0
- data/lib/pubid/tgpp/identifier.rb +107 -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 +78 -0
- data/lib/pubid/tgpp/renderer.rb +52 -0
- data/lib/pubid/tgpp/urn_generator.rb +39 -0
- data/lib/pubid/tgpp/urn_parser.rb +30 -0
- data/lib/pubid/tgpp.rb +84 -0
- data/lib/pubid/type_resolver.rb +74 -0
- data/lib/pubid/un/builder.rb +42 -0
- data/lib/pubid/un/identifier.rb +40 -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 +47 -0
- data/lib/pubid/urn_parser/errors.rb +8 -1
- data/lib/pubid/urn_parser.rb +1 -0
- data/lib/pubid/utils.rb +1 -0
- data/lib/pubid/version.rb +1 -1
- data/lib/pubid/w3c/builder.rb +55 -0
- data/lib/pubid/w3c/identifier.rb +130 -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 +68 -0
- data/lib/pubid/xsf/builder.rb +17 -0
- data/lib/pubid/xsf/identifier.rb +66 -0
- data/lib/pubid/xsf/identifiers/xep.rb +31 -0
- data/lib/pubid/xsf/identifiers.rb +9 -0
- data/lib/pubid/xsf/parser.rb +38 -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 +82 -0
- data/lib/pubid.rb +424 -22
- data/lib/tasks/conformance.rake +34 -0
- data/lib/tasks/docs.rake +3 -3
- data/lib/tasks/schema.rake +88 -0
- data/schema/core/joint_prefixes.yaml +24 -0
- data/schema/iec.yaml +1017 -0
- data/schema/iso.yaml +1586 -0
- data/schema/schema.schema.yaml +96 -0
- metadata +241 -19
- data/archived-gems/pubid-ccsds/update_codes.yaml +0 -1
- data/archived-gems/pubid-iec/stages.yaml +0 -129
- data/archived-gems/pubid-iec/update_codes.yaml +0 -67
- data/archived-gems/pubid-ieee/update_codes.yaml +0 -104
- data/archived-gems/pubid-iso/stages.yaml +0 -106
- data/archived-gems/pubid-iso/update_codes.yaml +0 -4
- data/archived-gems/pubid-itu/i18n.yaml +0 -13
- data/archived-gems/pubid-itu/series.yaml +0 -42
- data/archived-gems/pubid-nist/publishers.yaml +0 -6
- data/archived-gems/pubid-nist/update_codes.yaml +0 -93
- data/archived-gems/pubid-plateau/update_codes.yaml +0 -6
- data/lib/pubid/cen_cenelec/supplement_identifier.rb +0 -48
- data/lib/pubid/cie/components/code.rb +0 -80
- data/lib/pubid/iala/identifiers/base.rb +0 -14
- data/lib/pubid/iec/components/code.rb +0 -36
- /data/{archived-gems/pubid-nist → data/nist}/stages.yaml +0 -0
data/lib/pubid/bsi/builder.rb
CHANGED
|
@@ -164,7 +164,7 @@ module Pubid
|
|
|
164
164
|
|
|
165
165
|
# Build attributes hash (conditional arguments must be handled separately)
|
|
166
166
|
attrs = {
|
|
167
|
-
number:
|
|
167
|
+
number: number_val,
|
|
168
168
|
issue_number: issue_number,
|
|
169
169
|
index_format: format,
|
|
170
170
|
}
|
|
@@ -181,7 +181,7 @@ module Pubid
|
|
|
181
181
|
|
|
182
182
|
# Build attributes hash
|
|
183
183
|
attrs = {
|
|
184
|
-
number:
|
|
184
|
+
number: number_val,
|
|
185
185
|
}
|
|
186
186
|
attrs[:date] = Components::Date.new(year: year_val) if year_val
|
|
187
187
|
|
|
@@ -206,9 +206,9 @@ module Pubid
|
|
|
206
206
|
|
|
207
207
|
# Build attributes hash
|
|
208
208
|
attrs = {
|
|
209
|
-
number:
|
|
209
|
+
number: number_val,
|
|
210
210
|
}
|
|
211
|
-
attrs[:part] =
|
|
211
|
+
attrs[:part] = part_val if part_val
|
|
212
212
|
attrs[:date] = Components::Date.new(year: year_val) if year_val
|
|
213
213
|
|
|
214
214
|
Identifiers::ExplanatorySupplement.new(attrs)
|
|
@@ -248,13 +248,13 @@ module Pubid
|
|
|
248
248
|
|
|
249
249
|
# Build attributes hash
|
|
250
250
|
attrs = {
|
|
251
|
-
number:
|
|
251
|
+
number: number_val,
|
|
252
252
|
method_code: method_code,
|
|
253
253
|
method_to: method_to,
|
|
254
254
|
method_and: method_and,
|
|
255
255
|
is_plural: is_plural,
|
|
256
256
|
}
|
|
257
|
-
attrs[:part] =
|
|
257
|
+
attrs[:part] = part_val if part_val
|
|
258
258
|
attrs[:date] = Components::Date.new(year: year_val) if year_val
|
|
259
259
|
|
|
260
260
|
Identifiers::Method.new(attrs)
|
|
@@ -280,7 +280,7 @@ module Pubid
|
|
|
280
280
|
|
|
281
281
|
# Build attributes hash
|
|
282
282
|
attrs = {
|
|
283
|
-
number:
|
|
283
|
+
number: number_val,
|
|
284
284
|
test_series: test_series,
|
|
285
285
|
test_id: test_id,
|
|
286
286
|
}
|
|
@@ -313,7 +313,7 @@ module Pubid
|
|
|
313
313
|
|
|
314
314
|
# Build attributes hash (conditional arguments must be handled separately)
|
|
315
315
|
attrs = {
|
|
316
|
-
number:
|
|
316
|
+
number: number_val,
|
|
317
317
|
section_id: section_id,
|
|
318
318
|
section_format: format,
|
|
319
319
|
}
|
|
@@ -343,7 +343,7 @@ module Pubid
|
|
|
343
343
|
|
|
344
344
|
# Build attributes hash
|
|
345
345
|
attrs = {
|
|
346
|
-
number:
|
|
346
|
+
number: number_val,
|
|
347
347
|
}
|
|
348
348
|
attrs[:spec_code] = Components::Code.new(value: spec_code) if spec_code
|
|
349
349
|
if publisher_val
|
|
@@ -373,9 +373,9 @@ module Pubid
|
|
|
373
373
|
|
|
374
374
|
# Build attributes hash
|
|
375
375
|
attrs = {
|
|
376
|
-
number:
|
|
376
|
+
number: number_val,
|
|
377
377
|
}
|
|
378
|
-
attrs[:part] =
|
|
378
|
+
attrs[:part] = part_val if part_val
|
|
379
379
|
attrs[:publisher] = Components::Publisher.new(body: "DISC")
|
|
380
380
|
attrs[:date] = Components::Date.new(year: year_val) if year_val
|
|
381
381
|
|
|
@@ -432,9 +432,9 @@ module Pubid
|
|
|
432
432
|
# Build attributes hash
|
|
433
433
|
attrs = {
|
|
434
434
|
prefix: prefix_val,
|
|
435
|
-
number:
|
|
435
|
+
number: number_val,
|
|
436
436
|
}
|
|
437
|
-
attrs[:part] =
|
|
437
|
+
attrs[:part] = part_val if part_val
|
|
438
438
|
attrs[:iteration] = iteration_val if iteration_val
|
|
439
439
|
attrs[:edition] = final_edition if final_edition
|
|
440
440
|
attrs[:publisher] = Components::Publisher.new(body: "BS")
|
|
@@ -456,20 +456,20 @@ module Pubid
|
|
|
456
456
|
# Build base identifier
|
|
457
457
|
base_id = SingleIdentifier.new(
|
|
458
458
|
publisher: Components::Publisher.new(body: "BS"),
|
|
459
|
-
number:
|
|
459
|
+
number: base_number,
|
|
460
460
|
)
|
|
461
461
|
|
|
462
462
|
# Build identifiers for each part
|
|
463
463
|
id1 = SingleIdentifier.new(
|
|
464
464
|
publisher: Components::Publisher.new(body: "BS"),
|
|
465
|
-
number:
|
|
466
|
-
part:
|
|
465
|
+
number: base_number,
|
|
466
|
+
part: part1,
|
|
467
467
|
)
|
|
468
468
|
|
|
469
469
|
id2 = SingleIdentifier.new(
|
|
470
470
|
publisher: Components::Publisher.new(body: "BS"),
|
|
471
|
-
number:
|
|
472
|
-
part:
|
|
471
|
+
number: base_number,
|
|
472
|
+
part: part2,
|
|
473
473
|
)
|
|
474
474
|
|
|
475
475
|
Identifiers::BundledIdentifier.new(
|
|
@@ -636,7 +636,7 @@ module Pubid
|
|
|
636
636
|
publisher: Components::Publisher.new(body: publisher_val),
|
|
637
637
|
)
|
|
638
638
|
id.prefix = prefix_val if prefix_val && !prefix_val.empty?
|
|
639
|
-
id.number =
|
|
639
|
+
id.number = number_val if number_val
|
|
640
640
|
|
|
641
641
|
id.explicit_prefix = has_explicit_publisher || has_explicit_prefix
|
|
642
642
|
id.explicit_publisher = has_explicit_publisher
|
|
@@ -646,11 +646,11 @@ module Pubid
|
|
|
646
646
|
parts_array = parts_val[:parts]
|
|
647
647
|
if parts_array.any?
|
|
648
648
|
part_str = parts_array.first[:part].to_s
|
|
649
|
-
id.part =
|
|
649
|
+
id.part = part_str
|
|
650
650
|
end
|
|
651
651
|
# Handle space-separated part (direct part attribute)
|
|
652
652
|
elsif space_separated_part_val
|
|
653
|
-
id.part =
|
|
653
|
+
id.part = space_separated_part_val.to_s
|
|
654
654
|
# Mark this part as space-separated for rendering
|
|
655
655
|
id.space_separated_part = true
|
|
656
656
|
end
|
|
@@ -674,7 +674,7 @@ module Pubid
|
|
|
674
674
|
topic = @original_data[:expert_commentary_topic]&.to_s
|
|
675
675
|
|
|
676
676
|
Identifiers::ExpertCommentary.new(
|
|
677
|
-
|
|
677
|
+
base: base_id,
|
|
678
678
|
format: format,
|
|
679
679
|
topic: topic,
|
|
680
680
|
)
|
|
@@ -724,7 +724,7 @@ module Pubid
|
|
|
724
724
|
end
|
|
725
725
|
|
|
726
726
|
Identifiers::SupplementDocument.new(
|
|
727
|
-
|
|
727
|
+
base: base_id,
|
|
728
728
|
supplement_number: data[:supplement_number].to_s,
|
|
729
729
|
supplement_year: data[:supplement_year].to_i,
|
|
730
730
|
supplement_type: supplement_type,
|
|
@@ -771,7 +771,7 @@ module Pubid
|
|
|
771
771
|
end
|
|
772
772
|
|
|
773
773
|
Identifiers::AddendumDocument.new(
|
|
774
|
-
|
|
774
|
+
base: base_id,
|
|
775
775
|
addendum_number: data[:addendum_number].to_s,
|
|
776
776
|
addendum_year: data[:addendum_year].to_i,
|
|
777
777
|
addendum_type: addendum_type,
|
|
@@ -790,8 +790,10 @@ module Pubid
|
|
|
790
790
|
corrigendum = !amd_data[:corrigendum].nil?
|
|
791
791
|
parenthesized = !data[:parenthesized_amd].nil?
|
|
792
792
|
|
|
793
|
+
# NOTE `amd_data[:amendment_number]` above is a PARSE-TREE key and keeps
|
|
794
|
+
# its name; only the attribute moved to `number`.
|
|
793
795
|
attrs = {
|
|
794
|
-
|
|
796
|
+
number: Components::Code.new(value: amendment_number),
|
|
795
797
|
corrigendum: corrigendum,
|
|
796
798
|
parenthesized: parenthesized,
|
|
797
799
|
}
|
|
@@ -809,8 +811,10 @@ module Pubid
|
|
|
809
811
|
# Could also use a more sophisticated algorithm for year conversion
|
|
810
812
|
full_year = year_val ? "20#{year_val}" : nil
|
|
811
813
|
|
|
814
|
+
# NOTE `data[:document_number]` above is a PARSE-TREE key and keeps its
|
|
815
|
+
# name; only the attribute moved to `number`.
|
|
812
816
|
attrs = {
|
|
813
|
-
|
|
817
|
+
number: Components::Code.new(value: document_number),
|
|
814
818
|
}
|
|
815
819
|
attrs[:date] = Components::Date.new(year: full_year.to_i) if full_year
|
|
816
820
|
|
|
@@ -837,7 +841,7 @@ module Pubid
|
|
|
837
841
|
base_id = build(base_data)
|
|
838
842
|
|
|
839
843
|
Identifiers::ValueAddedPublication.new(
|
|
840
|
-
|
|
844
|
+
base: base_id,
|
|
841
845
|
format: format,
|
|
842
846
|
)
|
|
843
847
|
end
|
|
@@ -882,14 +886,14 @@ module Pubid
|
|
|
882
886
|
|
|
883
887
|
if supp[:type] == :amendment
|
|
884
888
|
Identifiers::Amendment.new(
|
|
885
|
-
|
|
889
|
+
base: nil, # NA supplements don't wrap base
|
|
886
890
|
amendment_number: supp[:number],
|
|
887
891
|
amendment_year: year_val&.to_i,
|
|
888
892
|
separator: supp[:separator] || "+",
|
|
889
893
|
)
|
|
890
894
|
else
|
|
891
895
|
Identifiers::Corrigendum.new(
|
|
892
|
-
|
|
896
|
+
base: nil,
|
|
893
897
|
corrigendum_number: supp[:number],
|
|
894
898
|
corrigendum_year: year_val&.to_i,
|
|
895
899
|
separator: supp[:separator] || "+",
|
|
@@ -969,7 +973,7 @@ module Pubid
|
|
|
969
973
|
value&.to_s
|
|
970
974
|
|
|
971
975
|
when :number
|
|
972
|
-
|
|
976
|
+
value.to_s
|
|
973
977
|
|
|
974
978
|
when :parts
|
|
975
979
|
# Extract parts - handle both formats:
|
|
@@ -983,26 +987,25 @@ module Pubid
|
|
|
983
987
|
# Check if subpart is already separated (new format from part_with_subpart rule)
|
|
984
988
|
if first_part.key?(:subpart)
|
|
985
989
|
{
|
|
986
|
-
part:
|
|
987
|
-
subpart:
|
|
990
|
+
part: part_str,
|
|
991
|
+
subpart: first_part[:subpart].to_s,
|
|
988
992
|
}
|
|
989
993
|
else
|
|
990
994
|
# Old format - split on dash to get part and subpart
|
|
991
995
|
part_components = part_str.split("-")
|
|
992
|
-
result = { part:
|
|
996
|
+
result = { part: part_components.first }
|
|
993
997
|
if part_components.length > 1
|
|
994
|
-
result[:subpart] =
|
|
995
|
-
Components::Code.new(value: part_components[1])
|
|
998
|
+
result[:subpart] = part_components[1]
|
|
996
999
|
end
|
|
997
1000
|
result
|
|
998
1001
|
end
|
|
999
1002
|
end
|
|
1000
1003
|
|
|
1001
1004
|
when :part
|
|
1002
|
-
|
|
1005
|
+
value[:part].to_s if value.is_a?(Hash)
|
|
1003
1006
|
|
|
1004
1007
|
when :subpart
|
|
1005
|
-
|
|
1008
|
+
value.to_s
|
|
1006
1009
|
|
|
1007
1010
|
when :year, :date
|
|
1008
1011
|
# Only create date if value is present
|
|
@@ -1323,8 +1326,15 @@ module Pubid
|
|
|
1323
1326
|
|
|
1324
1327
|
adopted_id = nil
|
|
1325
1328
|
|
|
1326
|
-
# Check for EN ISO or EN IEC patterns (triple-level)
|
|
1327
|
-
|
|
1329
|
+
# Check for EN ISO or EN IEC patterns (triple-level).
|
|
1330
|
+
# The test must be ANCHORED, because the repair below is: an unanchored
|
|
1331
|
+
# match accepts "CEN ISO/TS 12180-1:2007" (the "EN ISO" is inside
|
|
1332
|
+
# "CEN ISO"), but `sub(/^EN\s+/, "")` then changes nothing, so
|
|
1333
|
+
# adopted_id stayed nil and the whole parse returned nil for 49
|
|
1334
|
+
# "DD CEN ISO/..." identifiers in BSI's own pass fixtures. Anchored,
|
|
1335
|
+
# a "CEN ..." string falls through to the CEN branch below, which is
|
|
1336
|
+
# where it belongs.
|
|
1337
|
+
if adopted_str_clean.match?(/\AEN\s+(ISO\/IEC|IEC|ISO)/)
|
|
1328
1338
|
# Parse the ISO/IEC part
|
|
1329
1339
|
iso_iec_str = adopted_str_clean.sub(/^EN\s+/, "")
|
|
1330
1340
|
|
|
@@ -1336,11 +1346,11 @@ module Pubid
|
|
|
1336
1346
|
adopted_id = Pubid::Iec.parse(iso_iec_str)
|
|
1337
1347
|
end
|
|
1338
1348
|
|
|
1339
|
-
# Wrap ISO/IEC identifier in EN adoption
|
|
1349
|
+
# Wrap ISO/IEC identifier in EN adoption (the publisher is the
|
|
1350
|
+
# "EN" default)
|
|
1340
1351
|
if adopted_id
|
|
1341
1352
|
adopted_id = Pubid::CenCenelec::Identifiers::AdoptedEuropeanNorm.new(
|
|
1342
|
-
|
|
1343
|
-
adopted_identifier: adopted_id,
|
|
1353
|
+
adopted: adopted_id,
|
|
1344
1354
|
)
|
|
1345
1355
|
end
|
|
1346
1356
|
|
|
@@ -1373,7 +1383,7 @@ module Pubid
|
|
|
1373
1383
|
identifier = if adopted_id.class.name.start_with?("Pubid::CenCenelec::")
|
|
1374
1384
|
Identifiers::AdoptedEuropeanNorm.new(
|
|
1375
1385
|
publisher: Components::Publisher.new(body: bsi_prefix),
|
|
1376
|
-
|
|
1386
|
+
adopted: adopted_id,
|
|
1377
1387
|
edition: final_edition&.to_s,
|
|
1378
1388
|
translation_lang: data[:translation_lang]&.to_s,
|
|
1379
1389
|
translation_upper: data[:translation_upper]&.to_s,
|
|
@@ -1386,7 +1396,7 @@ module Pubid
|
|
|
1386
1396
|
# Otherwise it's ISO/IEC, use AdoptedInternationalStandard
|
|
1387
1397
|
Identifiers::AdoptedInternationalStandard.new(
|
|
1388
1398
|
publisher: Components::Publisher.new(body: bsi_prefix),
|
|
1389
|
-
|
|
1399
|
+
adopted: adopted_id,
|
|
1390
1400
|
edition: final_edition&.to_s,
|
|
1391
1401
|
translation_lang: data[:translation_lang]&.to_s,
|
|
1392
1402
|
translation_upper: data[:translation_upper]&.to_s,
|
|
@@ -1411,17 +1421,17 @@ module Pubid
|
|
|
1411
1421
|
end
|
|
1412
1422
|
end
|
|
1413
1423
|
|
|
1414
|
-
def wrap_with_consolidated(
|
|
1424
|
+
def wrap_with_consolidated(base, supplements_data,
|
|
1415
1425
|
expert_commentary: nil, expert_commentary_topic: nil)
|
|
1416
|
-
# If expert_commentary data is provided, set it on the
|
|
1426
|
+
# If expert_commentary data is provided, set it on the base
|
|
1417
1427
|
# This allows ConsolidatedIdentifier to render the ExComm suffix correctly
|
|
1418
1428
|
if expert_commentary
|
|
1419
|
-
base_attrs =
|
|
1429
|
+
base_attrs = base.class.attributes
|
|
1420
1430
|
if base_attrs.key?(:expert_commentary)
|
|
1421
|
-
|
|
1431
|
+
base.expert_commentary = expert_commentary
|
|
1422
1432
|
end
|
|
1423
1433
|
if expert_commentary_topic && base_attrs.key?(:expert_commentary_topic)
|
|
1424
|
-
|
|
1434
|
+
base.expert_commentary_topic = expert_commentary_topic
|
|
1425
1435
|
end
|
|
1426
1436
|
end
|
|
1427
1437
|
|
|
@@ -1436,7 +1446,7 @@ expert_commentary: nil, expert_commentary_topic: nil)
|
|
|
1436
1446
|
|
|
1437
1447
|
if supp[:type] == :amendment
|
|
1438
1448
|
Identifiers::Amendment.new(
|
|
1439
|
-
|
|
1449
|
+
base: base,
|
|
1440
1450
|
amendment_number: supp[:number],
|
|
1441
1451
|
amendment_year: year_val&.to_i,
|
|
1442
1452
|
separator: supp[:separator] || "+",
|
|
@@ -1444,7 +1454,7 @@ expert_commentary: nil, expert_commentary_topic: nil)
|
|
|
1444
1454
|
)
|
|
1445
1455
|
else
|
|
1446
1456
|
Identifiers::Corrigendum.new(
|
|
1447
|
-
|
|
1457
|
+
base: base,
|
|
1448
1458
|
corrigendum_number: supp[:number],
|
|
1449
1459
|
corrigendum_year: year_val&.to_i,
|
|
1450
1460
|
separator: supp[:separator] || "+",
|
|
@@ -1453,7 +1463,7 @@ expert_commentary: nil, expert_commentary_topic: nil)
|
|
|
1453
1463
|
end
|
|
1454
1464
|
|
|
1455
1465
|
Identifiers::ConsolidatedIdentifier.new(
|
|
1456
|
-
identifiers: [
|
|
1466
|
+
identifiers: [base] + supplement_ids,
|
|
1457
1467
|
)
|
|
1458
1468
|
end
|
|
1459
1469
|
|
data/lib/pubid/bsi/identifier.rb
CHANGED
|
@@ -4,4 +4,3 @@
|
|
|
4
4
|
# subclass); its body, `.parse` (including the IEC-delegation logic), and the
|
|
5
5
|
# SingleIdentifier back-compat alias live in single_identifier.rb. This file
|
|
6
6
|
# just ensures it is loaded when a consumer references Pubid::Bsi::Identifier.
|
|
7
|
-
require_relative "single_identifier"
|
|
@@ -11,7 +11,7 @@ module Pubid
|
|
|
11
11
|
# "BS 2000-0:Addendum 1:1983"
|
|
12
12
|
# "BS 6034:1981:Addendum No. 1:1986"
|
|
13
13
|
class AddendumDocument < SingleIdentifier
|
|
14
|
-
attribute :
|
|
14
|
+
attribute :base, ::Pubid::Identifier, polymorphic: true
|
|
15
15
|
attribute :addendum_number, :string
|
|
16
16
|
attribute :addendum_year, :integer
|
|
17
17
|
attribute :addendum_type, :string, default: -> {
|
|
@@ -22,7 +22,7 @@ module Pubid
|
|
|
22
22
|
} # Separator before Addendum (":" or " ")
|
|
23
23
|
|
|
24
24
|
def publisher
|
|
25
|
-
|
|
25
|
+
base&.publisher
|
|
26
26
|
end
|
|
27
27
|
end
|
|
28
28
|
end
|
|
@@ -7,7 +7,7 @@ module Pubid
|
|
|
7
7
|
# Example: "BS EN 10077-1:2006" where EN 10077-1:2006 is a CEN identifier object
|
|
8
8
|
# Example: "BS EN ISO 8601:2019" where EN ISO 8601:2019 is a CEN AdoptedEuropeanNorm wrapping ISO
|
|
9
9
|
class AdoptedEuropeanNorm < BritishStandard
|
|
10
|
-
attribute :
|
|
10
|
+
attribute :adopted, ::Pubid::Identifier, polymorphic: true # CEN object
|
|
11
11
|
attribute :edition, :string
|
|
12
12
|
attribute :translation_lang, :string
|
|
13
13
|
attribute :translation_upper, :string
|
|
@@ -25,29 +25,58 @@ module Pubid
|
|
|
25
25
|
nil
|
|
26
26
|
end
|
|
27
27
|
|
|
28
|
+
# Walk to the adopted document for the relaton-index key.
|
|
29
|
+
#
|
|
30
|
+
# The `#number` delegation below is not enough on its own: a
|
|
31
|
+
# "DD ENV ISO 11079:1999" adopts a CenCenelec EuropeanPrestandard,
|
|
32
|
+
# which is ITSELF a wrapper around the ISO standard, so the delegation
|
|
33
|
+
# returned that wrapper's own (nil) number and the chain died one level
|
|
34
|
+
# short. `#root` recurses, so it reaches the ISO standard however many
|
|
35
|
+
# adoption layers sit in between.
|
|
36
|
+
def root
|
|
37
|
+
adopted ? adopted.root : self
|
|
38
|
+
end
|
|
39
|
+
|
|
28
40
|
# Delegate common methods to adopted identifier
|
|
29
41
|
def number
|
|
30
|
-
|
|
42
|
+
delegate_target&.number
|
|
31
43
|
end
|
|
32
44
|
|
|
33
45
|
def year
|
|
34
|
-
|
|
46
|
+
delegate_target&.year if delegate_target&.methods&.include?(:year)
|
|
35
47
|
end
|
|
36
48
|
|
|
37
49
|
def date
|
|
38
|
-
|
|
50
|
+
delegate_target&.date if delegate_target&.methods&.include?(:date)
|
|
39
51
|
end
|
|
40
52
|
|
|
41
53
|
def parts
|
|
42
|
-
|
|
54
|
+
delegate_target&.parts if delegate_target&.methods&.include?(:parts)
|
|
43
55
|
end
|
|
44
56
|
|
|
45
57
|
def part
|
|
46
|
-
|
|
58
|
+
delegate_target&.part if delegate_target&.methods&.include?(:part)
|
|
47
59
|
end
|
|
48
60
|
|
|
49
61
|
def subpart
|
|
50
|
-
|
|
62
|
+
adopted&.subpart if adopted&.methods&.include?(:subpart)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
private
|
|
66
|
+
|
|
67
|
+
# The identifier that holds the number, part and date. For
|
|
68
|
+
# "BS EN ISO 8848:2021" the adopted document is a CEN adoption of an
|
|
69
|
+
# ISO standard, and the CEN adoption keeps no number of its own, so
|
|
70
|
+
# read through it to the ISO standard. The CEN class used to do this
|
|
71
|
+
# with delegating readers, which broke its serialization. `subpart`
|
|
72
|
+
# keeps reading the CEN object, as it did before.
|
|
73
|
+
def delegate_target
|
|
74
|
+
target = adopted
|
|
75
|
+
if target.is_a?(::Pubid::CenCenelec::Identifiers::AdoptedEuropeanNorm)
|
|
76
|
+
target.adopted
|
|
77
|
+
else
|
|
78
|
+
target
|
|
79
|
+
end
|
|
51
80
|
end
|
|
52
81
|
end
|
|
53
82
|
end
|
|
@@ -7,7 +7,8 @@ module Pubid
|
|
|
7
7
|
# Example: "BS ISO 8601:2019" where ISO 8601:2019 is an ISO identifier object
|
|
8
8
|
# Example: "BS IEC 62600:2020" where IEC 62600:2020 is an IEC identifier object
|
|
9
9
|
class AdoptedInternationalStandard < BritishStandard
|
|
10
|
-
|
|
10
|
+
# The adopted ISO/IEC identifier object
|
|
11
|
+
attribute :adopted, ::Pubid::Identifier, polymorphic: true
|
|
11
12
|
attribute :edition, :string
|
|
12
13
|
attribute :translation_lang, :string
|
|
13
14
|
attribute :translation_upper, :string
|
|
@@ -27,23 +28,23 @@ module Pubid
|
|
|
27
28
|
|
|
28
29
|
# Delegate common methods to adopted identifier
|
|
29
30
|
def number
|
|
30
|
-
|
|
31
|
+
adopted&.number
|
|
31
32
|
end
|
|
32
33
|
|
|
33
34
|
def year
|
|
34
|
-
|
|
35
|
+
adopted&.year if adopted&.methods&.include?(:year)
|
|
35
36
|
end
|
|
36
37
|
|
|
37
38
|
def date
|
|
38
|
-
|
|
39
|
+
adopted&.date if adopted&.methods&.include?(:date)
|
|
39
40
|
end
|
|
40
41
|
|
|
41
42
|
def parts
|
|
42
|
-
|
|
43
|
+
adopted&.parts if adopted&.methods&.include?(:parts)
|
|
43
44
|
end
|
|
44
45
|
|
|
45
46
|
def part
|
|
46
|
-
|
|
47
|
+
adopted&.part if adopted&.methods&.include?(:part)
|
|
47
48
|
end
|
|
48
49
|
end
|
|
49
50
|
end
|
|
@@ -6,7 +6,7 @@ module Pubid
|
|
|
6
6
|
# Amendment Identifier
|
|
7
7
|
# Contains a base identifier plus amendment parameters
|
|
8
8
|
class Amendment < SingleIdentifier
|
|
9
|
-
attribute :
|
|
9
|
+
attribute :base, ::Pubid::Identifier, polymorphic: true
|
|
10
10
|
attribute :amendment_number, :string
|
|
11
11
|
attribute :amendment_year, :integer
|
|
12
12
|
attribute :separator, :string, default: -> { "+" }
|
|
@@ -16,17 +16,17 @@ module Pubid
|
|
|
16
16
|
attribute :amd_suffix_form, :boolean, default: -> { false }
|
|
17
17
|
|
|
18
18
|
def publisher
|
|
19
|
-
|
|
19
|
+
base&.publisher
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
# Base document = the standard this amendment applies to, fully peeled.
|
|
23
23
|
def base_document
|
|
24
|
-
|
|
24
|
+
base&.base_document || self
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
# Dropping the supplement layer yields the base standard.
|
|
28
28
|
def drop_supplements
|
|
29
|
-
|
|
29
|
+
base || self
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
# Uniform supplement interface (shared with Corrigendum) so callers need
|
|
@@ -6,7 +6,6 @@ module Pubid
|
|
|
6
6
|
# British Industrial Practice (BIP)
|
|
7
7
|
# Examples: "BIP 2225:2022", "BIP 0142:2014", "BIP 0009:2020"
|
|
8
8
|
class BritishIndustrialPractice < SingleIdentifier
|
|
9
|
-
attribute :number, Bsi::Components::Code
|
|
10
9
|
attribute :date, Bsi::Components::Date
|
|
11
10
|
|
|
12
11
|
def self.type
|
|
@@ -24,6 +24,16 @@ module Pubid
|
|
|
24
24
|
# Compare first identifier
|
|
25
25
|
identifiers.first <=> other.identifiers.first
|
|
26
26
|
end
|
|
27
|
+
|
|
28
|
+
# A bundle carries no number of its own — each member holds one — so
|
|
29
|
+
# `root.number`, the key relaton-index sorts and bsearches on, was "".
|
|
30
|
+
# Walk to the first member, the shape ConsolidatedIdentifier already
|
|
31
|
+
# uses. Members of one bundle are consecutive numbers of a single
|
|
32
|
+
# series, so the bundle files under the first, and `<=>` above orders
|
|
33
|
+
# bundles by that same member.
|
|
34
|
+
def root
|
|
35
|
+
identifiers&.first ? identifiers.first.root : self
|
|
36
|
+
end
|
|
27
37
|
end
|
|
28
38
|
end
|
|
29
39
|
end
|
|
@@ -11,7 +11,16 @@ module Pubid
|
|
|
11
11
|
# 21/30445138 DC
|
|
12
12
|
# 24/30300822 DC
|
|
13
13
|
class CommitteeDocument < SingleIdentifier
|
|
14
|
-
|
|
14
|
+
# The 8-digit document number lives in the `number` inherited from
|
|
15
|
+
# SingleIdentifier (a Bsi::Components::Code). It used to be a separate
|
|
16
|
+
# `document_number` :string, which left `number` nil — so `root.number`,
|
|
17
|
+
# the key relaton-index sorts and bsearches on, was "".
|
|
18
|
+
#
|
|
19
|
+
# The duplicate is DELETED rather than mirrored into `number`: keeping
|
|
20
|
+
# both would emit the same digits twice in `to_hash`, and a derived
|
|
21
|
+
# `#number` method is not available here because `number` is a lutaml
|
|
22
|
+
# attribute, whose generated accessor such a method would collide with.
|
|
23
|
+
# Nothing is retyped — the inherited attribute is already a Code.
|
|
15
24
|
|
|
16
25
|
# TYPED_STAGES for committee documents (draft by default)
|
|
17
26
|
TYPED_STAGES = [
|
|
@@ -68,6 +68,12 @@ module Pubid
|
|
|
68
68
|
identifiers&.first&.base_document || self
|
|
69
69
|
end
|
|
70
70
|
|
|
71
|
+
# The origin document. Members live in `identifiers` (not `base`), so
|
|
72
|
+
# walk the first member to its root.
|
|
73
|
+
def root
|
|
74
|
+
identifiers&.first&.root || self
|
|
75
|
+
end
|
|
76
|
+
|
|
71
77
|
# Dropping the supplement layer yields the base standard alone.
|
|
72
78
|
def drop_supplements
|
|
73
79
|
identifiers&.first || self
|
|
@@ -6,23 +6,23 @@ module Pubid
|
|
|
6
6
|
# Corrigendum Identifier
|
|
7
7
|
# Contains a base identifier plus corrigendum parameters
|
|
8
8
|
class Corrigendum < SingleIdentifier
|
|
9
|
-
attribute :
|
|
9
|
+
attribute :base, ::Pubid::Identifier, polymorphic: true
|
|
10
10
|
attribute :corrigendum_number, :string
|
|
11
11
|
attribute :corrigendum_year, :integer
|
|
12
12
|
attribute :separator, :string, default: -> { "+" }
|
|
13
13
|
|
|
14
14
|
def publisher
|
|
15
|
-
|
|
15
|
+
base&.publisher
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
# Base document = the standard this corrigendum applies to, fully peeled.
|
|
19
19
|
def base_document
|
|
20
|
-
|
|
20
|
+
base&.base_document || self
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
# Dropping the supplement layer yields the base standard.
|
|
24
24
|
def drop_supplements
|
|
25
|
-
|
|
25
|
+
base || self
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
# Uniform supplement interface (shared with Amendment) so callers need
|
|
@@ -10,25 +10,25 @@ module Pubid
|
|
|
10
10
|
# 2. "ExComm" (abbreviated form)
|
|
11
11
|
# 3. "ExComm (Fire)" (with optional topic suffix)
|
|
12
12
|
class ExpertCommentary < SingleIdentifier
|
|
13
|
-
attribute :
|
|
13
|
+
attribute :base, ::Pubid::Identifier, polymorphic: true
|
|
14
14
|
attribute :format, :string # "full", "abbr", "abbr_with_topic"
|
|
15
15
|
attribute :topic, :string # e.g., "Fire"
|
|
16
16
|
|
|
17
17
|
def publisher
|
|
18
|
-
|
|
18
|
+
base&.publisher
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
def number
|
|
22
|
-
|
|
22
|
+
base&.number
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
def year
|
|
26
|
-
|
|
26
|
+
base&.year
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
# Base document = the commented standard, fully peeled.
|
|
30
30
|
def base_document
|
|
31
|
-
|
|
31
|
+
base&.base_document || self
|
|
32
32
|
end
|
|
33
33
|
end
|
|
34
34
|
end
|
|
@@ -6,8 +6,6 @@ module Pubid
|
|
|
6
6
|
# BSI Handbook
|
|
7
7
|
# Examples: "Handbook 17:1963", "HB 10146:1998"
|
|
8
8
|
class Handbook < SingleIdentifier
|
|
9
|
-
attribute :number, Bsi::Components::Code
|
|
10
|
-
attribute :part, Bsi::Components::Code
|
|
11
9
|
attribute :date, Bsi::Components::Date
|
|
12
10
|
attribute :original_abbr, :string # Preserve "Handbook" or "HB"
|
|
13
11
|
|