pubid 2.0.0.pre.alpha.2 → 2.0.0.pre.alpha.4
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 +4 -55
- data/lib/pubid/amca/identifiers/base.rb +58 -47
- data/lib/pubid/amca/identifiers/interpretation.rb +0 -21
- data/lib/pubid/amca/identifiers/publication.rb +0 -17
- data/lib/pubid/amca/identifiers/standard.rb +0 -4
- data/lib/pubid/amca/renderer.rb +82 -0
- data/lib/pubid/amca/single_identifier.rb +0 -23
- data/lib/pubid/amca/urn_generator.rb +2 -1
- 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 +33 -74
- data/lib/pubid/api/identifier.rb +5 -52
- data/lib/pubid/api/identifiers/base.rb +2 -14
- 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 +0 -20
- 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 +0 -16
- data/lib/pubid/api/identifiers.rb +18 -0
- data/lib/pubid/api/renderer.rb +89 -0
- data/lib/pubid/api/single_identifier.rb +5 -20
- 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 +7 -55
- 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 +29 -15
- 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/parser.rb +4 -0
- 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 +46 -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/single_identifier.rb +3 -1
- 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 +3 -11
- 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 +5 -85
- data/lib/pubid/bsi/identifiers/addendum_document.rb +2 -36
- data/lib/pubid/bsi/identifiers/adopted_european_norm.rb +8 -48
- data/lib/pubid/bsi/identifiers/adopted_international_standard.rb +8 -39
- data/lib/pubid/bsi/identifiers/aerospace_standard.rb +2 -55
- data/lib/pubid/bsi/identifiers/amendment.rb +2 -22
- data/lib/pubid/bsi/identifiers/british_industrial_practice.rb +1 -6
- data/lib/pubid/bsi/identifiers/british_standard.rb +2 -1
- data/lib/pubid/bsi/identifiers/bundled_identifier.rb +3 -87
- data/lib/pubid/bsi/identifiers/committee_document.rb +0 -16
- data/lib/pubid/bsi/identifiers/consolidated_identifier.rb +3 -87
- data/lib/pubid/bsi/identifiers/corrigendum.rb +2 -10
- data/lib/pubid/bsi/identifiers/detailed_specification.rb +0 -36
- data/lib/pubid/bsi/identifiers/disc.rb +0 -29
- data/lib/pubid/bsi/identifiers/draft_document.rb +2 -46
- data/lib/pubid/bsi/identifiers/electronic_book.rb +2 -38
- data/lib/pubid/bsi/identifiers/expert_commentary.rb +2 -18
- data/lib/pubid/bsi/identifiers/explanatory_supplement.rb +0 -47
- data/lib/pubid/bsi/identifiers/flex.rb +0 -35
- data/lib/pubid/bsi/identifiers/handbook.rb +1 -15
- data/lib/pubid/bsi/identifiers/index.rb +0 -32
- data/lib/pubid/bsi/identifiers/method.rb +0 -41
- data/lib/pubid/bsi/identifiers/national_annex.rb +4 -29
- data/lib/pubid/bsi/identifiers/practice_guide.rb +1 -6
- data/lib/pubid/bsi/identifiers/publicly_available_specification.rb +2 -54
- data/lib/pubid/bsi/identifiers/published_document.rb +2 -54
- data/lib/pubid/bsi/identifiers/section.rb +0 -30
- data/lib/pubid/bsi/identifiers/set.rb +3 -20
- data/lib/pubid/bsi/identifiers/standalone_amendment.rb +0 -9
- data/lib/pubid/bsi/identifiers/supplement_document.rb +2 -24
- data/lib/pubid/bsi/identifiers/supplementary_index.rb +0 -46
- data/lib/pubid/bsi/identifiers/technical_specification.rb +2 -47
- data/lib/pubid/bsi/identifiers/test_method.rb +0 -32
- data/lib/pubid/bsi/identifiers/value_added_publication.rb +2 -17
- data/lib/pubid/bsi/identifiers.rb +0 -1
- data/lib/pubid/bsi/renderer.rb +1050 -0
- data/lib/pubid/bsi/single_identifier.rb +33 -78
- data/lib/pubid/bsi/urn_generator.rb +2 -3
- data/lib/pubid/bsi/urn_parser.rb +52 -0
- data/lib/pubid/bsi.rb +232 -2
- 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 +53 -68
- 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 +11 -40
- data/lib/pubid/cen_cenelec/identifiers/adopted_european_norm.rb +9 -4
- data/lib/pubid/cen_cenelec/identifiers/amendment.rb +0 -10
- data/lib/pubid/cen_cenelec/identifiers/base.rb +2 -45
- 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 +0 -27
- data/lib/pubid/cen_cenelec/identifiers/corrigendum.rb +0 -15
- data/lib/pubid/cen_cenelec/identifiers/european_norm.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/european_prestandard.rb +2 -8
- data/lib/pubid/cen_cenelec/identifiers/european_specification.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/fragment.rb +0 -4
- 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 +9 -90
- 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 +172 -1
- data/lib/pubid/cie/components/code.rb +8 -0
- data/lib/pubid/cie/identifier.rb +10 -57
- data/lib/pubid/cie/single_identifier.rb +4 -4
- data/lib/pubid/cie/urn_parser.rb +28 -0
- data/lib/pubid/cie.rb +47 -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 +9 -59
- data/lib/pubid/csa/identifiers/base.rb +0 -123
- data/lib/pubid/csa/identifiers/cec.rb +0 -103
- data/lib/pubid/csa/identifiers/series.rb +0 -104
- data/lib/pubid/csa/renderer.rb +292 -0
- data/lib/pubid/csa/single_identifier.rb +1 -1
- data/lib/pubid/csa/urn_generator.rb +1 -1
- data/lib/pubid/csa/urn_parser.rb +33 -0
- data/lib/pubid/csa.rb +46 -1
- data/lib/pubid/etsi/components/code.rb +10 -9
- data/lib/pubid/etsi/components/version.rb +0 -5
- data/lib/pubid/etsi/identifier.rb +4 -55
- data/lib/pubid/etsi/identifiers/base.rb +31 -27
- data/lib/pubid/etsi/identifiers/supplement_identifier.rb +1 -11
- data/lib/pubid/etsi/renderer.rb +42 -0
- data/lib/pubid/etsi/urn_parser.rb +34 -0
- data/lib/pubid/etsi.rb +44 -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 +92 -18
- data/lib/pubid/identifier_metadata.rb +1 -1
- data/lib/pubid/idf/builder.rb +3 -3
- data/lib/pubid/idf/identifier.rb +7 -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 +55 -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 +5 -33
- 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 +23 -26
- data/lib/pubid/iec/identifiers/corrigendum.rb +2 -3
- data/lib/pubid/iec/identifiers/fragment_identifier.rb +35 -24
- 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 +17 -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 +3 -35
- data/lib/pubid/iec/identifiers/vap_identifier.rb +24 -21
- data/lib/pubid/iec/identifiers/white_paper.rb +3 -3
- data/lib/pubid/iec/identifiers/working_document.rb +2 -50
- 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 +43 -67
- 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 +5 -52
- data/lib/pubid/ieee/identifiers/adopted_standard.rb +0 -9
- data/lib/pubid/ieee/identifiers/base.rb +221 -556
- data/lib/pubid/ieee/identifiers/conformance_identifier.rb +0 -10
- data/lib/pubid/ieee/identifiers/corrigendum.rb +0 -12
- data/lib/pubid/ieee/identifiers/csa_dual_published.rb +0 -10
- data/lib/pubid/ieee/identifiers/dual_identifier.rb +0 -4
- data/lib/pubid/ieee/identifiers/dual_published.rb +0 -4
- data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +0 -9
- data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +0 -10
- data/lib/pubid/ieee/identifiers/joint_development.rb +2 -0
- data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +0 -18
- data/lib/pubid/ieee/identifiers/parenthetical_identifier.rb +0 -6
- data/lib/pubid/ieee/identifiers/project_draft_identifier.rb +15 -0
- data/lib/pubid/ieee/identifiers/redlined_standard.rb +0 -7
- data/lib/pubid/ieee/identifiers/si_standard.rb +0 -38
- 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 +66 -1
- data/lib/pubid/ieee_debug.rb +0 -1
- data/lib/pubid/iho/builder.rb +2 -2
- data/lib/pubid/iho/identifier.rb +7 -59
- data/lib/pubid/iho/identifiers/base.rb +64 -31
- 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 +52 -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 +219 -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/single_identifier.rb +0 -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 +177 -2
- data/lib/pubid/itu/builder.rb +0 -12
- data/lib/pubid/itu/components/code.rb +9 -7
- data/lib/pubid/itu/components/sector.rb +15 -4
- data/lib/pubid/itu/components/series.rb +0 -4
- data/lib/pubid/itu/components.rb +11 -0
- data/lib/pubid/itu/identifier.rb +4 -116
- 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 +124 -128
- 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 +44 -1
- data/lib/pubid/jcgm/builder.rb +16 -8
- data/lib/pubid/jcgm/identifier.rb +0 -43
- data/lib/pubid/jcgm/identifiers/amendment.rb +0 -9
- data/lib/pubid/jcgm/identifiers/gum_guide.rb +0 -12
- data/lib/pubid/jcgm/renderer.rb +68 -0
- data/lib/pubid/jcgm/single_identifier.rb +0 -8
- 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 +120 -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 +8 -60
- data/lib/pubid/nist/identifiers/base.rb +564 -492
- 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 +428 -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 +86 -4
- data/lib/pubid/oiml/builder.rb +21 -3
- data/lib/pubid/oiml/components/code.rb +17 -0
- data/lib/pubid/oiml/identifier.rb +40 -46
- data/lib/pubid/oiml/identifiers/annex.rb +13 -46
- data/lib/pubid/oiml/identifiers/errata.rb +15 -0
- data/lib/pubid/oiml/identifiers.rb +1 -1
- data/lib/pubid/oiml/parser.rb +59 -12
- data/lib/pubid/oiml/renderer.rb +171 -0
- data/lib/pubid/oiml/single_identifier.rb +61 -42
- data/lib/pubid/oiml/supplement_identifier.rb +31 -17
- 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 +4 -55
- data/lib/pubid/plateau/identifiers/base.rb +45 -36
- data/lib/pubid/plateau/identifiers/handbook.rb +0 -6
- data/lib/pubid/plateau/identifiers/technical_report.rb +0 -4
- data/lib/pubid/plateau/renderer.rb +51 -0
- data/lib/pubid/plateau/supplement_identifier.rb +0 -4
- 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 +4 -35
- data/lib/pubid/sae/identifiers/base.rb +26 -31
- 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 +45 -7
- data/lib/tasks/export.rake +6 -5
- data/lib/tasks/website-data.json +1940 -1882
- metadata +75 -45
- 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/identifiers/base.rb +0 -36
- 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
|
@@ -2,36 +2,21 @@
|
|
|
2
2
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module Api
|
|
5
|
-
class SingleIdentifier <
|
|
5
|
+
class SingleIdentifier < Identifier
|
|
6
6
|
# Generate URN for this identifier
|
|
7
7
|
#
|
|
8
8
|
# @return [String] URN representation
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
# Stored as a plain string (always "API") so it round-trips through
|
|
11
|
+
# to_hash/from_hash. Was a `def publisher` method, which made lutaml
|
|
12
|
+
# serialize a String against the Components::Publisher attribute.
|
|
13
|
+
attribute :publisher, :string, default: -> { "API" }
|
|
13
14
|
|
|
14
15
|
attribute :code, Components::Code
|
|
15
16
|
attribute :part, :string
|
|
16
17
|
attribute :year, :string
|
|
17
18
|
attribute :reaffirmation, :string
|
|
18
19
|
|
|
19
|
-
def to_s
|
|
20
|
-
parts = ["API"]
|
|
21
|
-
|
|
22
|
-
# Add type if available
|
|
23
|
-
parts << type_string if self.class.attributes.key?(:type_string) && type_string
|
|
24
|
-
|
|
25
|
-
# Add code/number with part as one token
|
|
26
|
-
parts << code_portion if code_portion
|
|
27
|
-
|
|
28
|
-
# Build result - join with space, then add dash+year as one token
|
|
29
|
-
result = parts.join(" ")
|
|
30
|
-
result += "-#{year}" if year
|
|
31
|
-
result += " (R#{reaffirmation})" if reaffirmation
|
|
32
|
-
result
|
|
33
|
-
end
|
|
34
|
-
|
|
35
20
|
private
|
|
36
21
|
|
|
37
22
|
def code_portion
|
|
@@ -7,24 +7,6 @@ module Pubid
|
|
|
7
7
|
"std"
|
|
8
8
|
end
|
|
9
9
|
|
|
10
|
-
def urn_number
|
|
11
|
-
return nil unless identifier.code
|
|
12
|
-
|
|
13
|
-
identifier.code.value.to_s
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def urn_part
|
|
17
|
-
return nil unless identifier.part
|
|
18
|
-
|
|
19
|
-
"-#{identifier.part}"
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def urn_year
|
|
23
|
-
return identifier.year.to_s if identifier.year
|
|
24
|
-
|
|
25
|
-
nil
|
|
26
|
-
end
|
|
27
|
-
|
|
28
10
|
def generate
|
|
29
11
|
parts = ["urn", "api"]
|
|
30
12
|
parts << urn_type
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Api
|
|
5
|
+
# Parses API URNs back into identifiers.
|
|
6
|
+
#
|
|
7
|
+
# UrnGenerator emits:
|
|
8
|
+
# urn:api:{publisher}:{number}[-{part}]:{year}
|
|
9
|
+
# where slot[1] is the publisher (default "api"), slot[2] is the number
|
|
10
|
+
# with optional `-part` suffix, slot[3] is the optional year.
|
|
11
|
+
#
|
|
12
|
+
# Examples:
|
|
13
|
+
# - urn:api:api:1104 → API STD 1104
|
|
14
|
+
# - urn:api:api:1104-1:2020 → API STD 1104-1:2020
|
|
15
|
+
class UrnParser < Pubid::UrnParser::Base
|
|
16
|
+
def parse_urn(urn)
|
|
17
|
+
body = strip_namespace(urn)
|
|
18
|
+
parts = split_parts(body)
|
|
19
|
+
|
|
20
|
+
_type, number = parts
|
|
21
|
+
idx = 2
|
|
22
|
+
part = nil
|
|
23
|
+
if parts[idx]&.start_with?("-")
|
|
24
|
+
part = parts[idx]
|
|
25
|
+
idx += 1
|
|
26
|
+
end
|
|
27
|
+
year = parts[idx]
|
|
28
|
+
|
|
29
|
+
text = "API STD #{number}#{part}"
|
|
30
|
+
text += ":#{year}" if year
|
|
31
|
+
flavor_parse(text)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
data/lib/pubid/api.rb
CHANGED
|
@@ -1,17 +1,63 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative "api/identifier"
|
|
4
|
-
require_relative "api/scheme"
|
|
5
|
-
|
|
6
3
|
module Pubid
|
|
7
4
|
module Api
|
|
5
|
+
autoload :Builder, "#{__dir__}/api/builder"
|
|
6
|
+
autoload :Identifier, "#{__dir__}/api/identifier"
|
|
7
|
+
autoload :Identifiers, "#{__dir__}/api/identifiers"
|
|
8
|
+
autoload :Parser, "#{__dir__}/api/parser"
|
|
9
|
+
autoload :Renderer, "#{__dir__}/api/renderer"
|
|
10
|
+
autoload :SingleIdentifier, "#{__dir__}/api/single_identifier"
|
|
11
|
+
autoload :UrnGenerator, "#{__dir__}/api/urn_generator"
|
|
12
|
+
autoload :UrnParser, "#{__dir__}/api/urn_parser"
|
|
13
|
+
|
|
8
14
|
def self.parse(input)
|
|
9
15
|
Identifier.parse(input)
|
|
10
16
|
end
|
|
11
|
-
end
|
|
12
17
|
|
|
13
|
-
|
|
18
|
+
# Auto-discover all identifier types from the Identifiers namespace.
|
|
19
|
+
# @return [Array<Class>] identifier classes (Pubid::Identifier subclasses)
|
|
20
|
+
def self.identifier_types
|
|
21
|
+
@identifier_types ||= Identifiers.constants
|
|
22
|
+
.filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
|
|
23
|
+
.select { |c| c.is_a?(Class) && c < Pubid::Identifier }
|
|
24
|
+
.reject { |c| c.name&.split("::")&.last == "Base" }
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Build typed stage index from identifier types
|
|
28
|
+
# @return [Array<Pubid::Components::TypedStage>] all typed stages
|
|
29
|
+
def self.all_typed_stages
|
|
30
|
+
@all_typed_stages ||= identifier_types.flat_map do |klass|
|
|
31
|
+
if klass.const_defined?(:TYPED_STAGES)
|
|
32
|
+
klass.const_get(:TYPED_STAGES)
|
|
33
|
+
else
|
|
34
|
+
[]
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Lookup: type code -> identifier class
|
|
40
|
+
# @param code [String, Symbol] the type key to find
|
|
41
|
+
# @return [Class, nil] the matching identifier class
|
|
42
|
+
def self.locate_type(code)
|
|
43
|
+
identifier_types.find { |t| t.type[:key].to_s == code.to_s }
|
|
44
|
+
rescue NoMethodError
|
|
45
|
+
nil
|
|
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
|
|
55
|
+
end
|
|
14
56
|
end
|
|
15
57
|
|
|
16
58
|
# Register Uapi flavor with the registry
|
|
17
59
|
Pubid::Registry.register(:api, Pubid::Api)
|
|
60
|
+
|
|
61
|
+
# Per-flavor format registry: inherits global formats, overrides :human
|
|
62
|
+
Pubid::Api::Identifiers::Base.format_registry = Pubid::FormatRegistry.new(parent: Pubid::Identifier.format_registry)
|
|
63
|
+
Pubid::Api::Identifiers::Base.format_registry.register(:human, renderer: Pubid::Api::Renderer)
|
data/lib/pubid/ashrae/builder.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module Ashrae
|
|
5
5
|
# Builder class for constructing ASHRAE 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_reader :identifier_class
|
|
9
9
|
|
|
@@ -13,7 +13,7 @@ module Pubid
|
|
|
13
13
|
|
|
14
14
|
# Build a scheme object from parsed data
|
|
15
15
|
# @param parsed [Hash, Array] the parsed identifier data
|
|
16
|
-
# @return [
|
|
16
|
+
# @return [identifier] the constructed scheme object
|
|
17
17
|
def build(parsed)
|
|
18
18
|
# Parslet can return array of hashes - merge them
|
|
19
19
|
parsed_hash = parsed.is_a?(Array) ? merge_parsed_array(parsed) : parsed
|
|
@@ -71,7 +71,7 @@ module Pubid
|
|
|
71
71
|
|
|
72
72
|
# Extract and normalize attributes from parsed data
|
|
73
73
|
# @param parsed [Hash] the parsed data
|
|
74
|
-
# @return [Hash] normalized attributes for
|
|
74
|
+
# @return [Hash] normalized attributes for identifier
|
|
75
75
|
def extract_attributes(parsed)
|
|
76
76
|
attributes = {}
|
|
77
77
|
|
|
@@ -1,57 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
def self.parse(identifier)
|
|
11
|
-
parsed = Parser.parse(identifier)
|
|
12
|
-
Builder.build(parsed)
|
|
13
|
-
rescue Parslet::ParseFailed => e
|
|
14
|
-
raise "Failed to parse ASHRAE identifier '#{identifier}': #{e.message}"
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
# Factory that builds an ASHRAE identifier from a hash of primitives.
|
|
18
|
-
# Dispatch on `:type` to the matching subclass; default is
|
|
19
|
-
# {Identifiers::Standard}.
|
|
20
|
-
TYPE_KEY_TO_KLASS = {
|
|
21
|
-
standard: "Standard",
|
|
22
|
-
guideline: "Guideline",
|
|
23
|
-
addendum: "Addendum",
|
|
24
|
-
addenda_package: "AddendaPackage",
|
|
25
|
-
combined_addenda: "CombinedAddenda",
|
|
26
|
-
errata: "Errata",
|
|
27
|
-
interpretation: "Interpretation",
|
|
28
|
-
}.freeze
|
|
29
|
-
|
|
30
|
-
def self.create(type: nil, **opts)
|
|
31
|
-
klass = resolve_create_class(type)
|
|
32
|
-
klass.new(**coerce_create_attrs(opts))
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def self.resolve_create_class(type)
|
|
36
|
-
return Identifiers::Standard if type.nil?
|
|
37
|
-
|
|
38
|
-
klass_name = TYPE_KEY_TO_KLASS[type.to_sym]
|
|
39
|
-
raise ArgumentError, "Unknown ASHRAE type: #{type.inspect}" unless klass_name
|
|
40
|
-
|
|
41
|
-
Identifiers.const_get(klass_name)
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def self.coerce_create_attrs(opts)
|
|
45
|
-
attrs = { publisher: (opts[:publisher] || "ASHRAE").to_s }
|
|
46
|
-
if (v = opts[:code] || opts[:number])
|
|
47
|
-
attrs[:code] = v.to_s
|
|
48
|
-
end
|
|
49
|
-
%i[year suffix amendment reaffirmed copublisher].each do |k|
|
|
50
|
-
attrs[k] = opts[k].to_s unless opts[k].nil?
|
|
51
|
-
end
|
|
52
|
-
attrs
|
|
53
|
-
end
|
|
54
|
-
private_class_method :resolve_create_class, :coerce_create_attrs
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
end
|
|
3
|
+
# The ASHRAE flavor base class is Pubid::Ashrae::Identifier — a real
|
|
4
|
+
# Pubid::Identifier subclass that every concrete ASHRAE identifier descends
|
|
5
|
+
# from, so `is_a?` identity and the shared polymorphic `from_hash` work natively
|
|
6
|
+
# (no facade needed). Its body, `.parse`, and the Identifiers::Base back-compat
|
|
7
|
+
# alias live in identifiers/base.rb; this file just ensures it is loaded when a
|
|
8
|
+
# consumer references Pubid::Ashrae::Identifier directly.
|
|
9
|
+
require_relative "identifiers/base"
|
|
@@ -27,16 +27,6 @@ module Pubid
|
|
|
27
27
|
short: "Addenda Package" }
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
def to_s
|
|
31
|
-
return base_identifier.to_s unless base_identifier
|
|
32
|
-
|
|
33
|
-
# Format: ASHRAE Standard 52.2-1999: Addenda Supplement Package
|
|
34
|
-
result = "ASHRAE #{base_identifier.type || 'Standard'} #{base_identifier.code}"
|
|
35
|
-
result += "-#{base_identifier.year}" if base_identifier.year
|
|
36
|
-
result += ": Addenda #{package_description}" if package_description
|
|
37
|
-
result
|
|
38
|
-
end
|
|
39
|
-
|
|
40
30
|
def copublisher
|
|
41
31
|
base_identifier&.copublisher
|
|
42
32
|
end
|
|
@@ -27,25 +27,6 @@ module Pubid
|
|
|
27
27
|
{ key: :addendum, title: "ASHRAE Addendum", short: "Addendum" }
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
def to_s
|
|
31
|
-
return base_identifier.to_s unless base_identifier
|
|
32
|
-
|
|
33
|
-
# Determine base type name for rendering
|
|
34
|
-
base_type = base_identifier.type || "Standard"
|
|
35
|
-
|
|
36
|
-
if copublisher
|
|
37
|
-
# Format: ANSI/ASHRAE Addendum a to ANSI/ASHRAE Standard 15-2019
|
|
38
|
-
result = "#{copublisher} Addendum #{addendum_code} to #{base_identifier}"
|
|
39
|
-
else
|
|
40
|
-
# Format: ASHRAE Addendum a to Standard 15-2001
|
|
41
|
-
result = "ASHRAE Addendum #{addendum_code} to #{base_type} #{base_identifier.code}"
|
|
42
|
-
result += "-#{base_identifier.year}" if base_identifier.year
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
result += " (#{addendum_date})" if addendum_date
|
|
46
|
-
result
|
|
47
|
-
end
|
|
48
|
-
|
|
49
30
|
def copublisher
|
|
50
31
|
base_identifier&.copublisher
|
|
51
32
|
end
|
|
@@ -2,22 +2,36 @@
|
|
|
2
2
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module Ashrae
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
end
|
|
5
|
+
# Base class for all ASHRAE identifiers. Canonical name
|
|
6
|
+
# Pubid::Ashrae::Identifier; every concrete ASHRAE identifier descends from
|
|
7
|
+
# it, and Identifiers::Base — aliased at the foot of this file — points back
|
|
8
|
+
# to it.
|
|
9
|
+
class Identifier < ::Pubid::Identifier
|
|
10
|
+
# Parse an ASHRAE identifier string into an identifier object
|
|
11
|
+
# @param identifier [String] The ASHRAE identifier string to parse
|
|
12
|
+
# @return [Pubid::Ashrae::Identifier] The appropriate identifier object
|
|
13
|
+
# @raise [Parslet::ParseFailed] If parsing fails
|
|
14
|
+
def self.parse(identifier)
|
|
15
|
+
parsed = Parser.parse(identifier)
|
|
16
|
+
Builder.build(parsed)
|
|
17
|
+
rescue Parslet::ParseFailed => e
|
|
18
|
+
raise "Failed to parse ASHRAE identifier '#{identifier}': #{e.message}"
|
|
20
19
|
end
|
|
20
|
+
|
|
21
|
+
attribute :publisher, :string, default: "ASHRAE"
|
|
22
|
+
attribute :code, :string
|
|
23
|
+
attribute :year, :string
|
|
24
|
+
attribute :type, :string
|
|
25
|
+
attribute :suffix, :string # R (revision), P (proposed), etc.
|
|
26
|
+
attribute :amendment, :string
|
|
27
|
+
attribute :reaffirmed, :string
|
|
28
|
+
attribute :copublisher, :string
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
module Identifiers
|
|
32
|
+
# Backward-compatible alias: ASHRAE's base class used to be
|
|
33
|
+
# Pubid::Ashrae::Identifiers::Base. It is now Pubid::Ashrae::Identifier.
|
|
34
|
+
Base = Pubid::Ashrae::Identifier
|
|
21
35
|
end
|
|
22
36
|
end
|
|
23
37
|
end
|
|
@@ -27,21 +27,6 @@ module Pubid
|
|
|
27
27
|
short: "Addenda" }
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
def to_s
|
|
31
|
-
return base_identifier.to_s unless base_identifier
|
|
32
|
-
|
|
33
|
-
base_type = base_identifier.type || "Standard"
|
|
34
|
-
if addendum_codes
|
|
35
|
-
# Format: ASHRAE Addenda c and d to Standard 15-1994
|
|
36
|
-
result = "ASHRAE Addenda #{addendum_codes} to #{base_type} #{base_identifier.code}"
|
|
37
|
-
else
|
|
38
|
-
# Format: ASHRAE Addenda to Standard 15-1994 (no specific codes)
|
|
39
|
-
result = "ASHRAE Addenda to #{base_type} #{base_identifier.code}"
|
|
40
|
-
end
|
|
41
|
-
result += "-#{base_identifier.year}" if base_identifier.year
|
|
42
|
-
result
|
|
43
|
-
end
|
|
44
|
-
|
|
45
30
|
def copublisher
|
|
46
31
|
base_identifier&.copublisher
|
|
47
32
|
end
|
|
@@ -24,16 +24,6 @@ module Pubid
|
|
|
24
24
|
def self.type
|
|
25
25
|
{ key: :errata, title: "ASHRAE Errata", short: "Errata" }
|
|
26
26
|
end
|
|
27
|
-
|
|
28
|
-
def to_s
|
|
29
|
-
return base_identifier.to_s unless base_identifier
|
|
30
|
-
|
|
31
|
-
# Format: ASHRAE Guideline 0-2005 Errata (September 28, 2011)
|
|
32
|
-
result = base_identifier.to_s
|
|
33
|
-
result += " Errata"
|
|
34
|
-
result += " (#{errata_date})" if errata_date
|
|
35
|
-
result
|
|
36
|
-
end
|
|
37
27
|
end
|
|
38
28
|
end
|
|
39
29
|
end
|
|
@@ -23,16 +23,6 @@ module Pubid
|
|
|
23
23
|
{ key: :interpretation, title: "ASHRAE Interpretations",
|
|
24
24
|
short: "Interpretations" }
|
|
25
25
|
end
|
|
26
|
-
|
|
27
|
-
def to_s
|
|
28
|
-
return base_identifier.to_s unless base_identifier
|
|
29
|
-
|
|
30
|
-
# Format: Interpretations for Standard 15.2-2022
|
|
31
|
-
base_type = base_identifier.type || "Standard"
|
|
32
|
-
result = "Interpretations for #{base_type} #{base_identifier.code}"
|
|
33
|
-
result += "-#{base_identifier.year}" if base_identifier.year
|
|
34
|
-
result
|
|
35
|
-
end
|
|
36
26
|
end
|
|
37
27
|
end
|
|
38
28
|
end
|
data/lib/pubid/ashrae/parser.rb
CHANGED
|
@@ -650,6 +650,10 @@ module Pubid
|
|
|
650
650
|
root(:identifier)
|
|
651
651
|
|
|
652
652
|
def self.parse(string)
|
|
653
|
+
if string.length > Pubid::MAX_INPUT_LENGTH
|
|
654
|
+
raise ArgumentError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
655
|
+
end
|
|
656
|
+
|
|
653
657
|
# Strip leading/trailing whitespace
|
|
654
658
|
cleaned = string.strip
|
|
655
659
|
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ashrae
|
|
5
|
+
# Human-readable renderer for ASHRAE identifiers.
|
|
6
|
+
#
|
|
7
|
+
# Produces strings like:
|
|
8
|
+
# "ASHRAE Standard 15-2024"
|
|
9
|
+
# "ASHRAE Guideline 0-2019"
|
|
10
|
+
# "ASHRAE Addendum a to Standard 15-2001"
|
|
11
|
+
# "ASHRAE Standard 52.2-1999: Addenda Supplement Package"
|
|
12
|
+
# "ASHRAE Addenda c and d to Standard 15-1994"
|
|
13
|
+
# "ASHRAE Guideline 0-2005 Errata (September 28, 2011)"
|
|
14
|
+
# "Interpretations for Standard 15.2-2022"
|
|
15
|
+
#
|
|
16
|
+
# The renderer is registered as the +:human+ format in the ASHRAE format
|
|
17
|
+
# registry and invoked via +render(format: :human)+.
|
|
18
|
+
class Renderer < ::Pubid::Renderers::Base
|
|
19
|
+
def render(context: nil, **_opts)
|
|
20
|
+
id = @id
|
|
21
|
+
|
|
22
|
+
case id
|
|
23
|
+
when Identifiers::Addendum
|
|
24
|
+
render_addendum(id)
|
|
25
|
+
when Identifiers::AddendaPackage
|
|
26
|
+
render_addenda_package(id)
|
|
27
|
+
when Identifiers::CombinedAddenda
|
|
28
|
+
render_combined_addenda(id)
|
|
29
|
+
when Identifiers::Errata
|
|
30
|
+
render_errata(id)
|
|
31
|
+
when Identifiers::Interpretation
|
|
32
|
+
render_interpretation(id)
|
|
33
|
+
when SingleIdentifier
|
|
34
|
+
render_single(id)
|
|
35
|
+
else
|
|
36
|
+
render_single(id)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
private
|
|
41
|
+
|
|
42
|
+
# SingleIdentifier (Standard, Guideline): "ASHRAE Standard 15-2024"
|
|
43
|
+
def render_single(id)
|
|
44
|
+
parts = []
|
|
45
|
+
parts << id.publisher if id.publisher
|
|
46
|
+
parts << id.type.to_s if id.type
|
|
47
|
+
result = parts.join(" ")
|
|
48
|
+
result += " " if result.length.positive?
|
|
49
|
+
result += id.code.to_s
|
|
50
|
+
result += "-#{id.year}" if id.year
|
|
51
|
+
result += " (#{id.amendment})" if id.amendment
|
|
52
|
+
result += id.suffix if id.suffix
|
|
53
|
+
result += " (RA#{id.reaffirmed})" if id.reaffirmed
|
|
54
|
+
result
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Addendum: "ASHRAE Addendum a to Standard 15-2001"
|
|
58
|
+
def render_addendum(id)
|
|
59
|
+
return id.base_identifier.to_s unless id.base_identifier
|
|
60
|
+
|
|
61
|
+
base_type = id.base_identifier.type || "Standard"
|
|
62
|
+
|
|
63
|
+
if id.copublisher
|
|
64
|
+
"#{id.copublisher} Addendum #{id.addendum_code} to #{id.base_identifier}"
|
|
65
|
+
else
|
|
66
|
+
result = "ASHRAE Addendum #{id.addendum_code} to #{base_type} #{id.base_identifier.code}"
|
|
67
|
+
result += "-#{id.base_identifier.year}" if id.base_identifier.year
|
|
68
|
+
result
|
|
69
|
+
end.tap { |r| r << " (#{id.addendum_date})" if id.addendum_date }
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# AddendaPackage: "ASHRAE Standard 52.2-1999: Addenda Supplement Package"
|
|
73
|
+
def render_addenda_package(id)
|
|
74
|
+
return id.base_identifier.to_s unless id.base_identifier
|
|
75
|
+
|
|
76
|
+
result = "ASHRAE #{id.base_identifier.type || 'Standard'} #{id.base_identifier.code}"
|
|
77
|
+
result += "-#{id.base_identifier.year}" if id.base_identifier.year
|
|
78
|
+
result += ": Addenda #{id.package_description}" if id.package_description
|
|
79
|
+
result
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# CombinedAddenda: "ASHRAE Addenda c and d to Standard 15-1994"
|
|
83
|
+
def render_combined_addenda(id)
|
|
84
|
+
return id.base_identifier.to_s unless id.base_identifier
|
|
85
|
+
|
|
86
|
+
base_type = id.base_identifier.type || "Standard"
|
|
87
|
+
if id.addendum_codes
|
|
88
|
+
result = "ASHRAE Addenda #{id.addendum_codes} to #{base_type} #{id.base_identifier.code}"
|
|
89
|
+
else
|
|
90
|
+
result = "ASHRAE Addenda to #{base_type} #{id.base_identifier.code}"
|
|
91
|
+
end
|
|
92
|
+
result += "-#{id.base_identifier.year}" if id.base_identifier.year
|
|
93
|
+
result
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# Errata: "ASHRAE Guideline 0-2005 Errata (September 28, 2011)"
|
|
97
|
+
def render_errata(id)
|
|
98
|
+
return id.base_identifier.to_s unless id.base_identifier
|
|
99
|
+
|
|
100
|
+
result = id.base_identifier.to_s
|
|
101
|
+
result += " Errata"
|
|
102
|
+
result += " (#{id.errata_date})" if id.errata_date
|
|
103
|
+
result
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# Interpretation: "Interpretations for Standard 15.2-2022"
|
|
107
|
+
def render_interpretation(id)
|
|
108
|
+
return id.base_identifier.to_s unless id.base_identifier
|
|
109
|
+
|
|
110
|
+
base_type = id.base_identifier.type || "Standard"
|
|
111
|
+
result = "Interpretations for #{base_type} #{id.base_identifier.code}"
|
|
112
|
+
result += "-#{id.base_identifier.year}" if id.base_identifier.year
|
|
113
|
+
result
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
@@ -5,19 +5,6 @@ module Pubid
|
|
|
5
5
|
# Base class for single (non-supplement) ASHRAE identifiers
|
|
6
6
|
# Includes: Guideline, Standard
|
|
7
7
|
class SingleIdentifier < Identifiers::Base
|
|
8
|
-
def to_s
|
|
9
|
-
parts = []
|
|
10
|
-
parts << publisher if publisher
|
|
11
|
-
parts << type.to_s if type
|
|
12
|
-
result = parts.join(" ")
|
|
13
|
-
result += " " if result.length.positive?
|
|
14
|
-
result += code.to_s
|
|
15
|
-
result += "-#{year}" if year
|
|
16
|
-
result += " (#{amendment})" if amendment
|
|
17
|
-
result += suffix if suffix
|
|
18
|
-
result += " (RA#{reaffirmed})" if reaffirmed
|
|
19
|
-
result
|
|
20
|
-
end
|
|
21
8
|
end
|
|
22
9
|
end
|
|
23
10
|
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ashrae
|
|
5
|
+
# Parses ASHRAE URNs back into identifiers.
|
|
6
|
+
#
|
|
7
|
+
# UrnGenerator emits:
|
|
8
|
+
# urn:ashrae:{number}:{year}:{type}[:{suffix}][:amd.{N}][:reaff.{Y}]
|
|
9
|
+
#
|
|
10
|
+
# The type token follows the year; the human-readable form prefixes the
|
|
11
|
+
# type ("ASHRAE Standard 90.1-2019"). The year separator is `-`.
|
|
12
|
+
#
|
|
13
|
+
# Examples:
|
|
14
|
+
# - urn:ashrae:90.1:2019:standard → ASHRAE Standard 90.1-2019
|
|
15
|
+
class UrnParser < Pubid::UrnParser::Base
|
|
16
|
+
def parse_urn(urn)
|
|
17
|
+
body = strip_namespace(urn)
|
|
18
|
+
parts = split_parts(body)
|
|
19
|
+
|
|
20
|
+
number, year = parts
|
|
21
|
+
text = "ASHRAE Standard #{number}"
|
|
22
|
+
text += "-#{year}" if year
|
|
23
|
+
flavor_parse(text)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
data/lib/pubid/ashrae.rb
CHANGED
|
@@ -6,16 +6,61 @@ module Pubid
|
|
|
6
6
|
autoload :Identifier, "#{__dir__}/ashrae/identifier"
|
|
7
7
|
autoload :Identifiers, "#{__dir__}/ashrae/identifiers"
|
|
8
8
|
autoload :Parser, "#{__dir__}/ashrae/parser"
|
|
9
|
-
autoload :
|
|
9
|
+
autoload :Renderer, "#{__dir__}/ashrae/renderer"
|
|
10
10
|
autoload :SingleIdentifier, "#{__dir__}/ashrae/single_identifier"
|
|
11
11
|
autoload :SupplementIdentifier, "#{__dir__}/ashrae/supplement_identifier"
|
|
12
12
|
autoload :UrnGenerator, "#{__dir__}/ashrae/urn_generator"
|
|
13
|
+
autoload :UrnParser, "#{__dir__}/ashrae/urn_parser"
|
|
13
14
|
|
|
14
15
|
def self.parse(identifier)
|
|
16
|
+
if identifier.length > Pubid::MAX_INPUT_LENGTH
|
|
17
|
+
raise ArgumentError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
18
|
+
end
|
|
19
|
+
|
|
15
20
|
Identifier.parse(identifier)
|
|
16
21
|
end
|
|
22
|
+
|
|
23
|
+
# Auto-discover all identifier types from the Identifiers namespace
|
|
24
|
+
# @return [Array<Class>] identifier classes that define a self.type Hash
|
|
25
|
+
def self.identifier_types
|
|
26
|
+
@identifier_types ||= Identifiers.constants
|
|
27
|
+
.filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
|
|
28
|
+
.select { |c| c.is_a?(Class) && c.singleton_methods(false).include?(:type) }
|
|
29
|
+
.select { |c| c.type.is_a?(Hash) }
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Build typed stage index from identifier types
|
|
33
|
+
# @return [Array<Pubid::Components::TypedStage>] all typed stages
|
|
34
|
+
def self.all_typed_stages
|
|
35
|
+
@all_typed_stages ||= identifier_types.flat_map do |klass|
|
|
36
|
+
if klass.const_defined?(:TYPED_STAGES)
|
|
37
|
+
klass.const_get(:TYPED_STAGES)
|
|
38
|
+
else
|
|
39
|
+
[]
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Lookup: type code -> identifier class
|
|
45
|
+
# @param code [String, Symbol] the type key to find
|
|
46
|
+
# @return [Class, nil] the matching identifier class
|
|
47
|
+
def self.locate_type(code)
|
|
48
|
+
identifier_types.find { |t| t.type[:key].to_s == code.to_s }
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Lookup: abbreviation -> typed stage
|
|
52
|
+
# @param abbr [String, Symbol] the abbreviation to find
|
|
53
|
+
# @return [Pubid::Components::TypedStage, nil] the matching typed stage
|
|
54
|
+
def self.locate_stage(abbr)
|
|
55
|
+
abbr_str = abbr.to_s.upcase
|
|
56
|
+
all_typed_stages.find { |s| s.abbr.any? { |a| a.to_s.upcase == abbr_str } }
|
|
57
|
+
end
|
|
17
58
|
end
|
|
18
59
|
end
|
|
19
60
|
|
|
20
61
|
# Register Uashrae flavor with the registry
|
|
21
62
|
Pubid::Registry.register(:ashrae, Pubid::Ashrae)
|
|
63
|
+
|
|
64
|
+
# Per-flavor format registry: inherits global formats, overrides :human
|
|
65
|
+
Pubid::Ashrae::Identifiers::Base.format_registry = Pubid::FormatRegistry.new(parent: Pubid::Identifier.format_registry)
|
|
66
|
+
Pubid::Ashrae::Identifiers::Base.format_registry.register(:human, renderer: Pubid::Ashrae::Renderer)
|