relaton 2.2.0.pre.alpha.1 → 3.0.0.pre.alpha.2
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/{docs/README.adoc → README.adoc} +165 -38
- data/bin/console +0 -1
- data/lib/relaton/3gpp/bibdata.rb +9 -0
- data/lib/relaton/3gpp/bibitem.rb +9 -0
- data/lib/relaton/3gpp/bibliography.rb +123 -0
- data/lib/relaton/3gpp/data_fetcher.rb +303 -0
- data/lib/relaton/3gpp/docidentifier.rb +114 -0
- data/lib/relaton/3gpp/doctype.rb +9 -0
- data/lib/relaton/3gpp/ext.rb +31 -0
- data/lib/relaton/3gpp/item.rb +18 -0
- data/lib/relaton/3gpp/item_data.rb +15 -0
- data/lib/relaton/3gpp/parser.rb +400 -0
- data/lib/relaton/3gpp/processor.rb +71 -0
- data/lib/relaton/3gpp/release.rb +34 -0
- data/lib/relaton/3gpp/util.rb +8 -0
- data/lib/relaton/3gpp.rb +29 -0
- data/lib/relaton/adobe/bibdata.rb +8 -0
- data/lib/relaton/adobe/bibitem.rb +8 -0
- data/lib/relaton/adobe/bibliography.rb +92 -0
- data/lib/relaton/adobe/docidentifier.rb +49 -0
- data/lib/relaton/adobe/doctype.rb +14 -0
- data/lib/relaton/adobe/ext.rb +32 -0
- data/lib/relaton/adobe/item.rb +15 -0
- data/lib/relaton/adobe/item_base.rb +18 -0
- data/lib/relaton/adobe/item_data.rb +6 -0
- data/lib/relaton/adobe/processor.rb +45 -0
- data/lib/relaton/adobe/util.rb +8 -0
- data/lib/relaton/adobe.rb +37 -0
- data/lib/relaton/bib/converter/asciibib/to_asciibib.rb +663 -0
- data/lib/relaton/bib/converter/asciibib.rb +13 -0
- data/lib/relaton/bib/converter/bibtex/from_bibtex.rb +245 -0
- data/lib/relaton/bib/converter/bibtex/to_bibtex.rb +341 -0
- data/lib/relaton/bib/converter/bibtex.rb +23 -0
- data/lib/relaton/bib/converter/bibxml/from_rfcxml.rb +386 -0
- data/lib/relaton/bib/converter/bibxml/from_rfcxml_referencegroup.rb +71 -0
- data/lib/relaton/bib/converter/bibxml/to_rfcxml.rb +308 -0
- data/lib/relaton/bib/converter/bibxml/to_rfcxml_referencegroup.rb +52 -0
- data/lib/relaton/bib/converter/bibxml.rb +51 -0
- data/lib/relaton/bib/hash_parser_v1.rb +767 -0
- data/lib/relaton/bib/item_data.rb +229 -0
- data/lib/relaton/bib/model/abstract.rb +16 -0
- data/lib/relaton/bib/model/address.rb +22 -0
- data/lib/relaton/bib/model/affiliation.rb +16 -0
- data/lib/relaton/bib/model/bibdata.rb +11 -0
- data/lib/relaton/bib/model/bibdata_shared.rb +12 -0
- data/lib/relaton/bib/model/bibitem.rb +11 -0
- data/lib/relaton/bib/model/bibitem_shared.rb +12 -0
- data/lib/relaton/bib/model/contact.rb +18 -0
- data/lib/relaton/bib/model/contribution_info.rb +15 -0
- data/lib/relaton/bib/model/contributor.rb +29 -0
- data/lib/relaton/bib/model/copyright.rb +27 -0
- data/lib/relaton/bib/model/date.rb +31 -0
- data/lib/relaton/bib/model/depiction.rb +16 -0
- data/lib/relaton/bib/model/docidentifier.rb +49 -0
- data/lib/relaton/bib/model/doctype.rb +14 -0
- data/lib/relaton/bib/model/edition.rb +14 -0
- data/lib/relaton/bib/model/ext.rb +39 -0
- data/lib/relaton/bib/model/extent.rb +16 -0
- data/lib/relaton/bib/model/formattedref.rb +43 -0
- data/lib/relaton/bib/model/full_name_type.rb +64 -0
- data/lib/relaton/bib/model/fullname.rb +11 -0
- data/lib/relaton/bib/model/ics.rb +49 -0
- data/lib/relaton/bib/model/image.rb +28 -0
- data/lib/relaton/bib/model/item.rb +96 -0
- data/lib/relaton/bib/model/item_base.rb +20 -0
- data/lib/relaton/bib/model/item_shared.rb +88 -0
- data/lib/relaton/bib/model/keyword.rb +30 -0
- data/lib/relaton/bib/model/locality.rb +18 -0
- data/lib/relaton/bib/model/locality_stack.rb +14 -0
- data/lib/relaton/bib/model/localized_string.rb +48 -0
- data/lib/relaton/bib/model/localized_string_attrs.rb +24 -0
- data/lib/relaton/bib/model/logo.rb +14 -0
- data/lib/relaton/bib/model/medium.rb +22 -0
- data/lib/relaton/bib/model/note.rb +16 -0
- data/lib/relaton/bib/model/organization.rb +13 -0
- data/lib/relaton/bib/model/organization_type.rb +42 -0
- data/lib/relaton/bib/model/person.rb +36 -0
- data/lib/relaton/bib/model/phone.rb +14 -0
- data/lib/relaton/bib/model/place.rb +33 -0
- data/lib/relaton/bib/model/price.rb +14 -0
- data/lib/relaton/bib/model/relation.rb +43 -0
- data/lib/relaton/bib/model/series.rb +34 -0
- data/lib/relaton/bib/model/size.rb +23 -0
- data/lib/relaton/bib/model/source_locality_stack.rb +14 -0
- data/lib/relaton/bib/model/status.rb +27 -0
- data/lib/relaton/bib/model/structured_identifier.rb +49 -0
- data/lib/relaton/bib/model/subdivision.rb +16 -0
- data/lib/relaton/bib/model/title.rb +56 -0
- data/lib/relaton/bib/model/type/plain_date.rb +16 -0
- data/lib/relaton/bib/model/type/string_date.rb +48 -0
- data/lib/relaton/bib/model/uri.rb +18 -0
- data/lib/relaton/bib/model/validity.rb +16 -0
- data/lib/relaton/bib/model/version.rb +43 -0
- data/lib/relaton/bib/namespace_helper.rb +21 -0
- data/lib/relaton/bib/sanitizer.rb +264 -0
- data/lib/relaton/bib/util.rb +18 -0
- data/lib/relaton/bib/versions.json +35 -0
- data/lib/relaton/bib.rb +46 -0
- data/lib/relaton/bipm/bibliography.rb +231 -0
- data/lib/relaton/bipm/converter/asciibib.rb +64 -0
- data/lib/relaton/bipm/data_fetcher.rb +81 -0
- data/lib/relaton/bipm/data_outcomes_parser.rb +656 -0
- data/lib/relaton/bipm/id_parser.rb +278 -0
- data/lib/relaton/bipm/item_data.rb +47 -0
- data/lib/relaton/bipm/model/bibdata.rb +9 -0
- data/lib/relaton/bipm/model/bibitem.rb +9 -0
- data/lib/relaton/bipm/model/comment_period.rb +13 -0
- data/lib/relaton/bipm/model/doctype.rb +12 -0
- data/lib/relaton/bipm/model/ext.rb +38 -0
- data/lib/relaton/bipm/model/item.rb +11 -0
- data/lib/relaton/bipm/model/structured_identifier.rb +36 -0
- data/lib/relaton/bipm/processor.rb +69 -0
- data/lib/relaton/bipm/rawdata_bipm_metrologia/affiliations.rb +111 -0
- data/lib/relaton/bipm/rawdata_bipm_metrologia/fetcher.rb +172 -0
- data/lib/relaton/bipm/rawdata_bipm_metrologia/niso_jats_parser.rb +353 -0
- data/lib/relaton/bipm/si_brochure_parser.rb +188 -0
- data/lib/relaton/bipm/util.rb +8 -0
- data/lib/relaton/bipm.rb +38 -0
- data/lib/relaton/bsi/bibliography.rb +196 -0
- data/lib/relaton/bsi/hit.rb +28 -0
- data/lib/relaton/bsi/hit_collection.rb +113 -0
- data/lib/relaton/bsi/item_data.rb +13 -0
- data/lib/relaton/bsi/model/bibdata.rb +8 -0
- data/lib/relaton/bsi/model/bibitem.rb +8 -0
- data/lib/relaton/bsi/model/docidentifier.rb +107 -0
- data/lib/relaton/bsi/model/doctype.rb +14 -0
- data/lib/relaton/bsi/model/ext.rb +17 -0
- data/lib/relaton/bsi/model/item.rb +17 -0
- data/lib/relaton/bsi/model/item_base.rb +22 -0
- data/lib/relaton/bsi/model/relation.rb +9 -0
- data/lib/relaton/bsi/processor.rb +43 -0
- data/lib/relaton/bsi/schema.json +24882 -0
- data/lib/relaton/bsi/scraper.rb +288 -0
- data/lib/relaton/bsi/util.rb +8 -0
- data/lib/relaton/bsi.rb +25 -0
- data/lib/relaton/calconnect/bibliography.rb +93 -0
- data/lib/relaton/calconnect/data_fetcher.rb +174 -0
- data/lib/relaton/calconnect/docidentifier.rb +80 -0
- data/lib/relaton/calconnect/hit.rb +14 -0
- data/lib/relaton/calconnect/hit_collection.rb +92 -0
- data/lib/relaton/calconnect/item_data.rb +12 -0
- data/lib/relaton/calconnect/model/bibdata.rb +8 -0
- data/lib/relaton/calconnect/model/bibitem.rb +8 -0
- data/lib/relaton/calconnect/model/doctype.rb +11 -0
- data/lib/relaton/calconnect/model/ext.rb +11 -0
- data/lib/relaton/calconnect/model/item.rb +20 -0
- data/lib/relaton/calconnect/processor.rb +72 -0
- data/lib/relaton/calconnect/scraper.rb +87 -0
- data/lib/relaton/calconnect/util.rb +8 -0
- data/lib/relaton/calconnect.rb +36 -0
- data/lib/relaton/ccsds/bibliography.rb +63 -0
- data/lib/relaton/ccsds/data/fetcher.rb +252 -0
- data/lib/relaton/ccsds/data/iso_references.rb +30 -0
- data/lib/relaton/ccsds/data/parser.rb +194 -0
- data/lib/relaton/ccsds/hit.rb +24 -0
- data/lib/relaton/ccsds/hit_collection.rb +47 -0
- data/lib/relaton/ccsds/item_data.rb +9 -0
- data/lib/relaton/ccsds/model/bibdata.rb +8 -0
- data/lib/relaton/ccsds/model/bibitem.rb +8 -0
- data/lib/relaton/ccsds/model/docidentifier.rb +121 -0
- data/lib/relaton/ccsds/model/doctype.rb +9 -0
- data/lib/relaton/ccsds/model/ext.rb +19 -0
- data/lib/relaton/ccsds/model/item.rb +15 -0
- data/lib/relaton/ccsds/processor.rb +68 -0
- data/lib/relaton/ccsds/util.rb +10 -0
- data/lib/relaton/ccsds.rb +33 -0
- data/lib/relaton/cen/bibliography.rb +149 -0
- data/lib/relaton/cen/committees.yaml +66 -0
- data/lib/relaton/cen/hit.rb +31 -0
- data/lib/relaton/cen/hit_collection.rb +116 -0
- data/lib/relaton/cen/item_data.rb +7 -0
- data/lib/relaton/cen/model/bibdata.rb +8 -0
- data/lib/relaton/cen/model/bibitem.rb +8 -0
- data/lib/relaton/cen/model/docidentifier.rb +100 -0
- data/lib/relaton/cen/model/ext.rb +11 -0
- data/lib/relaton/cen/model/item.rb +14 -0
- data/lib/relaton/cen/model/structured_identifier.rb +9 -0
- data/lib/relaton/cen/processor.rb +45 -0
- data/lib/relaton/cen/scraper.rb +218 -0
- data/lib/relaton/cen/util.rb +8 -0
- data/lib/relaton/cen.rb +30 -0
- data/lib/relaton/cie/bibdata.rb +8 -0
- data/lib/relaton/cie/bibitem.rb +8 -0
- data/lib/relaton/cie/bibliography.rb +31 -0
- data/lib/relaton/cie/data_fetcher.rb +540 -0
- data/lib/relaton/cie/ext.rb +7 -0
- data/lib/relaton/cie/item.rb +11 -0
- data/lib/relaton/cie/item_data.rb +6 -0
- data/lib/relaton/cie/processor.rb +68 -0
- data/lib/relaton/cie/scrapper.rb +52 -0
- data/lib/relaton/cie/util.rb +8 -0
- data/lib/relaton/cie.rb +29 -0
- data/lib/relaton/core/array_wrapper.rb +20 -0
- data/lib/relaton/core/data_fetcher.rb +244 -0
- data/lib/relaton/core/date_parser.rb +42 -0
- data/lib/relaton/core/governor.rb +320 -0
- data/lib/relaton/core/hash_keys_sybolizer.rb +19 -0
- data/lib/relaton/core/hit.rb +49 -0
- data/lib/relaton/core/hit_collection.rb +118 -0
- data/lib/relaton/core/pacer.rb +134 -0
- data/lib/relaton/core/processor.rb +67 -0
- data/lib/relaton/core/request_error.rb +14 -0
- data/lib/relaton/core/workers_pool.rb +45 -0
- data/lib/relaton/core.rb +12 -0
- data/lib/relaton/db/registry.rb +44 -4
- data/lib/relaton/db.rb +0 -1
- data/lib/relaton/doi/crossref.rb +89 -0
- data/lib/relaton/doi/parser.rb +921 -0
- data/lib/relaton/doi/processor.rb +65 -0
- data/lib/relaton/doi/util.rb +8 -0
- data/lib/relaton/doi.rb +20 -0
- data/lib/relaton/easc/bibdata.rb +8 -0
- data/lib/relaton/easc/bibitem.rb +8 -0
- data/lib/relaton/easc/bibliography.rb +95 -0
- data/lib/relaton/easc/docidentifier.rb +100 -0
- data/lib/relaton/easc/doctype.rb +14 -0
- data/lib/relaton/easc/ext.rb +44 -0
- data/lib/relaton/easc/item.rb +13 -0
- data/lib/relaton/easc/item_base.rb +18 -0
- data/lib/relaton/easc/item_data.rb +6 -0
- data/lib/relaton/easc/processor.rb +46 -0
- data/lib/relaton/easc/util.rb +8 -0
- data/lib/relaton/easc.rb +35 -0
- data/lib/relaton/ecma/bibdata.rb +8 -0
- data/lib/relaton/ecma/bibitem.rb +8 -0
- data/lib/relaton/ecma/bibliography.rb +149 -0
- data/lib/relaton/ecma/data_fetcher.rb +162 -0
- data/lib/relaton/ecma/data_parser.rb +49 -0
- data/lib/relaton/ecma/docidentifier.rb +124 -0
- data/lib/relaton/ecma/edition_parser.rb +80 -0
- data/lib/relaton/ecma/ext.rb +7 -0
- data/lib/relaton/ecma/item.rb +13 -0
- data/lib/relaton/ecma/item_data.rb +6 -0
- data/lib/relaton/ecma/memento_parser.rb +60 -0
- data/lib/relaton/ecma/page_fetcher.rb +39 -0
- data/lib/relaton/ecma/parser_common.rb +33 -0
- data/lib/relaton/ecma/processor.rb +69 -0
- data/lib/relaton/ecma/standard_parser.rb +134 -0
- data/lib/relaton/ecma/util.rb +8 -0
- data/lib/relaton/ecma.rb +33 -0
- data/lib/relaton/etsi/bibdata.rb +10 -0
- data/lib/relaton/etsi/bibitem.rb +10 -0
- data/lib/relaton/etsi/bibliography.rb +111 -0
- data/lib/relaton/etsi/data_fetcher.rb +167 -0
- data/lib/relaton/etsi/data_parser.rb +208 -0
- data/lib/relaton/etsi/doctype.rb +30 -0
- data/lib/relaton/etsi/ext.rb +31 -0
- data/lib/relaton/etsi/item.rb +15 -0
- data/lib/relaton/etsi/item_data.rb +6 -0
- data/lib/relaton/etsi/processor.rb +71 -0
- data/lib/relaton/etsi/pubid.rb +37 -0
- data/lib/relaton/etsi/status.rb +13 -0
- data/lib/relaton/etsi/util.rb +8 -0
- data/lib/relaton/etsi.rb +26 -0
- data/lib/relaton/gb/bibdata.rb +8 -0
- data/lib/relaton/gb/bibitem.rb +8 -0
- data/lib/relaton/gb/bibliography.rb +171 -0
- data/lib/relaton/gb/ccs.rb +14 -0
- data/lib/relaton/gb/committee.rb +13 -0
- data/lib/relaton/gb/docidentifier.rb +72 -0
- data/lib/relaton/gb/doctype.rb +9 -0
- data/lib/relaton/gb/ext.rb +36 -0
- data/lib/relaton/gb/gb_scraper.rb +61 -0
- data/lib/relaton/gb/gb_type.rb +20 -0
- data/lib/relaton/gb/hit.rb +48 -0
- data/lib/relaton/gb/hit_collection.rb +19 -0
- data/lib/relaton/gb/item.rb +13 -0
- data/lib/relaton/gb/item_data.rb +6 -0
- data/lib/relaton/gb/processor.rb +49 -0
- data/lib/relaton/gb/project_number.rb +38 -0
- data/lib/relaton/gb/scraper.rb +221 -0
- data/lib/relaton/gb/sec_scraper.rb +92 -0
- data/lib/relaton/gb/stage_name.rb +13 -0
- data/lib/relaton/gb/structured_identifier.rb +26 -0
- data/lib/relaton/gb/t_scraper.rb +126 -0
- data/lib/relaton/gb/util.rb +8 -0
- data/lib/relaton/gb/yaml/prefixes.yaml +200 -0
- data/lib/relaton/gb.rb +33 -0
- data/lib/relaton/gost/bibdata.rb +8 -0
- data/lib/relaton/gost/bibitem.rb +8 -0
- data/lib/relaton/gost/bibliography.rb +107 -0
- data/lib/relaton/gost/docidentifier.rb +80 -0
- data/lib/relaton/gost/doctype.rb +16 -0
- data/lib/relaton/gost/ext.rb +46 -0
- data/lib/relaton/gost/item.rb +15 -0
- data/lib/relaton/gost/item_base.rb +18 -0
- data/lib/relaton/gost/item_data.rb +6 -0
- data/lib/relaton/gost/processor.rb +49 -0
- data/lib/relaton/gost/util.rb +8 -0
- data/lib/relaton/gost.rb +36 -0
- data/lib/relaton/iala/bibdata.rb +8 -0
- data/lib/relaton/iala/bibitem.rb +8 -0
- data/lib/relaton/iala/bibliography.rb +146 -0
- data/lib/relaton/iala/docidentifier.rb +89 -0
- data/lib/relaton/iala/doctype.rb +18 -0
- data/lib/relaton/iala/ext.rb +32 -0
- data/lib/relaton/iala/item.rb +21 -0
- data/lib/relaton/iala/item_base.rb +18 -0
- data/lib/relaton/iala/item_data.rb +6 -0
- data/lib/relaton/iala/processor.rb +43 -0
- data/lib/relaton/iala/relation.rb +7 -0
- data/lib/relaton/iala/util.rb +8 -0
- data/lib/relaton/iala.rb +35 -0
- data/lib/relaton/iana/bibdata.rb +8 -0
- data/lib/relaton/iana/bibitem.rb +8 -0
- data/lib/relaton/iana/bibliography.rb +100 -0
- data/lib/relaton/iana/data_fetcher.rb +101 -0
- data/lib/relaton/iana/item.rb +7 -0
- data/lib/relaton/iana/item_data.rb +6 -0
- data/lib/relaton/iana/parser.rb +146 -0
- data/lib/relaton/iana/processor.rb +70 -0
- data/lib/relaton/iana/util.rb +8 -0
- data/lib/relaton/iana.rb +40 -0
- data/lib/relaton/iec/bibliography.rb +283 -0
- data/lib/relaton/iec/data_fetcher.rb +222 -0
- data/lib/relaton/iec/data_parser.rb +391 -0
- data/lib/relaton/iec/hit.rb +26 -0
- data/lib/relaton/iec/hit_collection.rb +138 -0
- data/lib/relaton/iec/item_data.rb +7 -0
- data/lib/relaton/iec/model/bibdata.rb +8 -0
- data/lib/relaton/iec/model/bibitem.rb +8 -0
- data/lib/relaton/iec/model/docidentifier.rb +135 -0
- data/lib/relaton/iec/model/doctype.rb +12 -0
- data/lib/relaton/iec/model/ext.rb +53 -0
- data/lib/relaton/iec/model/item.rb +20 -0
- data/lib/relaton/iec/model/item_base.rb +12 -0
- data/lib/relaton/iec/model/relation.rb +7 -0
- data/lib/relaton/iec/model/stage_name.rb +13 -0
- data/lib/relaton/iec/processor.rb +74 -0
- data/lib/relaton/iec/statuses.yml +199 -0
- data/lib/relaton/iec/util.rb +8 -0
- data/lib/relaton/iec.rb +98 -0
- data/lib/relaton/ieee/balloting_group.rb +13 -0
- data/lib/relaton/ieee/bibdata.rb +8 -0
- data/lib/relaton/ieee/bibitem.rb +8 -0
- data/lib/relaton/ieee/bibliography.rb +73 -0
- data/lib/relaton/ieee/converter/bibxml/from_rfcxml.rb +10 -0
- data/lib/relaton/ieee/converter/bibxml/from_rfcxml_referencegroup.rb +10 -0
- data/lib/relaton/ieee/converter/bibxml.rb +20 -0
- data/lib/relaton/ieee/data_fetcher.rb +771 -0
- data/lib/relaton/ieee/doctype.rb +9 -0
- data/lib/relaton/ieee/editorial_group.rb +19 -0
- data/lib/relaton/ieee/ext.rb +36 -0
- data/lib/relaton/ieee/idams_parser.rb +330 -0
- data/lib/relaton/ieee/item.rb +11 -0
- data/lib/relaton/ieee/item_data.rb +7 -0
- data/lib/relaton/ieee/processor.rb +71 -0
- data/lib/relaton/ieee/rawbib_id_parser.rb +753 -0
- data/lib/relaton/ieee/util.rb +8 -0
- data/lib/relaton/ieee.rb +30 -0
- data/lib/relaton/ietf/bibdata.rb +8 -0
- data/lib/relaton/ietf/bibitem.rb +8 -0
- data/lib/relaton/ietf/bibliography.rb +35 -0
- data/lib/relaton/ietf/bibxml_parser.rb +232 -0
- data/lib/relaton/ietf/data_fetcher.rb +561 -0
- data/lib/relaton/ietf/doctype.rb +9 -0
- data/lib/relaton/ietf/ext.rb +63 -0
- data/lib/relaton/ietf/item.rb +16 -0
- data/lib/relaton/ietf/item_base.rb +18 -0
- data/lib/relaton/ietf/item_data.rb +6 -0
- data/lib/relaton/ietf/processing_instructions.rb +79 -0
- data/lib/relaton/ietf/processor.rb +72 -0
- data/lib/relaton/ietf/relation.rb +9 -0
- data/lib/relaton/ietf/rfc/abstract.rb +19 -0
- data/lib/relaton/ietf/rfc/author.rb +21 -0
- data/lib/relaton/ietf/rfc/entry.rb +446 -0
- data/lib/relaton/ietf/rfc/entry_date.rb +21 -0
- data/lib/relaton/ietf/rfc/format.rb +19 -0
- data/lib/relaton/ietf/rfc/index.rb +46 -0
- data/lib/relaton/ietf/rfc/is_also.rb +21 -0
- data/lib/relaton/ietf/rfc/keywords.rb +19 -0
- data/lib/relaton/ietf/rfc/rfc_index_namespace.rb +11 -0
- data/lib/relaton/ietf/scraper.rb +101 -0
- data/lib/relaton/ietf/util.rb +8 -0
- data/lib/relaton/ietf/wg_name_resolver.rb +42 -0
- data/lib/relaton/ietf.rb +30 -0
- data/lib/relaton/iho/bibdata.rb +8 -0
- data/lib/relaton/iho/bibitem.rb +8 -0
- data/lib/relaton/iho/bibliography.rb +114 -0
- data/lib/relaton/iho/comment_period.rb +13 -0
- data/lib/relaton/iho/docidentifier.rb +31 -0
- data/lib/relaton/iho/doctype.rb +10 -0
- data/lib/relaton/iho/ext.rb +20 -0
- data/lib/relaton/iho/hash_parser_v1.rb +144 -0
- data/lib/relaton/iho/item.rb +20 -0
- data/lib/relaton/iho/item_base.rb +18 -0
- data/lib/relaton/iho/item_data.rb +6 -0
- data/lib/relaton/iho/processor.rb +54 -0
- data/lib/relaton/iho/relation.rb +9 -0
- data/lib/relaton/iho/structured_identifier.rb +20 -0
- data/lib/relaton/iho/util.rb +8 -0
- data/lib/relaton/iho.rb +27 -0
- data/lib/relaton/index/config.rb +52 -0
- data/lib/relaton/index/file_io.rb +305 -0
- data/lib/relaton/index/file_storage.rb +66 -0
- data/lib/relaton/index/pool.rb +46 -0
- data/lib/relaton/index/shard_source.rb +201 -0
- data/lib/relaton/index/type.rb +210 -0
- data/lib/relaton/index/util.rb +18 -0
- data/lib/relaton/index.rb +61 -0
- data/lib/relaton/isbn/isbn.rb +61 -0
- data/lib/relaton/isbn/open_library.rb +43 -0
- data/lib/relaton/isbn/parser.rb +88 -0
- data/lib/relaton/isbn/processor.rb +48 -0
- data/lib/relaton/isbn/util.rb +8 -0
- data/lib/relaton/isbn.rb +19 -0
- data/lib/relaton/iso/bibliography.rb +412 -0
- data/lib/relaton/iso/data_fetcher.rb +338 -0
- data/lib/relaton/iso/data_parser.rb +458 -0
- data/lib/relaton/iso/hash_parser_v1.rb +177 -0
- data/lib/relaton/iso/hit.rb +57 -0
- data/lib/relaton/iso/hit_collection.rb +196 -0
- data/lib/relaton/iso/item_data.rb +50 -0
- data/lib/relaton/iso/model/bibdata.rb +10 -0
- data/lib/relaton/iso/model/bibitem.rb +8 -0
- data/lib/relaton/iso/model/contributor.rb +6 -0
- data/lib/relaton/iso/model/contributor_info.rb +9 -0
- data/lib/relaton/iso/model/docidentifier.rb +146 -0
- data/lib/relaton/iso/model/doctype.rb +13 -0
- data/lib/relaton/iso/model/ext.rb +35 -0
- data/lib/relaton/iso/model/item.rb +17 -0
- data/lib/relaton/iso/model/item_base.rb +22 -0
- data/lib/relaton/iso/model/organization.rb +9 -0
- data/lib/relaton/iso/model/project_number.rb +22 -0
- data/lib/relaton/iso/model/relation.rb +9 -0
- data/lib/relaton/iso/model/stagename.rb +14 -0
- data/lib/relaton/iso/model/structured_identifier.rb +31 -0
- data/lib/relaton/iso/processor.rb +85 -0
- data/lib/relaton/iso/scraper.rb +635 -0
- data/lib/relaton/iso/type/pubid.rb +50 -0
- data/lib/relaton/iso/util.rb +8 -0
- data/lib/relaton/iso.rb +30 -0
- data/lib/relaton/itu/bibliography.rb +95 -0
- data/lib/relaton/itu/data_crawler_r.rb +664 -0
- data/lib/relaton/itu/data_fetcher.rb +550 -0
- data/lib/relaton/itu/data_merge_r.rb +149 -0
- data/lib/relaton/itu/data_parser_r.rb +214 -0
- data/lib/relaton/itu/data_parser_t.rb +228 -0
- data/lib/relaton/itu/family_cache.rb +177 -0
- data/lib/relaton/itu/governor.rb +56 -0
- data/lib/relaton/itu/hit.rb +28 -0
- data/lib/relaton/itu/hit_collection.rb +299 -0
- data/lib/relaton/itu/item_data.rb +6 -0
- data/lib/relaton/itu/model/approval_stage.rb +13 -0
- data/lib/relaton/itu/model/bibdata.rb +8 -0
- data/lib/relaton/itu/model/bibitem.rb +8 -0
- data/lib/relaton/itu/model/docidentifier.rb +75 -0
- data/lib/relaton/itu/model/doctype.rb +13 -0
- data/lib/relaton/itu/model/ext.rb +47 -0
- data/lib/relaton/itu/model/item.rb +13 -0
- data/lib/relaton/itu/model/meeting.rb +13 -0
- data/lib/relaton/itu/model/meeting_date.rb +15 -0
- data/lib/relaton/itu/model/question.rb +13 -0
- data/lib/relaton/itu/model/recommendation_status.rb +11 -0
- data/lib/relaton/itu/model/structured_identifier.rb +38 -0
- data/lib/relaton/itu/processor.rb +72 -0
- data/lib/relaton/itu/pubid.rb +199 -0
- data/lib/relaton/itu/radio_regulations_parser.rb +70 -0
- data/lib/relaton/itu/recommendation_fields.rb +334 -0
- data/lib/relaton/itu/recommendation_parser.rb +30 -0
- data/lib/relaton/itu/scraper.rb +203 -0
- data/lib/relaton/itu/util.rb +8 -0
- data/lib/relaton/itu.rb +34 -0
- data/lib/relaton/jcgm/bibdata.rb +8 -0
- data/lib/relaton/jcgm/bibitem.rb +8 -0
- data/lib/relaton/jcgm/bibliography.rb +97 -0
- data/lib/relaton/jcgm/data_fetcher.rb +81 -0
- data/lib/relaton/jcgm/docidentifier.rb +102 -0
- data/lib/relaton/jcgm/doctype.rb +12 -0
- data/lib/relaton/jcgm/ext.rb +23 -0
- data/lib/relaton/jcgm/item.rb +20 -0
- data/lib/relaton/jcgm/item_base.rb +18 -0
- data/lib/relaton/jcgm/item_data.rb +6 -0
- data/lib/relaton/jcgm/meetings_parser.rb +175 -0
- data/lib/relaton/jcgm/processor.rb +71 -0
- data/lib/relaton/jcgm/relation.rb +9 -0
- data/lib/relaton/jcgm/structured_identifier.rb +40 -0
- data/lib/relaton/jcgm/util.rb +8 -0
- data/lib/relaton/jcgm.rb +24 -0
- data/lib/relaton/jis/bibdata.rb +8 -0
- data/lib/relaton/jis/bibitem.rb +8 -0
- data/lib/relaton/jis/bibliography.rb +73 -0
- data/lib/relaton/jis/data_fetcher.rb +183 -0
- data/lib/relaton/jis/docidentifier.rb +120 -0
- data/lib/relaton/jis/doctype.rb +9 -0
- data/lib/relaton/jis/ext.rb +13 -0
- data/lib/relaton/jis/hit.rb +88 -0
- data/lib/relaton/jis/hit_collection.rb +128 -0
- data/lib/relaton/jis/item.rb +22 -0
- data/lib/relaton/jis/item_base.rb +26 -0
- data/lib/relaton/jis/item_data.rb +8 -0
- data/lib/relaton/jis/processor.rb +55 -0
- data/lib/relaton/jis/relation.rb +11 -0
- data/lib/relaton/jis/scraper.rb +232 -0
- data/lib/relaton/jis/structured_identifier.rb +13 -0
- data/lib/relaton/jis/util.rb +8 -0
- data/lib/relaton/jis.rb +32 -0
- data/lib/relaton/logger/channels/gh_issue.rb +143 -0
- data/lib/relaton/logger/config.rb +34 -0
- data/lib/relaton/logger/formatter_json.rb +8 -0
- data/lib/relaton/logger/formatter_string.rb +12 -0
- data/lib/relaton/logger/log.rb +64 -0
- data/lib/relaton/logger/log_device.rb +27 -0
- data/lib/relaton/logger/pool.rb +24 -0
- data/lib/relaton/logger.rb +18 -0
- data/lib/relaton/nist/bibdata.rb +8 -0
- data/lib/relaton/nist/bibitem.rb +8 -0
- data/lib/relaton/nist/bibliography.rb +191 -0
- data/lib/relaton/nist/comment_period.rb +15 -0
- data/lib/relaton/nist/data_fetcher.rb +134 -0
- data/lib/relaton/nist/date.rb +7 -0
- data/lib/relaton/nist/docidentifier.rb +165 -0
- data/lib/relaton/nist/doctype.rb +7 -0
- data/lib/relaton/nist/ext.rb +16 -0
- data/lib/relaton/nist/hit.rb +18 -0
- data/lib/relaton/nist/hit_collection.rb +362 -0
- data/lib/relaton/nist/item.rb +19 -0
- data/lib/relaton/nist/item_base.rb +16 -0
- data/lib/relaton/nist/item_data.rb +6 -0
- data/lib/relaton/nist/mods_parser.rb +302 -0
- data/lib/relaton/nist/processor.rb +69 -0
- data/lib/relaton/nist/pubs_export.rb +69 -0
- data/lib/relaton/nist/relation.rb +10 -0
- data/lib/relaton/nist/scraper.rb +293 -0
- data/lib/relaton/nist/series.yaml +49 -0
- data/lib/relaton/nist/util.rb +8 -0
- data/lib/relaton/nist.rb +34 -0
- data/lib/relaton/oasis/bibdata.rb +8 -0
- data/lib/relaton/oasis/bibitem.rb +8 -0
- data/lib/relaton/oasis/bibliography.rb +201 -0
- data/lib/relaton/oasis/browser_agent.rb +71 -0
- data/lib/relaton/oasis/data_fetcher.rb +130 -0
- data/lib/relaton/oasis/data_parser.rb +305 -0
- data/lib/relaton/oasis/data_parser_utils.rb +330 -0
- data/lib/relaton/oasis/data_part_parser.rb +239 -0
- data/lib/relaton/oasis/docidentifier.rb +54 -0
- data/lib/relaton/oasis/doctype.rb +7 -0
- data/lib/relaton/oasis/ext.rb +19 -0
- data/lib/relaton/oasis/item.rb +14 -0
- data/lib/relaton/oasis/item_data.rb +6 -0
- data/lib/relaton/oasis/processor.rb +74 -0
- data/lib/relaton/oasis/util.rb +8 -0
- data/lib/relaton/oasis.rb +41 -0
- data/lib/relaton/ogc/bibdata.rb +8 -0
- data/lib/relaton/ogc/bibitem.rb +8 -0
- data/lib/relaton/ogc/bibliography.rb +64 -0
- data/lib/relaton/ogc/data_fetcher.rb +131 -0
- data/lib/relaton/ogc/docidentifier.rb +111 -0
- data/lib/relaton/ogc/doctype.rb +12 -0
- data/lib/relaton/ogc/ext.rb +15 -0
- data/lib/relaton/ogc/hit.rb +18 -0
- data/lib/relaton/ogc/hit_collection.rb +111 -0
- data/lib/relaton/ogc/item.rb +13 -0
- data/lib/relaton/ogc/item_data.rb +6 -0
- data/lib/relaton/ogc/processor.rb +59 -0
- data/lib/relaton/ogc/scraper.rb +225 -0
- data/lib/relaton/ogc/util.rb +8 -0
- data/lib/relaton/ogc.rb +30 -0
- data/lib/relaton/oiml/bibdata.rb +8 -0
- data/lib/relaton/oiml/bibitem.rb +8 -0
- data/lib/relaton/oiml/bibliography.rb +169 -0
- data/lib/relaton/oiml/docidentifier.rb +48 -0
- data/lib/relaton/oiml/doctype.rb +13 -0
- data/lib/relaton/oiml/ext.rb +42 -0
- data/lib/relaton/oiml/item.rb +20 -0
- data/lib/relaton/oiml/item_base.rb +18 -0
- data/lib/relaton/oiml/item_data.rb +6 -0
- data/lib/relaton/oiml/processor.rb +54 -0
- data/lib/relaton/oiml/relation.rb +9 -0
- data/lib/relaton/oiml/util.rb +8 -0
- data/lib/relaton/oiml.rb +24 -0
- data/lib/relaton/omg/bibdata.rb +8 -0
- data/lib/relaton/omg/bibitem.rb +8 -0
- data/lib/relaton/omg/bibliography.rb +31 -0
- data/lib/relaton/omg/docidentifier.rb +67 -0
- data/lib/relaton/omg/ext.rb +7 -0
- data/lib/relaton/omg/item.rb +9 -0
- data/lib/relaton/omg/item_data.rb +6 -0
- data/lib/relaton/omg/processor.rb +35 -0
- data/lib/relaton/omg/scraper.rb +186 -0
- data/lib/relaton/omg/util.rb +8 -0
- data/lib/relaton/omg.rb +25 -0
- data/lib/relaton/plateau/bibdata.rb +8 -0
- data/lib/relaton/plateau/bibitem.rb +8 -0
- data/lib/relaton/plateau/bibliography.rb +31 -0
- data/lib/relaton/plateau/data_fetcher.rb +176 -0
- data/lib/relaton/plateau/doctype.rb +7 -0
- data/lib/relaton/plateau/ext.rb +23 -0
- data/lib/relaton/plateau/handbook_parser.rb +102 -0
- data/lib/relaton/plateau/hit.rb +21 -0
- data/lib/relaton/plateau/hit_collection.rb +79 -0
- data/lib/relaton/plateau/item.rb +12 -0
- data/lib/relaton/plateau/item_data.rb +6 -0
- data/lib/relaton/plateau/parser.rb +101 -0
- data/lib/relaton/plateau/processor.rb +51 -0
- data/lib/relaton/plateau/technical_report_parser.rb +98 -0
- data/lib/relaton/plateau/util.rb +8 -0
- data/lib/relaton/plateau.rb +29 -0
- data/lib/relaton/sdo/config.rb +34 -0
- data/lib/relaton/sdo/fetcher.rb +52 -0
- data/lib/relaton/sdo/logo.rb +95 -0
- data/lib/relaton/sdo/name.rb +26 -0
- data/lib/relaton/sdo/organization.rb +71 -0
- data/lib/relaton/sdo/store.rb +49 -0
- data/lib/relaton/sdo.rb +29 -0
- data/lib/relaton/un/bibdata.rb +8 -0
- data/lib/relaton/un/bibitem.rb +8 -0
- data/lib/relaton/un/bibliography.rb +48 -0
- data/lib/relaton/un/doctype.rb +10 -0
- data/lib/relaton/un/ext.rb +30 -0
- data/lib/relaton/un/hit.rb +56 -0
- data/lib/relaton/un/hit_collection.rb +61 -0
- data/lib/relaton/un/item.rb +11 -0
- data/lib/relaton/un/item_data.rb +6 -0
- data/lib/relaton/un/parser.rb +108 -0
- data/lib/relaton/un/processor.rb +38 -0
- data/lib/relaton/un/session.rb +25 -0
- data/lib/relaton/un/token_generator.rb +105 -0
- data/lib/relaton/un/util.rb +8 -0
- data/lib/relaton/un/wasm/decoder.rb +434 -0
- data/lib/relaton/un/wasm/instance.rb +101 -0
- data/lib/relaton/un/wasm/interpreter.rb +613 -0
- data/lib/relaton/un/wasm/memory.rb +112 -0
- data/lib/relaton/un/wasm/module.rb +47 -0
- data/lib/relaton/un/wasm.rb +17 -0
- data/lib/relaton/un/wasm_v_bg.wasm +0 -0
- data/lib/relaton/un.rb +28 -0
- data/lib/relaton/version.rb +1 -1
- data/lib/relaton/w3c/bibdata.rb +8 -0
- data/lib/relaton/w3c/bibitem.rb +8 -0
- data/lib/relaton/w3c/bibliography.rb +174 -0
- data/lib/relaton/w3c/data_fetcher.rb +487 -0
- data/lib/relaton/w3c/data_parser.rb +379 -0
- data/lib/relaton/w3c/docidentifier.rb +48 -0
- data/lib/relaton/w3c/doctype.rb +7 -0
- data/lib/relaton/w3c/ext.rb +11 -0
- data/lib/relaton/w3c/governor.rb +32 -0
- data/lib/relaton/w3c/item.rb +15 -0
- data/lib/relaton/w3c/item_data.rb +6 -0
- data/lib/relaton/w3c/processor.rb +49 -0
- data/lib/relaton/w3c/pubid.rb +85 -0
- data/lib/relaton/w3c/safe_realize.rb +148 -0
- data/lib/relaton/w3c/util.rb +8 -0
- data/lib/relaton/w3c.rb +36 -0
- data/lib/relaton/xsf/bibdata.rb +8 -0
- data/lib/relaton/xsf/bibitem.rb +8 -0
- data/lib/relaton/xsf/bibliography.rb +84 -0
- data/lib/relaton/xsf/data_fetcher.rb +106 -0
- data/lib/relaton/xsf/docidentifier.rb +46 -0
- data/lib/relaton/xsf/hit.rb +17 -0
- data/lib/relaton/xsf/hit_collection.rb +52 -0
- data/lib/relaton/xsf/item.rb +13 -0
- data/lib/relaton/xsf/item_data.rb +6 -0
- data/lib/relaton/xsf/processor.rb +51 -0
- data/lib/relaton/xsf/util.rb +9 -0
- data/lib/relaton/xsf.rb +34 -0
- data/lib/relaton-core.rb +1 -0
- data/lib/relaton.rb +85 -0
- metadata +775 -161
- data/.github/workflows/rake.yml +0 -14
- data/.github/workflows/release.yml +0 -24
- data/.github/workflows/rubocop.yml +0 -48
- data/.gitignore +0 -12
- data/.rspec +0 -3
- data/CLAUDE.md +0 -78
- data/Gemfile +0 -29
- data/Rakefile +0 -6
- data/docs/CHANGELOG.adoc +0 -16
- data/docs/VERSIONING_POLICY.adoc +0 -38
- data/docs/navigation.adoc +0 -6
- data/lib/relaton/db/version.rb +0 -5
- data/relaton.gemspec +0 -72
- data/spec/relaton/config_spec.rb +0 -10
- data/spec/relaton/db_cache_spec.rb +0 -51
- data/spec/relaton/db_spec.rb +0 -567
- data/spec/relaton/registry_spec.rb +0 -178
- data/spec/relaton/util_spec.rb +0 -3
- data/spec/relaton_meta_spec.rb +0 -25
- data/spec/relaton_spec.rb +0 -800
- data/spec/spec_helper.rb +0 -45
- data/spec/support/gb_t_20223_2006.xml +0 -33
- data/spec/support/iso_111111119115_1.xml +0 -0
- data/spec/support/iso_19115_1.xml +0 -115
- data/spec/support/iso_19115_2.xml +0 -95
- data/spec/support/rfc_8341.xml +0 -46
- data/spec/vcr_cassetes/api_relaton_org.yml +0 -121
- data/spec/vcr_cassetes/api_relaton_org_unavailable.yml +0 -140
- data/spec/vcr_cassetes/cc_dir_10005_2019.yml +0 -202
- data/spec/vcr_cassetes/cipm_meeting_43.yml +0 -1505
- data/spec/vcr_cassetes/gb_t_20223_2006.yml +0 -729
- data/spec/vcr_cassetes/iso_111111119115_1.yml +0 -12951
- data/spec/vcr_cassetes/iso_19115_1.yml +0 -17334
- data/spec/vcr_cassetes/iso_19115_1_2.yml +0 -322
- data/spec/vcr_cassetes/iso_19115_1_std.yml +0 -17334
- data/spec/vcr_cassetes/iso_19115_all_parts.yml +0 -185
- data/spec/vcr_cassetes/iso_19133_2005.yml +0 -144
- data/spec/vcr_cassetes/iso_combined_applied.yml +0 -318
- data/spec/vcr_cassetes/iso_combined_included.yml +0 -318
- data/spec/vcr_cassetes/ogc_19_025r1.yml +0 -374
- data/spec/vcr_cassetes/omg_ami4ccm_1_0.yml +0 -317
- data/spec/vcr_cassetes/rfc_8341.yml +0 -1278
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Relaton
|
|
4
|
+
module Sdo
|
|
5
|
+
# One logo variant for an organization. Variants are differentiated by
|
|
6
|
+
# `style` (the primary discriminator — e.g. "default", "red", "iso_1972"),
|
|
7
|
+
# `format` (file suffix) and `size`. `applicability` is opaque, informational
|
|
8
|
+
# text (e.g. "stage>=60"); the store never interprets it — consumers do.
|
|
9
|
+
class Logo
|
|
10
|
+
MIME_TYPES = {
|
|
11
|
+
"png" => "image/png",
|
|
12
|
+
"jpg" => "image/jpeg",
|
|
13
|
+
"jpeg" => "image/jpeg",
|
|
14
|
+
"gif" => "image/gif",
|
|
15
|
+
"svg" => "image/svg+xml",
|
|
16
|
+
"webp" => "image/webp",
|
|
17
|
+
"eps" => "application/postscript",
|
|
18
|
+
"pdf" => "application/pdf",
|
|
19
|
+
}.freeze
|
|
20
|
+
|
|
21
|
+
attr_reader :style, :format, :size, :url, :applicability
|
|
22
|
+
|
|
23
|
+
def initialize(style: nil, format: nil, size: nil, url: nil, applicability: nil)
|
|
24
|
+
@style = style
|
|
25
|
+
@format = format
|
|
26
|
+
@size = size
|
|
27
|
+
@url = url
|
|
28
|
+
@applicability = applicability
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def self.from_hash(hash)
|
|
32
|
+
new(style: hash["style"], format: hash["format"], size: hash["size"],
|
|
33
|
+
url: hash["url"], applicability: hash["applicability"])
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Raw binary content of the logo, fetched lazily from `url` and memoized.
|
|
37
|
+
# Raises Sdo::Error (naming the URL) if the fetch fails, rather than
|
|
38
|
+
# returning nil and crashing cryptically inside data_uri/save downstream.
|
|
39
|
+
def content
|
|
40
|
+
@content ||= begin
|
|
41
|
+
data = Fetcher.download(url)
|
|
42
|
+
raise Error, "could not fetch logo from #{url.inspect}" if data.nil?
|
|
43
|
+
|
|
44
|
+
data
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# The logo as a base64-encoded data URI, ready to embed in XML/HTML.
|
|
49
|
+
def data_uri
|
|
50
|
+
"data:#{mimetype};base64,#{Base64.strict_encode64(content)}"
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def mimetype
|
|
54
|
+
MIME_TYPES[format.to_s.downcase] || "application/octet-stream"
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Write the logo to disk. With no argument, uses a filename derived from
|
|
58
|
+
# the source URL (or from style/size/format); returns the path written.
|
|
59
|
+
def save(path = nil)
|
|
60
|
+
path ||= default_filename
|
|
61
|
+
File.binwrite(path, content)
|
|
62
|
+
path
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def to_h
|
|
66
|
+
{ style: style, format: format, size: size, url: url,
|
|
67
|
+
applicability: applicability }.compact
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def describe
|
|
71
|
+
to_h.map { |k, v| "#{k}=#{v}" }.join(", ")
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
private
|
|
75
|
+
|
|
76
|
+
def default_filename
|
|
77
|
+
base = File.basename(url_path)
|
|
78
|
+
return base unless base.empty? || File.extname(base).empty?
|
|
79
|
+
|
|
80
|
+
stem = [style, size].reject { |s| s.to_s.empty? }.join("-")
|
|
81
|
+
stem = "logo" if stem.empty?
|
|
82
|
+
ext = format.to_s.empty? ? "bin" : format
|
|
83
|
+
"#{stem}.#{ext}"
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# The URL's path component, tolerating URLs that URI can't parse (e.g. a
|
|
87
|
+
# stray space) by falling back to the raw string sans query/fragment.
|
|
88
|
+
def url_path
|
|
89
|
+
URI.parse(url.to_s).path
|
|
90
|
+
rescue URI::InvalidURIError
|
|
91
|
+
url.to_s.split(/[?#]/, 2).first
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Relaton
|
|
4
|
+
module Sdo
|
|
5
|
+
# A single organization name, optionally tagged with a language. A name with
|
|
6
|
+
# no language is the default (untranslated) name.
|
|
7
|
+
class Name
|
|
8
|
+
attr_reader :content, :language
|
|
9
|
+
|
|
10
|
+
def initialize(content:, language: nil)
|
|
11
|
+
@content = content
|
|
12
|
+
@language = language
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.from_hash(hash)
|
|
16
|
+
return new(content: hash) unless hash.is_a?(Hash)
|
|
17
|
+
|
|
18
|
+
new(content: hash["content"], language: hash["language"])
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def default?
|
|
22
|
+
language.nil? || language.to_s.empty?
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Relaton
|
|
4
|
+
module Sdo
|
|
5
|
+
# A standards-development organization: its names (with translations) and its
|
|
6
|
+
# logo variants. Built from one entry of the index manifest.
|
|
7
|
+
class Organization
|
|
8
|
+
attr_reader :abbreviation, :names, :logos
|
|
9
|
+
|
|
10
|
+
def initialize(abbreviation:, names: [], logos: [])
|
|
11
|
+
@abbreviation = abbreviation
|
|
12
|
+
@names = names
|
|
13
|
+
@logos = logos
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def self.from_hash(abbreviation, hash)
|
|
17
|
+
hash ||= {}
|
|
18
|
+
new(
|
|
19
|
+
abbreviation: abbreviation,
|
|
20
|
+
names: Array(hash["name"]).map { |n| Name.from_hash(n) },
|
|
21
|
+
logos: Array(hash["logo"]).map { |l| Logo.from_hash(l) },
|
|
22
|
+
)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# The organization's name. With no argument (or a nil language) returns the
|
|
26
|
+
# default, untranslated name; otherwise the translation for the requested
|
|
27
|
+
# language — passed positionally (`name("fr")`) or as the `language:`
|
|
28
|
+
# keyword (`name(language: "fr")`) — or nil if there is none. The keyword
|
|
29
|
+
# wins if both are given.
|
|
30
|
+
def name(lang = nil, language: nil)
|
|
31
|
+
language ||= lang
|
|
32
|
+
selected =
|
|
33
|
+
if language.nil?
|
|
34
|
+
names.find(&:default?) || names.first
|
|
35
|
+
else
|
|
36
|
+
names.find { |n| n.language == language }
|
|
37
|
+
end
|
|
38
|
+
selected&.content
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# All logo variants matching the given filters. Every argument is optional;
|
|
42
|
+
# omitting one matches any value for it. Returns an array (possibly empty).
|
|
43
|
+
def logo_query(format: nil, size: nil, style: nil)
|
|
44
|
+
logos.select do |logo|
|
|
45
|
+
match?(logo.format, format) &&
|
|
46
|
+
match?(logo.size, size) &&
|
|
47
|
+
match?(logo.style, style)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# A single logo matching the filters. Returns nil when nothing matches; the
|
|
52
|
+
# sole match when exactly one does; raises when the filter is ambiguous so
|
|
53
|
+
# the caller narrows it by format/size/style.
|
|
54
|
+
def logo(format: nil, size: nil, style: nil)
|
|
55
|
+
matches = logo_query(format: format, size: size, style: style)
|
|
56
|
+
return matches.first if matches.size <= 1
|
|
57
|
+
|
|
58
|
+
raise Error, "#{matches.size} logos match #{abbreviation}; narrow by " \
|
|
59
|
+
"format/size/style: #{matches.map(&:describe).join('; ')}"
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
private
|
|
63
|
+
|
|
64
|
+
def match?(value, query)
|
|
65
|
+
return true if query.nil?
|
|
66
|
+
|
|
67
|
+
!value.nil? && value.to_s.casecmp?(query.to_s)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Relaton
|
|
4
|
+
module Sdo
|
|
5
|
+
# Singleton registry of organizations, built lazily from the index manifest
|
|
6
|
+
# and memoized for the process. `reset!` drops the memo (mainly for specs).
|
|
7
|
+
class Store
|
|
8
|
+
include Singleton
|
|
9
|
+
|
|
10
|
+
def initialize
|
|
11
|
+
@mutex = Mutex.new
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Look up an organization by abbreviation (case-insensitive). Returns an
|
|
15
|
+
# Organization or nil.
|
|
16
|
+
def organization(abbreviation)
|
|
17
|
+
index[normalize(abbreviation)]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Lazily built and memoized; the mutex keeps a concurrent first access from
|
|
21
|
+
# downloading/parsing the index twice.
|
|
22
|
+
def index
|
|
23
|
+
@index || @mutex.synchronize { @index ||= build_index }
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def reset!
|
|
27
|
+
@mutex.synchronize { @index = nil }
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
|
|
32
|
+
def normalize(abbreviation)
|
|
33
|
+
abbreviation.to_s.strip.upcase
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def build_index
|
|
37
|
+
yaml = Fetcher.fetch_index
|
|
38
|
+
data = yaml.nil? || yaml.empty? ? {} : YAML.safe_load(yaml)
|
|
39
|
+
# A corrupt/unexpected index (non-mapping YAML) degrades to "no orgs"
|
|
40
|
+
# rather than crashing every lookup with a TypeError.
|
|
41
|
+
organizations = data.is_a?(Hash) ? (data["organizations"] || {}) : {}
|
|
42
|
+
organizations.each_with_object({}) do |(abbreviation, attrs), acc|
|
|
43
|
+
acc[normalize(abbreviation)] =
|
|
44
|
+
Organization.from_hash(abbreviation, attrs)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
data/lib/relaton/sdo.rb
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Relaton::Sdo — the standards-body organization & logo store (metanorma#346,
|
|
4
|
+
# relaton-db#132). A NON-flavor, lazily-autoloaded top-level component: it has
|
|
5
|
+
# no processor and no Db::Registry entry. It fetches a small `index.yaml`
|
|
6
|
+
# manifest published by the `relaton-data-sdo` data repo, caches it under
|
|
7
|
+
# `~/.relaton/sdo/`, and exposes org names/translations and logo variants
|
|
8
|
+
# (differentiated by style/format/size) via `Relaton.organization`.
|
|
9
|
+
|
|
10
|
+
require "net/http"
|
|
11
|
+
require "uri"
|
|
12
|
+
require "yaml"
|
|
13
|
+
require "base64"
|
|
14
|
+
require "fileutils"
|
|
15
|
+
require "singleton"
|
|
16
|
+
|
|
17
|
+
require_relative "index/file_storage"
|
|
18
|
+
require_relative "sdo/config"
|
|
19
|
+
require_relative "sdo/name"
|
|
20
|
+
require_relative "sdo/logo"
|
|
21
|
+
require_relative "sdo/organization"
|
|
22
|
+
require_relative "sdo/fetcher"
|
|
23
|
+
require_relative "sdo/store"
|
|
24
|
+
|
|
25
|
+
module Relaton
|
|
26
|
+
module Sdo
|
|
27
|
+
class Error < StandardError; end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Relaton
|
|
4
|
+
module Un
|
|
5
|
+
# Class methods for search UN standards.
|
|
6
|
+
class Bibliography
|
|
7
|
+
class << self
|
|
8
|
+
# @param text [String]
|
|
9
|
+
# @return [Relaton::Un::HitCollection]
|
|
10
|
+
def search(text)
|
|
11
|
+
HitCollection.search text
|
|
12
|
+
rescue Faraday::ConnectionFailed, Faraday::TimeoutError,
|
|
13
|
+
Faraday::SSLError => e
|
|
14
|
+
raise Relaton::RequestError,
|
|
15
|
+
"Could not access #{HitCollection::API_BASE}: #{e.message}"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# @param ref [String] document reference
|
|
19
|
+
# @param year [String, NilClass]
|
|
20
|
+
# @param opts [Hash] options
|
|
21
|
+
# @return [Relaton::Bib::ItemData]
|
|
22
|
+
def get(ref, _year = nil, _opts = {})
|
|
23
|
+
Util.info "Fetching from documents.un.org ...", key: ref
|
|
24
|
+
/^(?:UN\s)?(?<code>.*)/ =~ ref
|
|
25
|
+
result = isobib_search_filter(code)
|
|
26
|
+
if result
|
|
27
|
+
Util.info "Found: `#{result.item.docidentifier[0].content}`", key: ref
|
|
28
|
+
result.item
|
|
29
|
+
else
|
|
30
|
+
Util.info "Not found.", key: ref
|
|
31
|
+
nil
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
# Search for hits.
|
|
38
|
+
#
|
|
39
|
+
# @param code [String] reference without correction
|
|
40
|
+
# @return [Relaton::Un::Hit, nil]
|
|
41
|
+
def isobib_search_filter(code)
|
|
42
|
+
result = search(code)
|
|
43
|
+
result.select { |i| i.hit["symbols"]&.compact&.include?(code) }.first
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require_relative "doctype"
|
|
2
|
+
require_relative "session"
|
|
3
|
+
|
|
4
|
+
module Relaton
|
|
5
|
+
module Un
|
|
6
|
+
class Ext < Bib::Ext
|
|
7
|
+
attribute :doctype, Doctype
|
|
8
|
+
attribute :submissionlanguage, :string, collection: true
|
|
9
|
+
attribute :distribution, :string, values: %w[general limited restricted provisional]
|
|
10
|
+
attribute :session, Session
|
|
11
|
+
attribute :job_number, :string
|
|
12
|
+
|
|
13
|
+
xml do
|
|
14
|
+
map_element "submissionlanguage", to: :submissionlanguage
|
|
15
|
+
map_element "distribution", to: :distribution
|
|
16
|
+
map_element "session", to: :session
|
|
17
|
+
map_element "job_number", to: :job_number
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
key_value do
|
|
21
|
+
map "submissionlanguage", to: :submissionlanguage
|
|
22
|
+
map "distribution", to: :distribution
|
|
23
|
+
map "session", to: :session
|
|
24
|
+
map "job_number", to: :job_number
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def get_schema_version = Relaton.schema_versions["relaton-model-un"]
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Relaton
|
|
4
|
+
module Un
|
|
5
|
+
class Hit < Core::Hit
|
|
6
|
+
# rubocop:disable Layout/LineLength
|
|
7
|
+
BODY = {
|
|
8
|
+
"A" => "General Assembly",
|
|
9
|
+
"E" => "Economic and Social Council",
|
|
10
|
+
"S" => "Security Council",
|
|
11
|
+
"T" => "Trusteeship Council",
|
|
12
|
+
"ACC" => "Administrative Committee on Coordination",
|
|
13
|
+
"AT" => "United Nations Administrative Tribunal",
|
|
14
|
+
"CAT" => "Committee against Torture",
|
|
15
|
+
"CCPR" => "Human Rights Committee",
|
|
16
|
+
"CD" => "Conference on Disarmament",
|
|
17
|
+
"CEDAW" => "Committee on the Elimination of All Forms of Discrimination against Women",
|
|
18
|
+
"CERD" => "Committee on the Elimination of Racial Discrimination",
|
|
19
|
+
"CRC" => "Committee on the Rights of the Child",
|
|
20
|
+
"DC" => "Disarmament Commission",
|
|
21
|
+
"DP" => "United Nations Development Programme",
|
|
22
|
+
"HS" => "United Nations Centre for Human Settlements (HABITAT)",
|
|
23
|
+
"TD" => "United Nations Conference on Trade and Development",
|
|
24
|
+
"UNEP" => "United Nations Environment Programme",
|
|
25
|
+
"TRADE" => "Committee on Trade",
|
|
26
|
+
"CEFACT" => "Centre for Trade Facilitation and Electronic Business",
|
|
27
|
+
"C.1" => "Disarmament and International Security Committee",
|
|
28
|
+
"C.2" => "Economic and Financial Committee",
|
|
29
|
+
"C.3" => "Social, Humanitarian & Cultural Issues",
|
|
30
|
+
"C.4" => "Special Political and Decolonization Committee",
|
|
31
|
+
"C.5" => "Administrative and Budgetary Committee",
|
|
32
|
+
"C.6" => "Sixth Committee (Legal)",
|
|
33
|
+
"PC" => "Preparatory Committee",
|
|
34
|
+
"AEC" => "Atomic Energy Commission",
|
|
35
|
+
"AGRI" => "Committee on Agriculture",
|
|
36
|
+
"AMCEN" => "African Ministerial Conference on the Environment",
|
|
37
|
+
"AMCOW" => "African Ministers' Council on Water",
|
|
38
|
+
"ECA" => "Economic Commission for Africa",
|
|
39
|
+
"ESCAP" => "Economic and Social Commission for Asia and Pacific",
|
|
40
|
+
"ECE" => "Economic Commission for Europe",
|
|
41
|
+
"ECWA" => "Economic Commission for Western Asia",
|
|
42
|
+
"UNFF" => "United Nations Forum on Forests",
|
|
43
|
+
"ENERGY" => "Committee on Sustainable Energy",
|
|
44
|
+
"FAO" => "Food and Agriculture Organization",
|
|
45
|
+
"UNCTAD" => "United Nations Conference on Trade and Development",
|
|
46
|
+
}.freeze
|
|
47
|
+
# rubocop:enable Layout/LineLength
|
|
48
|
+
|
|
49
|
+
# Parse page.
|
|
50
|
+
# @return [Relaton::Un::Item]
|
|
51
|
+
def item
|
|
52
|
+
@item ||= Parser.new(hit).parse
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "faraday"
|
|
4
|
+
require "json"
|
|
5
|
+
require "securerandom"
|
|
6
|
+
|
|
7
|
+
module Relaton
|
|
8
|
+
module Un
|
|
9
|
+
class HitCollection < Core::HitCollection
|
|
10
|
+
API_BASE = "https://documents.un.org/api"
|
|
11
|
+
|
|
12
|
+
# Factory method — performs the API search and populates hits.
|
|
13
|
+
# @param text [String] symbol to search for
|
|
14
|
+
# @return [HitCollection]
|
|
15
|
+
def self.search(text)
|
|
16
|
+
hc = new(text)
|
|
17
|
+
hc.send(:fetch_hits)
|
|
18
|
+
hc
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
private
|
|
22
|
+
|
|
23
|
+
def fetch_hits
|
|
24
|
+
response = search_api(@ref)
|
|
25
|
+
response&.each { |data| @array << Hit.new(data, self) }
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def search_api(text) # rubocop:disable Metrics/MethodLength
|
|
29
|
+
resp = connection.post("search?l=en&rid=#{SecureRandom.uuid}") do |req|
|
|
30
|
+
req.headers["Content-Type"] = "application/json"
|
|
31
|
+
req.body = JSON.generate(search_body(text))
|
|
32
|
+
end
|
|
33
|
+
return unless resp.success?
|
|
34
|
+
|
|
35
|
+
body = JSON.parse(resp.body)
|
|
36
|
+
return unless body["status"] == 1
|
|
37
|
+
|
|
38
|
+
body.dig("body", "data")
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def search_body(text) # rubocop:disable Metrics/MethodLength
|
|
42
|
+
{
|
|
43
|
+
symbol: text, jobNumber: "", publicationDate: "* TO *",
|
|
44
|
+
releaseDate: "* TO *", title: "", subject: "", session: "",
|
|
45
|
+
agenda: "", truncation: false,
|
|
46
|
+
fullTextSearch: { language: "en", searchText: "" },
|
|
47
|
+
sortOptions: { sortField: "Sort by relevance" },
|
|
48
|
+
pagination: { currentPage: 1, itemsPerPage: 20 },
|
|
49
|
+
screenLanguage: "en", tcodes: [],
|
|
50
|
+
}
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def connection
|
|
54
|
+
@connection ||= Faraday.new(url: API_BASE) do |f|
|
|
55
|
+
f.headers["Authorization"] = "Access #{TokenGenerator.generate}"
|
|
56
|
+
f.headers["Cache-Control"] = "public, max-age=0"
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Relaton
|
|
4
|
+
module Un
|
|
5
|
+
class Parser
|
|
6
|
+
DISTRIBUTIONS = { "GEN" => "general", "LTD" => "limited",
|
|
7
|
+
"DER" => "restricted", "PRO" => "provisional" }.freeze
|
|
8
|
+
|
|
9
|
+
def initialize(hit)
|
|
10
|
+
@hit = hit
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# @return [Relaton::Un::ItemData]
|
|
14
|
+
def parse # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
|
15
|
+
ItemData.new(
|
|
16
|
+
type: "standard",
|
|
17
|
+
fetched: Date.today.to_s,
|
|
18
|
+
docidentifier: fetch_docid,
|
|
19
|
+
docnumber: @hit["symbol"],
|
|
20
|
+
language: ["en"],
|
|
21
|
+
script: ["Latn"],
|
|
22
|
+
title: fetch_title,
|
|
23
|
+
date: fetch_date,
|
|
24
|
+
source: fetch_link,
|
|
25
|
+
keyword: fetch_keyword,
|
|
26
|
+
ext: Ext.new(
|
|
27
|
+
session: fetch_session,
|
|
28
|
+
distribution: fetch_distribution,
|
|
29
|
+
job_number: fetch_job_number,
|
|
30
|
+
),
|
|
31
|
+
)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
private
|
|
35
|
+
|
|
36
|
+
# @return [Array<Relaton::Bib::Docidentifier>]
|
|
37
|
+
def fetch_docid
|
|
38
|
+
symbols = @hit["symbols"]&.compact&.reject(&:empty?) || []
|
|
39
|
+
dids = symbols.map { |s| Bib::Docidentifier.new(content: s, type: "UN") }
|
|
40
|
+
dids.first.primary = true unless dids.empty?
|
|
41
|
+
dids
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# @return [Array<Relaton::Bib::Title>]
|
|
45
|
+
def fetch_title
|
|
46
|
+
title = english_data&.dig("title") || ""
|
|
47
|
+
Bib::Title.from_string title, "en", "Latn"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# @return [Array<Relaton::Bib::Date>]
|
|
51
|
+
def fetch_date
|
|
52
|
+
d = []
|
|
53
|
+
if (pub = @hit["publication_date"])
|
|
54
|
+
d << Bib::Date.new(type: "published", at: pub[0, 10])
|
|
55
|
+
end
|
|
56
|
+
if (rel = english_data&.dig("release_date"))
|
|
57
|
+
d << Bib::Date.new(type: "issued", at: rel[0, 10])
|
|
58
|
+
end
|
|
59
|
+
d
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# @return [Array<Relaton::Bib::Uri>]
|
|
63
|
+
def fetch_link
|
|
64
|
+
jn = fetch_job_number
|
|
65
|
+
return [] unless jn && !jn.empty?
|
|
66
|
+
|
|
67
|
+
[Bib::Uri.new(
|
|
68
|
+
content: "https://documents.un.org/api/symbol/access?j=#{jn}&t=pdf",
|
|
69
|
+
type: "pdf",
|
|
70
|
+
)]
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# @return [Array<Relaton::Bib::Keyword>]
|
|
74
|
+
def fetch_keyword
|
|
75
|
+
subjects = english_data&.dig("subjects") || []
|
|
76
|
+
subjects.map do |kw|
|
|
77
|
+
Bib::Keyword.new(vocab: Bib::LocalizedString.new(content: kw))
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# @return [Relaton::Un::Session]
|
|
82
|
+
def fetch_session
|
|
83
|
+
session_num = @hit["sessions"]&.compact&.reject(&:empty?)&.first
|
|
84
|
+
agenda = @hit["agendas"]&.compact&.reject(&:empty?)&.first
|
|
85
|
+
Session.new(number: session_num, agenda_id: agenda)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# @return [String, nil]
|
|
89
|
+
def fetch_distribution
|
|
90
|
+
DISTRIBUTIONS[@hit["distribution"]]
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# @return [String, nil]
|
|
94
|
+
def fetch_job_number
|
|
95
|
+
en = english_data
|
|
96
|
+
jn = en&.dig("job_number")
|
|
97
|
+
return jn if jn && !jn.empty?
|
|
98
|
+
|
|
99
|
+
@hit["job_numbers"]&.compact&.reject(&:empty?)&.first
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# @return [Hash, nil] the English perLanguage entry
|
|
103
|
+
def english_data
|
|
104
|
+
@english_data ||= @hit["perLanguage"]&.find { |pl| pl["language"] == "English" }
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "relaton/core/processor"
|
|
4
|
+
|
|
5
|
+
module Relaton
|
|
6
|
+
module Un
|
|
7
|
+
class Processor < Core::Processor
|
|
8
|
+
attr_reader :idtype
|
|
9
|
+
|
|
10
|
+
def initialize
|
|
11
|
+
@short = :relaton_un
|
|
12
|
+
@prefix = "UN"
|
|
13
|
+
@defaultprefix = %r{^UN\s}
|
|
14
|
+
@idtype = "UN"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def get(code, date, opts)
|
|
18
|
+
require_relative "../un"
|
|
19
|
+
Bibliography.get(code, date, opts)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def from_xml(xml)
|
|
23
|
+
require_relative "../un"
|
|
24
|
+
Bibdata.from_xml(xml)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def from_yaml(yaml)
|
|
28
|
+
require_relative "../un"
|
|
29
|
+
Item.from_yaml(yaml)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def grammar_hash
|
|
33
|
+
require_relative "../un"
|
|
34
|
+
@grammar_hash ||= Relaton::Un.grammar_hash
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|