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