pubid 2.0.0.pre.alpha.1 → 2.0.0.pre.alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.adoc +5 -1
- data/data/nist/update_codes.yaml +27 -0
- data/lib/pubid/amca/builder.rb +2 -2
- data/lib/pubid/amca/identifier.rb +7 -0
- data/lib/pubid/amca/identifiers/base.rb +0 -26
- data/lib/pubid/amca/identifiers/interpretation.rb +0 -17
- data/lib/pubid/amca/identifiers/publication.rb +0 -13
- data/lib/pubid/amca/renderer.rb +82 -0
- data/lib/pubid/amca/single_identifier.rb +0 -23
- data/lib/pubid/amca/urn_parser.rb +28 -0
- data/lib/pubid/amca.rb +42 -1
- data/lib/pubid/ansi/builder.rb +5 -3
- data/lib/pubid/ansi/identifier.rb +1 -1
- data/lib/pubid/ansi/identifiers/american_national_standard.rb +2 -1
- data/lib/pubid/ansi/identifiers/standard.rb +2 -3
- data/lib/pubid/ansi/renderer.rb +53 -0
- data/lib/pubid/ansi/single_identifier.rb +2 -31
- data/lib/pubid/ansi/urn_generator.rb +3 -38
- data/lib/pubid/ansi/urn_parser.rb +23 -0
- data/lib/pubid/ansi.rb +38 -3
- data/lib/pubid/api/builder.rb +29 -74
- data/lib/pubid/api/identifier.rb +0 -4
- data/lib/pubid/api/identifiers/base.rb +0 -2
- data/lib/pubid/api/identifiers/bulletin.rb +0 -2
- data/lib/pubid/api/identifiers/continuous_operations_standard.rb +0 -2
- data/lib/pubid/api/identifiers/mpms.rb +1 -17
- data/lib/pubid/api/identifiers/publication.rb +0 -2
- data/lib/pubid/api/identifiers/recommended_practice.rb +0 -2
- data/lib/pubid/api/identifiers/specification.rb +0 -2
- data/lib/pubid/api/identifiers/standard.rb +0 -2
- data/lib/pubid/api/identifiers/technical_report.rb +0 -2
- data/lib/pubid/api/identifiers/typeless_standard.rb +1 -14
- data/lib/pubid/api/identifiers.rb +18 -0
- data/lib/pubid/api/renderer.rb +89 -0
- data/lib/pubid/api/single_identifier.rb +1 -13
- data/lib/pubid/api/urn_generator.rb +0 -18
- data/lib/pubid/api/urn_parser.rb +35 -0
- data/lib/pubid/api.rb +51 -5
- data/lib/pubid/ashrae/builder.rb +3 -3
- data/lib/pubid/ashrae/identifier.rb +6 -0
- data/lib/pubid/ashrae/identifiers/addenda_package.rb +0 -10
- data/lib/pubid/ashrae/identifiers/addendum.rb +0 -19
- data/lib/pubid/ashrae/identifiers/base.rb +3 -0
- data/lib/pubid/ashrae/identifiers/combined_addenda.rb +0 -15
- data/lib/pubid/ashrae/identifiers/errata.rb +0 -10
- data/lib/pubid/ashrae/identifiers/interpretation.rb +0 -10
- data/lib/pubid/ashrae/renderer.rb +117 -0
- data/lib/pubid/ashrae/single_identifier.rb +0 -13
- data/lib/pubid/ashrae/urn_generator.rb +0 -8
- data/lib/pubid/ashrae/urn_parser.rb +27 -0
- data/lib/pubid/ashrae.rb +42 -1
- data/lib/pubid/asme/components/code.rb +10 -2
- data/lib/pubid/asme/identifiers/base.rb +0 -60
- data/lib/pubid/asme/renderer.rb +66 -0
- data/lib/pubid/asme/urn_parser.rb +31 -0
- data/lib/pubid/asme.rb +42 -1
- data/lib/pubid/astm/components/code.rb +9 -0
- data/lib/pubid/{jis → astm}/components.rb +1 -1
- data/lib/pubid/astm/identifiers/adjunct.rb +0 -8
- data/lib/pubid/astm/identifiers/data_series.rb +0 -14
- data/lib/pubid/astm/identifiers/iso_dual_published.rb +9 -34
- data/lib/pubid/astm/identifiers/manual.rb +0 -27
- data/lib/pubid/astm/identifiers/monograph.rb +0 -14
- data/lib/pubid/astm/identifiers/research_report.rb +0 -7
- data/lib/pubid/astm/identifiers/standard.rb +0 -39
- data/lib/pubid/astm/identifiers/technical_report.rb +0 -13
- data/lib/pubid/astm/identifiers/work_in_progress.rb +0 -11
- data/lib/pubid/astm/identifiers.rb +18 -0
- data/lib/pubid/astm/renderer.rb +172 -0
- data/lib/pubid/astm/single_identifier.rb +0 -10
- data/lib/pubid/astm/urn_parser.rb +30 -0
- data/lib/pubid/astm.rb +39 -27
- data/lib/pubid/bsi/builder.rb +21 -12
- data/lib/pubid/bsi/identifier.rb +8 -2
- data/lib/pubid/bsi/identifiers/addendum_document.rb +3 -33
- data/lib/pubid/bsi/identifiers/adopted_european_norm.rb +11 -47
- data/lib/pubid/bsi/identifiers/adopted_international_standard.rb +11 -38
- data/lib/pubid/bsi/identifiers/aerospace_standard.rb +3 -53
- data/lib/pubid/bsi/identifiers/amendment.rb +3 -19
- data/lib/pubid/bsi/identifiers/british_industrial_practice.rb +2 -4
- data/lib/pubid/bsi/identifiers/british_standard.rb +2 -1
- data/lib/pubid/bsi/identifiers/bundled_identifier.rb +3 -84
- data/lib/pubid/bsi/identifiers/committee_document.rb +1 -14
- data/lib/pubid/bsi/identifiers/consolidated_identifier.rb +3 -84
- data/lib/pubid/bsi/identifiers/corrigendum.rb +3 -7
- data/lib/pubid/bsi/identifiers/detailed_specification.rb +1 -34
- data/lib/pubid/bsi/identifiers/disc.rb +1 -27
- data/lib/pubid/bsi/identifiers/draft_document.rb +3 -44
- data/lib/pubid/bsi/identifiers/electronic_book.rb +3 -36
- data/lib/pubid/bsi/identifiers/expert_commentary.rb +3 -15
- data/lib/pubid/bsi/identifiers/explanatory_supplement.rb +1 -45
- data/lib/pubid/bsi/identifiers/flex.rb +1 -33
- data/lib/pubid/bsi/identifiers/handbook.rb +2 -13
- data/lib/pubid/bsi/identifiers/index.rb +1 -30
- data/lib/pubid/bsi/identifiers/method.rb +1 -39
- data/lib/pubid/bsi/identifiers/national_annex.rb +5 -27
- data/lib/pubid/bsi/identifiers/practice_guide.rb +2 -4
- data/lib/pubid/bsi/identifiers/publicly_available_specification.rb +3 -52
- data/lib/pubid/bsi/identifiers/published_document.rb +3 -52
- data/lib/pubid/bsi/identifiers/section.rb +1 -28
- data/lib/pubid/bsi/identifiers/set.rb +3 -17
- data/lib/pubid/bsi/identifiers/standalone_amendment.rb +1 -7
- data/lib/pubid/bsi/identifiers/supplement_document.rb +3 -21
- data/lib/pubid/bsi/identifiers/supplementary_index.rb +1 -44
- data/lib/pubid/bsi/identifiers/technical_specification.rb +3 -45
- data/lib/pubid/bsi/identifiers/test_method.rb +1 -30
- data/lib/pubid/bsi/identifiers/value_added_publication.rb +3 -14
- data/lib/pubid/bsi/identifiers.rb +0 -1
- data/lib/pubid/bsi/renderer.rb +1050 -0
- data/lib/pubid/bsi/single_identifier.rb +6 -70
- data/lib/pubid/bsi/urn_generator.rb +2 -3
- data/lib/pubid/bsi/urn_parser.rb +52 -0
- data/lib/pubid/bsi.rb +224 -1
- data/lib/pubid/builder/base.rb +57 -10
- data/lib/pubid/bundled_identifier.rb +0 -1
- data/lib/pubid/ccsds/builder.rb +4 -3
- data/lib/pubid/ccsds/identifier.rb +66 -1
- data/lib/pubid/ccsds/identifiers/base.rb +11 -50
- data/lib/pubid/ccsds/identifiers/corrigendum.rb +7 -6
- data/lib/pubid/ccsds/parser.rb +4 -2
- data/lib/pubid/ccsds/single_identifier.rb +4 -1
- data/lib/pubid/ccsds/supplement_identifier.rb +15 -11
- data/lib/pubid/ccsds/urn_generator.rb +3 -3
- data/lib/pubid/ccsds/urn_parser.rb +20 -0
- data/lib/pubid/ccsds.rb +39 -1
- data/lib/pubid/cen_cenelec/builder.rb +12 -14
- data/lib/pubid/cen_cenelec/identifier.rb +8 -2
- data/lib/pubid/cen_cenelec/identifiers/adopted_european_norm.rb +13 -4
- data/lib/pubid/cen_cenelec/identifiers/amendment.rb +2 -8
- data/lib/pubid/cen_cenelec/identifiers/base.rb +5 -41
- data/lib/pubid/cen_cenelec/identifiers/cen_report.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/cen_workshop_agreement.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/consolidated_identifier.rb +2 -25
- data/lib/pubid/cen_cenelec/identifiers/corrigendum.rb +2 -13
- data/lib/pubid/cen_cenelec/identifiers/european_norm.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/european_prestandard.rb +4 -7
- data/lib/pubid/cen_cenelec/identifiers/european_specification.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/fragment.rb +2 -2
- data/lib/pubid/cen_cenelec/identifiers/harmonization_document.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/technical_report.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/technical_specification.rb +2 -1
- data/lib/pubid/cen_cenelec/renderer.rb +261 -0
- data/lib/pubid/cen_cenelec/single_identifier.rb +11 -89
- data/lib/pubid/cen_cenelec/urn_generator.rb +6 -6
- data/lib/pubid/cen_cenelec/urn_parser.rb +28 -0
- data/lib/pubid/cen_cenelec.rb +168 -1
- data/lib/pubid/cie/components/code.rb +8 -0
- data/lib/pubid/cie/identifier.rb +6 -4
- data/lib/pubid/cie/urn_parser.rb +28 -0
- data/lib/pubid/cie.rb +43 -1
- data/lib/pubid/components/adoption.rb +104 -0
- data/lib/pubid/components/code.rb +22 -8
- data/lib/pubid/components/date.rb +23 -16
- data/lib/pubid/components/edition.rb +9 -6
- data/lib/pubid/components/iteration.rb +32 -0
- data/lib/pubid/components/language.rb +6 -4
- data/lib/pubid/components/locality.rb +10 -1
- data/lib/pubid/components/publisher.rb +9 -6
- data/lib/pubid/components/relationship.rb +151 -0
- data/lib/pubid/components/stage.rb +5 -14
- data/lib/pubid/components/supplement.rb +184 -0
- data/lib/pubid/components/type.rb +5 -15
- data/lib/pubid/components/typed_stage.rb +11 -8
- data/lib/pubid/components.rb +4 -0
- data/lib/pubid/core/update_codes.rb +28 -7
- data/lib/pubid/csa/identifier.rb +0 -3
- data/lib/pubid/csa/identifiers/base.rb +2 -122
- data/lib/pubid/csa/identifiers/cec.rb +2 -101
- data/lib/pubid/csa/identifiers/series.rb +2 -102
- data/lib/pubid/csa/renderer.rb +292 -0
- data/lib/pubid/csa/urn_generator.rb +1 -1
- data/lib/pubid/csa/urn_parser.rb +33 -0
- data/lib/pubid/csa.rb +42 -1
- data/lib/pubid/etsi/components/code.rb +9 -2
- data/lib/pubid/etsi/identifiers/base.rb +1 -4
- data/lib/pubid/etsi/identifiers/supplement_identifier.rb +2 -9
- data/lib/pubid/etsi/renderer.rb +42 -0
- data/lib/pubid/etsi/urn_parser.rb +34 -0
- data/lib/pubid/etsi.rb +42 -1
- data/lib/pubid/export/exporter.rb +4 -46
- data/lib/pubid/export/flavor_exporter.rb +111 -278
- data/lib/pubid/export.rb +0 -6
- data/lib/pubid/identifier.rb +10 -18
- data/lib/pubid/identifier_facade.rb +114 -0
- data/lib/pubid/identifier_metadata.rb +1 -1
- data/lib/pubid/idf/builder.rb +3 -3
- data/lib/pubid/idf/identifier.rb +3 -6
- data/lib/pubid/idf/identifiers/amendment.rb +2 -1
- data/lib/pubid/idf/identifiers/corrigendum.rb +2 -1
- data/lib/pubid/idf/identifiers/international_standard.rb +2 -1
- data/lib/pubid/idf/identifiers/reviewed_method.rb +2 -1
- data/lib/pubid/idf/parser.rb +3 -2
- data/lib/pubid/idf/renderer.rb +84 -0
- data/lib/pubid/idf/supplement_identifier.rb +2 -10
- data/lib/pubid/idf/urn_generator.rb +4 -39
- data/lib/pubid/idf/urn_parser.rb +25 -0
- data/lib/pubid/idf.rb +51 -1
- data/lib/pubid/iec/builder.rb +48 -65
- data/lib/pubid/iec/components/code.rb +9 -32
- data/lib/pubid/iec/components/publisher.rb +1 -1
- data/lib/pubid/iec/components.rb +14 -0
- data/lib/pubid/iec/identifier.rb +276 -3
- data/lib/pubid/iec/identifiers/amendment.rb +2 -3
- data/lib/pubid/iec/identifiers/base.rb +8 -28
- data/lib/pubid/iec/identifiers/component_specification.rb +3 -3
- data/lib/pubid/iec/identifiers/conformity_assessment.rb +1 -2
- data/lib/pubid/iec/identifiers/consolidated_identifier.rb +27 -30
- data/lib/pubid/iec/identifiers/corrigendum.rb +2 -3
- data/lib/pubid/iec/identifiers/fragment_identifier.rb +37 -26
- data/lib/pubid/iec/identifiers/guide.rb +0 -2
- data/lib/pubid/iec/identifiers/international_standard.rb +2 -3
- data/lib/pubid/iec/identifiers/interpretation_sheet.rb +2 -3
- data/lib/pubid/iec/identifiers/operational_document.rb +3 -3
- data/lib/pubid/iec/identifiers/publicly_available_specification.rb +2 -3
- data/lib/pubid/iec/identifiers/sheet_identifier.rb +21 -15
- data/lib/pubid/iec/identifiers/societal_technology_trend_report.rb +3 -3
- data/lib/pubid/iec/identifiers/systems_reference_document.rb +2 -3
- data/lib/pubid/iec/identifiers/technical_report.rb +2 -3
- data/lib/pubid/iec/identifiers/technical_specification.rb +2 -3
- data/lib/pubid/iec/identifiers/technology_report.rb +1 -2
- data/lib/pubid/iec/identifiers/test_report_form.rb +5 -34
- data/lib/pubid/iec/identifiers/vap_identifier.rb +26 -23
- data/lib/pubid/iec/identifiers/white_paper.rb +3 -3
- data/lib/pubid/iec/identifiers/working_document.rb +4 -48
- data/lib/pubid/iec/identifiers.rb +30 -0
- data/lib/pubid/iec/parser.rb +20 -14
- data/lib/pubid/iec/renderer.rb +254 -0
- data/lib/pubid/iec/single_identifier.rb +6 -12
- data/lib/pubid/iec/supplement_identifier.rb +58 -54
- data/lib/pubid/iec/urn_generator.rb +57 -171
- data/lib/pubid/iec/urn_parser.rb +53 -252
- data/lib/pubid/iec.rb +40 -68
- data/lib/pubid/ieee/builder.rb +12 -12
- data/lib/pubid/ieee/components/code.rb +8 -0
- data/lib/pubid/ieee/components/draft.rb +14 -0
- data/lib/pubid/ieee/components/relationship.rb +5 -149
- data/lib/pubid/ieee/identifier.rb +6 -0
- data/lib/pubid/ieee/identifiers/adopted_standard.rb +1 -6
- data/lib/pubid/ieee/identifiers/base.rb +101 -458
- data/lib/pubid/ieee/identifiers/conformance_identifier.rb +1 -7
- data/lib/pubid/ieee/identifiers/corrigendum.rb +1 -9
- data/lib/pubid/ieee/identifiers/csa_dual_published.rb +1 -7
- data/lib/pubid/ieee/identifiers/dual_identifier.rb +1 -1
- data/lib/pubid/ieee/identifiers/dual_published.rb +1 -1
- data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +1 -6
- data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +1 -7
- data/lib/pubid/ieee/identifiers/joint_development.rb +2 -0
- data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +1 -15
- data/lib/pubid/ieee/identifiers/parenthetical_identifier.rb +1 -3
- data/lib/pubid/ieee/identifiers/project_draft_identifier.rb +15 -0
- data/lib/pubid/ieee/identifiers/redlined_standard.rb +1 -4
- data/lib/pubid/ieee/identifiers/si_standard.rb +1 -35
- data/lib/pubid/ieee/identifiers/standard.rb +1 -1
- data/lib/pubid/ieee/pre_parser.rb +301 -0
- data/lib/pubid/ieee/renderer.rb +307 -0
- data/lib/pubid/ieee/urn_parser.rb +34 -0
- data/lib/pubid/ieee.rb +62 -1
- data/lib/pubid/ieee_debug.rb +0 -1
- data/lib/pubid/iho/builder.rb +2 -2
- data/lib/pubid/iho/identifier.rb +8 -0
- data/lib/pubid/iho/identifiers/base.rb +49 -10
- data/lib/pubid/iho/identifiers/bibliographic.rb +0 -4
- data/lib/pubid/iho/identifiers/circular_letter.rb +0 -4
- data/lib/pubid/iho/identifiers/miscellaneous.rb +0 -4
- data/lib/pubid/iho/identifiers/publication.rb +0 -4
- data/lib/pubid/iho/identifiers/standard.rb +0 -4
- data/lib/pubid/iho/parser.rb +3 -3
- data/lib/pubid/iho/renderer.rb +30 -0
- data/lib/pubid/iho/urn_generator.rb +3 -3
- data/lib/pubid/iho/urn_parser.rb +58 -0
- data/lib/pubid/iho.rb +50 -1
- data/lib/pubid/iso/builder.rb +59 -53
- data/lib/pubid/iso/bundled_identifier.rb +51 -0
- data/lib/pubid/iso/components/code.rb +7 -19
- data/lib/pubid/iso/components/publisher.rb +10 -8
- data/lib/pubid/iso/components.rb +2 -4
- data/lib/pubid/iso/identifier.rb +233 -6
- data/lib/pubid/iso/identifiers/addendum.rb +9 -6
- data/lib/pubid/iso/identifiers/amendment.rb +8 -4
- data/lib/pubid/iso/identifiers/corrigendum.rb +4 -4
- data/lib/pubid/iso/identifiers/data.rb +0 -1
- data/lib/pubid/iso/identifiers/directives.rb +8 -2
- data/lib/pubid/iso/identifiers/directives_supplement.rb +43 -14
- data/lib/pubid/iso/identifiers/extract.rb +2 -2
- data/lib/pubid/iso/identifiers/guide.rb +0 -1
- data/lib/pubid/iso/identifiers/international_standard.rb +4 -4
- data/lib/pubid/iso/identifiers/international_standardized_profile.rb +4 -4
- data/lib/pubid/iso/identifiers/international_workshop_agreement.rb +10 -4
- data/lib/pubid/iso/identifiers/pas.rb +2 -2
- data/lib/pubid/iso/identifiers/recommendation.rb +2 -2
- data/lib/pubid/iso/identifiers/supplement.rb +11 -3
- data/lib/pubid/iso/identifiers/tc_document.rb +44 -15
- data/lib/pubid/iso/identifiers/technical_report.rb +4 -4
- data/lib/pubid/iso/identifiers/technical_specification.rb +2 -2
- data/lib/pubid/iso/identifiers/technology_trends_assessments.rb +2 -2
- data/lib/pubid/iso/identifiers.rb +0 -1
- data/lib/pubid/iso/normalizer.rb +89 -0
- data/lib/pubid/iso/parser.rb +26 -6
- data/lib/pubid/iso/single_identifier.rb +6 -3
- data/lib/pubid/iso/supplement_identifier.rb +15 -2
- data/lib/pubid/iso/urn_generator.rb +74 -176
- data/lib/pubid/iso/urn_parser.rb +28 -9
- data/lib/pubid/iso.rb +173 -2
- data/lib/pubid/itu/builder.rb +0 -12
- data/lib/pubid/itu/components/code.rb +8 -0
- data/lib/pubid/itu/components.rb +11 -0
- data/lib/pubid/itu/identifier.rb +6 -39
- data/lib/pubid/itu/identifiers/amendment.rb +0 -2
- data/lib/pubid/itu/identifiers/annex.rb +0 -2
- data/lib/pubid/itu/identifiers/base.rb +0 -6
- data/lib/pubid/itu/identifiers/combined_identifier.rb +0 -2
- data/lib/pubid/itu/identifiers/corrigendum.rb +0 -2
- data/lib/pubid/itu/identifiers/recommendation.rb +0 -2
- data/lib/pubid/itu/identifiers/special_publication.rb +0 -2
- data/lib/pubid/itu/identifiers/supplement.rb +0 -2
- data/lib/pubid/itu/urn_parser.rb +23 -0
- data/lib/pubid/itu.rb +42 -1
- data/lib/pubid/jcgm/builder.rb +16 -8
- data/lib/pubid/jcgm/identifiers/amendment.rb +2 -7
- data/lib/pubid/jcgm/identifiers/gum_guide.rb +2 -10
- data/lib/pubid/jcgm/renderer.rb +68 -0
- data/lib/pubid/jcgm/single_identifier.rb +1 -5
- data/lib/pubid/jcgm/urn_generator.rb +4 -6
- data/lib/pubid/jcgm/urn_parser.rb +23 -0
- data/lib/pubid/jcgm.rb +43 -2
- data/lib/pubid/jis/builder.rb +44 -52
- data/lib/pubid/jis/identifier.rb +132 -3
- data/lib/pubid/jis/identifiers/amendment.rb +1 -1
- data/lib/pubid/jis/identifiers/corrigendum.rb +16 -0
- data/lib/pubid/jis/identifiers/standard.rb +2 -1
- data/lib/pubid/jis/identifiers/technical_report.rb +2 -1
- data/lib/pubid/jis/identifiers/technical_specification.rb +2 -1
- data/lib/pubid/jis/identifiers.rb +1 -1
- data/lib/pubid/jis/parser.rb +31 -5
- data/lib/pubid/jis/renderer.rb +69 -0
- data/lib/pubid/jis/single_identifier.rb +6 -12
- data/lib/pubid/jis/supplement_identifier.rb +17 -14
- data/lib/pubid/jis/urn_parser.rb +23 -0
- data/lib/pubid/jis.rb +42 -2
- data/lib/pubid/nist/builder.rb +122 -1761
- data/lib/pubid/nist/caster.rb +1272 -0
- data/lib/pubid/nist/circular_supplement_builder.rb +291 -0
- data/lib/pubid/nist/components/code.rb +9 -20
- data/lib/pubid/nist/components/edition.rb +16 -0
- data/lib/pubid/nist/components/supplement.rb +88 -21
- data/lib/pubid/nist/components.rb +0 -1
- data/lib/pubid/nist/identifier.rb +25 -0
- data/lib/pubid/nist/identifiers/base.rb +206 -64
- data/lib/pubid/nist/identifiers/circular.rb +7 -2
- data/lib/pubid/nist/identifiers/circular_supplement.rb +3 -2
- data/lib/pubid/nist/identifiers/commercial_standard.rb +2 -1
- data/lib/pubid/nist/identifiers/commercial_standard_emergency.rb +6 -4
- data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +10 -3
- data/lib/pubid/nist/identifiers/crpl_report.rb +8 -11
- data/lib/pubid/nist/identifiers/dated_document.rb +49 -0
- data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +17 -16
- data/lib/pubid/nist/identifiers/grant_contractor_report.rb +2 -1
- data/lib/pubid/nist/identifiers/handbook.rb +2 -1
- data/lib/pubid/nist/identifiers/internal_report.rb +2 -1
- data/lib/pubid/nist/identifiers/letter_circular.rb +2 -1
- data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +5 -4
- data/lib/pubid/nist/identifiers/monograph.rb +7 -3
- data/lib/pubid/nist/identifiers/report.rb +4 -3
- data/lib/pubid/nist/identifiers/special_publication.rb +2 -1
- data/lib/pubid/nist/identifiers/technical_note.rb +3 -2
- data/lib/pubid/nist/identifiers.rb +1 -0
- data/lib/pubid/nist/parser.rb +67 -424
- data/lib/pubid/nist/parser_output_normalizer.rb +233 -0
- data/lib/pubid/nist/preprocessor.rb +416 -0
- data/lib/pubid/nist/renderer.rb +43 -0
- data/lib/pubid/nist/router.rb +148 -0
- data/lib/pubid/nist/series/base.rb +58 -0
- data/lib/pubid/nist/series/crpl.rb +13 -0
- data/lib/pubid/nist/series/fips.rb +14 -0
- data/lib/pubid/nist/series/ir.rb +60 -0
- data/lib/pubid/nist/series/letter_preserving.rb +15 -0
- data/lib/pubid/nist/series/mono.rb +19 -0
- data/lib/pubid/nist/series/ncstar.rb +20 -0
- data/lib/pubid/nist/series.rb +49 -0
- data/lib/pubid/nist/supplement_identifier.rb +11 -25
- data/lib/pubid/nist/urn_generator.rb +14 -8
- data/lib/pubid/nist/urn_parser.rb +67 -0
- data/lib/pubid/nist.rb +83 -4
- data/lib/pubid/oiml/components/code.rb +10 -0
- data/lib/pubid/oiml/identifiers/annex.rb +3 -45
- data/lib/pubid/oiml/identifiers/base.rb +2 -17
- data/lib/pubid/oiml/renderer.rb +161 -0
- data/lib/pubid/oiml/single_identifier.rb +6 -45
- data/lib/pubid/oiml/supplement_identifier.rb +4 -19
- data/lib/pubid/oiml/urn_generator.rb +0 -8
- data/lib/pubid/oiml/urn_parser.rb +22 -0
- data/lib/pubid/oiml.rb +42 -1
- data/lib/pubid/plateau/identifier.rb +23 -0
- data/lib/pubid/plateau/identifiers/handbook.rb +1 -3
- data/lib/pubid/plateau/identifiers/technical_report.rb +1 -1
- data/lib/pubid/plateau/renderer.rb +51 -0
- data/lib/pubid/plateau/supplement_identifier.rb +1 -1
- data/lib/pubid/plateau/urn_parser.rb +43 -0
- data/lib/pubid/plateau.rb +44 -1
- data/lib/pubid/renderers/base.rb +34 -0
- data/lib/pubid/renderers/directives_renderer.rb +27 -14
- data/lib/pubid/renderers/guide_renderer.rb +7 -1
- data/lib/pubid/renderers/human_readable.rb +31 -8
- data/lib/pubid/renderers/iwa_renderer.rb +5 -1
- data/lib/pubid/renderers/supplement_renderer.rb +4 -1
- data/lib/pubid/rendering/context.rb +33 -21
- data/lib/pubid/rendering.rb +0 -3
- data/lib/pubid/sae/components/date.rb +8 -0
- data/lib/pubid/sae/components/type.rb +5 -1
- data/lib/pubid/sae/identifiers/base.rb +2 -16
- data/lib/pubid/sae/renderer.rb +36 -0
- data/lib/pubid/sae/urn_generator.rb +2 -10
- data/lib/pubid/sae/urn_parser.rb +36 -0
- data/lib/pubid/sae.rb +42 -1
- data/lib/pubid/urn_generator/base.rb +12 -12
- data/lib/pubid/urn_parser/base.rb +81 -0
- data/lib/pubid/urn_parser/errors.rb +9 -0
- data/lib/pubid/urn_parser.rb +14 -0
- data/lib/pubid/version.rb +1 -1
- data/lib/pubid.rb +29 -7
- data/lib/tasks/website-data.json +1940 -1882
- metadata +77 -43
- data/lib/pubid/amca/scheme.rb +0 -16
- data/lib/pubid/ansi/scheme.rb +0 -15
- data/lib/pubid/api/scheme.rb +0 -66
- data/lib/pubid/ashrae/scheme.rb +0 -53
- data/lib/pubid/asme/scheme.rb +0 -37
- data/lib/pubid/astm/scheme.rb +0 -55
- data/lib/pubid/bsi/identifiers/base.rb +0 -11
- data/lib/pubid/bsi/scheme.rb +0 -243
- data/lib/pubid/ccsds/scheme.rb +0 -57
- data/lib/pubid/cen_cenelec/scheme.rb +0 -164
- data/lib/pubid/cie/scheme.rb +0 -64
- data/lib/pubid/csa/scheme.rb +0 -44
- data/lib/pubid/etsi/scheme.rb +0 -42
- data/lib/pubid/export/data_class_exporter.rb +0 -59
- data/lib/pubid/export/ieee_exporter.rb +0 -78
- data/lib/pubid/export/itu_exporter.rb +0 -66
- data/lib/pubid/export/nist_exporter.rb +0 -64
- data/lib/pubid/export/registry_exporter.rb +0 -90
- data/lib/pubid/export/scheme_exporter.rb +0 -70
- data/lib/pubid/identifier_registry.rb +0 -198
- data/lib/pubid/idf/scheme.rb +0 -61
- data/lib/pubid/iec/scheme.rb +0 -71
- data/lib/pubid/ieee/scheme.rb +0 -90
- data/lib/pubid/iho/scheme.rb +0 -29
- data/lib/pubid/iso/identifiers/base.rb +0 -115
- data/lib/pubid/iso/scheme.rb +0 -187
- data/lib/pubid/itu/scheme.rb +0 -174
- data/lib/pubid/jcgm/scheme.rb +0 -60
- data/lib/pubid/jis/components/code.rb +0 -59
- data/lib/pubid/jis/identifiers/base.rb +0 -72
- data/lib/pubid/jis/scheme.rb +0 -49
- data/lib/pubid/nist/components/publisher.rb +0 -24
- data/lib/pubid/nist/scheme.rb +0 -199
- data/lib/pubid/oiml/scheme.rb +0 -46
- data/lib/pubid/plateau/scheme.rb +0 -45
- data/lib/pubid/rendering/base.rb +0 -73
- data/lib/pubid/rendering/common.rb +0 -211
- data/lib/pubid/rendering/format.rb +0 -25
- data/lib/pubid/sae/scheme.rb +0 -47
- data/lib/pubid/scheme.rb +0 -207
|
@@ -3,12 +3,15 @@
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module Ccsds
|
|
5
5
|
module Identifiers
|
|
6
|
-
# CCSDS identifier
|
|
7
|
-
#
|
|
8
|
-
#
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
# CCSDS base identifier (a published standard).
|
|
7
|
+
#
|
|
8
|
+
# Format: CCSDS NUMBER.PART-TYPE-EDITION[-SUFFIX][ - LANGUAGE Translated]
|
|
9
|
+
# Examples: CCSDS 120.0-G-4, CCSDS 100.0-G-1-S, CCSDS 551.1-O-2 - Russian Translated
|
|
10
|
+
#
|
|
11
|
+
# Attributes, the key_value mapping and from_hash dispatch live on the
|
|
12
|
+
# abstract root Pubid::Ccsds::Identifier; this concrete type only carries
|
|
13
|
+
# its typed stage and rendering.
|
|
14
|
+
class Base < Pubid::Ccsds::Identifier
|
|
12
15
|
TYPED_STAGES = [
|
|
13
16
|
Pubid::Components::TypedStage.new(
|
|
14
17
|
abbr: [""],
|
|
@@ -17,61 +20,19 @@ module Pubid
|
|
|
17
20
|
),
|
|
18
21
|
].freeze
|
|
19
22
|
|
|
20
|
-
# Type information for this identifier class
|
|
21
|
-
#
|
|
22
|
-
# @return [Hash] Type information with key, title, and short form
|
|
23
23
|
def self.type
|
|
24
|
-
{ key: :base, title: "Base Standard", short: nil }
|
|
24
|
+
{ key: :base, web: :base, title: "Base Standard", short: nil }
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
#
|
|
29
|
-
# @return [String] URN representation
|
|
30
|
-
|
|
31
|
-
# Include CCSDS-specific attributes in serialization
|
|
32
|
-
def base_hash
|
|
33
|
-
hash = super
|
|
34
|
-
# CCSDS uses plain strings for type, edition, suffix
|
|
35
|
-
hash[:type] = type if type
|
|
36
|
-
hash[:suffix] = suffix if suffix
|
|
37
|
-
hash[:language] = language if language
|
|
38
|
-
hash
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
attribute :number, :string
|
|
42
|
-
attribute :part, :string
|
|
43
|
-
attribute :type, :string # B, G, M, R, Y, O, etc.
|
|
44
|
-
attribute :edition, :string
|
|
45
|
-
attribute :suffix, :string # Optional suffix like -S
|
|
46
|
-
attribute :language, :string # Language metadata (e.g., "French", "Russian")
|
|
47
|
-
|
|
48
|
-
def publisher
|
|
49
|
-
"CCSDS"
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
def to_s
|
|
27
|
+
def to_s(**_opts)
|
|
53
28
|
result = "#{publisher} #{number}"
|
|
54
29
|
result += ".#{part}" if part
|
|
55
30
|
result += "-#{type}" if type
|
|
56
31
|
result += "-#{edition}" if edition
|
|
57
32
|
result += "-#{suffix}" if suffix
|
|
58
|
-
|
|
59
|
-
# Add language metadata
|
|
60
33
|
result += " - #{language} Translated" if language
|
|
61
|
-
|
|
62
34
|
result
|
|
63
35
|
end
|
|
64
|
-
|
|
65
|
-
def ==(other)
|
|
66
|
-
return false unless other.is_a?(Base)
|
|
67
|
-
|
|
68
|
-
number == other.number &&
|
|
69
|
-
part == other.part &&
|
|
70
|
-
type == other.type &&
|
|
71
|
-
edition == other.edition &&
|
|
72
|
-
suffix == other.suffix &&
|
|
73
|
-
language == other.language
|
|
74
|
-
end
|
|
75
36
|
end
|
|
76
37
|
end
|
|
77
38
|
end
|
|
@@ -17,21 +17,22 @@ module Pubid
|
|
|
17
17
|
#
|
|
18
18
|
# @return [Hash] Type information with key, title, and short form
|
|
19
19
|
def self.type
|
|
20
|
-
{ key: :cor,
|
|
20
|
+
{ key: :cor,
|
|
21
|
+
web: :corrigendum, title: "Corrigendum", short: "Cor" }
|
|
21
22
|
end
|
|
22
23
|
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
# The corrigendum sequence number is stored in the inherited `number`
|
|
25
|
+
# attribute (mirroring ISO), so it serializes via Base's key_value as
|
|
26
|
+
# { _type, number: '1', base: {...} } with no corrigendum-specific map.
|
|
25
27
|
def to_s
|
|
26
28
|
base_str = base_identifier.to_s
|
|
27
|
-
"#{base_str} Cor. #{
|
|
29
|
+
"#{base_str} Cor. #{number}"
|
|
28
30
|
end
|
|
29
31
|
|
|
30
32
|
def ==(other)
|
|
31
33
|
return false unless other.is_a?(Corrigendum)
|
|
32
34
|
|
|
33
|
-
base_identifier == other.base_identifier &&
|
|
34
|
-
cor_number == other.cor_number
|
|
35
|
+
base_identifier == other.base_identifier && number == other.number
|
|
35
36
|
end
|
|
36
37
|
end
|
|
37
38
|
end
|
data/lib/pubid/ccsds/parser.rb
CHANGED
|
@@ -25,8 +25,10 @@ module Pubid
|
|
|
25
25
|
# Type (all possible type letters)
|
|
26
26
|
rule(:type) { dash >> match["A-Z"].as(:type) }
|
|
27
27
|
|
|
28
|
-
# Edition (can have dots like 4.1)
|
|
29
|
-
rule(:edition)
|
|
28
|
+
# Edition (can have dots like 4.1, and a trailing draft letter like 1.99h)
|
|
29
|
+
rule(:edition) do
|
|
30
|
+
dash >> (match["0-9."].repeat(1) >> match["A-Za-z"].maybe).as(:edition)
|
|
31
|
+
end
|
|
30
32
|
|
|
31
33
|
# Suffix (like -S)
|
|
32
34
|
rule(:suffix) { dash >> match["A-Z"].as(:suffix) }
|
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module Ccsds
|
|
5
|
-
|
|
5
|
+
# Qualified as ::Pubid::Identifier to avoid resolving to the local
|
|
6
|
+
# Pubid::Ccsds::Identifier module, which is a parser entry point
|
|
7
|
+
# (`self.parse`) — not the base class.
|
|
8
|
+
class SingleIdentifier < ::Pubid::Identifier
|
|
6
9
|
attribute :publisher, Components::Publisher, default: -> {
|
|
7
10
|
Components::Publisher.new(body: "CCSDS")
|
|
8
11
|
}
|
|
@@ -2,18 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module Ccsds
|
|
5
|
-
# Base class for CCSDS supplements (corrigenda, amendments, etc.)
|
|
6
|
-
#
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
# Base class for CCSDS supplements (corrigenda, amendments, etc.).
|
|
6
|
+
# Descends from the abstract root (not the concrete Base) and points
|
|
7
|
+
# `base_identifier` at the root, so the polymorphic attribute never
|
|
8
|
+
# resolves to its own superclass — which is what prevents lutaml from
|
|
9
|
+
# recursing forever while building a supplement from a hash.
|
|
10
|
+
class SupplementIdentifier < Identifier
|
|
11
|
+
attribute :base_identifier, Identifier, polymorphic: true
|
|
9
12
|
|
|
10
|
-
#
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
# Serialize the supplemented identifier under "base" (matches ISO/JIS).
|
|
14
|
+
# The key stays `base_identifier` for the attribute/getter, which
|
|
15
|
+
# relaton-index's get_id_number relies on. A supplement's own code
|
|
16
|
+
# attributes (number/part/edition/...) stay nil — they live inside
|
|
17
|
+
# `base` — so the merged root key_value omits them here, keeping the
|
|
18
|
+
# serialization lean and non-duplicated.
|
|
19
|
+
key_value do
|
|
20
|
+
map "base", to: :base_identifier
|
|
17
21
|
end
|
|
18
22
|
|
|
19
23
|
def <=>(other)
|
|
@@ -47,7 +47,7 @@ module Pubid
|
|
|
47
47
|
edition = maybe(:edition)
|
|
48
48
|
if edition
|
|
49
49
|
e = if edition.is_a?(Pubid::Components::Edition)
|
|
50
|
-
edition.number
|
|
50
|
+
edition.number
|
|
51
51
|
else
|
|
52
52
|
edition.to_s
|
|
53
53
|
end
|
|
@@ -101,8 +101,8 @@ module Pubid
|
|
|
101
101
|
parts << base_identifier_part
|
|
102
102
|
|
|
103
103
|
supplement_chain.each do |supp|
|
|
104
|
-
if supp.number
|
|
105
|
-
parts << "cor.#{supp.number
|
|
104
|
+
if supp.number && !supp.number.to_s.empty?
|
|
105
|
+
parts << "cor.#{supp.number}"
|
|
106
106
|
elsif supp.typed_stage
|
|
107
107
|
parts << supp.typed_stage.type_code.to_s
|
|
108
108
|
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ccsds
|
|
5
|
+
# Parses CCSDS URNs back into identifiers.
|
|
6
|
+
#
|
|
7
|
+
# UrnGenerator emits: `urn:ccsds:{code}` where the code is the full
|
|
8
|
+
# identifier suffix after "CCSDS " (e.g., "120.0-G-4").
|
|
9
|
+
#
|
|
10
|
+
# Examples:
|
|
11
|
+
# - urn:ccsds:120.0-G-4 → CCSDS 120.0-G-4
|
|
12
|
+
# - urn:ccsds:100.0-G-1-S → CCSDS 100.0-G-1-S
|
|
13
|
+
class UrnParser < Pubid::UrnParser::Base
|
|
14
|
+
def parse_urn(urn)
|
|
15
|
+
body = strip_namespace(urn)
|
|
16
|
+
flavor_parse("CCSDS #{body}")
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
data/lib/pubid/ccsds.rb
CHANGED
|
@@ -6,14 +6,52 @@ module Pubid
|
|
|
6
6
|
autoload :Identifier, "#{__dir__}/ccsds/identifier"
|
|
7
7
|
autoload :Identifiers, "#{__dir__}/ccsds/identifiers"
|
|
8
8
|
autoload :Parser, "#{__dir__}/ccsds/parser"
|
|
9
|
-
autoload :Scheme, "#{__dir__}/ccsds/scheme"
|
|
10
9
|
autoload :SingleIdentifier, "#{__dir__}/ccsds/single_identifier"
|
|
11
10
|
autoload :SupplementIdentifier, "#{__dir__}/ccsds/supplement_identifier"
|
|
12
11
|
autoload :UrnGenerator, "#{__dir__}/ccsds/urn_generator"
|
|
12
|
+
autoload :UrnParser, "#{__dir__}/ccsds/urn_parser"
|
|
13
13
|
|
|
14
14
|
def self.parse(identifier)
|
|
15
15
|
Identifier.parse(identifier)
|
|
16
16
|
end
|
|
17
|
+
|
|
18
|
+
# Auto-discover all identifier types from the Identifiers namespace.
|
|
19
|
+
# CCSDS identifier classes extend Lutaml::Model::Serializable directly
|
|
20
|
+
# but do define self.type returning a Hash.
|
|
21
|
+
# @return [Array<Class>] identifier classes that define a self.type Hash
|
|
22
|
+
def self.identifier_types
|
|
23
|
+
@identifier_types ||= Identifiers.constants
|
|
24
|
+
.filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
|
|
25
|
+
.select { |c| c.is_a?(Class) && c.singleton_methods(false).include?(:type) }
|
|
26
|
+
.select { |c| c.type.is_a?(Hash) }
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Build typed stage index from identifier types
|
|
30
|
+
# @return [Array<Pubid::Components::TypedStage>] all typed stages
|
|
31
|
+
def self.all_typed_stages
|
|
32
|
+
@all_typed_stages ||= identifier_types.flat_map do |klass|
|
|
33
|
+
if klass.const_defined?(:TYPED_STAGES)
|
|
34
|
+
klass.const_get(:TYPED_STAGES)
|
|
35
|
+
else
|
|
36
|
+
[]
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Lookup: type code -> identifier class
|
|
42
|
+
# @param code [String, Symbol] the type key to find
|
|
43
|
+
# @return [Class, nil] the matching identifier class
|
|
44
|
+
def self.locate_type(code)
|
|
45
|
+
identifier_types.find { |t| t.type[:key].to_s == code.to_s }
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Lookup: abbreviation -> typed stage
|
|
49
|
+
# @param abbr [String, Symbol] the abbreviation to find
|
|
50
|
+
# @return [Pubid::Components::TypedStage, nil] the matching typed stage
|
|
51
|
+
def self.locate_stage(abbr)
|
|
52
|
+
abbr_str = abbr.to_s.upcase
|
|
53
|
+
all_typed_stages.find { |s| s.abbr.any? { |a| a.to_s.upcase == abbr_str } }
|
|
54
|
+
end
|
|
17
55
|
end
|
|
18
56
|
end
|
|
19
57
|
|
|
@@ -3,12 +3,8 @@
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module CenCenelec
|
|
5
5
|
class Builder < Pubid::Builder::Base
|
|
6
|
-
def
|
|
7
|
-
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def self.build(parsed_data, scheme = Scheme.new)
|
|
11
|
-
new(scheme).build(parsed_data)
|
|
6
|
+
def self.build(parsed_data)
|
|
7
|
+
new.build(parsed_data)
|
|
12
8
|
end
|
|
13
9
|
|
|
14
10
|
def build(data)
|
|
@@ -40,7 +36,7 @@ module Pubid
|
|
|
40
36
|
# Extract supplements before building base identifier (only plus/bundled)
|
|
41
37
|
supplements_data = extract_supplements(data)
|
|
42
38
|
|
|
43
|
-
# Determine identifier class using
|
|
39
|
+
# Determine identifier class using the module's lookup helpers
|
|
44
40
|
identifier = locate_identifier_klass(data).new
|
|
45
41
|
assign_attributes(identifier, data)
|
|
46
42
|
|
|
@@ -83,21 +79,23 @@ module Pubid
|
|
|
83
79
|
# Check if publisher is actually a type code (CWA, HD, ES, CR, ENV act as publisher)
|
|
84
80
|
publisher_str = parsed_hash[:publisher].to_s
|
|
85
81
|
if %w[CWA HD ES CR ENV].include?(publisher_str)
|
|
86
|
-
typed_stage =
|
|
87
|
-
|
|
82
|
+
typed_stage = CenCenelec.locate_stage(publisher_str)
|
|
83
|
+
if (klass = CenCenelec.locate_type(typed_stage.type_code))
|
|
84
|
+
return klass
|
|
85
|
+
end
|
|
88
86
|
end
|
|
89
87
|
|
|
90
|
-
# Use type or stage to determine class via
|
|
88
|
+
# Use type or stage to determine class via the module's registry
|
|
91
89
|
type_or_stage = parsed_hash[:type_with_stage] || parsed_hash[:type] || parsed_hash[:stage] || ""
|
|
92
|
-
typed_stage =
|
|
93
|
-
|
|
90
|
+
typed_stage = CenCenelec.locate_stage(type_or_stage) || CenCenelec::DEFAULT_TYPED_STAGE
|
|
91
|
+
CenCenelec.locate_type(typed_stage.type_code) || Identifiers::EuropeanNorm
|
|
94
92
|
end
|
|
95
93
|
|
|
96
94
|
def cast(type, value)
|
|
97
95
|
case type
|
|
98
96
|
when :type_with_stage
|
|
99
97
|
# Lookup from register
|
|
100
|
-
typed_stage =
|
|
98
|
+
typed_stage = CenCenelec.locate_stage(value.to_s) || CenCenelec::DEFAULT_TYPED_STAGE
|
|
101
99
|
{
|
|
102
100
|
stage: typed_stage.to_stage,
|
|
103
101
|
type: typed_stage.to_type,
|
|
@@ -150,7 +148,7 @@ module Pubid
|
|
|
150
148
|
|
|
151
149
|
when :stage
|
|
152
150
|
# Lookup stage in TYPED_STAGES register
|
|
153
|
-
typed_stage =
|
|
151
|
+
typed_stage = CenCenelec.locate_stage(value.to_s) || CenCenelec::DEFAULT_TYPED_STAGE
|
|
154
152
|
{
|
|
155
153
|
stage: typed_stage.to_stage,
|
|
156
154
|
typed_stage: typed_stage,
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
|
|
3
4
|
module Pubid
|
|
4
5
|
module CenCenelec
|
|
6
|
+
# `extend Pubid::IdentifierFacade` adds polymorphic `from_hash` and pairs
|
|
7
|
+
# with `include Pubid::CenCenelec::Identifier` in Identifiers::Base for
|
|
8
|
+
# identity (`is_a?`/`===`), so a consumer handed this module can deserialize
|
|
9
|
+
# and identity-check CEN/CENELEC ids through it.
|
|
5
10
|
module Identifier
|
|
11
|
+
extend Pubid::IdentifierFacade
|
|
12
|
+
|
|
6
13
|
def self.parse(identifier)
|
|
7
|
-
scheme = Scheme.new
|
|
8
14
|
parsed = Parser.parse(identifier)
|
|
9
|
-
Builder.new
|
|
15
|
+
Builder.new.build(parsed)
|
|
10
16
|
rescue Parslet::ParseFailed => e
|
|
11
17
|
raise "Failed to parse CEN identifier '#{identifier}': #{e.message}"
|
|
12
18
|
end
|
|
@@ -8,10 +8,19 @@ module Pubid
|
|
|
8
8
|
class AdoptedEuropeanNorm < EuropeanNorm
|
|
9
9
|
attribute :adopted_identifier, Base, polymorphic: true # ISO/IEC/IEEE object
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
# Override self.type to return nil so that AdoptedEuropeanNorm is NOT
|
|
12
|
+
# registered as a type in CenCenelec.identifier_types. The class is a
|
|
13
|
+
# polymorphic wrapper that wraps an adopted ISO/IEC identifier under an
|
|
14
|
+
# EN publisher; it is constructed explicitly by Builder#build_adopted_identifier,
|
|
15
|
+
# not selected via type-code lookup. Returning nil here prevents
|
|
16
|
+
# identifier_types auto-discovery from shadowing EuropeanNorm (which
|
|
17
|
+
# also reports :en) in CenCenelec.locate_type(:en).
|
|
18
|
+
def self.type
|
|
19
|
+
nil
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def to_s(**opts)
|
|
23
|
+
render(format: :human, **opts)
|
|
15
24
|
end
|
|
16
25
|
|
|
17
26
|
# Delegate common methods to adopted identifier
|
|
@@ -10,14 +10,8 @@ module Pubid
|
|
|
10
10
|
attribute :amendment_number, :string
|
|
11
11
|
attribute :amendment_year, :integer
|
|
12
12
|
|
|
13
|
-
def to_s
|
|
14
|
-
|
|
15
|
-
"#{base_identifier}/A#{amendment_number}"
|
|
16
|
-
else
|
|
17
|
-
"/A#{amendment_number}"
|
|
18
|
-
end
|
|
19
|
-
result += ":#{amendment_year}" if amendment_year
|
|
20
|
-
result
|
|
13
|
+
def to_s(**opts)
|
|
14
|
+
render(format: :human, **opts)
|
|
21
15
|
end
|
|
22
16
|
|
|
23
17
|
def publisher
|
|
@@ -6,6 +6,9 @@ module Pubid
|
|
|
6
6
|
# Base CEN identifier
|
|
7
7
|
# Format: {PUBLISHER} NUMBER[-PART]:YEAR
|
|
8
8
|
class Base < Pubid::Identifier
|
|
9
|
+
# Identity for the Pubid::CenCenelec::Identifier facade (see its comment).
|
|
10
|
+
include Pubid::CenCenelec::Identifier
|
|
11
|
+
|
|
9
12
|
# Generate URN for this identifier
|
|
10
13
|
#
|
|
11
14
|
# @return [String] URN representation
|
|
@@ -20,47 +23,8 @@ module Pubid
|
|
|
20
23
|
attribute :adopted_identifier, Base, polymorphic: true # Nested identifier object (ISO, IEC, etc.)
|
|
21
24
|
attribute :edition, :string # Edition number
|
|
22
25
|
|
|
23
|
-
def to_s
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
# Stage or Publisher
|
|
27
|
-
if stage
|
|
28
|
-
result += stage
|
|
29
|
-
elsif publisher&.any?
|
|
30
|
-
result += publisher.join("/")
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
# If we have adopted_identifier, render it (contains all info)
|
|
34
|
-
if adopted_identifier
|
|
35
|
-
result += " #{adopted_identifier}"
|
|
36
|
-
# Don't add our own number/parts/year - they're in adopted_identifier
|
|
37
|
-
else
|
|
38
|
-
# Only render our own fields if no adoption
|
|
39
|
-
# Type - use space for Guide, slash for TR/TS
|
|
40
|
-
if type
|
|
41
|
-
sep = type == "Guide" ? " " : "/"
|
|
42
|
-
result += "#{sep}#{type}"
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
result += " #{number}"
|
|
46
|
-
result += parts.map { |p| "-#{p}" }.join if parts&.any?
|
|
47
|
-
result += ":#{year}" if year
|
|
48
|
-
|
|
49
|
-
# Supplements
|
|
50
|
-
if supplements&.any?
|
|
51
|
-
supplements.each do |supp|
|
|
52
|
-
sep = supp[:type] == :amendment ? "/" : "+"
|
|
53
|
-
result += "#{sep}#{supp[:type] == :amendment ? 'A' : 'AC'}"
|
|
54
|
-
result += supp[:number] if supp[:number] && !supp[:number].empty?
|
|
55
|
-
result += ":#{supp[:year]}" if supp[:year]
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
# Edition
|
|
60
|
-
result += " ED#{edition}" if edition
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
result
|
|
26
|
+
def to_s(**opts)
|
|
27
|
+
render(format: :human, **opts)
|
|
64
28
|
end
|
|
65
29
|
|
|
66
30
|
def ==(other)
|
|
@@ -8,31 +8,8 @@ module Pubid
|
|
|
8
8
|
class ConsolidatedIdentifier < Base
|
|
9
9
|
attribute :identifiers, Base, polymorphic: true, collection: true
|
|
10
10
|
|
|
11
|
-
def to_s
|
|
12
|
-
|
|
13
|
-
if idx.zero?
|
|
14
|
-
# First identifier renders normally
|
|
15
|
-
id.to_s
|
|
16
|
-
elsif id.is_a?(Amendment)
|
|
17
|
-
# Supplements render with "+" prefix (bundled/consolidated format)
|
|
18
|
-
result = "+A#{id.amendment_number}"
|
|
19
|
-
result += ":#{id.amendment_year}" if id.amendment_year
|
|
20
|
-
result
|
|
21
|
-
# Only render the amendment portion, not the full id.to_s
|
|
22
|
-
elsif id.is_a?(Corrigendum)
|
|
23
|
-
# Only render the corrigendum portion
|
|
24
|
-
result = "+AC"
|
|
25
|
-
result += id.corrigendum_number if id.corrigendum_number && !id.corrigendum_number.empty?
|
|
26
|
-
if id.corrigendum_year
|
|
27
|
-
result += ":#{id.corrigendum_year}"
|
|
28
|
-
result += "-#{id.corrigendum_month}" if id.corrigendum_month && !id.corrigendum_month.empty?
|
|
29
|
-
end
|
|
30
|
-
result
|
|
31
|
-
else
|
|
32
|
-
# Other identifiers (should not happen in typical bundles) render with +
|
|
33
|
-
"+#{id}"
|
|
34
|
-
end
|
|
35
|
-
end.compact.join
|
|
11
|
+
def to_s(**opts)
|
|
12
|
+
render(format: :human, **opts)
|
|
36
13
|
end
|
|
37
14
|
|
|
38
15
|
# Delegate to first identifier (base document)
|
|
@@ -11,19 +11,8 @@ module Pubid
|
|
|
11
11
|
attribute :corrigendum_year, :integer
|
|
12
12
|
attribute :corrigendum_month, :string
|
|
13
13
|
|
|
14
|
-
def to_s
|
|
15
|
-
|
|
16
|
-
result = base_identifier.to_s
|
|
17
|
-
result += "/AC"
|
|
18
|
-
result += corrigendum_number if corrigendum_number && !corrigendum_number.empty?
|
|
19
|
-
else
|
|
20
|
-
result = "/AC#{corrigendum_number}"
|
|
21
|
-
end
|
|
22
|
-
if corrigendum_year
|
|
23
|
-
result += ":#{corrigendum_year}"
|
|
24
|
-
result += "-#{corrigendum_month}" if corrigendum_month && !corrigendum_month.empty?
|
|
25
|
-
end
|
|
26
|
-
result
|
|
14
|
+
def to_s(**opts)
|
|
15
|
+
render(format: :human, **opts)
|
|
27
16
|
end
|
|
28
17
|
|
|
29
18
|
def publisher
|
|
@@ -21,15 +21,12 @@ module Pubid
|
|
|
21
21
|
].freeze
|
|
22
22
|
|
|
23
23
|
def self.type
|
|
24
|
-
{ key: :env,
|
|
24
|
+
{ key: :env,
|
|
25
|
+
web: :european_prestandard, title: "European Prestandard", short: "ENV" }
|
|
25
26
|
end
|
|
26
27
|
|
|
27
|
-
def to_s(lang: :en, lang_single: false)
|
|
28
|
-
|
|
29
|
-
"ENV #{adopted_identifier}"
|
|
30
|
-
else
|
|
31
|
-
super
|
|
32
|
-
end
|
|
28
|
+
def to_s(lang: :en, lang_single: false, **opts)
|
|
29
|
+
render(format: :human, lang: lang, lang_single: lang_single, **opts)
|
|
33
30
|
end
|
|
34
31
|
end
|
|
35
32
|
end
|