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
|
@@ -2,7 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module Ashrae
|
|
5
|
+
# `extend Pubid::IdentifierFacade` adds polymorphic `from_hash` and pairs
|
|
6
|
+
# with `include Pubid::Ashrae::Identifier` in Identifiers::Base for identity
|
|
7
|
+
# (`is_a?`/`===`), so a consumer handed this module can deserialize and
|
|
8
|
+
# identity-check ASHRAE ids through it.
|
|
5
9
|
module Identifier
|
|
10
|
+
extend Pubid::IdentifierFacade
|
|
11
|
+
|
|
6
12
|
# Parse an ASHRAE identifier string into an identifier object
|
|
7
13
|
# @param identifier [String] The ASHRAE identifier string to parse
|
|
8
14
|
# @return [Identifiers::Base] The appropriate identifier object
|
|
@@ -13,45 +19,6 @@ module Pubid
|
|
|
13
19
|
rescue Parslet::ParseFailed => e
|
|
14
20
|
raise "Failed to parse ASHRAE identifier '#{identifier}': #{e.message}"
|
|
15
21
|
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
22
|
end
|
|
56
23
|
end
|
|
57
24
|
end
|
|
@@ -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
|
|
@@ -5,6 +5,9 @@ module Pubid
|
|
|
5
5
|
module Identifiers
|
|
6
6
|
# Base class for all ASHRAE identifiers
|
|
7
7
|
class Base < Pubid::Identifier
|
|
8
|
+
# Identity for the Pubid::Ashrae::Identifier facade (see its comment).
|
|
9
|
+
include Pubid::Ashrae::Identifier
|
|
10
|
+
|
|
8
11
|
attribute :publisher, :string, default: "ASHRAE"
|
|
9
12
|
attribute :code, :string
|
|
10
13
|
attribute :year, :string
|
|
@@ -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
|
|
@@ -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,57 @@ 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)
|
|
15
16
|
Identifier.parse(identifier)
|
|
16
17
|
end
|
|
18
|
+
|
|
19
|
+
# Auto-discover all identifier types from the Identifiers namespace
|
|
20
|
+
# @return [Array<Class>] identifier classes that define a self.type Hash
|
|
21
|
+
def self.identifier_types
|
|
22
|
+
@identifier_types ||= Identifiers.constants
|
|
23
|
+
.filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
|
|
24
|
+
.select { |c| c.is_a?(Class) && c.singleton_methods(false).include?(:type) }
|
|
25
|
+
.select { |c| c.type.is_a?(Hash) }
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Build typed stage index from identifier types
|
|
29
|
+
# @return [Array<Pubid::Components::TypedStage>] all typed stages
|
|
30
|
+
def self.all_typed_stages
|
|
31
|
+
@all_typed_stages ||= identifier_types.flat_map do |klass|
|
|
32
|
+
if klass.const_defined?(:TYPED_STAGES)
|
|
33
|
+
klass.const_get(:TYPED_STAGES)
|
|
34
|
+
else
|
|
35
|
+
[]
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Lookup: type code -> identifier class
|
|
41
|
+
# @param code [String, Symbol] the type key to find
|
|
42
|
+
# @return [Class, nil] the matching identifier class
|
|
43
|
+
def self.locate_type(code)
|
|
44
|
+
identifier_types.find { |t| t.type[:key].to_s == code.to_s }
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Lookup: abbreviation -> typed stage
|
|
48
|
+
# @param abbr [String, Symbol] the abbreviation to find
|
|
49
|
+
# @return [Pubid::Components::TypedStage, nil] the matching typed stage
|
|
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 } }
|
|
53
|
+
end
|
|
17
54
|
end
|
|
18
55
|
end
|
|
19
56
|
|
|
20
57
|
# Register Uashrae flavor with the registry
|
|
21
58
|
Pubid::Registry.register(:ashrae, Pubid::Ashrae)
|
|
59
|
+
|
|
60
|
+
# Per-flavor format registry: inherits global formats, overrides :human
|
|
61
|
+
Pubid::Ashrae::Identifiers::Base.format_registry = Pubid::FormatRegistry.new(parent: Pubid::Identifier.format_registry)
|
|
62
|
+
Pubid::Ashrae::Identifiers::Base.format_registry.register(:human, renderer: Pubid::Ashrae::Renderer)
|
|
@@ -5,11 +5,19 @@ require "lutaml/model"
|
|
|
5
5
|
module Pubid
|
|
6
6
|
module Asme
|
|
7
7
|
module Components
|
|
8
|
+
# Code component for ASME identifiers.
|
|
9
|
+
#
|
|
10
|
+
# Stays independent of Pubid::Components::Code because ASME uses
|
|
11
|
+
# +designator+ (a flavor-specific letter prefix) plus +number+.
|
|
8
12
|
class Code < Lutaml::Model::Serializable
|
|
9
|
-
attribute :designator, :string
|
|
10
|
-
attribute :number, :string
|
|
13
|
+
attribute :designator, :string
|
|
14
|
+
attribute :number, :string
|
|
11
15
|
|
|
12
16
|
def to_s
|
|
17
|
+
render
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def render(context: nil)
|
|
13
21
|
"#{designator}#{number}"
|
|
14
22
|
end
|
|
15
23
|
end
|
|
@@ -10,52 +10,6 @@ module Pubid
|
|
|
10
10
|
parsed = parser.parse(str)
|
|
11
11
|
builder.build(parsed)
|
|
12
12
|
end
|
|
13
|
-
|
|
14
|
-
# Factory that builds an ASME identifier from a hash of primitives.
|
|
15
|
-
# Default is {Identifiers::Standard}. ASME's Code Component has
|
|
16
|
-
# `:designator` (leading letters, e.g. "B") and `:number` (rest,
|
|
17
|
-
# e.g. "16.34"); `.create` accepts either an already-split pair or
|
|
18
|
-
# a combined `:code` string which it splits at the first digit.
|
|
19
|
-
def self.create(**opts)
|
|
20
|
-
Identifiers::Standard.new(**coerce_create_attrs(opts))
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def self.coerce_create_attrs(opts)
|
|
24
|
-
attrs = { publisher: (opts[:publisher] || "ASME").to_s }
|
|
25
|
-
|
|
26
|
-
if opts[:designator] || opts[:number]
|
|
27
|
-
attrs[:code] = Pubid::Asme::Components::Code.new(
|
|
28
|
-
designator: opts[:designator]&.to_s,
|
|
29
|
-
number: opts[:number]&.to_s,
|
|
30
|
-
)
|
|
31
|
-
elsif (combined = opts[:code])
|
|
32
|
-
designator, number = split_asme_code(combined.to_s)
|
|
33
|
-
attrs[:code] = Pubid::Asme::Components::Code.new(
|
|
34
|
-
designator: designator,
|
|
35
|
-
number: number,
|
|
36
|
-
)
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
%i[year reaffirmation language csa_number draft_year
|
|
40
|
-
revision_note parenthetical_revision ptc_suffix
|
|
41
|
-
joint_publisher first_publisher first_code].each do |k|
|
|
42
|
-
attrs[k] = opts[k].to_s unless opts[k].nil?
|
|
43
|
-
end
|
|
44
|
-
attrs[:handbook] = opts[:handbook] if opts.key?(:handbook)
|
|
45
|
-
attrs
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
# ASME codes pair a letter designator with a numeric/dotted number.
|
|
49
|
-
# Split at the first digit. "B16.34" → ["B", "16.34"]; "Y14.5" →
|
|
50
|
-
# ["Y", "14.5"]; "BPVC.III.1.NB" → ["BPVC.III.1.NB", nil] (no
|
|
51
|
-
# leading all-letters before the first digit — pass through).
|
|
52
|
-
def self.split_asme_code(str)
|
|
53
|
-
match = str.match(/\A([A-Za-z]+)(\d.*)\z/)
|
|
54
|
-
return match.captures if match
|
|
55
|
-
|
|
56
|
-
[str, nil]
|
|
57
|
-
end
|
|
58
|
-
private_class_method :coerce_create_attrs, :split_asme_code
|
|
59
13
|
end
|
|
60
14
|
end
|
|
61
15
|
end
|
|
@@ -4,66 +4,6 @@ module Pubid
|
|
|
4
4
|
module Asme
|
|
5
5
|
module Identifiers
|
|
6
6
|
class Base < SingleIdentifier
|
|
7
|
-
def to_s
|
|
8
|
-
# Handle joint published identifiers
|
|
9
|
-
parts = []
|
|
10
|
-
if first_publisher && first_code
|
|
11
|
-
# CSA B44.10/ASME A17.10 or API 579-2/ASME PTB-14 format
|
|
12
|
-
parts << first_publisher
|
|
13
|
-
parts << first_code
|
|
14
|
-
parts << "/#{second_publisher}" if second_publisher
|
|
15
|
-
parts << code.to_s if code && code.to_s != ""
|
|
16
|
-
|
|
17
|
-
elsif joint_publisher
|
|
18
|
-
# ISO/ASME or ASME/ANS format
|
|
19
|
-
parts << joint_publisher
|
|
20
|
-
parts << code.to_s if code && code.to_s != ""
|
|
21
|
-
|
|
22
|
-
else
|
|
23
|
-
# Standard ASME format
|
|
24
|
-
parts << publisher if publisher
|
|
25
|
-
parts << code.to_s if code
|
|
26
|
-
|
|
27
|
-
end
|
|
28
|
-
result = parts.join(" ")
|
|
29
|
-
|
|
30
|
-
# PTC suffix (space-separated)
|
|
31
|
-
if ptc_suffix
|
|
32
|
-
result += " #{ptc_suffix}"
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
# CSA dual-published (for ASME/CSA format)
|
|
36
|
-
if csa_number
|
|
37
|
-
result += "/CSA #{csa_number}"
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
# Handbook keyword
|
|
41
|
-
if handbook
|
|
42
|
-
result += " Handbook"
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
# Year
|
|
46
|
-
if draft_year
|
|
47
|
-
result += "-#{draft_year}"
|
|
48
|
-
elsif year
|
|
49
|
-
result += "-#{year}"
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
# Parenthetical revision (comes after year)
|
|
53
|
-
result += " #{parenthetical_revision}" if parenthetical_revision
|
|
54
|
-
|
|
55
|
-
# Language (can appear in rendered output)
|
|
56
|
-
result += " (#{language})" if language
|
|
57
|
-
|
|
58
|
-
# Reaffirmation
|
|
59
|
-
result += " (#{reaffirmation})" if reaffirmation
|
|
60
|
-
|
|
61
|
-
# Revision note
|
|
62
|
-
result += " #{revision_note}" if revision_note
|
|
63
|
-
|
|
64
|
-
# Normalize all em-dashes (–, —) and en-dashes to regular dash (-)
|
|
65
|
-
result.gsub(/[–—]/, "-")
|
|
66
|
-
end
|
|
67
7
|
end
|
|
68
8
|
end
|
|
69
9
|
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Asme
|
|
5
|
+
# Human-readable renderer for ASME identifiers.
|
|
6
|
+
#
|
|
7
|
+
# Produces strings like:
|
|
8
|
+
# "ASME B16.5-2020"
|
|
9
|
+
# "CSA B44.10/ASME A17.10"
|
|
10
|
+
# "ASME BPVC III.1.NB-2023"
|
|
11
|
+
# "ASME PTC 4-2013"
|
|
12
|
+
#
|
|
13
|
+
# The renderer is registered as the `:human` format in the ASME format
|
|
14
|
+
# registry and invoked via `render(format: :human)`.
|
|
15
|
+
class Renderer < ::Pubid::Renderers::Base
|
|
16
|
+
def render(context: nil, **opts)
|
|
17
|
+
id = @id
|
|
18
|
+
parts = []
|
|
19
|
+
|
|
20
|
+
if id.first_publisher && id.first_code
|
|
21
|
+
# CSA B44.10/ASME A17.10 or API 579-2/ASME PTB-14 format
|
|
22
|
+
parts << id.first_publisher
|
|
23
|
+
parts << id.first_code
|
|
24
|
+
parts << "/#{id.second_publisher}" if id.second_publisher
|
|
25
|
+
parts << id.code.to_s if id.code && id.code.to_s != ""
|
|
26
|
+
elsif id.joint_publisher
|
|
27
|
+
# ISO/ASME or ASME/ANS format
|
|
28
|
+
parts << id.joint_publisher
|
|
29
|
+
parts << id.code.to_s if id.code && id.code.to_s != ""
|
|
30
|
+
else
|
|
31
|
+
# Standard ASME format
|
|
32
|
+
parts << id.publisher if id.publisher
|
|
33
|
+
parts << id.code.to_s if id.code
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
result = parts.join(" ")
|
|
37
|
+
|
|
38
|
+
if id.ptc_suffix
|
|
39
|
+
result += " #{id.ptc_suffix}"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
if id.csa_number
|
|
43
|
+
result += "/CSA #{id.csa_number}"
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
if id.handbook
|
|
47
|
+
result += " Handbook"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
if id.draft_year
|
|
51
|
+
result += "-#{id.draft_year}"
|
|
52
|
+
elsif id.year
|
|
53
|
+
result += "-#{id.year}"
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
result += " #{id.parenthetical_revision}" if id.parenthetical_revision
|
|
57
|
+
result += " (#{id.language})" if id.language
|
|
58
|
+
result += " (#{id.reaffirmation})" if id.reaffirmation
|
|
59
|
+
result += " #{id.revision_note}" if id.revision_note
|
|
60
|
+
|
|
61
|
+
# Normalize all em-dashes and en-dashes to regular dash
|
|
62
|
+
result.gsub(/[–—]/, "-")
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Asme
|
|
5
|
+
# Parses ASME URNs back into identifiers.
|
|
6
|
+
#
|
|
7
|
+
# UrnGenerator emits:
|
|
8
|
+
# urn:asme:{publisher}:{code}:{year}
|
|
9
|
+
#
|
|
10
|
+
# publisher is the lowercase publisher string. code is the alphanumeric
|
|
11
|
+
# designation (e.g., "B16.5", "PTC1", "BPVC-2023"). The year separator
|
|
12
|
+
# in human-readable form is `-`, not `:`.
|
|
13
|
+
#
|
|
14
|
+
# Examples:
|
|
15
|
+
# - urn:asme:asme:B16.5:2020 → ASME B16.5-2020
|
|
16
|
+
# - urn:asme:asme:PTC1:2020 → ASME PTC1-2020
|
|
17
|
+
# - urn:asme:asme:BPVC-2023 → ASME BPVC-2023
|
|
18
|
+
class UrnParser < Pubid::UrnParser::Base
|
|
19
|
+
def parse_urn(urn)
|
|
20
|
+
body = strip_namespace(urn)
|
|
21
|
+
parts = split_parts(body)
|
|
22
|
+
|
|
23
|
+
_publisher, code, year = parts
|
|
24
|
+
|
|
25
|
+
text = "ASME #{code}"
|
|
26
|
+
text += "-#{year}" if year
|
|
27
|
+
flavor_parse(text)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|