pubid 1.15.18 → 2.0.0.pre.alpha.1
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/LICENSE.txt +1 -1
- data/README.adoc +2041 -53
- data/archived-gems/pubid-ccsds/update_codes.yaml +1 -0
- data/archived-gems/pubid-iec/stages.yaml +129 -0
- data/archived-gems/pubid-iec/update_codes.yaml +67 -0
- data/archived-gems/pubid-ieee/update_codes.yaml +104 -0
- data/archived-gems/pubid-iso/stages.yaml +106 -0
- data/archived-gems/pubid-iso/update_codes.yaml +4 -0
- data/archived-gems/pubid-itu/i18n.yaml +13 -0
- data/archived-gems/pubid-itu/series.yaml +42 -0
- data/archived-gems/pubid-nist/publishers.yaml +6 -0
- data/archived-gems/pubid-nist/series.yaml +121 -0
- data/archived-gems/pubid-nist/stages.yaml +16 -0
- data/archived-gems/pubid-nist/update_codes.yaml +93 -0
- data/archived-gems/pubid-plateau/update_codes.yaml +6 -0
- data/data/ccsds/update_codes.yaml +1 -0
- data/data/iec/update_codes.yaml +67 -0
- data/data/ieee/update_codes.yaml +104 -0
- data/data/iso/update_codes.yaml +21 -0
- data/data/nist/update_codes.yaml +87 -0
- data/data/plateau/update_codes.yaml +6 -0
- data/lib/pubid/amca/builder.rb +176 -0
- data/lib/pubid/amca/identifier.rb +18 -0
- data/lib/pubid/amca/identifiers/base.rb +64 -0
- data/lib/pubid/amca/identifiers/interpretation.rb +51 -0
- data/lib/pubid/amca/identifiers/publication.rb +47 -0
- data/lib/pubid/amca/identifiers/standard.rb +22 -0
- data/lib/pubid/amca/identifiers.rb +12 -0
- data/lib/pubid/amca/parser.rb +153 -0
- data/lib/pubid/amca/scheme.rb +16 -0
- data/lib/pubid/amca/single_identifier.rb +33 -0
- data/lib/pubid/amca/urn_generator.rb +50 -0
- data/lib/pubid/amca.rb +26 -0
- data/lib/pubid/ansi/builder.rb +52 -0
- data/lib/pubid/ansi/identifier.rb +13 -0
- data/lib/pubid/ansi/identifiers/american_national_standard.rb +12 -0
- data/lib/pubid/ansi/identifiers/standard.rb +16 -0
- data/lib/pubid/ansi/identifiers.rb +11 -0
- data/lib/pubid/ansi/parser.rb +91 -0
- data/lib/pubid/ansi/scheme.rb +15 -0
- data/lib/pubid/ansi/single_identifier.rb +45 -0
- data/lib/pubid/ansi/urn_generator.rb +76 -0
- data/lib/pubid/ansi.rb +27 -0
- data/lib/pubid/api/builder.rb +85 -0
- data/lib/pubid/api/components/code.rb +9 -0
- data/lib/pubid/api/identifier.rb +21 -0
- data/lib/pubid/api/identifiers/base.rb +24 -0
- data/lib/pubid/api/identifiers/bulletin.rb +15 -0
- data/lib/pubid/api/identifiers/continuous_operations_standard.rb +15 -0
- data/lib/pubid/api/identifiers/mpms.rb +44 -0
- data/lib/pubid/api/identifiers/publication.rb +15 -0
- data/lib/pubid/api/identifiers/recommended_practice.rb +15 -0
- data/lib/pubid/api/identifiers/specification.rb +15 -0
- data/lib/pubid/api/identifiers/standard.rb +15 -0
- data/lib/pubid/api/identifiers/technical_report.rb +15 -0
- data/lib/pubid/api/identifiers/typeless_standard.rb +27 -0
- data/lib/pubid/api/parser.rb +140 -0
- data/lib/pubid/api/scheme.rb +66 -0
- data/lib/pubid/api/single_identifier.rb +46 -0
- data/lib/pubid/api/urn_generator.rb +41 -0
- data/lib/pubid/api.rb +17 -0
- data/lib/pubid/ashrae/builder.rb +498 -0
- data/lib/pubid/ashrae/identifier.rb +18 -0
- data/lib/pubid/ashrae/identifiers/addenda_package.rb +46 -0
- data/lib/pubid/ashrae/identifiers/addendum.rb +55 -0
- data/lib/pubid/ashrae/identifiers/base.rb +23 -0
- data/lib/pubid/ashrae/identifiers/combined_addenda.rb +51 -0
- data/lib/pubid/ashrae/identifiers/errata.rb +40 -0
- data/lib/pubid/ashrae/identifiers/guideline.rb +38 -0
- data/lib/pubid/ashrae/identifiers/interpretation.rb +39 -0
- data/lib/pubid/ashrae/identifiers/standard.rb +38 -0
- data/lib/pubid/ashrae/identifiers.rb +16 -0
- data/lib/pubid/ashrae/parser.rb +724 -0
- data/lib/pubid/ashrae/scheme.rb +53 -0
- data/lib/pubid/ashrae/single_identifier.rb +23 -0
- data/lib/pubid/ashrae/supplement_identifier.rb +23 -0
- data/lib/pubid/ashrae/urn_generator.rb +59 -0
- data/lib/pubid/ashrae.rb +21 -0
- data/lib/pubid/asme/builder.rb +153 -0
- data/lib/pubid/asme/components/code.rb +18 -0
- data/lib/pubid/asme/identifier.rb +15 -0
- data/lib/pubid/asme/identifiers/base.rb +70 -0
- data/lib/pubid/asme/identifiers/standard.rb +12 -0
- data/lib/pubid/asme/identifiers.rb +10 -0
- data/lib/pubid/asme/parser.rb +308 -0
- data/lib/pubid/asme/scheme.rb +37 -0
- data/lib/pubid/asme/single_identifier.rb +29 -0
- data/lib/pubid/asme/urn_generator.rb +133 -0
- data/lib/pubid/asme.rb +21 -0
- data/lib/pubid/astm/builder.rb +159 -0
- data/lib/pubid/astm/components/code.rb +33 -0
- data/lib/pubid/astm/identifier.rb +15 -0
- data/lib/pubid/astm/identifiers/adjunct.rb +21 -0
- data/lib/pubid/astm/identifiers/base.rb +13 -0
- data/lib/pubid/astm/identifiers/data_series.rb +25 -0
- data/lib/pubid/astm/identifiers/iso_dual_published.rb +74 -0
- data/lib/pubid/astm/identifiers/manual.rb +40 -0
- data/lib/pubid/astm/identifiers/monograph.rb +25 -0
- data/lib/pubid/astm/identifiers/research_report.rb +18 -0
- data/lib/pubid/astm/identifiers/standard.rb +52 -0
- data/lib/pubid/astm/identifiers/technical_report.rb +23 -0
- data/lib/pubid/astm/identifiers/work_in_progress.rb +21 -0
- data/lib/pubid/astm/parser.rb +244 -0
- data/lib/pubid/astm/scheme.rb +55 -0
- data/lib/pubid/astm/single_identifier.rb +25 -0
- data/lib/pubid/astm/urn_generator.rb +99 -0
- data/lib/pubid/astm.rb +38 -0
- data/lib/pubid/bsi/builder.rb +1483 -0
- data/lib/pubid/bsi/components/code.rb +11 -0
- data/lib/pubid/bsi/components/date.rb +11 -0
- data/lib/pubid/bsi/components/publisher.rb +11 -0
- data/lib/pubid/bsi/components/type.rb +11 -0
- data/lib/pubid/bsi/identifier.rb +27 -0
- data/lib/pubid/bsi/identifiers/addendum_document.rb +64 -0
- data/lib/pubid/bsi/identifiers/adopted_european_norm.rb +95 -0
- data/lib/pubid/bsi/identifiers/adopted_international_standard.rb +82 -0
- data/lib/pubid/bsi/identifiers/aerospace_standard.rb +118 -0
- data/lib/pubid/bsi/identifiers/amendment.rb +40 -0
- data/lib/pubid/bsi/identifiers/base.rb +11 -0
- data/lib/pubid/bsi/identifiers/british_industrial_practice.rb +27 -0
- data/lib/pubid/bsi/identifiers/british_standard.rb +33 -0
- data/lib/pubid/bsi/identifiers/bundled_identifier.rb +114 -0
- data/lib/pubid/bsi/identifiers/committee_document.rb +51 -0
- data/lib/pubid/bsi/identifiers/consolidated_identifier.rb +152 -0
- data/lib/pubid/bsi/identifiers/corrigendum.rb +28 -0
- data/lib/pubid/bsi/identifiers/detailed_specification.rb +69 -0
- data/lib/pubid/bsi/identifiers/disc.rb +56 -0
- data/lib/pubid/bsi/identifiers/draft_document.rb +71 -0
- data/lib/pubid/bsi/identifiers/electronic_book.rb +52 -0
- data/lib/pubid/bsi/identifiers/expert_commentary.rb +47 -0
- data/lib/pubid/bsi/identifiers/explanatory_supplement.rb +82 -0
- data/lib/pubid/bsi/identifiers/flex.rb +61 -0
- data/lib/pubid/bsi/identifiers/handbook.rb +39 -0
- data/lib/pubid/bsi/identifiers/index.rb +62 -0
- data/lib/pubid/bsi/identifiers/method.rb +76 -0
- data/lib/pubid/bsi/identifiers/national_annex.rb +73 -0
- data/lib/pubid/bsi/identifiers/practice_guide.rb +27 -0
- data/lib/pubid/bsi/identifiers/publicly_available_specification.rb +79 -0
- data/lib/pubid/bsi/identifiers/published_document.rb +79 -0
- data/lib/pubid/bsi/identifiers/section.rb +62 -0
- data/lib/pubid/bsi/identifiers/set.rb +46 -0
- data/lib/pubid/bsi/identifiers/standalone_amendment.rb +40 -0
- data/lib/pubid/bsi/identifiers/supplement_document.rb +51 -0
- data/lib/pubid/bsi/identifiers/supplementary_index.rb +81 -0
- data/lib/pubid/bsi/identifiers/technical_specification.rb +79 -0
- data/lib/pubid/bsi/identifiers/test_method.rb +67 -0
- data/lib/pubid/bsi/identifiers/value_added_publication.rb +52 -0
- data/lib/pubid/bsi/identifiers.rb +52 -0
- data/lib/pubid/bsi/model.rb +196 -0
- data/lib/pubid/bsi/parser.rb +659 -0
- data/lib/pubid/bsi/scheme.rb +243 -0
- data/lib/pubid/bsi/single_identifier.rb +129 -0
- data/lib/pubid/bsi/urn_generator.rb +84 -0
- data/lib/pubid/bsi.rb +32 -0
- data/lib/pubid/builder/base.rb +138 -0
- data/lib/pubid/bundled_identifier.rb +126 -0
- data/lib/pubid/ccsds/builder.rb +56 -0
- data/lib/pubid/ccsds/identifier.rb +16 -0
- data/lib/pubid/ccsds/identifiers/base.rb +78 -0
- data/lib/pubid/ccsds/identifiers/base_BASE_88929.rb +70 -0
- data/lib/pubid/ccsds/identifiers/corrigendum.rb +39 -0
- data/lib/pubid/ccsds/identifiers.rb +10 -0
- data/lib/pubid/ccsds/parser.rb +71 -0
- data/lib/pubid/ccsds/scheme.rb +57 -0
- data/lib/pubid/ccsds/single_identifier.rb +74 -0
- data/lib/pubid/ccsds/supplement_identifier.rb +33 -0
- data/lib/pubid/ccsds/urn_generator.rb +115 -0
- data/lib/pubid/ccsds.rb +21 -0
- data/lib/pubid/cen_cenelec/builder.rb +330 -0
- data/lib/pubid/cen_cenelec/identifier.rb +15 -0
- data/lib/pubid/cen_cenelec/identifiers/adopted_european_norm.rb +40 -0
- data/lib/pubid/cen_cenelec/identifiers/amendment.rb +29 -0
- data/lib/pubid/cen_cenelec/identifiers/base.rb +75 -0
- data/lib/pubid/cen_cenelec/identifiers/cen_report.rb +28 -0
- data/lib/pubid/cen_cenelec/identifiers/cen_workshop_agreement.rb +27 -0
- data/lib/pubid/cen_cenelec/identifiers/cenelec_harmonization_document.rb +28 -0
- data/lib/pubid/cen_cenelec/identifiers/consolidated_identifier.rb +61 -0
- data/lib/pubid/cen_cenelec/identifiers/corrigendum.rb +35 -0
- data/lib/pubid/cen_cenelec/identifiers/european_norm.rb +41 -0
- data/lib/pubid/cen_cenelec/identifiers/european_prestandard.rb +37 -0
- data/lib/pubid/cen_cenelec/identifiers/european_specification.rb +28 -0
- data/lib/pubid/cen_cenelec/identifiers/fragment.rb +22 -0
- data/lib/pubid/cen_cenelec/identifiers/guide.rb +27 -0
- data/lib/pubid/cen_cenelec/identifiers/harmonization_document.rb +27 -0
- data/lib/pubid/cen_cenelec/identifiers/technical_report.rb +27 -0
- data/lib/pubid/cen_cenelec/identifiers/technical_specification.rb +35 -0
- data/lib/pubid/cen_cenelec/identifiers.rb +32 -0
- data/lib/pubid/cen_cenelec/parser.rb +144 -0
- data/lib/pubid/cen_cenelec/scheme.rb +164 -0
- data/lib/pubid/cen_cenelec/single_identifier.rb +130 -0
- data/lib/pubid/cen_cenelec/supplement_identifier.rb +48 -0
- data/lib/pubid/cen_cenelec/urn_generator.rb +129 -0
- data/lib/pubid/cen_cenelec.rb +21 -0
- data/lib/pubid/cie/builder.rb +399 -0
- data/lib/pubid/cie/components/code.rb +72 -0
- data/lib/pubid/cie/components/language.rb +58 -0
- data/lib/pubid/cie/identifier.rb +18 -0
- data/lib/pubid/cie/identifiers/bundle.rb +20 -0
- data/lib/pubid/cie/identifiers/conference.rb +32 -0
- data/lib/pubid/cie/identifiers/corrigendum.rb +40 -0
- data/lib/pubid/cie/identifiers/dual_published.rb +41 -0
- data/lib/pubid/cie/identifiers/identical.rb +64 -0
- data/lib/pubid/cie/identifiers/joint_published.rb +52 -0
- data/lib/pubid/cie/identifiers/standard.rb +58 -0
- data/lib/pubid/cie/identifiers/supplement.rb +45 -0
- data/lib/pubid/cie/identifiers/tutorial_bundle.rb +20 -0
- data/lib/pubid/cie/identifiers.rb +17 -0
- data/lib/pubid/cie/parser.rb +347 -0
- data/lib/pubid/cie/scheme.rb +64 -0
- data/lib/pubid/cie/single_identifier.rb +30 -0
- data/lib/pubid/cie/supplement_identifier.rb +26 -0
- data/lib/pubid/cie/urn_generator.rb +123 -0
- data/lib/pubid/cie.rb +28 -0
- data/lib/pubid/components/code.rb +33 -0
- data/lib/pubid/components/date.rb +49 -0
- data/lib/pubid/components/edition.rb +32 -0
- data/lib/pubid/components/language.rb +37 -0
- data/lib/pubid/components/locality.rb +10 -0
- data/lib/pubid/components/publisher.rb +36 -0
- data/lib/pubid/components/stage.rb +54 -0
- data/lib/pubid/components/type.rb +58 -0
- data/lib/pubid/components/typed_stage.rb +55 -0
- data/lib/pubid/components.rb +15 -0
- data/lib/pubid/core/pattern_doc_generator.rb +272 -0
- data/lib/pubid/core/update_codes.rb +77 -0
- data/lib/pubid/core.rb +8 -0
- data/lib/pubid/csa/builder.rb +671 -0
- data/lib/pubid/csa/components/code.rb +9 -0
- data/lib/pubid/csa/components.rb +9 -0
- data/lib/pubid/csa/composite_identifier.rb +27 -0
- data/lib/pubid/csa/identifier.rb +457 -0
- data/lib/pubid/csa/identifiers/base.rb +133 -0
- data/lib/pubid/csa/identifiers/bundled.rb +125 -0
- data/lib/pubid/csa/identifiers/canadian_adopted.rb +82 -0
- data/lib/pubid/csa/identifiers/cec.rb +129 -0
- data/lib/pubid/csa/identifiers/combined.rb +130 -0
- data/lib/pubid/csa/identifiers/csa_adopted.rb +78 -0
- data/lib/pubid/csa/identifiers/package.rb +65 -0
- data/lib/pubid/csa/identifiers/series.rb +127 -0
- data/lib/pubid/csa/identifiers/standard.rb +10 -0
- data/lib/pubid/csa/identifiers.rb +17 -0
- data/lib/pubid/csa/parser.rb +445 -0
- data/lib/pubid/csa/scheme.rb +44 -0
- data/lib/pubid/csa/single_identifier.rb +30 -0
- data/lib/pubid/csa/urn_generator.rb +80 -0
- data/lib/pubid/csa/wrapper_identifier.rb +31 -0
- data/lib/pubid/csa.rb +25 -0
- data/lib/pubid/etsi/builder.rb +133 -0
- data/lib/pubid/etsi/components/code.rb +42 -0
- data/lib/pubid/etsi/components/version.rb +37 -0
- data/lib/pubid/etsi/components.rb +10 -0
- data/lib/pubid/etsi/identifier.rb +14 -0
- data/lib/pubid/etsi/identifiers/amendment.rb +15 -0
- data/lib/pubid/etsi/identifiers/base.rb +38 -0
- data/lib/pubid/etsi/identifiers/corrigendum.rb +15 -0
- data/lib/pubid/etsi/identifiers/etsi_standard.rb +19 -0
- data/lib/pubid/etsi/identifiers/supplement_identifier.rb +91 -0
- data/lib/pubid/etsi/identifiers.rb +14 -0
- data/lib/pubid/etsi/parser.rb +133 -0
- data/lib/pubid/etsi/scheme.rb +42 -0
- data/lib/pubid/etsi/urn_generator.rb +76 -0
- data/lib/pubid/etsi.rb +21 -0
- data/lib/pubid/export/auditor.rb +89 -0
- data/lib/pubid/export/data_class_exporter.rb +59 -0
- data/lib/pubid/export/exporter.rb +74 -0
- data/lib/pubid/export/flavor_exporter.rb +402 -0
- data/lib/pubid/export/ieee_exporter.rb +78 -0
- data/lib/pubid/export/itu_exporter.rb +66 -0
- data/lib/pubid/export/nist_exporter.rb +64 -0
- data/lib/pubid/export/registry_exporter.rb +90 -0
- data/lib/pubid/export/result.rb +97 -0
- data/lib/pubid/export/scheme_exporter.rb +70 -0
- data/lib/pubid/export.rb +18 -0
- data/lib/pubid/format_detector.rb +16 -0
- data/lib/pubid/format_registry.rb +42 -0
- data/lib/pubid/identifier.rb +235 -0
- data/lib/pubid/identifier_metadata.rb +148 -0
- data/lib/pubid/identifier_registry.rb +198 -0
- data/lib/pubid/idf/builder.rb +82 -0
- data/lib/pubid/idf/identifier.rb +69 -0
- data/lib/pubid/idf/identifiers/amendment.rb +27 -0
- data/lib/pubid/idf/identifiers/corrigendum.rb +27 -0
- data/lib/pubid/idf/identifiers/international_standard.rb +123 -0
- data/lib/pubid/idf/identifiers/reviewed_method.rb +100 -0
- data/lib/pubid/idf/identifiers.rb +13 -0
- data/lib/pubid/idf/parser.rb +143 -0
- data/lib/pubid/idf/scheme.rb +61 -0
- data/lib/pubid/idf/single_identifier.rb +19 -0
- data/lib/pubid/idf/supplement_identifier.rb +43 -0
- data/lib/pubid/idf/urn_generator.rb +84 -0
- data/lib/pubid/idf.rb +25 -0
- data/lib/pubid/iec/builder.rb +457 -0
- data/lib/pubid/iec/components/code.rb +59 -0
- data/lib/pubid/iec/components/consolidated_amendment.rb +59 -0
- data/lib/pubid/iec/components/publisher.rb +35 -0
- data/lib/pubid/iec/components/sheet.rb +32 -0
- data/lib/pubid/iec/components/trf_info.rb +38 -0
- data/lib/pubid/iec/components/vap_suffix.rb +41 -0
- data/lib/pubid/iec/identifier.rb +21 -0
- data/lib/pubid/iec/identifiers/amendment.rb +94 -0
- data/lib/pubid/iec/identifiers/base.rb +78 -0
- data/lib/pubid/iec/identifiers/component_specification.rb +39 -0
- data/lib/pubid/iec/identifiers/conformity_assessment.rb +39 -0
- data/lib/pubid/iec/identifiers/consolidated_identifier.rb +86 -0
- data/lib/pubid/iec/identifiers/corrigendum.rb +94 -0
- data/lib/pubid/iec/identifiers/fragment_identifier.rb +141 -0
- data/lib/pubid/iec/identifiers/guide.rb +104 -0
- data/lib/pubid/iec/identifiers/international_standard.rb +147 -0
- data/lib/pubid/iec/identifiers/interpretation_sheet.rb +104 -0
- data/lib/pubid/iec/identifiers/operational_document.rb +39 -0
- data/lib/pubid/iec/identifiers/publicly_available_specification.rb +101 -0
- data/lib/pubid/iec/identifiers/sheet_identifier.rb +66 -0
- data/lib/pubid/iec/identifiers/societal_technology_trend_report.rb +40 -0
- data/lib/pubid/iec/identifiers/systems_reference_document.rb +40 -0
- data/lib/pubid/iec/identifiers/technical_report.rb +132 -0
- data/lib/pubid/iec/identifiers/technical_specification.rb +132 -0
- data/lib/pubid/iec/identifiers/technology_report.rb +39 -0
- data/lib/pubid/iec/identifiers/test_report_form.rb +78 -0
- data/lib/pubid/iec/identifiers/vap_identifier.rb +77 -0
- data/lib/pubid/iec/identifiers/white_paper.rb +39 -0
- data/lib/pubid/iec/identifiers/working_document.rb +96 -0
- data/lib/pubid/iec/parser.rb +412 -0
- data/lib/pubid/iec/rendering_style.rb +113 -0
- data/lib/pubid/iec/scheme.rb +71 -0
- data/lib/pubid/iec/single_identifier.rb +80 -0
- data/lib/pubid/iec/supplement_identifier.rb +161 -0
- data/lib/pubid/iec/urn_generator.rb +193 -0
- data/lib/pubid/iec/urn_parser.rb +289 -0
- data/lib/pubid/iec.rb +85 -0
- data/lib/pubid/ieee/aiee/builder.rb +71 -0
- data/lib/pubid/ieee/aiee/identifier.rb +105 -0
- data/lib/pubid/ieee/aiee/parser.rb +130 -0
- data/lib/pubid/ieee/aiee.rb +11 -0
- data/lib/pubid/ieee/builder.rb +1237 -0
- data/lib/pubid/ieee/components/code.rb +102 -0
- data/lib/pubid/ieee/components/draft.rb +93 -0
- data/lib/pubid/ieee/components/relationship.rb +157 -0
- data/lib/pubid/ieee/components/typed_stage.rb +100 -0
- data/lib/pubid/ieee/identifier.rb +13 -0
- data/lib/pubid/ieee/identifiers/adopted_standard.rb +33 -0
- data/lib/pubid/ieee/identifiers/base.rb +591 -0
- data/lib/pubid/ieee/identifiers/conformance_identifier.rb +35 -0
- data/lib/pubid/ieee/identifiers/corrigendum.rb +37 -0
- data/lib/pubid/ieee/identifiers/csa_dual_published.rb +51 -0
- data/lib/pubid/ieee/identifiers/dual_identifier.rb +18 -0
- data/lib/pubid/ieee/identifiers/dual_published.rb +28 -0
- data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +27 -0
- data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +34 -0
- data/lib/pubid/ieee/identifiers/joint_development.rb +172 -0
- data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +51 -0
- data/lib/pubid/ieee/identifiers/nesc/base.rb +56 -0
- data/lib/pubid/ieee/identifiers/nesc/draft.rb +28 -0
- data/lib/pubid/ieee/identifiers/nesc/handbook.rb +32 -0
- data/lib/pubid/ieee/identifiers/nesc/redline.rb +26 -0
- data/lib/pubid/ieee/identifiers/nesc/standard.rb +26 -0
- data/lib/pubid/ieee/identifiers/nesc.rb +15 -0
- data/lib/pubid/ieee/identifiers/parenthetical_identifier.rb +20 -0
- data/lib/pubid/ieee/identifiers/project_draft_identifier.rb +26 -0
- data/lib/pubid/ieee/identifiers/redlined_standard.rb +33 -0
- data/lib/pubid/ieee/identifiers/si_standard.rb +73 -0
- data/lib/pubid/ieee/identifiers/standard.rb +41 -0
- data/lib/pubid/ieee/identifiers/supplement_identifier.rb +23 -0
- data/lib/pubid/ieee/identifiers.rb +33 -0
- data/lib/pubid/ieee/ire/builder.rb +61 -0
- data/lib/pubid/ieee/ire/identifier.rb +58 -0
- data/lib/pubid/ieee/ire/parser.rb +91 -0
- data/lib/pubid/ieee/ire.rb +11 -0
- data/lib/pubid/ieee/nesc/builder.rb +101 -0
- data/lib/pubid/ieee/nesc/parser.rb +154 -0
- data/lib/pubid/ieee/nesc.rb +10 -0
- data/lib/pubid/ieee/parser.rb +1226 -0
- data/lib/pubid/ieee/scheme.rb +90 -0
- data/lib/pubid/ieee/typed_stages.rb +172 -0
- data/lib/pubid/ieee/urn_generator.rb +188 -0
- data/lib/pubid/ieee.rb +32 -0
- data/lib/pubid/ieee_debug.rb +31 -0
- data/lib/pubid/iho/builder.rb +37 -0
- data/lib/pubid/iho/identifier.rb +19 -0
- data/lib/pubid/iho/identifiers/base.rb +41 -0
- data/lib/pubid/iho/identifiers/bibliographic.rb +20 -0
- data/lib/pubid/iho/identifiers/circular_letter.rb +19 -0
- data/lib/pubid/iho/identifiers/miscellaneous.rb +20 -0
- data/lib/pubid/iho/identifiers/publication.rb +19 -0
- data/lib/pubid/iho/identifiers/standard.rb +19 -0
- data/lib/pubid/iho/identifiers.rb +14 -0
- data/lib/pubid/iho/parser.rb +68 -0
- data/lib/pubid/iho/scheme.rb +29 -0
- data/lib/pubid/iho/urn_generator.rb +29 -0
- data/lib/pubid/iho.rb +21 -0
- data/lib/pubid/iso/builder.rb +305 -0
- data/lib/pubid/iso/bundled_identifier.rb +85 -0
- data/lib/pubid/iso/combined_identifier.rb +22 -0
- data/lib/pubid/iso/components/code.rb +36 -0
- data/lib/pubid/iso/components/publisher.rb +60 -0
- data/lib/pubid/iso/components.rb +12 -0
- data/lib/pubid/iso/format_resolver.rb +45 -0
- data/lib/pubid/iso/identifier.rb +69 -0
- data/lib/pubid/iso/identifiers/addendum.rb +104 -0
- data/lib/pubid/iso/identifiers/amendment.rb +128 -0
- data/lib/pubid/iso/identifiers/base.rb +115 -0
- data/lib/pubid/iso/identifiers/corrigendum.rb +108 -0
- data/lib/pubid/iso/identifiers/data.rb +76 -0
- data/lib/pubid/iso/identifiers/directives.rb +59 -0
- data/lib/pubid/iso/identifiers/directives_supplement.rb +119 -0
- data/lib/pubid/iso/identifiers/extract.rb +30 -0
- data/lib/pubid/iso/identifiers/guide.rb +100 -0
- data/lib/pubid/iso/identifiers/international_standard.rb +168 -0
- data/lib/pubid/iso/identifiers/international_standardized_profile.rb +94 -0
- data/lib/pubid/iso/identifiers/international_workshop_agreement.rb +89 -0
- data/lib/pubid/iso/identifiers/pas.rb +93 -0
- data/lib/pubid/iso/identifiers/recommendation.rb +45 -0
- data/lib/pubid/iso/identifiers/supplement.rb +87 -0
- data/lib/pubid/iso/identifiers/tc_document.rb +108 -0
- data/lib/pubid/iso/identifiers/technical_report.rb +103 -0
- data/lib/pubid/iso/identifiers/technical_specification.rb +102 -0
- data/lib/pubid/iso/identifiers/technology_trends_assessments.rb +95 -0
- data/lib/pubid/iso/identifiers.rb +33 -0
- data/lib/pubid/iso/parser.rb +510 -0
- data/lib/pubid/iso/rendering_style.rb +120 -0
- data/lib/pubid/iso/scheme.rb +187 -0
- data/lib/pubid/iso/single_identifier.rb +61 -0
- data/lib/pubid/iso/supplement_identifier.rb +27 -0
- data/lib/pubid/iso/urn_generator.rb +412 -0
- data/lib/pubid/iso/urn_parser.rb +423 -0
- data/lib/pubid/iso/utilities.rb +86 -0
- data/lib/pubid/iso.rb +50 -0
- data/lib/pubid/itu/builder.rb +171 -0
- data/lib/pubid/itu/components/code.rb +39 -0
- data/lib/pubid/itu/components/sector.rb +35 -0
- data/lib/pubid/itu/components/series.rb +29 -0
- data/lib/pubid/itu/i18n.rb +9 -0
- data/lib/pubid/itu/i18n.yaml +30 -0
- data/lib/pubid/itu/identifier.rb +53 -0
- data/lib/pubid/itu/identifiers/amendment.rb +43 -0
- data/lib/pubid/itu/identifiers/annex.rb +74 -0
- data/lib/pubid/itu/identifiers/base.rb +154 -0
- data/lib/pubid/itu/identifiers/combined_identifier.rb +47 -0
- data/lib/pubid/itu/identifiers/corrigendum.rb +44 -0
- data/lib/pubid/itu/identifiers/recommendation.rb +16 -0
- data/lib/pubid/itu/identifiers/special_publication.rb +31 -0
- data/lib/pubid/itu/identifiers/supplement.rb +46 -0
- data/lib/pubid/itu/identifiers.rb +16 -0
- data/lib/pubid/itu/model.rb +111 -0
- data/lib/pubid/itu/parser.rb +225 -0
- data/lib/pubid/itu/scheme.rb +174 -0
- data/lib/pubid/itu/urn_generator.rb +105 -0
- data/lib/pubid/itu.rb +22 -0
- data/lib/pubid/jcgm/builder.rb +88 -0
- data/lib/pubid/jcgm/components/publisher.rb +20 -0
- data/lib/pubid/jcgm/components.rb +9 -0
- data/lib/pubid/jcgm/identifier.rb +11 -0
- data/lib/pubid/jcgm/identifiers/amendment.rb +35 -0
- data/lib/pubid/jcgm/identifiers/guide.rb +21 -0
- data/lib/pubid/jcgm/identifiers/gum_guide.rb +51 -0
- data/lib/pubid/jcgm/identifiers.rb +11 -0
- data/lib/pubid/jcgm/parser.rb +84 -0
- data/lib/pubid/jcgm/scheme.rb +60 -0
- data/lib/pubid/jcgm/single_identifier.rb +48 -0
- data/lib/pubid/jcgm/supplement_identifier.rb +16 -0
- data/lib/pubid/jcgm/urn_generator.rb +110 -0
- data/lib/pubid/jcgm.rb +31 -0
- data/lib/pubid/jis/builder.rb +124 -0
- data/lib/pubid/jis/components/code.rb +59 -0
- data/lib/pubid/jis/components.rb +9 -0
- data/lib/pubid/jis/identifier.rb +18 -0
- data/lib/pubid/jis/identifiers/amendment.rb +16 -0
- data/lib/pubid/jis/identifiers/base.rb +72 -0
- data/lib/pubid/jis/identifiers/explanation.rb +22 -0
- data/lib/pubid/jis/identifiers/japanese_industrial_standard.rb +16 -0
- data/lib/pubid/jis/identifiers/standard.rb +27 -0
- data/lib/pubid/jis/identifiers/technical_report.rb +31 -0
- data/lib/pubid/jis/identifiers/technical_specification.rb +31 -0
- data/lib/pubid/jis/identifiers.rb +17 -0
- data/lib/pubid/jis/parser.rb +109 -0
- data/lib/pubid/jis/scheme.rb +49 -0
- data/lib/pubid/jis/single_identifier.rb +37 -0
- data/lib/pubid/jis/supplement_identifier.rb +47 -0
- data/lib/pubid/jis/urn_generator.rb +25 -0
- data/lib/pubid/jis.rb +23 -0
- data/lib/pubid/lutaml/no_store_registration.rb +30 -0
- data/lib/pubid/nist/builder.rb +2100 -0
- data/lib/pubid/nist/components/code.rb +38 -0
- data/lib/pubid/nist/components/edition.rb +118 -0
- data/lib/pubid/nist/components/issue_number.rb +28 -0
- data/lib/pubid/nist/components/part.rb +77 -0
- data/lib/pubid/nist/components/publisher.rb +24 -0
- data/lib/pubid/nist/components/stage.rb +53 -0
- data/lib/pubid/nist/components/supplement.rb +121 -0
- data/lib/pubid/nist/components/translation.rb +42 -0
- data/lib/pubid/nist/components/update.rb +103 -0
- data/lib/pubid/nist/components/version.rb +35 -0
- data/lib/pubid/nist/components/volume.rb +32 -0
- data/lib/pubid/nist/components.rb +19 -0
- data/lib/pubid/nist/configuration.rb +77 -0
- data/lib/pubid/nist/identifiers/base.rb +499 -0
- data/lib/pubid/nist/identifiers/circular.rb +68 -0
- data/lib/pubid/nist/identifiers/circular_supplement.rb +50 -0
- data/lib/pubid/nist/identifiers/commercial_standard.rb +41 -0
- data/lib/pubid/nist/identifiers/commercial_standard_emergency.rb +56 -0
- data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +56 -0
- data/lib/pubid/nist/identifiers/crpl_report.rb +135 -0
- data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +94 -0
- data/lib/pubid/nist/identifiers/grant_contractor_report.rb +35 -0
- data/lib/pubid/nist/identifiers/handbook.rb +50 -0
- data/lib/pubid/nist/identifiers/internal_report.rb +56 -0
- data/lib/pubid/nist/identifiers/letter_circular.rb +45 -0
- data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +65 -0
- data/lib/pubid/nist/identifiers/monograph.rb +69 -0
- data/lib/pubid/nist/identifiers/ncstar.rb +41 -0
- data/lib/pubid/nist/identifiers/nsrds.rb +41 -0
- data/lib/pubid/nist/identifiers/owmwp.rb +35 -0
- data/lib/pubid/nist/identifiers/report.rb +68 -0
- data/lib/pubid/nist/identifiers/special_publication.rb +36 -0
- data/lib/pubid/nist/identifiers/technical_note.rb +90 -0
- data/lib/pubid/nist/identifiers.rb +33 -0
- data/lib/pubid/nist/parser.rb +1084 -0
- data/lib/pubid/nist/scheme.rb +199 -0
- data/lib/pubid/nist/supplement_identifier.rb +83 -0
- data/lib/pubid/nist/urn_generator.rb +127 -0
- data/lib/pubid/nist.rb +36 -0
- data/lib/pubid/oiml/builder.rb +189 -0
- data/lib/pubid/oiml/components/code.rb +20 -0
- data/lib/pubid/oiml/components.rb +9 -0
- data/lib/pubid/oiml/identifier.rb +11 -0
- data/lib/pubid/oiml/identifiers/amendment.rb +13 -0
- data/lib/pubid/oiml/identifiers/annex.rb +62 -0
- data/lib/pubid/oiml/identifiers/base.rb +36 -0
- data/lib/pubid/oiml/identifiers/basic_publication.rb +13 -0
- data/lib/pubid/oiml/identifiers/document.rb +13 -0
- data/lib/pubid/oiml/identifiers/expert_report.rb +13 -0
- data/lib/pubid/oiml/identifiers/guide.rb +13 -0
- data/lib/pubid/oiml/identifiers/recommendation.rb +13 -0
- data/lib/pubid/oiml/identifiers/seminar_report.rb +13 -0
- data/lib/pubid/oiml/identifiers/vocabulary.rb +13 -0
- data/lib/pubid/oiml/identifiers.rb +18 -0
- data/lib/pubid/oiml/parser.rb +173 -0
- data/lib/pubid/oiml/scheme.rb +46 -0
- data/lib/pubid/oiml/single_identifier.rb +90 -0
- data/lib/pubid/oiml/supplement_identifier.rb +43 -0
- data/lib/pubid/oiml/urn_generator.rb +64 -0
- data/lib/pubid/oiml.rb +26 -0
- data/lib/pubid/parser/common_parse_methods.rb +13 -0
- data/lib/pubid/parser/common_parse_rules.rb +56 -0
- data/lib/pubid/parser.rb +8 -0
- data/lib/pubid/parsers/base.rb +11 -0
- data/lib/pubid/parsers/mr_string.rb +93 -0
- data/lib/pubid/plateau/builder.rb +50 -0
- data/lib/pubid/plateau/identifiers/annex.rb +16 -0
- data/lib/pubid/plateau/identifiers/base.rb +51 -0
- data/lib/pubid/plateau/identifiers/handbook.rb +34 -0
- data/lib/pubid/plateau/identifiers/technical_report.rb +20 -0
- data/lib/pubid/plateau/identifiers.rb +12 -0
- data/lib/pubid/plateau/parser.rb +63 -0
- data/lib/pubid/plateau/scheme.rb +45 -0
- data/lib/pubid/plateau/supplement_identifier.rb +72 -0
- data/lib/pubid/plateau/urn_generator.rb +29 -0
- data/lib/pubid/plateau.rb +25 -0
- data/lib/pubid/renderers/base.rb +19 -0
- data/lib/pubid/renderers/directives_renderer.rb +62 -0
- data/lib/pubid/renderers/guide_renderer.rb +20 -0
- data/lib/pubid/renderers/human_readable.rb +58 -0
- data/lib/pubid/renderers/iwa_renderer.rb +16 -0
- data/lib/pubid/renderers/mr_string.rb +16 -0
- data/lib/pubid/renderers/supplement_renderer.rb +33 -0
- data/lib/pubid/renderers/urn.rb +11 -0
- data/lib/pubid/renderers.rb +14 -0
- data/lib/pubid/rendering/base.rb +73 -0
- data/lib/pubid/rendering/common.rb +211 -0
- data/lib/pubid/rendering/context.rb +156 -0
- data/lib/pubid/rendering/date.rb +27 -0
- data/lib/pubid/rendering/format.rb +25 -0
- data/lib/pubid/rendering/language.rb +21 -0
- data/lib/pubid/rendering/numbering.rb +24 -0
- data/lib/pubid/rendering/publisher.rb +25 -0
- data/lib/pubid/rendering/stage.rb +38 -0
- data/lib/pubid/rendering/supplement.rb +46 -0
- data/lib/pubid/rendering.rb +16 -0
- data/lib/pubid/sae/builder.rb +32 -0
- data/lib/pubid/sae/components/code.rb +9 -0
- data/lib/pubid/sae/components/date.rb +19 -0
- data/lib/pubid/sae/components/type.rb +19 -0
- data/lib/pubid/sae/components.rb +11 -0
- data/lib/pubid/sae/identifier.rb +14 -0
- data/lib/pubid/sae/identifiers/base.rb +42 -0
- data/lib/pubid/sae/identifiers.rb +9 -0
- data/lib/pubid/sae/parser.rb +55 -0
- data/lib/pubid/sae/scheme.rb +47 -0
- data/lib/pubid/sae/urn_generator.rb +38 -0
- data/lib/pubid/sae.rb +19 -0
- data/lib/pubid/scheme.rb +207 -0
- data/lib/pubid/urn_generator/base.rb +110 -0
- data/lib/pubid/utils/string_normalizer.rb +196 -0
- data/lib/pubid/utils.rb +7 -0
- data/lib/pubid/version.rb +3 -1
- data/lib/pubid.rb +137 -13
- data/lib/tasks/docs.rake +37 -0
- data/lib/tasks/export.rake +38 -0
- data/lib/tasks/website-data.json +7488 -0
- metadata +613 -171
- data/lib/pubid/registry.rb +0 -30
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Api
|
|
5
|
+
class UrnGenerator < Pubid::UrnGenerator::Base
|
|
6
|
+
def urn_type
|
|
7
|
+
"std"
|
|
8
|
+
end
|
|
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
|
+
def generate
|
|
29
|
+
parts = ["urn", "api"]
|
|
30
|
+
parts << urn_type
|
|
31
|
+
parts << urn_number if urn_number
|
|
32
|
+
parts << urn_part if urn_part
|
|
33
|
+
parts << urn_year if urn_year
|
|
34
|
+
|
|
35
|
+
parts[1] = identifier.publisher.to_s.downcase if identifier.publisher
|
|
36
|
+
|
|
37
|
+
parts.join(":")
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
data/lib/pubid/api.rb
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "api/identifier"
|
|
4
|
+
require_relative "api/scheme"
|
|
5
|
+
|
|
6
|
+
module Pubid
|
|
7
|
+
module Api
|
|
8
|
+
def self.parse(input)
|
|
9
|
+
Identifier.parse(input)
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Register this flavor with the Pubid registry
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Register Uapi flavor with the registry
|
|
17
|
+
Pubid::Registry.register(:api, Pubid::Api)
|
|
@@ -0,0 +1,498 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ashrae
|
|
5
|
+
# Builder class for constructing ASHRAE identifier scheme from parsed data
|
|
6
|
+
# Single Responsibility: Transform parsed data into Scheme objects
|
|
7
|
+
class Builder
|
|
8
|
+
attr_reader :identifier_class
|
|
9
|
+
|
|
10
|
+
def initialize(identifier_class = Identifiers::Base)
|
|
11
|
+
@identifier_class = identifier_class
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Build a scheme object from parsed data
|
|
15
|
+
# @param parsed [Hash, Array] the parsed identifier data
|
|
16
|
+
# @return [Scheme] the constructed scheme object
|
|
17
|
+
def build(parsed)
|
|
18
|
+
# Parslet can return array of hashes - merge them
|
|
19
|
+
parsed_hash = parsed.is_a?(Array) ? merge_parsed_array(parsed) : parsed
|
|
20
|
+
|
|
21
|
+
# Check for supplement identifiers first
|
|
22
|
+
if parsed_hash[:errata_keyword]
|
|
23
|
+
return build_errata(parsed_hash)
|
|
24
|
+
elsif parsed_hash[:interpretation_identifier]
|
|
25
|
+
return build_interpretation(parsed_hash[:interpretation_identifier])
|
|
26
|
+
elsif parsed_hash[:combined_addenda]
|
|
27
|
+
return build_combined_addenda(parsed_hash[:combined_addenda])
|
|
28
|
+
elsif parsed_hash[:addenda_package]
|
|
29
|
+
return build_addenda_package(parsed_hash[:addenda_package])
|
|
30
|
+
elsif parsed_hash[:addendum_identifier]
|
|
31
|
+
return build_addendum_from_identifier(parsed_hash[:addendum_identifier])
|
|
32
|
+
elsif parsed_hash[:publisher_addendum]
|
|
33
|
+
return build_publisher_addendum(parsed_hash[:publisher_addendum])
|
|
34
|
+
elsif parsed_hash[:publisher_addendum_copublisher]
|
|
35
|
+
return build_publisher_addendum_copublisher(parsed_hash[:publisher_addendum_copublisher])
|
|
36
|
+
elsif parsed_hash[:publisher_addendum_copublisher_no_type]
|
|
37
|
+
return build_publisher_addendum_copublisher_no_type(parsed_hash[:publisher_addendum_copublisher_no_type])
|
|
38
|
+
elsif parsed_hash[:addendum_no_type]
|
|
39
|
+
return build_addendum_no_type(parsed_hash[:addendum_no_type])
|
|
40
|
+
elsif parsed_hash[:standard_addendum]
|
|
41
|
+
return build_standard_addendum(parsed_hash[:standard_addendum])
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Handle base identifier
|
|
45
|
+
if parsed_hash[:base]
|
|
46
|
+
parsed_hash = parsed_hash[:base]
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
attributes = extract_attributes(parsed_hash)
|
|
50
|
+
identifier_class = determine_identifier_class(attributes)
|
|
51
|
+
identifier_class.new(**attributes)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Class method to build an identifier from parsed data
|
|
55
|
+
# @param parsed [Hash, Array] the parsed identifier data
|
|
56
|
+
# @return [Identifiers::Base] the constructed identifier object
|
|
57
|
+
def self.build(parsed)
|
|
58
|
+
new.build(parsed)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
private
|
|
62
|
+
|
|
63
|
+
# Merge an array of parsed hashes into a single hash
|
|
64
|
+
# @param parsed_array [Array<Hash>] array of parsed hashes
|
|
65
|
+
# @return [Hash] merged hash
|
|
66
|
+
def merge_parsed_array(parsed_array)
|
|
67
|
+
parsed_array.inject({}) do |result, hash|
|
|
68
|
+
result.merge(hash)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Extract and normalize attributes from parsed data
|
|
73
|
+
# @param parsed [Hash] the parsed data
|
|
74
|
+
# @return [Hash] normalized attributes for Scheme
|
|
75
|
+
def extract_attributes(parsed)
|
|
76
|
+
attributes = {}
|
|
77
|
+
|
|
78
|
+
# Extract publisher
|
|
79
|
+
if parsed[:publisher]
|
|
80
|
+
attributes[:publisher] =
|
|
81
|
+
extract_value(parsed[:publisher])
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# Extract type - default to "Standard" if not present
|
|
85
|
+
attributes[:type] = extract_value(parsed[:type]) || "Standard"
|
|
86
|
+
|
|
87
|
+
# Extract code (from code or code_with_year format)
|
|
88
|
+
if parsed[:code_with_year]
|
|
89
|
+
# code_with_year contains both code and year
|
|
90
|
+
code_year_data = parsed[:code_with_year]
|
|
91
|
+
if code_year_data && code_year_data[:code]
|
|
92
|
+
attributes[:code] =
|
|
93
|
+
extract_value(code_year_data[:code])
|
|
94
|
+
end
|
|
95
|
+
if code_year_data && code_year_data[:year]
|
|
96
|
+
attributes[:year] =
|
|
97
|
+
extract_value(code_year_data[:year])
|
|
98
|
+
end
|
|
99
|
+
elsif parsed[:code]
|
|
100
|
+
attributes[:code] = extract_value(parsed[:code])
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# Extract year if not already extracted from code_with_year
|
|
104
|
+
attributes[:year] ||= extract_value(parsed[:year]) if parsed[:year]
|
|
105
|
+
|
|
106
|
+
# Extract suffix (R or P)
|
|
107
|
+
attributes[:suffix] = extract_value(parsed[:suffix]) if parsed[:suffix]
|
|
108
|
+
|
|
109
|
+
# Extract reaffirmed year
|
|
110
|
+
if parsed[:reaffirmed]
|
|
111
|
+
attributes[:reaffirmed] =
|
|
112
|
+
extract_value(parsed[:reaffirmed])
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Extract copublisher
|
|
116
|
+
if parsed[:copublisher]
|
|
117
|
+
attributes[:copublisher] =
|
|
118
|
+
extract_value(parsed[:copublisher])
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
attributes
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# Determine which identifier class to use based on attributes
|
|
125
|
+
def determine_identifier_class(attributes)
|
|
126
|
+
type_value = attributes[:type]
|
|
127
|
+
|
|
128
|
+
# Use type to determine class
|
|
129
|
+
if type_value == "Guideline"
|
|
130
|
+
Identifiers::Guideline
|
|
131
|
+
elsif type_value == "Standard"
|
|
132
|
+
Identifiers::Standard
|
|
133
|
+
else
|
|
134
|
+
# Default to Standard
|
|
135
|
+
Identifiers::Standard
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# Extract a simple value from parsed data
|
|
140
|
+
# @param value [Object] the value to extract
|
|
141
|
+
# @return [String, nil] the extracted string value
|
|
142
|
+
def extract_value(value)
|
|
143
|
+
return nil if value.nil?
|
|
144
|
+
return nil if value.is_a?(Array) && value.empty?
|
|
145
|
+
|
|
146
|
+
if value.is_a?(Array)
|
|
147
|
+
joined = value.join
|
|
148
|
+
return joined.length.positive? ? joined : nil
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
str_value = value.to_s.strip
|
|
152
|
+
str_value.length.positive? ? str_value : nil
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
# Build an Errata identifier from parsed errata data
|
|
156
|
+
# @param parsed [Hash] the parsed errata data
|
|
157
|
+
# @return [Identifiers::Errata] the constructed errata identifier
|
|
158
|
+
def build_errata(parsed)
|
|
159
|
+
base_attrs = extract_base_attributes(parsed)
|
|
160
|
+
base_class = determine_identifier_class(base_attrs)
|
|
161
|
+
base_identifier = base_class.new(**base_attrs)
|
|
162
|
+
|
|
163
|
+
errata_date = extract_errata_date(parsed[:errata_date])
|
|
164
|
+
|
|
165
|
+
Identifiers::Errata.new(
|
|
166
|
+
base_identifier: base_identifier,
|
|
167
|
+
errata_date: errata_date,
|
|
168
|
+
)
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
# Build an Interpretation identifier from parsed interpretation data
|
|
172
|
+
# @param parsed [Hash] the parsed interpretation data
|
|
173
|
+
# @return [Identifiers::Interpretation] the constructed interpretation identifier
|
|
174
|
+
def build_interpretation(parsed)
|
|
175
|
+
base_attrs = extract_base_attributes(parsed)
|
|
176
|
+
base_class = determine_identifier_class(base_attrs)
|
|
177
|
+
base_identifier = base_class.new(**base_attrs)
|
|
178
|
+
|
|
179
|
+
Identifiers::Interpretation.new(
|
|
180
|
+
base_identifier: base_identifier,
|
|
181
|
+
)
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
# Build an Addendum identifier from "Addendum X to Standard" format
|
|
185
|
+
# @param parsed [Hash] the parsed addendum data
|
|
186
|
+
# @return [Identifiers::Addendum] the constructed addendum identifier
|
|
187
|
+
def build_addendum_from_identifier(parsed)
|
|
188
|
+
base_attrs = extract_base_attributes(parsed)
|
|
189
|
+
base_class = determine_identifier_class(base_attrs)
|
|
190
|
+
base_identifier = base_class.new(**base_attrs)
|
|
191
|
+
|
|
192
|
+
addendum_code = extract_value(parsed[:addendum_code])
|
|
193
|
+
addendum_date = extract_addendum_date(parsed[:addendum_year])
|
|
194
|
+
|
|
195
|
+
Identifiers::Addendum.new(
|
|
196
|
+
base_identifier: base_identifier,
|
|
197
|
+
addendum_code: addendum_code,
|
|
198
|
+
addendum_date: addendum_date,
|
|
199
|
+
)
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
# Build an Addendum identifier from "ASHRAE Addendum X to Standard" format
|
|
203
|
+
# @param parsed [Hash] the parsed publisher addendum data
|
|
204
|
+
# @return [Identifiers::Addendum] the constructed addendum identifier
|
|
205
|
+
def build_publisher_addendum(parsed)
|
|
206
|
+
base_attrs = {
|
|
207
|
+
type: extract_value(parsed[:type]),
|
|
208
|
+
code: extract_value(parsed[:code]),
|
|
209
|
+
year: extract_value(parsed[:year]),
|
|
210
|
+
}
|
|
211
|
+
base_class = determine_identifier_class(base_attrs)
|
|
212
|
+
base_identifier = base_class.new(**base_attrs)
|
|
213
|
+
|
|
214
|
+
addendum_code = extract_value(parsed[:addendum_code])
|
|
215
|
+
addendum_date = extract_addendum_date(parsed[:addendum_year])
|
|
216
|
+
|
|
217
|
+
Identifiers::Addendum.new(
|
|
218
|
+
base_identifier: base_identifier,
|
|
219
|
+
addendum_code: addendum_code,
|
|
220
|
+
addendum_date: addendum_date,
|
|
221
|
+
)
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
# Build an Addendum identifier from "ASHRAE Addendum X to ANSI/ASHRAE Standard Y-YYYY" format
|
|
225
|
+
# @param parsed [Hash] the parsed publisher addendum with copublisher data
|
|
226
|
+
# @return [Identifiers::Addendum] the constructed addendum identifier
|
|
227
|
+
def build_publisher_addendum_copublisher(parsed)
|
|
228
|
+
base_attrs = {
|
|
229
|
+
copublisher: extract_value(parsed[:copublisher]),
|
|
230
|
+
type: extract_value(parsed[:type]) || "Standard",
|
|
231
|
+
code: extract_value(parsed[:code]),
|
|
232
|
+
year: extract_value(parsed[:year]),
|
|
233
|
+
}
|
|
234
|
+
base_class = determine_identifier_class(base_attrs)
|
|
235
|
+
base_identifier = base_class.new(**base_attrs)
|
|
236
|
+
|
|
237
|
+
addendum_code = extract_value(parsed[:addendum_code])
|
|
238
|
+
addendum_date = extract_addendum_date(parsed[:addendum_year])
|
|
239
|
+
|
|
240
|
+
Identifiers::Addendum.new(
|
|
241
|
+
base_identifier: base_identifier,
|
|
242
|
+
addendum_code: addendum_code,
|
|
243
|
+
addendum_date: addendum_date,
|
|
244
|
+
)
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
# Build an Addendum identifier from "ANSI/ASHRAE Addendum X to ANSI/ASHRAE 34-2024" (no type) format
|
|
248
|
+
# @param parsed [Hash] the parsed addendum data with code_with_year
|
|
249
|
+
# @return [Identifiers::Addendum] the constructed addendum identifier
|
|
250
|
+
def build_addendum_no_type(parsed)
|
|
251
|
+
# Extract copublisher and code_with_year data
|
|
252
|
+
base_attrs = {}
|
|
253
|
+
if parsed[:copublisher]
|
|
254
|
+
base_attrs[:copublisher] =
|
|
255
|
+
extract_value(parsed[:copublisher])
|
|
256
|
+
end
|
|
257
|
+
base_attrs[:type] = "Standard" # Default to Standard when type is missing
|
|
258
|
+
|
|
259
|
+
# Extract code and year from code_with_year
|
|
260
|
+
if parsed[:code_with_year]
|
|
261
|
+
code_year_data = parsed[:code_with_year]
|
|
262
|
+
if code_year_data && code_year_data[:code]
|
|
263
|
+
base_attrs[:code] =
|
|
264
|
+
extract_value(code_year_data[:code])
|
|
265
|
+
end
|
|
266
|
+
if code_year_data && code_year_data[:year]
|
|
267
|
+
base_attrs[:year] =
|
|
268
|
+
extract_value(code_year_data[:year])
|
|
269
|
+
end
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
base_class = determine_identifier_class(base_attrs)
|
|
273
|
+
base_identifier = base_class.new(**base_attrs)
|
|
274
|
+
|
|
275
|
+
addendum_code = extract_value(parsed[:addendum_code])
|
|
276
|
+
addendum_date = extract_addendum_date(parsed[:addendum_year])
|
|
277
|
+
|
|
278
|
+
Identifiers::Addendum.new(
|
|
279
|
+
base_identifier: base_identifier,
|
|
280
|
+
addendum_code: addendum_code,
|
|
281
|
+
addendum_date: addendum_date,
|
|
282
|
+
)
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
# Build an Addendum identifier from "ASHRAE Addendum X to ANSI/ASHRAE 62.1-2022" (publisher + copublisher, no type) format
|
|
286
|
+
# @param parsed [Hash] the parsed publisher addendum with copublisher and code_with_year data
|
|
287
|
+
# @return [Identifiers::Addendum] the constructed addendum identifier
|
|
288
|
+
def build_publisher_addendum_copublisher_no_type(parsed)
|
|
289
|
+
# Extract copublisher and code_with_year data
|
|
290
|
+
base_attrs = {}
|
|
291
|
+
if parsed[:copublisher]
|
|
292
|
+
base_attrs[:copublisher] =
|
|
293
|
+
extract_value(parsed[:copublisher])
|
|
294
|
+
end
|
|
295
|
+
base_attrs[:type] = "Standard" # Default to Standard when type is missing
|
|
296
|
+
|
|
297
|
+
# Extract code and year from code_with_year
|
|
298
|
+
if parsed[:code_with_year]
|
|
299
|
+
code_year_data = parsed[:code_with_year]
|
|
300
|
+
if code_year_data && code_year_data[:code]
|
|
301
|
+
base_attrs[:code] =
|
|
302
|
+
extract_value(code_year_data[:code])
|
|
303
|
+
end
|
|
304
|
+
if code_year_data && code_year_data[:year]
|
|
305
|
+
base_attrs[:year] =
|
|
306
|
+
extract_value(code_year_data[:year])
|
|
307
|
+
end
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
base_class = determine_identifier_class(base_attrs)
|
|
311
|
+
base_identifier = base_class.new(**base_attrs)
|
|
312
|
+
|
|
313
|
+
addendum_code = extract_value(parsed[:addendum_code])
|
|
314
|
+
addendum_date = extract_addendum_date(parsed[:addendum_year])
|
|
315
|
+
|
|
316
|
+
Identifiers::Addendum.new(
|
|
317
|
+
base_identifier: base_identifier,
|
|
318
|
+
addendum_code: addendum_code,
|
|
319
|
+
addendum_date: addendum_date,
|
|
320
|
+
)
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
# Build an Addendum identifier from "Standard X Addendum a" format
|
|
324
|
+
# @param parsed [Hash] the parsed standard addendum data
|
|
325
|
+
# @return [Identifiers::Addendum] the constructed addendum identifier
|
|
326
|
+
def build_standard_addendum(parsed)
|
|
327
|
+
base_attrs = extract_base_attributes(parsed)
|
|
328
|
+
base_class = determine_identifier_class(base_attrs)
|
|
329
|
+
base_identifier = base_class.new(**base_attrs)
|
|
330
|
+
|
|
331
|
+
addendum_code = extract_value(parsed[:addendum_code])
|
|
332
|
+
addendum_date = extract_addendum_date(parsed[:addendum_year])
|
|
333
|
+
|
|
334
|
+
Identifiers::Addendum.new(
|
|
335
|
+
base_identifier: base_identifier,
|
|
336
|
+
addendum_code: addendum_code,
|
|
337
|
+
addendum_date: addendum_date,
|
|
338
|
+
)
|
|
339
|
+
end
|
|
340
|
+
|
|
341
|
+
# Build a CombinedAddenda identifier from "ASHRAE Addenda X and Y to Standard Z-YYYY" format
|
|
342
|
+
# @param parsed [Hash] the parsed combined addenda data
|
|
343
|
+
# @return [Identifiers::CombinedAddenda] the constructed combined addenda identifier
|
|
344
|
+
def build_combined_addenda(parsed)
|
|
345
|
+
# Extract base identifier attributes
|
|
346
|
+
# Handle code_with_year format (used in Formats 5 and 6)
|
|
347
|
+
base_attrs = {}
|
|
348
|
+
|
|
349
|
+
if parsed[:code_with_year]
|
|
350
|
+
code_year_data = parsed[:code_with_year]
|
|
351
|
+
if code_year_data && code_year_data[:code]
|
|
352
|
+
base_attrs[:code] =
|
|
353
|
+
extract_value(code_year_data[:code])
|
|
354
|
+
end
|
|
355
|
+
if code_year_data && code_year_data[:year]
|
|
356
|
+
base_attrs[:year] =
|
|
357
|
+
extract_value(code_year_data[:year])
|
|
358
|
+
end
|
|
359
|
+
else
|
|
360
|
+
base_attrs[:type] = extract_value(parsed[:type]) || "Standard"
|
|
361
|
+
base_attrs[:code] = extract_value(parsed[:code])
|
|
362
|
+
base_attrs[:year] = extract_value(parsed[:year])
|
|
363
|
+
end
|
|
364
|
+
|
|
365
|
+
if parsed[:copublisher]
|
|
366
|
+
base_attrs[:copublisher] =
|
|
367
|
+
extract_value(parsed[:copublisher])
|
|
368
|
+
end
|
|
369
|
+
if parsed[:publisher]
|
|
370
|
+
base_attrs[:publisher] =
|
|
371
|
+
extract_value(parsed[:publisher])
|
|
372
|
+
end
|
|
373
|
+
|
|
374
|
+
base_class = determine_identifier_class(base_attrs)
|
|
375
|
+
base_identifier = base_class.new(**base_attrs)
|
|
376
|
+
|
|
377
|
+
# Build the addendum_codes string from first code and additional codes
|
|
378
|
+
first_code = extract_value(parsed[:addendum_code])
|
|
379
|
+
additional_codes = parsed[:additional_codes]
|
|
380
|
+
|
|
381
|
+
# Handle Format 4: "ASHRAE Addenda to Standard" (no specific codes)
|
|
382
|
+
if first_code.nil? && additional_codes.nil?
|
|
383
|
+
# No codes specified - return nil or empty string for addendum_codes
|
|
384
|
+
addendum_codes_str = nil
|
|
385
|
+
else
|
|
386
|
+
addendum_codes_str = first_code || ""
|
|
387
|
+
if additional_codes
|
|
388
|
+
# additional_codes is an array that can contain:
|
|
389
|
+
# - hashes: {:addendum_code=>"f"}
|
|
390
|
+
# - strings: "a", "b", etc.
|
|
391
|
+
# We need to format them as comma-separated
|
|
392
|
+
code_list = []
|
|
393
|
+
additional_codes.each do |code|
|
|
394
|
+
code_str = if code.is_a?(Hash)
|
|
395
|
+
# Extract from {:addendum_code=>"f"}
|
|
396
|
+
extract_value(code[:addendum_code])
|
|
397
|
+
else
|
|
398
|
+
# Direct string value
|
|
399
|
+
extract_value(code)
|
|
400
|
+
end
|
|
401
|
+
code_list << code_str if code_str && code_str != "and"
|
|
402
|
+
end
|
|
403
|
+
# Join with commas
|
|
404
|
+
addendum_codes_str += ", #{code_list.join(', ')}" unless code_list.empty?
|
|
405
|
+
end
|
|
406
|
+
end
|
|
407
|
+
|
|
408
|
+
Identifiers::CombinedAddenda.new(
|
|
409
|
+
base_identifier: base_identifier,
|
|
410
|
+
addendum_codes: addendum_codes_str,
|
|
411
|
+
)
|
|
412
|
+
end
|
|
413
|
+
|
|
414
|
+
# Build an AddendaPackage identifier from "ASHRAE Standard X-YYYY: Addenda Supplement Package" format
|
|
415
|
+
# @param parsed [Hash] the parsed addenda package data
|
|
416
|
+
# @return [Identifiers::AddendaPackage] the constructed addenda package identifier
|
|
417
|
+
def build_addenda_package(parsed)
|
|
418
|
+
base_attrs = extract_base_attributes(parsed)
|
|
419
|
+
base_class = determine_identifier_class(base_attrs)
|
|
420
|
+
base_identifier = base_class.new(**base_attrs)
|
|
421
|
+
|
|
422
|
+
package_description = extract_value(parsed[:package_description])
|
|
423
|
+
|
|
424
|
+
Identifiers::AddendaPackage.new(
|
|
425
|
+
base_identifier: base_identifier,
|
|
426
|
+
package_description: package_description,
|
|
427
|
+
)
|
|
428
|
+
end
|
|
429
|
+
|
|
430
|
+
# Extract base identifier attributes from parsed data
|
|
431
|
+
# @param parsed [Hash] the parsed data
|
|
432
|
+
# @return [Hash] attributes for base identifier
|
|
433
|
+
def extract_base_attributes(parsed)
|
|
434
|
+
attributes = {}
|
|
435
|
+
|
|
436
|
+
if parsed[:publisher]
|
|
437
|
+
attributes[:publisher] =
|
|
438
|
+
extract_value(parsed[:publisher])
|
|
439
|
+
end
|
|
440
|
+
if parsed[:copublisher]
|
|
441
|
+
attributes[:copublisher] =
|
|
442
|
+
extract_value(parsed[:copublisher])
|
|
443
|
+
end
|
|
444
|
+
# Default to "Standard" if type is not present
|
|
445
|
+
attributes[:type] = extract_value(parsed[:type]) || "Standard"
|
|
446
|
+
|
|
447
|
+
# Handle code_with_year format
|
|
448
|
+
if parsed[:code_with_year]
|
|
449
|
+
code_year_data = parsed[:code_with_year]
|
|
450
|
+
if code_year_data && code_year_data[:code]
|
|
451
|
+
attributes[:code] =
|
|
452
|
+
extract_value(code_year_data[:code])
|
|
453
|
+
end
|
|
454
|
+
if code_year_data && code_year_data[:year]
|
|
455
|
+
attributes[:year] =
|
|
456
|
+
extract_value(code_year_data[:year])
|
|
457
|
+
end
|
|
458
|
+
else
|
|
459
|
+
attributes[:code] = extract_value(parsed[:code]) if parsed[:code]
|
|
460
|
+
attributes[:year] = extract_value(parsed[:year]) if parsed[:year]
|
|
461
|
+
end
|
|
462
|
+
|
|
463
|
+
attributes[:suffix] = extract_value(parsed[:suffix]) if parsed[:suffix]
|
|
464
|
+
if parsed[:reaffirmed]
|
|
465
|
+
attributes[:reaffirmed] =
|
|
466
|
+
extract_value(parsed[:reaffirmed])
|
|
467
|
+
end
|
|
468
|
+
|
|
469
|
+
attributes
|
|
470
|
+
end
|
|
471
|
+
|
|
472
|
+
# Extract errata date from parsed errata_date data
|
|
473
|
+
# @param errata_date [Hash] the parsed errata_date hash
|
|
474
|
+
# @return [String, nil] the formatted errata date string
|
|
475
|
+
def extract_errata_date(errata_date)
|
|
476
|
+
return nil unless errata_date
|
|
477
|
+
|
|
478
|
+
# errata_date contains { month_name: "...", errata_year: "..." }
|
|
479
|
+
# We need to format this as "Month Day, Year"
|
|
480
|
+
extract_value(errata_date[:month_name])
|
|
481
|
+
extract_value(errata_date[:errata_year])
|
|
482
|
+
# Note: day is captured as digit.repeat(1,2) but not named in the parser
|
|
483
|
+
# We'll need to reconstruct from the raw string or enhance parser
|
|
484
|
+
nil # For now, return nil - parser enhancement needed
|
|
485
|
+
end
|
|
486
|
+
|
|
487
|
+
# Extract addendum date from parsed addendum_year data
|
|
488
|
+
# @param addendum_year [String, Hash] the parsed addendum year data
|
|
489
|
+
# @return [String, nil] the formatted addendum date string
|
|
490
|
+
def extract_addendum_date(addendum_year)
|
|
491
|
+
return nil unless addendum_year
|
|
492
|
+
|
|
493
|
+
# Date extraction would require more detailed parser
|
|
494
|
+
nil
|
|
495
|
+
end
|
|
496
|
+
end
|
|
497
|
+
end
|
|
498
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ashrae
|
|
5
|
+
module Identifier
|
|
6
|
+
# Parse an ASHRAE identifier string into an identifier object
|
|
7
|
+
# @param identifier [String] The ASHRAE identifier string to parse
|
|
8
|
+
# @return [Identifiers::Base] The appropriate identifier object
|
|
9
|
+
# @raise [Parslet::ParseFailed] If parsing fails
|
|
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
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "lutaml/model"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Ashrae
|
|
7
|
+
module Identifiers
|
|
8
|
+
# AddendaPackage identifier for ASHRAE addenda collection packages
|
|
9
|
+
# Represents packages that contain multiple addendums
|
|
10
|
+
# Examples:
|
|
11
|
+
# - ASHRAE Standard 52.2-1999: Addenda Supplement Package (Contains Addendum a)
|
|
12
|
+
# - ASHRAE Standard 52.2-2007 Addenda Supplement Package (Contains Addendum b)
|
|
13
|
+
# - ASHRAE Standard 62.2-2004: Addenda Supplement Package (Contains Addendum g) (PDF)
|
|
14
|
+
class AddendaPackage < SupplementIdentifier
|
|
15
|
+
attribute :package_description, :string # e.g., "Addenda Supplement Package"
|
|
16
|
+
|
|
17
|
+
TYPED_STAGES = [
|
|
18
|
+
Components::TypedStage.new(
|
|
19
|
+
abbr: ["Addenda Supplement Package", "Addenda Package"],
|
|
20
|
+
type_code: "addenda_package",
|
|
21
|
+
stage_code: "published",
|
|
22
|
+
),
|
|
23
|
+
].freeze
|
|
24
|
+
|
|
25
|
+
def self.type
|
|
26
|
+
{ key: :addenda_package, title: "ASHRAE Addenda Package",
|
|
27
|
+
short: "Addenda Package" }
|
|
28
|
+
end
|
|
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
|
+
def copublisher
|
|
41
|
+
base_identifier&.copublisher
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "lutaml/model"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Ashrae
|
|
7
|
+
module Identifiers
|
|
8
|
+
# Addendum identifier for ASHRAE standards and guidelines
|
|
9
|
+
# Examples:
|
|
10
|
+
# - ASHRAE Addendum a to Standard 15-2001
|
|
11
|
+
# - ASHRAE Addendum a to Guideline 1.4-2019
|
|
12
|
+
# - ANSI/ASHRAE Addendum a to ANSI/ASHRAE Standard 15-2019
|
|
13
|
+
# - ASHRAE Standard 15-2013 Addendum a
|
|
14
|
+
class Addendum < SupplementIdentifier
|
|
15
|
+
attribute :addendum_code, :string # a, b, c, ..., aa, ab, ..., ba, etc.
|
|
16
|
+
attribute :addendum_date, :string # Optional date (January 22, 2019)
|
|
17
|
+
|
|
18
|
+
TYPED_STAGES = [
|
|
19
|
+
Components::TypedStage.new(
|
|
20
|
+
abbr: ["Addendum", "Addenda"],
|
|
21
|
+
type_code: "addendum",
|
|
22
|
+
stage_code: "published",
|
|
23
|
+
),
|
|
24
|
+
].freeze
|
|
25
|
+
|
|
26
|
+
def self.type
|
|
27
|
+
{ key: :addendum, title: "ASHRAE Addendum", short: "Addendum" }
|
|
28
|
+
end
|
|
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
|
+
def copublisher
|
|
50
|
+
base_identifier&.copublisher
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ashrae
|
|
5
|
+
module Identifiers
|
|
6
|
+
# Base class for all ASHRAE identifiers
|
|
7
|
+
class Base < Pubid::Identifier
|
|
8
|
+
attribute :publisher, :string, default: "ASHRAE"
|
|
9
|
+
attribute :code, :string
|
|
10
|
+
attribute :year, :string
|
|
11
|
+
attribute :type, :string
|
|
12
|
+
attribute :suffix, :string # R (revision), P (proposed), etc.
|
|
13
|
+
attribute :amendment, :string
|
|
14
|
+
attribute :reaffirmed, :string
|
|
15
|
+
attribute :copublisher, :string
|
|
16
|
+
|
|
17
|
+
def self.parse(string)
|
|
18
|
+
Ashrae::Identifier.parse(string)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|