lib/relaton/db.rb in relaton-1.7.2 vs lib/relaton/db.rb in relaton-1.7.3

- old
+ new

@@ -21,22 +21,41 @@ # The class of reference requested is determined by the prefix of the code: # GB Standard for gbbib, IETF for ietfbib, ISO for isobib, IEC or IEV for iecbib, # @param code [String] the ISO standard Code to look up (e.g. "ISO 9000") # @param year [String] the year the standard was published (optional) # @param opts [Hash] options; restricted to :all_parts if all-parts reference is required - # @return [NilClass, RelatonIsoBib::IsoBibliographicItem, + # @return [nil, RelatonBib::BibliographicItem, RelatonIsoBib::IsoBibliographicItem, # RelatonItu::ItuBibliographicItem, RelatonIetf::IetfBibliographicItem, - # RelatonNist::NistBibliongraphicItem, RelatonGb::GbbibliographicItem] + # RelatonIec::IecBibliographicItem, RelatonIeee::IeeeBibliographicItem, + # RelatonNist::NistBibliongraphicItem, RelatonGb::GbbibliographicItem, + # RelatonOgc::OgcBibliographicItem, RelatonCalconnect::CcBibliographicItem] + # RelatonBipm::BipmBibliographicItem, RelatonIho::IhoBibliographicItem, + # RelatonOmg::OmgBibliographicItem RelatinUn::UnBibliographicItem, + # RelatonW3c::W3cBibliographicItem def fetch(code, year = nil, opts = {}) stdclass = standard_class(code) || return - cd = combine_doc code, year, opts, stdclass + processor = @registry.processors[stdclass] + ref = processor.respond_to?(:urn_to_code) ? processor.urn_to_code(code)&.first : code + ref ||= code + cd = combine_doc ref, year, opts, stdclass return cd if cd - check_bibliocache(code, year, opts, stdclass) + check_bibliocache(ref, year, opts, stdclass) end - def combine_doc(code, year, opts, stdclass) + # @param code [String] + # @param year [String, nil] + # @param stdslass [String] + # @return [nil, RelatonBib::BibliographicItem, RelatonIsoBib::IsoBibliographicItem, + # RelatonItu::ItuBibliographicItem, RelatonIetf::IetfBibliographicItem, + # RelatonIec::IecBibliographicItem, RelatonIeee::IeeeBibliographicItem, + # RelatonNist::NistBibliongraphicItem, RelatonGb::GbbibliographicItem, + # RelatonOgc::OgcBibliographicItem, RelatonCalconnect::CcBibliographicItem] + # RelatonBipm::BipmBibliographicItem, RelatonIho::IhoBibliographicItem, + # RelatonOmg::OmgBibliographicItem RelatinUn::UnBibliographicItem, + # RelatonW3c::W3cBibliographicItem + def combine_doc(code, year, opts, stdclass) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength if (refs = code.split " + ").size > 1 reltype = "derivedFrom" reldesc = nil elsif (refs = code.split ", ").size > 1 reltype = "complements" @@ -58,10 +77,18 @@ # @param code [String] # @param year [String, NilClass] # @param stdclass [Symbol, NilClass] # @param opts [Hash] + # @return [nil, RelatonBib::BibliographicItem, RelatonIsoBib::IsoBibliographicItem, + # RelatonItu::ItuBibliographicItem, RelatonIetf::IetfBibliographicItem, + # RelatonIec::IecBibliographicItem, RelatonIeee::IeeeBibliographicItem, + # RelatonNist::NistBibliongraphicItem, RelatonGb::GbbibliographicItem, + # RelatonOgc::OgcBibliographicItem, RelatonCalconnect::CcBibliographicItem] + # RelatonBipm::BipmBibliographicItem, RelatonIho::IhoBibliographicItem, + # RelatonOmg::OmgBibliographicItem RelatinUn::UnBibliographicItem, + # RelatonW3c::W3cBibliographicItem def fetch_std(code, year = nil, stdclass = nil, opts = {}) std = nil @registry.processors.each do |name, processor| std = name if processor.prefix == stdclass end @@ -112,11 +139,11 @@ # @param code [String] code of standard # @return [Symbol] standard class name def standard_class(code) @registry.processors.each do |name, processor| - return name if /^#{processor.prefix}/.match(code) || + return name if /^(urn:)?#{processor.prefix}/i.match?(code) || processor.defaultprefix.match(code) end allowed = @registry.processors.reduce([]) do |m, (_k, v)| m << v.prefix end @@ -152,24 +179,33 @@ end # @param entry [String] XML string # @param stdclass [Symbol] # @param id [String] docid - # @return [NilClass, RelatonIsoBib::IsoBibliographicItem, + # @return [nil, RelatonBib::BibliographicItem, RelatonIsoBib::IsoBibliographicItem, # RelatonItu::ItuBibliographicItem, RelatonIetf::IetfBibliographicItem, - # RelatonNist::NistBibliongraphicItem, RelatonGb::GbbibliographicItem] + # RelatonIec::IecBibliographicItem, RelatonIeee::IeeeBibliographicItem, + # RelatonNist::NistBibliongraphicItem, RelatonGb::GbbibliographicItem, + # RelatonOgc::OgcBibliographicItem, RelatonCalconnect::CcBibliographicItem] + # RelatonBipm::BipmBibliographicItem, RelatonIho::IhoBibliographicItem, + # RelatonOmg::OmgBibliographicItem RelatinUn::UnBibliographicItem, + # RelatonW3c::W3cBibliographicItem def bib_retval(entry, stdclass, _id) entry.match?(/^not_found/) ? nil : @registry.processors[stdclass].from_xml(entry) end # @param code [String] # @param year [String] # @param opts [Hash] # @param stdclass [Symbol] - # @return [NilClass, RelatonIsoBib::IsoBibliographicItem, + # @return [nil, RelatonBib::BibliographicItem, RelatonIsoBib::IsoBibliographicItem, # RelatonItu::ItuBibliographicItem, RelatonIetf::IetfBibliographicItem, + # RelatonIec::IecBibliographicItem, RelatonIeee::IeeeBibliographicItem, # RelatonNist::NistBibliongraphicItem, RelatonGb::GbbibliographicItem, # RelatonOgc::OgcBibliographicItem, RelatonCalconnect::CcBibliographicItem] + # RelatonBipm::BipmBibliographicItem, RelatonIho::IhoBibliographicItem, + # RelatonOmg::OmgBibliographicItem RelatinUn::UnBibliographicItem, + # RelatonW3c::W3cBibliographicItem def check_bibliocache(code, year, opts, stdclass) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity id, searchcode = std_id(code, year, opts, stdclass) yaml = @static_db[id] return @registry.processors[stdclass].hash_to_bib YAML.safe_load(yaml) if yaml