pubid 2.0.0.pre.alpha.2 → 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 +25 -0
- data/lib/pubid/amca/builder.rb +2 -2
- data/lib/pubid/amca/identifier.rb +7 -39
- 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 -43
- 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 -51
- 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 -39
- 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/identifier.rb +0 -46
- 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/identifier.rb +0 -77
- 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 -62
- 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 +63 -66
- data/lib/pubid/ccsds/identifiers/base.rb +11 -61
- data/lib/pubid/ccsds/identifiers/corrigendum.rb +7 -6
- data/lib/pubid/ccsds/parser.rb +4 -2
- 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 +7 -38
- 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 -57
- 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 +10 -11
- data/lib/pubid/components.rb +4 -1
- data/lib/pubid/core/update_codes.rb +28 -7
- data/lib/pubid/csa/identifier.rb +0 -59
- 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/identifier.rb +0 -43
- 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 +2 -17
- 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 -66
- 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 +46 -64
- data/lib/pubid/iec/components/code.rb +8 -32
- data/lib/pubid/iec/components/publisher.rb +0 -1
- data/lib/pubid/iec/components.rb +14 -0
- data/lib/pubid/iec/identifier.rb +251 -213
- data/lib/pubid/iec/identifiers/amendment.rb +2 -3
- data/lib/pubid/iec/identifiers/base.rb +8 -32
- 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 -26
- data/lib/pubid/iec/identifiers/corrigendum.rb +2 -3
- data/lib/pubid/iec/identifiers/fragment_identifier.rb +37 -22
- 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 -11
- 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 -19
- 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 +13 -12
- 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 +3 -3
- data/lib/pubid/iec/urn_parser.rb +3 -3
- 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 -41
- 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 -42
- data/lib/pubid/iho/identifiers/base.rb +49 -10
- data/lib/pubid/iho/parser.rb +3 -3
- data/lib/pubid/iho/renderer.rb +30 -0
- data/lib/pubid/iho/urn_generator.rb +2 -2
- data/lib/pubid/iho/urn_parser.rb +58 -0
- data/lib/pubid/iho.rb +50 -1
- data/lib/pubid/iso/builder.rb +55 -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 +218 -252
- 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 +22 -4
- data/lib/pubid/iso/supplement_identifier.rb +15 -2
- data/lib/pubid/iso/urn_generator.rb +66 -182
- data/lib/pubid/iso/urn_parser.rb +12 -7
- 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 -104
- 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/identifier.rb +0 -43
- 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 -46
- 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 +63 -1871
- 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/supplement.rb +2 -2
- data/lib/pubid/nist/components.rb +0 -1
- data/lib/pubid/nist/identifier.rb +11 -48
- data/lib/pubid/nist/identifiers/base.rb +110 -47
- data/lib/pubid/nist/identifiers/circular.rb +7 -2
- data/lib/pubid/nist/identifiers/circular_supplement.rb +2 -1
- 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 -8
- data/lib/pubid/nist/identifiers/dated_document.rb +49 -0
- data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +15 -24
- 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 -2
- 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 +62 -452
- 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 +3 -1
- data/lib/pubid/nist/urn_parser.rb +67 -0
- data/lib/pubid/nist.rb +82 -4
- data/lib/pubid/oiml/components/code.rb +10 -0
- data/lib/pubid/oiml/identifier.rb +0 -50
- 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 +7 -41
- 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 +43 -1
- data/lib/pubid/renderers/directives_renderer.rb +22 -8
- data/lib/pubid/renderers/guide_renderer.rb +4 -2
- data/lib/pubid/renderers/human_readable.rb +18 -7
- data/lib/pubid/rendering/context.rb +28 -19
- 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/identifier.rb +0 -23
- 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 +75 -44
- 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/components/factory.rb +0 -50
- 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 -193
- 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 -219
data/lib/pubid/iec.rb
CHANGED
|
@@ -2,84 +2,56 @@
|
|
|
2
2
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module Iec
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
autoload :Components, "#{__dir__}/iec/components"
|
|
6
|
+
autoload :Identifier, "#{__dir__}/iec/identifier"
|
|
7
|
+
autoload :Identifiers, "#{__dir__}/iec/identifiers"
|
|
8
|
+
autoload :SingleIdentifier, "#{__dir__}/iec/single_identifier"
|
|
9
|
+
autoload :SupplementIdentifier, "#{__dir__}/iec/supplement_identifier"
|
|
10
|
+
autoload :Parser, "#{__dir__}/iec/parser"
|
|
11
|
+
autoload :Builder, "#{__dir__}/iec/builder"
|
|
12
|
+
autoload :UrnParser, "#{__dir__}/iec/urn_parser"
|
|
13
|
+
autoload :UrnGenerator, "#{__dir__}/iec/urn_generator"
|
|
14
|
+
autoload :RenderingStyle, "#{__dir__}/iec/rendering_style"
|
|
15
|
+
autoload :Renderer, "#{__dir__}/iec/renderer"
|
|
10
16
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
require_relative "iec/identifiers/publicly_available_specification"
|
|
16
|
-
require_relative "iec/identifiers/guide"
|
|
17
|
-
require_relative "iec/identifiers/test_report_form"
|
|
18
|
-
require_relative "iec/identifiers/interpretation_sheet"
|
|
19
|
-
require_relative "iec/identifiers/systems_reference_document"
|
|
20
|
-
require_relative "iec/identifiers/working_document"
|
|
21
|
-
require_relative "iec/identifiers/amendment"
|
|
22
|
-
require_relative "iec/identifiers/corrigendum"
|
|
17
|
+
def self.parse(identifier_string)
|
|
18
|
+
parsed = Parser.new.parse(identifier_string)
|
|
19
|
+
Builder.new.build(parsed)
|
|
20
|
+
end
|
|
23
21
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
require_relative "iec/identifiers/consolidated_identifier"
|
|
28
|
-
require_relative "iec/identifiers/fragment_identifier"
|
|
22
|
+
def self.parse_urn(urn)
|
|
23
|
+
UrnParser.parse(urn)
|
|
24
|
+
end
|
|
29
25
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
require_relative "iec/identifiers/operational_document"
|
|
33
|
-
require_relative "iec/identifiers/societal_technology_trend_report"
|
|
34
|
-
require_relative "iec/identifiers/white_paper"
|
|
26
|
+
Identifier.format_registry = FormatRegistry.new(parent: Identifier.format_registry)
|
|
27
|
+
Identifier.format_registry.register(:human, renderer: Iec::Renderer)
|
|
35
28
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
Identifiers::TechnicalSpecification,
|
|
43
|
-
Identifiers::PubliclyAvailableSpecification,
|
|
44
|
-
Identifiers::Guide,
|
|
45
|
-
Identifiers::TestReportForm,
|
|
46
|
-
Identifiers::InterpretationSheet,
|
|
47
|
-
Identifiers::SystemsReferenceDocument,
|
|
48
|
-
Identifiers::WorkingDocument,
|
|
49
|
-
].freeze
|
|
50
|
-
|
|
51
|
-
# Supplement types (can appear with / notation)
|
|
52
|
-
SUPPLEMENT_IDENTIFIER_TYPES = [
|
|
53
|
-
Identifiers::Amendment,
|
|
54
|
-
Identifiers::Corrigendum,
|
|
55
|
-
Identifiers::InterpretationSheet, # ISH can act as supplement (/ISH1:1996)
|
|
56
|
-
Identifiers::FragmentIdentifier, # FRAG wraps amendments/corrigenda
|
|
57
|
-
].freeze
|
|
29
|
+
def self.identifier_types
|
|
30
|
+
@identifier_types ||= Identifiers.constants
|
|
31
|
+
.filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
|
|
32
|
+
.select { |c| c.is_a?(Class) && c.singleton_methods(false).include?(:type) }
|
|
33
|
+
.select { |c| begin; c.type.is_a?(Hash); rescue NotImplementedError; false; end }
|
|
34
|
+
end
|
|
58
35
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
36
|
+
def self.all_typed_stages
|
|
37
|
+
@all_typed_stages ||= identifier_types.flat_map do |klass|
|
|
38
|
+
if klass.const_defined?(:TYPED_STAGES)
|
|
39
|
+
klass.const_get(:TYPED_STAGES)
|
|
40
|
+
else
|
|
41
|
+
[]
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
64
45
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
parsed = Parser.new.parse(identifier_string)
|
|
68
|
-
Builder.new(Scheme).build(parsed)
|
|
46
|
+
def self.locate_type(code)
|
|
47
|
+
identifier_types.find { |t| t.type[:key].to_s == code.to_s }
|
|
69
48
|
end
|
|
70
49
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
# @raise [Errors::ParseError] if URN is invalid
|
|
75
|
-
def self.parse_urn(urn)
|
|
76
|
-
UrnParser.parse(urn)
|
|
50
|
+
def self.locate_stage(abbr)
|
|
51
|
+
abbr_str = abbr.to_s.upcase
|
|
52
|
+
all_typed_stages.find { |s| s.abbr.any? { |a| a.to_s.upcase == abbr_str } }
|
|
77
53
|
end
|
|
78
54
|
end
|
|
79
55
|
end
|
|
80
56
|
|
|
81
|
-
require_relative "iec/urn_parser"
|
|
82
|
-
require_relative "iec/builder"
|
|
83
|
-
require_relative "iec/parser"
|
|
84
|
-
|
|
85
57
|
Pubid::Registry.register(:iec, Pubid::Iec)
|
data/lib/pubid/ieee/builder.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module Ieee
|
|
5
5
|
# Builder class for constructing IEEE identifier scheme from parsed data
|
|
6
|
-
# Single Responsibility: Transform parsed data into
|
|
6
|
+
# Single Responsibility: Transform parsed data into identifier objects
|
|
7
7
|
class Builder
|
|
8
8
|
attr_accessor :original_input
|
|
9
9
|
attr_reader :identifier_class
|
|
@@ -14,7 +14,7 @@ module Pubid
|
|
|
14
14
|
|
|
15
15
|
# Build a scheme object from parsed data
|
|
16
16
|
# @param parsed [Hash, Array] the parsed identifier data
|
|
17
|
-
# @return [
|
|
17
|
+
# @return [identifier] the constructed identifier object
|
|
18
18
|
def build(parsed)
|
|
19
19
|
# Handle CSA dual published patterns
|
|
20
20
|
if parsed[:ieee_portion] && parsed[:csa_portion]
|
|
@@ -458,7 +458,7 @@ module Pubid
|
|
|
458
458
|
stage_abbr = attributes[:iso_stage]
|
|
459
459
|
if stage_abbr
|
|
460
460
|
attributes[:typed_stage] =
|
|
461
|
-
Ieee
|
|
461
|
+
Pubid::Ieee.locate_stage(stage_abbr)
|
|
462
462
|
end
|
|
463
463
|
else
|
|
464
464
|
# IEEE format - lead party is IEEE
|
|
@@ -477,7 +477,7 @@ module Pubid
|
|
|
477
477
|
|
|
478
478
|
# Create typed_stage for IEEE project
|
|
479
479
|
attributes[:typed_stage] =
|
|
480
|
-
Ieee
|
|
480
|
+
Pubid::Ieee.locate_stage("P")
|
|
481
481
|
end
|
|
482
482
|
|
|
483
483
|
Identifiers::JointDevelopment.new(**attributes)
|
|
@@ -575,7 +575,7 @@ module Pubid
|
|
|
575
575
|
end
|
|
576
576
|
|
|
577
577
|
# Determine which identifier class to use based on attributes
|
|
578
|
-
# CRITICAL: Use
|
|
578
|
+
# CRITICAL: Use flavor module for type-based decisions, NOT hardcoded logic here
|
|
579
579
|
# Builder's job is ONLY to cast types, not make business decisions
|
|
580
580
|
def determine_identifier_class(attributes)
|
|
581
581
|
# Check for AIEE publisher FIRST (AIEE has its own identifier class)
|
|
@@ -584,12 +584,12 @@ module Pubid
|
|
|
584
584
|
return Ieee::Aiee::Identifier
|
|
585
585
|
end
|
|
586
586
|
|
|
587
|
-
# Get type from attributes and use
|
|
587
|
+
# Get type from attributes and use flavor module to locate class
|
|
588
588
|
type_code = attributes[:type]
|
|
589
589
|
|
|
590
|
-
# Use
|
|
590
|
+
# Use flavor module for type-to-class mapping
|
|
591
591
|
if type_code
|
|
592
|
-
klass = Ieee
|
|
592
|
+
klass = Pubid::Ieee.locate_type(type_code)
|
|
593
593
|
return klass if klass
|
|
594
594
|
end
|
|
595
595
|
|
|
@@ -678,7 +678,7 @@ module Pubid
|
|
|
678
678
|
|
|
679
679
|
# Extract and normalize attributes from parsed data
|
|
680
680
|
# @param parsed [Hash] the parsed data
|
|
681
|
-
# @return [Hash] normalized attributes for
|
|
681
|
+
# @return [Hash] normalized attributes for identifier
|
|
682
682
|
def extract_attributes(parsed)
|
|
683
683
|
attributes = {}
|
|
684
684
|
|
|
@@ -785,7 +785,7 @@ module Pubid
|
|
|
785
785
|
end
|
|
786
786
|
|
|
787
787
|
# Set type attribute for backward compatibility (after P extraction)
|
|
788
|
-
# NOTE: "P" IS a type code that maps to ProjectDraftIdentifier via
|
|
788
|
+
# NOTE: "P" IS a type code that maps to ProjectDraftIdentifier via flavor module
|
|
789
789
|
# Type can be: "Std", "No", "P" (project draft), etc.
|
|
790
790
|
attributes[:type] = type_value if type_value
|
|
791
791
|
|
|
@@ -794,7 +794,7 @@ module Pubid
|
|
|
794
794
|
parsed)
|
|
795
795
|
if typed_stage_abbr
|
|
796
796
|
attributes[:typed_stage] =
|
|
797
|
-
Ieee
|
|
797
|
+
Pubid::Ieee.locate_stage(typed_stage_abbr)
|
|
798
798
|
end
|
|
799
799
|
|
|
800
800
|
attributes[:draft_status] = draft_status_value
|
|
@@ -880,7 +880,7 @@ module Pubid
|
|
|
880
880
|
if version
|
|
881
881
|
draft_abbr = "D#{version}"
|
|
882
882
|
# Check if this specific draft stage is in registry
|
|
883
|
-
stage = Ieee
|
|
883
|
+
stage = Pubid::Ieee.locate_stage(draft_abbr)
|
|
884
884
|
return draft_abbr if stage&.abbr&.include?(draft_abbr)
|
|
885
885
|
end
|
|
886
886
|
end
|
|
@@ -11,6 +11,10 @@ module Pubid
|
|
|
11
11
|
# 802.15.4 - dotted parts
|
|
12
12
|
# C57.12.00 - prefix with parts
|
|
13
13
|
# 11073-10404 - dashed parts
|
|
14
|
+
#
|
|
15
|
+
# Stays independent of Pubid::Components::Code because IEEE tracks
|
|
16
|
+
# +original_separator+ to round-trip dot vs dash notation, and uses
|
|
17
|
+
# +number+ rather than +value+.
|
|
14
18
|
class Code < Lutaml::Model::Serializable
|
|
15
19
|
attribute :prefix, :string # C, P for some identifiers
|
|
16
20
|
attribute :number, :string # Main number (802, 1234, etc.)
|
|
@@ -96,6 +100,10 @@ original_separator: nil)
|
|
|
96
100
|
|
|
97
101
|
result
|
|
98
102
|
end
|
|
103
|
+
|
|
104
|
+
def render(context: nil)
|
|
105
|
+
to_s
|
|
106
|
+
end
|
|
99
107
|
end
|
|
100
108
|
end
|
|
101
109
|
end
|
|
@@ -42,6 +42,20 @@ day: nil)
|
|
|
42
42
|
self.day = day
|
|
43
43
|
end
|
|
44
44
|
|
|
45
|
+
# Parse a draft string like "D5", "D3.4", or "5" into a Draft object.
|
|
46
|
+
# @param value [String, Draft] the value to coerce
|
|
47
|
+
# @return [Draft]
|
|
48
|
+
def self.parse(value)
|
|
49
|
+
return value if value.is_a?(Draft)
|
|
50
|
+
|
|
51
|
+
str = value.to_s
|
|
52
|
+
if str =~ /^D(\d+)(?:\.(\d+))?/
|
|
53
|
+
new(version: $1, revision: $2)
|
|
54
|
+
else
|
|
55
|
+
new(version: str)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
45
59
|
# Convert month name to numeric value
|
|
46
60
|
def convert_month(month_name)
|
|
47
61
|
return nil unless month_name
|
|
@@ -1,157 +1,13 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
# IEEE's Relationship component is now the shared Pubid::Components::Relationship.
|
|
4
|
+
# This subclass exists so existing references (Pubid::Ieee::Components::Relationship,
|
|
5
|
+
# the VALID_TYPES constants, etc.) continue to resolve without rewriting every
|
|
6
|
+
# call site.
|
|
5
7
|
module Pubid
|
|
6
8
|
module Ieee
|
|
7
9
|
module Components
|
|
8
|
-
|
|
9
|
-
# E.g., "Revision of IEEE Std X, Y" or "incorporates A, B, C"
|
|
10
|
-
#
|
|
11
|
-
# Relationships capture metadata about how identifiers relate to each other:
|
|
12
|
-
# - Revision relationships (one standard revises another)
|
|
13
|
-
# - Amendment relationships (amendments to base standards)
|
|
14
|
-
# - Incorporation relationships (one standard incorporates others)
|
|
15
|
-
# - Adoption relationships (adopting external standards)
|
|
16
|
-
#
|
|
17
|
-
# Example usage:
|
|
18
|
-
# relationship = Relationship.new(
|
|
19
|
-
# relationship_type: Relationship::REVISION_OF,
|
|
20
|
-
# related_identifiers: [Base.parse("IEEE Std 802.11-2012")]
|
|
21
|
-
# )
|
|
22
|
-
# relationship.to_s # => "Revision of IEEE Std 802.11-2012"
|
|
23
|
-
class Relationship < Lutaml::Model::Serializable
|
|
24
|
-
# Relationship type constants
|
|
25
|
-
REVISION_OF = "revision_of"
|
|
26
|
-
AMENDMENT_TO = "amendment_to"
|
|
27
|
-
CORRIGENDUM_TO = "corrigendum_to"
|
|
28
|
-
INCORPORATES = "incorporates"
|
|
29
|
-
INCORPORATING = "incorporating" # Synonym for incorporates
|
|
30
|
-
ADOPTION_OF = "adoption_of"
|
|
31
|
-
SUPPLEMENT_TO = "supplement_to"
|
|
32
|
-
DRAFT_AMENDMENT_TO = "draft_amendment_to"
|
|
33
|
-
DRAFT_REVISION_OF = "draft_revision_of"
|
|
34
|
-
REAFFIRMATION_OF = "reaffirmation_of"
|
|
35
|
-
REDESIGNATION_OF = "redesignation_of"
|
|
36
|
-
SUPERSEDES = "supersedes"
|
|
37
|
-
PREVIOUSLY_DESIGNATED_AS = "previously_designated_as"
|
|
38
|
-
INCLUDES = "includes" # NEW Session 171: For "Includes IEEE Std X" pattern
|
|
39
|
-
|
|
40
|
-
# All valid relationship types
|
|
41
|
-
VALID_TYPES = [
|
|
42
|
-
REVISION_OF,
|
|
43
|
-
AMENDMENT_TO,
|
|
44
|
-
CORRIGENDUM_TO,
|
|
45
|
-
INCORPORATES,
|
|
46
|
-
INCORPORATING,
|
|
47
|
-
ADOPTION_OF,
|
|
48
|
-
SUPPLEMENT_TO,
|
|
49
|
-
DRAFT_AMENDMENT_TO,
|
|
50
|
-
DRAFT_REVISION_OF,
|
|
51
|
-
REAFFIRMATION_OF,
|
|
52
|
-
REDESIGNATION_OF,
|
|
53
|
-
SUPERSEDES,
|
|
54
|
-
PREVIOUSLY_DESIGNATED_AS,
|
|
55
|
-
INCLUDES, # NEW Session 171
|
|
56
|
-
].freeze
|
|
57
|
-
|
|
58
|
-
# Attributes
|
|
59
|
-
attribute :relationship_type, :string
|
|
60
|
-
|
|
61
|
-
# Use regular Ruby attributes to avoid circular dependency
|
|
62
|
-
# related_identifiers: Array of Base identifiers
|
|
63
|
-
# intermediate_amendments: Array of Base identifiers (for "as amended by" clause)
|
|
64
|
-
attr_accessor :related_identifiers, :intermediate_amendments,
|
|
65
|
-
:approved_amendments_flag
|
|
66
|
-
|
|
67
|
-
# Validation
|
|
68
|
-
def initialize(**args)
|
|
69
|
-
# Extract our non-Lutaml attributes before calling super
|
|
70
|
-
@related_identifiers = args.delete(:related_identifiers)
|
|
71
|
-
@intermediate_amendments = args.delete(:intermediate_amendments)
|
|
72
|
-
@approved_amendments_flag = args.delete(:approved_amendments_flag)
|
|
73
|
-
|
|
74
|
-
# Let Lutaml handle relationship_type
|
|
75
|
-
super
|
|
76
|
-
|
|
77
|
-
# Normalize INCORPORATING to INCORPORATES for consistent rendering
|
|
78
|
-
if relationship_type == INCORPORATING
|
|
79
|
-
self.relationship_type = INCORPORATES
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
# Validate after initialization
|
|
83
|
-
validate_relationship_type if relationship_type
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
def validate_relationship_type
|
|
87
|
-
unless VALID_TYPES.include?(relationship_type)
|
|
88
|
-
raise ArgumentError, "Invalid relationship type: #{relationship_type}. " \
|
|
89
|
-
"Valid types: #{VALID_TYPES.join(', ')}"
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
# Rendering
|
|
94
|
-
def to_s
|
|
95
|
-
return "" if related_identifiers.nil? || related_identifiers.empty?
|
|
96
|
-
|
|
97
|
-
# Format: "Relationship Type IEEE Std X, IEEE Std Y, and IEEE Std Z"
|
|
98
|
-
prefix = format_relationship_prefix
|
|
99
|
-
ids = format_identifier_list(related_identifiers)
|
|
100
|
-
|
|
101
|
-
# Add intermediate amendments if present (for "as amended by" clause)
|
|
102
|
-
if intermediate_amendments && !intermediate_amendments.empty?
|
|
103
|
-
amendments = format_identifier_list(intermediate_amendments)
|
|
104
|
-
"#{prefix} #{ids} as amended by #{amendments}"
|
|
105
|
-
elsif approved_amendments_flag
|
|
106
|
-
# "and its approved amendments" clause (no specific list)
|
|
107
|
-
"#{prefix} #{ids} and its approved amendments"
|
|
108
|
-
else
|
|
109
|
-
"#{prefix} #{ids}"
|
|
110
|
-
end
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
private
|
|
114
|
-
|
|
115
|
-
# Get the human-readable prefix for the relationship type
|
|
116
|
-
def format_relationship_prefix
|
|
117
|
-
case relationship_type
|
|
118
|
-
when REVISION_OF then "Revision of"
|
|
119
|
-
when AMENDMENT_TO then "Amendment to"
|
|
120
|
-
when CORRIGENDUM_TO then "Corrigendum to"
|
|
121
|
-
when INCORPORATES, INCORPORATING then "incorporates"
|
|
122
|
-
when ADOPTION_OF then "Adoption of"
|
|
123
|
-
when SUPPLEMENT_TO then "Supplement to"
|
|
124
|
-
when DRAFT_AMENDMENT_TO then "Draft Amendment to"
|
|
125
|
-
when DRAFT_REVISION_OF then "Draft Revision of"
|
|
126
|
-
when REAFFIRMATION_OF then "Reaffirmation of"
|
|
127
|
-
when REDESIGNATION_OF then "Redesignation of"
|
|
128
|
-
when SUPERSEDES then "Supersedes"
|
|
129
|
-
when PREVIOUSLY_DESIGNATED_AS then "Previously designated as"
|
|
130
|
-
when INCLUDES then "Includes" # NEW Session 171
|
|
131
|
-
else relationship_type
|
|
132
|
-
end
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
# Format a list of identifiers using proper English grammar:
|
|
136
|
-
# - Single: "IEEE Std X"
|
|
137
|
-
# - Two: "IEEE Std X and IEEE Std Y"
|
|
138
|
-
# - Three+: "IEEE Std X, IEEE Std Y, and IEEE Std Z"
|
|
139
|
-
def format_identifier_list(identifiers)
|
|
140
|
-
return "" if identifiers.nil? || identifiers.empty?
|
|
141
|
-
|
|
142
|
-
case identifiers.length
|
|
143
|
-
when 1
|
|
144
|
-
identifiers.first.to_s
|
|
145
|
-
when 2
|
|
146
|
-
"#{identifiers.first} and #{identifiers.last}"
|
|
147
|
-
else
|
|
148
|
-
# X, Y, and Z format (Oxford comma)
|
|
149
|
-
last = identifiers.last
|
|
150
|
-
others = identifiers[0..-2]
|
|
151
|
-
"#{others.join(', ')}, and #{last}"
|
|
152
|
-
end
|
|
153
|
-
end
|
|
154
|
-
end
|
|
10
|
+
class Relationship < ::Pubid::Components::Relationship; end
|
|
155
11
|
end
|
|
156
12
|
end
|
|
157
13
|
end
|
|
@@ -2,52 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module Ieee
|
|
5
|
+
# NOTE: intentionally does NOT `extend Pubid::IdentifierFacade`. IEEE's
|
|
6
|
+
# `to_hash`/`from_hash` does not round-trip yet (e.g. `code`/`year` are
|
|
7
|
+
# dropped on rebuild), so the facade would advertise a `from_hash` that
|
|
8
|
+
# silently returns lossy objects — and a consumer's `instance_of?(module)`
|
|
9
|
+
# validation can't catch it. Re-enable once IEEE serialization round-trips
|
|
10
|
+
# cleanly. See identifier_facade.rb.
|
|
5
11
|
module Identifier
|
|
6
12
|
class << self
|
|
7
13
|
def parse(input)
|
|
8
14
|
Identifiers::Base.parse(input)
|
|
9
15
|
end
|
|
10
|
-
|
|
11
|
-
# Factory mirroring pubid 1.x's `Pubid::Ieee::Identifier.create` API.
|
|
12
|
-
# Dispatches via {Pubid::Ieee::Scheme.locate_identifier_klass_by_type_code}.
|
|
13
|
-
# Default subclass (no `type:`) is Identifiers::Standard — the
|
|
14
|
-
# canonical class produced by parsing typical IEEE identifiers.
|
|
15
|
-
def create(type: nil, **opts)
|
|
16
|
-
klass = type ?
|
|
17
|
-
Scheme.locate_identifier_klass_by_type_code(type) :
|
|
18
|
-
Identifiers::Standard
|
|
19
|
-
attrs = coerce_create_attrs(opts)
|
|
20
|
-
# ProjectDraftIdentifier renders the "P" prefix from typed_stage,
|
|
21
|
-
# not from `type`. Set both so the output matches a parsed form.
|
|
22
|
-
if klass == Identifiers::ProjectDraftIdentifier
|
|
23
|
-
attrs[:type] = "P"
|
|
24
|
-
attrs[:typed_stage] ||= Scheme.locate_typed_stage_by_abbr("P")
|
|
25
|
-
end
|
|
26
|
-
klass.new(**attrs)
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
private
|
|
30
|
-
|
|
31
|
-
def coerce_create_attrs(opts)
|
|
32
|
-
attrs = {}
|
|
33
|
-
attrs[:publisher] = opts[:publisher].to_s if opts[:publisher]
|
|
34
|
-
if opts[:copublisher]
|
|
35
|
-
attrs[:copublisher] =
|
|
36
|
-
Array(opts[:copublisher]).map(&:to_s)
|
|
37
|
-
end
|
|
38
|
-
# :code or :number alias
|
|
39
|
-
if (v = opts[:code] || opts[:number])
|
|
40
|
-
attrs[:code] = v.to_s
|
|
41
|
-
end
|
|
42
|
-
%i[year edition month day draft_status].each do |k|
|
|
43
|
-
v = opts[k]
|
|
44
|
-
attrs[k] = v.to_s unless v.nil?
|
|
45
|
-
end
|
|
46
|
-
attrs[:redline] = opts[:redline] if opts.key?(:redline)
|
|
47
|
-
# TODO(create-shim): amendments/corrigenda/revision_of/incorporates
|
|
48
|
-
# are nested Base relations; not yet wired through.
|
|
49
|
-
attrs
|
|
50
|
-
end
|
|
51
16
|
end
|
|
52
17
|
end
|
|
53
18
|
end
|
|
@@ -16,12 +16,7 @@ module Pubid
|
|
|
16
16
|
collection: true
|
|
17
17
|
|
|
18
18
|
def to_s
|
|
19
|
-
|
|
20
|
-
if adopted_identifiers && !adopted_identifiers.empty?
|
|
21
|
-
adopted_strs = adopted_identifiers.map(&:to_s)
|
|
22
|
-
result += " (#{adopted_strs.join(' and ')})"
|
|
23
|
-
end
|
|
24
|
-
result
|
|
19
|
+
render(format: :human)
|
|
25
20
|
end
|
|
26
21
|
|
|
27
22
|
def publisher
|