pubid 2.0.0.pre.alpha.1 → 2.0.0.pre.alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.adoc +5 -1
- data/data/nist/update_codes.yaml +27 -0
- data/lib/pubid/amca/builder.rb +2 -2
- data/lib/pubid/amca/identifier.rb +7 -0
- data/lib/pubid/amca/identifiers/base.rb +0 -26
- data/lib/pubid/amca/identifiers/interpretation.rb +0 -17
- data/lib/pubid/amca/identifiers/publication.rb +0 -13
- data/lib/pubid/amca/renderer.rb +82 -0
- data/lib/pubid/amca/single_identifier.rb +0 -23
- data/lib/pubid/amca/urn_parser.rb +28 -0
- data/lib/pubid/amca.rb +42 -1
- data/lib/pubid/ansi/builder.rb +5 -3
- data/lib/pubid/ansi/identifier.rb +1 -1
- data/lib/pubid/ansi/identifiers/american_national_standard.rb +2 -1
- data/lib/pubid/ansi/identifiers/standard.rb +2 -3
- data/lib/pubid/ansi/renderer.rb +53 -0
- data/lib/pubid/ansi/single_identifier.rb +2 -31
- data/lib/pubid/ansi/urn_generator.rb +3 -38
- data/lib/pubid/ansi/urn_parser.rb +23 -0
- data/lib/pubid/ansi.rb +38 -3
- data/lib/pubid/api/builder.rb +29 -74
- data/lib/pubid/api/identifier.rb +0 -4
- data/lib/pubid/api/identifiers/base.rb +0 -2
- data/lib/pubid/api/identifiers/bulletin.rb +0 -2
- data/lib/pubid/api/identifiers/continuous_operations_standard.rb +0 -2
- data/lib/pubid/api/identifiers/mpms.rb +1 -17
- data/lib/pubid/api/identifiers/publication.rb +0 -2
- data/lib/pubid/api/identifiers/recommended_practice.rb +0 -2
- data/lib/pubid/api/identifiers/specification.rb +0 -2
- data/lib/pubid/api/identifiers/standard.rb +0 -2
- data/lib/pubid/api/identifiers/technical_report.rb +0 -2
- data/lib/pubid/api/identifiers/typeless_standard.rb +1 -14
- data/lib/pubid/api/identifiers.rb +18 -0
- data/lib/pubid/api/renderer.rb +89 -0
- data/lib/pubid/api/single_identifier.rb +1 -13
- data/lib/pubid/api/urn_generator.rb +0 -18
- data/lib/pubid/api/urn_parser.rb +35 -0
- data/lib/pubid/api.rb +51 -5
- data/lib/pubid/ashrae/builder.rb +3 -3
- data/lib/pubid/ashrae/identifier.rb +6 -0
- data/lib/pubid/ashrae/identifiers/addenda_package.rb +0 -10
- data/lib/pubid/ashrae/identifiers/addendum.rb +0 -19
- data/lib/pubid/ashrae/identifiers/base.rb +3 -0
- data/lib/pubid/ashrae/identifiers/combined_addenda.rb +0 -15
- data/lib/pubid/ashrae/identifiers/errata.rb +0 -10
- data/lib/pubid/ashrae/identifiers/interpretation.rb +0 -10
- data/lib/pubid/ashrae/renderer.rb +117 -0
- data/lib/pubid/ashrae/single_identifier.rb +0 -13
- data/lib/pubid/ashrae/urn_generator.rb +0 -8
- data/lib/pubid/ashrae/urn_parser.rb +27 -0
- data/lib/pubid/ashrae.rb +42 -1
- data/lib/pubid/asme/components/code.rb +10 -2
- data/lib/pubid/asme/identifiers/base.rb +0 -60
- data/lib/pubid/asme/renderer.rb +66 -0
- data/lib/pubid/asme/urn_parser.rb +31 -0
- data/lib/pubid/asme.rb +42 -1
- data/lib/pubid/astm/components/code.rb +9 -0
- data/lib/pubid/{jis → astm}/components.rb +1 -1
- data/lib/pubid/astm/identifiers/adjunct.rb +0 -8
- data/lib/pubid/astm/identifiers/data_series.rb +0 -14
- data/lib/pubid/astm/identifiers/iso_dual_published.rb +9 -34
- data/lib/pubid/astm/identifiers/manual.rb +0 -27
- data/lib/pubid/astm/identifiers/monograph.rb +0 -14
- data/lib/pubid/astm/identifiers/research_report.rb +0 -7
- data/lib/pubid/astm/identifiers/standard.rb +0 -39
- data/lib/pubid/astm/identifiers/technical_report.rb +0 -13
- data/lib/pubid/astm/identifiers/work_in_progress.rb +0 -11
- data/lib/pubid/astm/identifiers.rb +18 -0
- data/lib/pubid/astm/renderer.rb +172 -0
- data/lib/pubid/astm/single_identifier.rb +0 -10
- data/lib/pubid/astm/urn_parser.rb +30 -0
- data/lib/pubid/astm.rb +39 -27
- data/lib/pubid/bsi/builder.rb +21 -12
- data/lib/pubid/bsi/identifier.rb +8 -2
- data/lib/pubid/bsi/identifiers/addendum_document.rb +3 -33
- data/lib/pubid/bsi/identifiers/adopted_european_norm.rb +11 -47
- data/lib/pubid/bsi/identifiers/adopted_international_standard.rb +11 -38
- data/lib/pubid/bsi/identifiers/aerospace_standard.rb +3 -53
- data/lib/pubid/bsi/identifiers/amendment.rb +3 -19
- data/lib/pubid/bsi/identifiers/british_industrial_practice.rb +2 -4
- data/lib/pubid/bsi/identifiers/british_standard.rb +2 -1
- data/lib/pubid/bsi/identifiers/bundled_identifier.rb +3 -84
- data/lib/pubid/bsi/identifiers/committee_document.rb +1 -14
- data/lib/pubid/bsi/identifiers/consolidated_identifier.rb +3 -84
- data/lib/pubid/bsi/identifiers/corrigendum.rb +3 -7
- data/lib/pubid/bsi/identifiers/detailed_specification.rb +1 -34
- data/lib/pubid/bsi/identifiers/disc.rb +1 -27
- data/lib/pubid/bsi/identifiers/draft_document.rb +3 -44
- data/lib/pubid/bsi/identifiers/electronic_book.rb +3 -36
- data/lib/pubid/bsi/identifiers/expert_commentary.rb +3 -15
- data/lib/pubid/bsi/identifiers/explanatory_supplement.rb +1 -45
- data/lib/pubid/bsi/identifiers/flex.rb +1 -33
- data/lib/pubid/bsi/identifiers/handbook.rb +2 -13
- data/lib/pubid/bsi/identifiers/index.rb +1 -30
- data/lib/pubid/bsi/identifiers/method.rb +1 -39
- data/lib/pubid/bsi/identifiers/national_annex.rb +5 -27
- data/lib/pubid/bsi/identifiers/practice_guide.rb +2 -4
- data/lib/pubid/bsi/identifiers/publicly_available_specification.rb +3 -52
- data/lib/pubid/bsi/identifiers/published_document.rb +3 -52
- data/lib/pubid/bsi/identifiers/section.rb +1 -28
- data/lib/pubid/bsi/identifiers/set.rb +3 -17
- data/lib/pubid/bsi/identifiers/standalone_amendment.rb +1 -7
- data/lib/pubid/bsi/identifiers/supplement_document.rb +3 -21
- data/lib/pubid/bsi/identifiers/supplementary_index.rb +1 -44
- data/lib/pubid/bsi/identifiers/technical_specification.rb +3 -45
- data/lib/pubid/bsi/identifiers/test_method.rb +1 -30
- data/lib/pubid/bsi/identifiers/value_added_publication.rb +3 -14
- data/lib/pubid/bsi/identifiers.rb +0 -1
- data/lib/pubid/bsi/renderer.rb +1050 -0
- data/lib/pubid/bsi/single_identifier.rb +6 -70
- data/lib/pubid/bsi/urn_generator.rb +2 -3
- data/lib/pubid/bsi/urn_parser.rb +52 -0
- data/lib/pubid/bsi.rb +224 -1
- data/lib/pubid/builder/base.rb +57 -10
- data/lib/pubid/bundled_identifier.rb +0 -1
- data/lib/pubid/ccsds/builder.rb +4 -3
- data/lib/pubid/ccsds/identifier.rb +66 -1
- data/lib/pubid/ccsds/identifiers/base.rb +11 -50
- data/lib/pubid/ccsds/identifiers/corrigendum.rb +7 -6
- data/lib/pubid/ccsds/parser.rb +4 -2
- data/lib/pubid/ccsds/single_identifier.rb +4 -1
- data/lib/pubid/ccsds/supplement_identifier.rb +15 -11
- data/lib/pubid/ccsds/urn_generator.rb +3 -3
- data/lib/pubid/ccsds/urn_parser.rb +20 -0
- data/lib/pubid/ccsds.rb +39 -1
- data/lib/pubid/cen_cenelec/builder.rb +12 -14
- data/lib/pubid/cen_cenelec/identifier.rb +8 -2
- data/lib/pubid/cen_cenelec/identifiers/adopted_european_norm.rb +13 -4
- data/lib/pubid/cen_cenelec/identifiers/amendment.rb +2 -8
- data/lib/pubid/cen_cenelec/identifiers/base.rb +5 -41
- data/lib/pubid/cen_cenelec/identifiers/cen_report.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/cen_workshop_agreement.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/consolidated_identifier.rb +2 -25
- data/lib/pubid/cen_cenelec/identifiers/corrigendum.rb +2 -13
- data/lib/pubid/cen_cenelec/identifiers/european_norm.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/european_prestandard.rb +4 -7
- data/lib/pubid/cen_cenelec/identifiers/european_specification.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/fragment.rb +2 -2
- data/lib/pubid/cen_cenelec/identifiers/harmonization_document.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/technical_report.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/technical_specification.rb +2 -1
- data/lib/pubid/cen_cenelec/renderer.rb +261 -0
- data/lib/pubid/cen_cenelec/single_identifier.rb +11 -89
- data/lib/pubid/cen_cenelec/urn_generator.rb +6 -6
- data/lib/pubid/cen_cenelec/urn_parser.rb +28 -0
- data/lib/pubid/cen_cenelec.rb +168 -1
- data/lib/pubid/cie/components/code.rb +8 -0
- data/lib/pubid/cie/identifier.rb +6 -4
- data/lib/pubid/cie/urn_parser.rb +28 -0
- data/lib/pubid/cie.rb +43 -1
- data/lib/pubid/components/adoption.rb +104 -0
- data/lib/pubid/components/code.rb +22 -8
- data/lib/pubid/components/date.rb +23 -16
- data/lib/pubid/components/edition.rb +9 -6
- data/lib/pubid/components/iteration.rb +32 -0
- data/lib/pubid/components/language.rb +6 -4
- data/lib/pubid/components/locality.rb +10 -1
- data/lib/pubid/components/publisher.rb +9 -6
- data/lib/pubid/components/relationship.rb +151 -0
- data/lib/pubid/components/stage.rb +5 -14
- data/lib/pubid/components/supplement.rb +184 -0
- data/lib/pubid/components/type.rb +5 -15
- data/lib/pubid/components/typed_stage.rb +11 -8
- data/lib/pubid/components.rb +4 -0
- data/lib/pubid/core/update_codes.rb +28 -7
- data/lib/pubid/csa/identifier.rb +0 -3
- data/lib/pubid/csa/identifiers/base.rb +2 -122
- data/lib/pubid/csa/identifiers/cec.rb +2 -101
- data/lib/pubid/csa/identifiers/series.rb +2 -102
- data/lib/pubid/csa/renderer.rb +292 -0
- data/lib/pubid/csa/urn_generator.rb +1 -1
- data/lib/pubid/csa/urn_parser.rb +33 -0
- data/lib/pubid/csa.rb +42 -1
- data/lib/pubid/etsi/components/code.rb +9 -2
- data/lib/pubid/etsi/identifiers/base.rb +1 -4
- data/lib/pubid/etsi/identifiers/supplement_identifier.rb +2 -9
- data/lib/pubid/etsi/renderer.rb +42 -0
- data/lib/pubid/etsi/urn_parser.rb +34 -0
- data/lib/pubid/etsi.rb +42 -1
- data/lib/pubid/export/exporter.rb +4 -46
- data/lib/pubid/export/flavor_exporter.rb +111 -278
- data/lib/pubid/export.rb +0 -6
- data/lib/pubid/identifier.rb +10 -18
- data/lib/pubid/identifier_facade.rb +114 -0
- data/lib/pubid/identifier_metadata.rb +1 -1
- data/lib/pubid/idf/builder.rb +3 -3
- data/lib/pubid/idf/identifier.rb +3 -6
- data/lib/pubid/idf/identifiers/amendment.rb +2 -1
- data/lib/pubid/idf/identifiers/corrigendum.rb +2 -1
- data/lib/pubid/idf/identifiers/international_standard.rb +2 -1
- data/lib/pubid/idf/identifiers/reviewed_method.rb +2 -1
- data/lib/pubid/idf/parser.rb +3 -2
- data/lib/pubid/idf/renderer.rb +84 -0
- data/lib/pubid/idf/supplement_identifier.rb +2 -10
- data/lib/pubid/idf/urn_generator.rb +4 -39
- data/lib/pubid/idf/urn_parser.rb +25 -0
- data/lib/pubid/idf.rb +51 -1
- data/lib/pubid/iec/builder.rb +48 -65
- data/lib/pubid/iec/components/code.rb +9 -32
- data/lib/pubid/iec/components/publisher.rb +1 -1
- data/lib/pubid/iec/components.rb +14 -0
- data/lib/pubid/iec/identifier.rb +276 -3
- data/lib/pubid/iec/identifiers/amendment.rb +2 -3
- data/lib/pubid/iec/identifiers/base.rb +8 -28
- data/lib/pubid/iec/identifiers/component_specification.rb +3 -3
- data/lib/pubid/iec/identifiers/conformity_assessment.rb +1 -2
- data/lib/pubid/iec/identifiers/consolidated_identifier.rb +27 -30
- data/lib/pubid/iec/identifiers/corrigendum.rb +2 -3
- data/lib/pubid/iec/identifiers/fragment_identifier.rb +37 -26
- data/lib/pubid/iec/identifiers/guide.rb +0 -2
- data/lib/pubid/iec/identifiers/international_standard.rb +2 -3
- data/lib/pubid/iec/identifiers/interpretation_sheet.rb +2 -3
- data/lib/pubid/iec/identifiers/operational_document.rb +3 -3
- data/lib/pubid/iec/identifiers/publicly_available_specification.rb +2 -3
- data/lib/pubid/iec/identifiers/sheet_identifier.rb +21 -15
- data/lib/pubid/iec/identifiers/societal_technology_trend_report.rb +3 -3
- data/lib/pubid/iec/identifiers/systems_reference_document.rb +2 -3
- data/lib/pubid/iec/identifiers/technical_report.rb +2 -3
- data/lib/pubid/iec/identifiers/technical_specification.rb +2 -3
- data/lib/pubid/iec/identifiers/technology_report.rb +1 -2
- data/lib/pubid/iec/identifiers/test_report_form.rb +5 -34
- data/lib/pubid/iec/identifiers/vap_identifier.rb +26 -23
- data/lib/pubid/iec/identifiers/white_paper.rb +3 -3
- data/lib/pubid/iec/identifiers/working_document.rb +4 -48
- data/lib/pubid/iec/identifiers.rb +30 -0
- data/lib/pubid/iec/parser.rb +20 -14
- data/lib/pubid/iec/renderer.rb +254 -0
- data/lib/pubid/iec/single_identifier.rb +6 -12
- data/lib/pubid/iec/supplement_identifier.rb +58 -54
- data/lib/pubid/iec/urn_generator.rb +57 -171
- data/lib/pubid/iec/urn_parser.rb +53 -252
- data/lib/pubid/iec.rb +40 -68
- data/lib/pubid/ieee/builder.rb +12 -12
- data/lib/pubid/ieee/components/code.rb +8 -0
- data/lib/pubid/ieee/components/draft.rb +14 -0
- data/lib/pubid/ieee/components/relationship.rb +5 -149
- data/lib/pubid/ieee/identifier.rb +6 -0
- data/lib/pubid/ieee/identifiers/adopted_standard.rb +1 -6
- data/lib/pubid/ieee/identifiers/base.rb +101 -458
- data/lib/pubid/ieee/identifiers/conformance_identifier.rb +1 -7
- data/lib/pubid/ieee/identifiers/corrigendum.rb +1 -9
- data/lib/pubid/ieee/identifiers/csa_dual_published.rb +1 -7
- data/lib/pubid/ieee/identifiers/dual_identifier.rb +1 -1
- data/lib/pubid/ieee/identifiers/dual_published.rb +1 -1
- data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +1 -6
- data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +1 -7
- data/lib/pubid/ieee/identifiers/joint_development.rb +2 -0
- data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +1 -15
- data/lib/pubid/ieee/identifiers/parenthetical_identifier.rb +1 -3
- data/lib/pubid/ieee/identifiers/project_draft_identifier.rb +15 -0
- data/lib/pubid/ieee/identifiers/redlined_standard.rb +1 -4
- data/lib/pubid/ieee/identifiers/si_standard.rb +1 -35
- data/lib/pubid/ieee/identifiers/standard.rb +1 -1
- data/lib/pubid/ieee/pre_parser.rb +301 -0
- data/lib/pubid/ieee/renderer.rb +307 -0
- data/lib/pubid/ieee/urn_parser.rb +34 -0
- data/lib/pubid/ieee.rb +62 -1
- data/lib/pubid/ieee_debug.rb +0 -1
- data/lib/pubid/iho/builder.rb +2 -2
- data/lib/pubid/iho/identifier.rb +8 -0
- data/lib/pubid/iho/identifiers/base.rb +49 -10
- data/lib/pubid/iho/identifiers/bibliographic.rb +0 -4
- data/lib/pubid/iho/identifiers/circular_letter.rb +0 -4
- data/lib/pubid/iho/identifiers/miscellaneous.rb +0 -4
- data/lib/pubid/iho/identifiers/publication.rb +0 -4
- data/lib/pubid/iho/identifiers/standard.rb +0 -4
- data/lib/pubid/iho/parser.rb +3 -3
- data/lib/pubid/iho/renderer.rb +30 -0
- data/lib/pubid/iho/urn_generator.rb +3 -3
- data/lib/pubid/iho/urn_parser.rb +58 -0
- data/lib/pubid/iho.rb +50 -1
- data/lib/pubid/iso/builder.rb +59 -53
- data/lib/pubid/iso/bundled_identifier.rb +51 -0
- data/lib/pubid/iso/components/code.rb +7 -19
- data/lib/pubid/iso/components/publisher.rb +10 -8
- data/lib/pubid/iso/components.rb +2 -4
- data/lib/pubid/iso/identifier.rb +233 -6
- data/lib/pubid/iso/identifiers/addendum.rb +9 -6
- data/lib/pubid/iso/identifiers/amendment.rb +8 -4
- data/lib/pubid/iso/identifiers/corrigendum.rb +4 -4
- data/lib/pubid/iso/identifiers/data.rb +0 -1
- data/lib/pubid/iso/identifiers/directives.rb +8 -2
- data/lib/pubid/iso/identifiers/directives_supplement.rb +43 -14
- data/lib/pubid/iso/identifiers/extract.rb +2 -2
- data/lib/pubid/iso/identifiers/guide.rb +0 -1
- data/lib/pubid/iso/identifiers/international_standard.rb +4 -4
- data/lib/pubid/iso/identifiers/international_standardized_profile.rb +4 -4
- data/lib/pubid/iso/identifiers/international_workshop_agreement.rb +10 -4
- data/lib/pubid/iso/identifiers/pas.rb +2 -2
- data/lib/pubid/iso/identifiers/recommendation.rb +2 -2
- data/lib/pubid/iso/identifiers/supplement.rb +11 -3
- data/lib/pubid/iso/identifiers/tc_document.rb +44 -15
- data/lib/pubid/iso/identifiers/technical_report.rb +4 -4
- data/lib/pubid/iso/identifiers/technical_specification.rb +2 -2
- data/lib/pubid/iso/identifiers/technology_trends_assessments.rb +2 -2
- data/lib/pubid/iso/identifiers.rb +0 -1
- data/lib/pubid/iso/normalizer.rb +89 -0
- data/lib/pubid/iso/parser.rb +26 -6
- data/lib/pubid/iso/single_identifier.rb +6 -3
- data/lib/pubid/iso/supplement_identifier.rb +15 -2
- data/lib/pubid/iso/urn_generator.rb +74 -176
- data/lib/pubid/iso/urn_parser.rb +28 -9
- data/lib/pubid/iso.rb +173 -2
- data/lib/pubid/itu/builder.rb +0 -12
- data/lib/pubid/itu/components/code.rb +8 -0
- data/lib/pubid/itu/components.rb +11 -0
- data/lib/pubid/itu/identifier.rb +6 -39
- data/lib/pubid/itu/identifiers/amendment.rb +0 -2
- data/lib/pubid/itu/identifiers/annex.rb +0 -2
- data/lib/pubid/itu/identifiers/base.rb +0 -6
- data/lib/pubid/itu/identifiers/combined_identifier.rb +0 -2
- data/lib/pubid/itu/identifiers/corrigendum.rb +0 -2
- data/lib/pubid/itu/identifiers/recommendation.rb +0 -2
- data/lib/pubid/itu/identifiers/special_publication.rb +0 -2
- data/lib/pubid/itu/identifiers/supplement.rb +0 -2
- data/lib/pubid/itu/urn_parser.rb +23 -0
- data/lib/pubid/itu.rb +42 -1
- data/lib/pubid/jcgm/builder.rb +16 -8
- data/lib/pubid/jcgm/identifiers/amendment.rb +2 -7
- data/lib/pubid/jcgm/identifiers/gum_guide.rb +2 -10
- data/lib/pubid/jcgm/renderer.rb +68 -0
- data/lib/pubid/jcgm/single_identifier.rb +1 -5
- data/lib/pubid/jcgm/urn_generator.rb +4 -6
- data/lib/pubid/jcgm/urn_parser.rb +23 -0
- data/lib/pubid/jcgm.rb +43 -2
- data/lib/pubid/jis/builder.rb +44 -52
- data/lib/pubid/jis/identifier.rb +132 -3
- data/lib/pubid/jis/identifiers/amendment.rb +1 -1
- data/lib/pubid/jis/identifiers/corrigendum.rb +16 -0
- data/lib/pubid/jis/identifiers/standard.rb +2 -1
- data/lib/pubid/jis/identifiers/technical_report.rb +2 -1
- data/lib/pubid/jis/identifiers/technical_specification.rb +2 -1
- data/lib/pubid/jis/identifiers.rb +1 -1
- data/lib/pubid/jis/parser.rb +31 -5
- data/lib/pubid/jis/renderer.rb +69 -0
- data/lib/pubid/jis/single_identifier.rb +6 -12
- data/lib/pubid/jis/supplement_identifier.rb +17 -14
- data/lib/pubid/jis/urn_parser.rb +23 -0
- data/lib/pubid/jis.rb +42 -2
- data/lib/pubid/nist/builder.rb +122 -1761
- data/lib/pubid/nist/caster.rb +1272 -0
- data/lib/pubid/nist/circular_supplement_builder.rb +291 -0
- data/lib/pubid/nist/components/code.rb +9 -20
- data/lib/pubid/nist/components/edition.rb +16 -0
- data/lib/pubid/nist/components/supplement.rb +88 -21
- data/lib/pubid/nist/components.rb +0 -1
- data/lib/pubid/nist/identifier.rb +25 -0
- data/lib/pubid/nist/identifiers/base.rb +206 -64
- data/lib/pubid/nist/identifiers/circular.rb +7 -2
- data/lib/pubid/nist/identifiers/circular_supplement.rb +3 -2
- data/lib/pubid/nist/identifiers/commercial_standard.rb +2 -1
- data/lib/pubid/nist/identifiers/commercial_standard_emergency.rb +6 -4
- data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +10 -3
- data/lib/pubid/nist/identifiers/crpl_report.rb +8 -11
- data/lib/pubid/nist/identifiers/dated_document.rb +49 -0
- data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +17 -16
- data/lib/pubid/nist/identifiers/grant_contractor_report.rb +2 -1
- data/lib/pubid/nist/identifiers/handbook.rb +2 -1
- data/lib/pubid/nist/identifiers/internal_report.rb +2 -1
- data/lib/pubid/nist/identifiers/letter_circular.rb +2 -1
- data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +5 -4
- data/lib/pubid/nist/identifiers/monograph.rb +7 -3
- data/lib/pubid/nist/identifiers/report.rb +4 -3
- data/lib/pubid/nist/identifiers/special_publication.rb +2 -1
- data/lib/pubid/nist/identifiers/technical_note.rb +3 -2
- data/lib/pubid/nist/identifiers.rb +1 -0
- data/lib/pubid/nist/parser.rb +67 -424
- data/lib/pubid/nist/parser_output_normalizer.rb +233 -0
- data/lib/pubid/nist/preprocessor.rb +416 -0
- data/lib/pubid/nist/renderer.rb +43 -0
- data/lib/pubid/nist/router.rb +148 -0
- data/lib/pubid/nist/series/base.rb +58 -0
- data/lib/pubid/nist/series/crpl.rb +13 -0
- data/lib/pubid/nist/series/fips.rb +14 -0
- data/lib/pubid/nist/series/ir.rb +60 -0
- data/lib/pubid/nist/series/letter_preserving.rb +15 -0
- data/lib/pubid/nist/series/mono.rb +19 -0
- data/lib/pubid/nist/series/ncstar.rb +20 -0
- data/lib/pubid/nist/series.rb +49 -0
- data/lib/pubid/nist/supplement_identifier.rb +11 -25
- data/lib/pubid/nist/urn_generator.rb +14 -8
- data/lib/pubid/nist/urn_parser.rb +67 -0
- data/lib/pubid/nist.rb +83 -4
- data/lib/pubid/oiml/components/code.rb +10 -0
- data/lib/pubid/oiml/identifiers/annex.rb +3 -45
- data/lib/pubid/oiml/identifiers/base.rb +2 -17
- data/lib/pubid/oiml/renderer.rb +161 -0
- data/lib/pubid/oiml/single_identifier.rb +6 -45
- data/lib/pubid/oiml/supplement_identifier.rb +4 -19
- data/lib/pubid/oiml/urn_generator.rb +0 -8
- data/lib/pubid/oiml/urn_parser.rb +22 -0
- data/lib/pubid/oiml.rb +42 -1
- data/lib/pubid/plateau/identifier.rb +23 -0
- data/lib/pubid/plateau/identifiers/handbook.rb +1 -3
- data/lib/pubid/plateau/identifiers/technical_report.rb +1 -1
- data/lib/pubid/plateau/renderer.rb +51 -0
- data/lib/pubid/plateau/supplement_identifier.rb +1 -1
- data/lib/pubid/plateau/urn_parser.rb +43 -0
- data/lib/pubid/plateau.rb +44 -1
- data/lib/pubid/renderers/base.rb +34 -0
- data/lib/pubid/renderers/directives_renderer.rb +27 -14
- data/lib/pubid/renderers/guide_renderer.rb +7 -1
- data/lib/pubid/renderers/human_readable.rb +31 -8
- data/lib/pubid/renderers/iwa_renderer.rb +5 -1
- data/lib/pubid/renderers/supplement_renderer.rb +4 -1
- data/lib/pubid/rendering/context.rb +33 -21
- data/lib/pubid/rendering.rb +0 -3
- data/lib/pubid/sae/components/date.rb +8 -0
- data/lib/pubid/sae/components/type.rb +5 -1
- data/lib/pubid/sae/identifiers/base.rb +2 -16
- data/lib/pubid/sae/renderer.rb +36 -0
- data/lib/pubid/sae/urn_generator.rb +2 -10
- data/lib/pubid/sae/urn_parser.rb +36 -0
- data/lib/pubid/sae.rb +42 -1
- data/lib/pubid/urn_generator/base.rb +12 -12
- data/lib/pubid/urn_parser/base.rb +81 -0
- data/lib/pubid/urn_parser/errors.rb +9 -0
- data/lib/pubid/urn_parser.rb +14 -0
- data/lib/pubid/version.rb +1 -1
- data/lib/pubid.rb +29 -7
- data/lib/tasks/website-data.json +1940 -1882
- metadata +77 -43
- data/lib/pubid/amca/scheme.rb +0 -16
- data/lib/pubid/ansi/scheme.rb +0 -15
- data/lib/pubid/api/scheme.rb +0 -66
- data/lib/pubid/ashrae/scheme.rb +0 -53
- data/lib/pubid/asme/scheme.rb +0 -37
- data/lib/pubid/astm/scheme.rb +0 -55
- data/lib/pubid/bsi/identifiers/base.rb +0 -11
- data/lib/pubid/bsi/scheme.rb +0 -243
- data/lib/pubid/ccsds/scheme.rb +0 -57
- data/lib/pubid/cen_cenelec/scheme.rb +0 -164
- data/lib/pubid/cie/scheme.rb +0 -64
- data/lib/pubid/csa/scheme.rb +0 -44
- data/lib/pubid/etsi/scheme.rb +0 -42
- data/lib/pubid/export/data_class_exporter.rb +0 -59
- data/lib/pubid/export/ieee_exporter.rb +0 -78
- data/lib/pubid/export/itu_exporter.rb +0 -66
- data/lib/pubid/export/nist_exporter.rb +0 -64
- data/lib/pubid/export/registry_exporter.rb +0 -90
- data/lib/pubid/export/scheme_exporter.rb +0 -70
- data/lib/pubid/identifier_registry.rb +0 -198
- data/lib/pubid/idf/scheme.rb +0 -61
- data/lib/pubid/iec/scheme.rb +0 -71
- data/lib/pubid/ieee/scheme.rb +0 -90
- data/lib/pubid/iho/scheme.rb +0 -29
- data/lib/pubid/iso/identifiers/base.rb +0 -115
- data/lib/pubid/iso/scheme.rb +0 -187
- data/lib/pubid/itu/scheme.rb +0 -174
- data/lib/pubid/jcgm/scheme.rb +0 -60
- data/lib/pubid/jis/components/code.rb +0 -59
- data/lib/pubid/jis/identifiers/base.rb +0 -72
- data/lib/pubid/jis/scheme.rb +0 -49
- data/lib/pubid/nist/components/publisher.rb +0 -24
- data/lib/pubid/nist/scheme.rb +0 -199
- data/lib/pubid/oiml/scheme.rb +0 -46
- data/lib/pubid/plateau/scheme.rb +0 -45
- data/lib/pubid/rendering/base.rb +0 -73
- data/lib/pubid/rendering/common.rb +0 -211
- data/lib/pubid/rendering/format.rb +0 -25
- data/lib/pubid/sae/scheme.rb +0 -47
- data/lib/pubid/scheme.rb +0 -207
data/lib/pubid/api/builder.rb
CHANGED
|
@@ -1,84 +1,39 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative "components/code"
|
|
4
|
-
require_relative "identifiers/bulletin"
|
|
5
|
-
require_relative "identifiers/mpms"
|
|
6
|
-
require_relative "identifiers/recommended_practice"
|
|
7
|
-
require_relative "identifiers/specification"
|
|
8
|
-
require_relative "identifiers/standard"
|
|
9
|
-
require_relative "identifiers/technical_report"
|
|
10
|
-
require_relative "identifiers/continuous_operations_standard"
|
|
11
|
-
require_relative "identifiers/publication"
|
|
12
|
-
require_relative "identifiers/typeless_standard"
|
|
13
|
-
|
|
14
3
|
module Pubid
|
|
15
4
|
module Api
|
|
16
|
-
class Builder
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
Identifiers::ContinuousOperationsStandard
|
|
34
|
-
when "PUBL"
|
|
35
|
-
Identifiers::Publication
|
|
36
|
-
else
|
|
37
|
-
# No type = typeless standard
|
|
38
|
-
Identifiers::TypelessStandard
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
identifier = identifier_class.new
|
|
42
|
-
|
|
43
|
-
# Number (for non-MPMS)
|
|
44
|
-
if parsed_hash[:number]
|
|
45
|
-
identifier.code = Components::Code.new(value: parsed_hash[:number].to_s)
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
# Part
|
|
49
|
-
if parsed_hash[:part]
|
|
50
|
-
identifier.part = parsed_hash[:part].to_s
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
# MPMS-specific attributes
|
|
54
|
-
if parsed_hash[:chapter]
|
|
55
|
-
identifier.chapter = parsed_hash[:chapter].to_s
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
if parsed_hash[:section]
|
|
59
|
-
identifier.section = parsed_hash[:section].to_s
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
if parsed_hash[:subsection]
|
|
63
|
-
identifier.subsection = parsed_hash[:subsection].to_s
|
|
64
|
-
end
|
|
5
|
+
class Builder < Pubid::Builder::Base
|
|
6
|
+
TYPE_CLASS_MAP = {
|
|
7
|
+
"BULL" => Identifiers::Bulletin,
|
|
8
|
+
"MPMS" => Identifiers::Mpms,
|
|
9
|
+
"RP" => Identifiers::RecommendedPractice,
|
|
10
|
+
"SPEC" => Identifiers::Specification,
|
|
11
|
+
"STD" => Identifiers::Standard,
|
|
12
|
+
"TR" => Identifiers::TechnicalReport,
|
|
13
|
+
"COS" => Identifiers::ContinuousOperationsStandard,
|
|
14
|
+
"PUBL" => Identifiers::Publication,
|
|
15
|
+
}.freeze
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
def default_identifier_class
|
|
20
|
+
Identifiers::TypelessStandard
|
|
21
|
+
end
|
|
65
22
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
end
|
|
23
|
+
def select_class(data)
|
|
24
|
+
TYPE_CLASS_MAP[data[:type]&.to_s] || default_identifier_class
|
|
25
|
+
end
|
|
70
26
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
27
|
+
def cast(key, value)
|
|
28
|
+
case key
|
|
29
|
+
when :number then Components::Code.new(value: value.to_s)
|
|
30
|
+
when :reaffirmation
|
|
31
|
+
value.is_a?(Hash) ? (value[:year] || value).to_s : value.to_s
|
|
32
|
+
when :part, :chapter, :section, :subsection, :year
|
|
33
|
+
value.to_s
|
|
34
|
+
else
|
|
35
|
+
super
|
|
79
36
|
end
|
|
80
|
-
|
|
81
|
-
identifier
|
|
82
37
|
end
|
|
83
38
|
end
|
|
84
39
|
end
|
data/lib/pubid/api/identifier.rb
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative "base"
|
|
4
|
-
|
|
5
3
|
module Pubid
|
|
6
4
|
module Api
|
|
7
5
|
module Identifiers
|
|
@@ -15,21 +13,7 @@ module Pubid
|
|
|
15
13
|
end
|
|
16
14
|
|
|
17
15
|
def to_s
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
# Add chapter
|
|
21
|
-
parts << "CH #{chapter}" if chapter
|
|
22
|
-
|
|
23
|
-
# Add section/subsection
|
|
24
|
-
if section
|
|
25
|
-
parts << ".#{section}"
|
|
26
|
-
parts << ".#{subsection}" if subsection
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
# Add year
|
|
30
|
-
parts << "-#{year}" if year
|
|
31
|
-
|
|
32
|
-
parts.join(" ").gsub(" .", ".")
|
|
16
|
+
render(format: :human)
|
|
33
17
|
end
|
|
34
18
|
|
|
35
19
|
private
|
|
@@ -1,25 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative "base"
|
|
4
|
-
|
|
5
3
|
module Pubid
|
|
6
4
|
module Api
|
|
7
5
|
module Identifiers
|
|
8
6
|
class TypelessStandard < Base
|
|
9
7
|
# No type_string method - renders without type
|
|
10
8
|
def to_s
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
# Add code/number
|
|
14
|
-
parts << code_portion if code_portion
|
|
15
|
-
|
|
16
|
-
# Add year
|
|
17
|
-
parts << "-#{year}" if year
|
|
18
|
-
|
|
19
|
-
# Add reaffirmation
|
|
20
|
-
parts << " (R#{reaffirmation})" if reaffirmation
|
|
21
|
-
|
|
22
|
-
parts.join(" ")
|
|
9
|
+
render(format: :human)
|
|
23
10
|
end
|
|
24
11
|
end
|
|
25
12
|
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Api
|
|
5
|
+
module Identifiers
|
|
6
|
+
autoload :Base, "#{__dir__}/identifiers/base"
|
|
7
|
+
autoload :Bulletin, "#{__dir__}/identifiers/bulletin"
|
|
8
|
+
autoload :ContinuousOperationsStandard, "#{__dir__}/identifiers/continuous_operations_standard"
|
|
9
|
+
autoload :Mpms, "#{__dir__}/identifiers/mpms"
|
|
10
|
+
autoload :Publication, "#{__dir__}/identifiers/publication"
|
|
11
|
+
autoload :RecommendedPractice, "#{__dir__}/identifiers/recommended_practice"
|
|
12
|
+
autoload :Specification, "#{__dir__}/identifiers/specification"
|
|
13
|
+
autoload :Standard, "#{__dir__}/identifiers/standard"
|
|
14
|
+
autoload :TechnicalReport, "#{__dir__}/identifiers/technical_report"
|
|
15
|
+
autoload :TypelessStandard, "#{__dir__}/identifiers/typeless_standard"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Api
|
|
5
|
+
# Human-readable renderer for API identifiers.
|
|
6
|
+
#
|
|
7
|
+
# Produces strings like:
|
|
8
|
+
# "API Std 650"
|
|
9
|
+
# "API MPMS CH 4.1"
|
|
10
|
+
# "API 5L-2018"
|
|
11
|
+
#
|
|
12
|
+
# The renderer is registered as the +:human+ format in the API format
|
|
13
|
+
# registry and invoked via +render(format: :human)+.
|
|
14
|
+
class Renderer < ::Pubid::Renderers::Base
|
|
15
|
+
def render(context: nil, **opts)
|
|
16
|
+
id = @id
|
|
17
|
+
|
|
18
|
+
case id
|
|
19
|
+
when Identifiers::Mpms
|
|
20
|
+
render_mpms(id)
|
|
21
|
+
when Identifiers::TypelessStandard
|
|
22
|
+
render_typeless(id)
|
|
23
|
+
else
|
|
24
|
+
render_default(id)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
private
|
|
29
|
+
|
|
30
|
+
def render_default(id)
|
|
31
|
+
parts = ["API"]
|
|
32
|
+
|
|
33
|
+
# Add type if available
|
|
34
|
+
if id.class.attributes.key?(:type_string) && id.type_string
|
|
35
|
+
parts << id.type_string
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Add code/number with part as one token
|
|
39
|
+
parts << code_portion(id) if code_portion(id)
|
|
40
|
+
|
|
41
|
+
result = parts.join(" ")
|
|
42
|
+
result += "-#{id.year}" if id.year
|
|
43
|
+
result += " (R#{id.reaffirmation})" if id.reaffirmation
|
|
44
|
+
result
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def render_mpms(id)
|
|
48
|
+
parts = ["API", "MPMS"]
|
|
49
|
+
|
|
50
|
+
# Add chapter
|
|
51
|
+
parts << "CH #{id.chapter}" if id.chapter
|
|
52
|
+
|
|
53
|
+
# Add section/subsection
|
|
54
|
+
if id.section
|
|
55
|
+
parts << ".#{id.section}"
|
|
56
|
+
parts << ".#{id.subsection}" if id.subsection
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Add year
|
|
60
|
+
parts << "-#{id.year}" if id.year
|
|
61
|
+
|
|
62
|
+
parts.join(" ").gsub(" .", ".")
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def render_typeless(id)
|
|
66
|
+
parts = ["API"]
|
|
67
|
+
|
|
68
|
+
# Add code/number
|
|
69
|
+
parts << code_portion(id) if code_portion(id)
|
|
70
|
+
|
|
71
|
+
# Add year
|
|
72
|
+
parts << "-#{id.year}" if id.year
|
|
73
|
+
|
|
74
|
+
# Add reaffirmation
|
|
75
|
+
parts << " (R#{id.reaffirmation})" if id.reaffirmation
|
|
76
|
+
|
|
77
|
+
parts.join(" ")
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def code_portion(id)
|
|
81
|
+
return nil unless id.code
|
|
82
|
+
|
|
83
|
+
code_str = id.code.to_s
|
|
84
|
+
code_str += "-#{id.part}" if id.part
|
|
85
|
+
code_str
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
@@ -17,19 +17,7 @@ module Pubid
|
|
|
17
17
|
attribute :reaffirmation, :string
|
|
18
18
|
|
|
19
19
|
def to_s
|
|
20
|
-
|
|
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
|
|
20
|
+
render(format: :human)
|
|
33
21
|
end
|
|
34
22
|
|
|
35
23
|
private
|
|
@@ -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
|
|
|
@@ -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
|
|
@@ -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
|