11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
# File 'lib/relaton_iho/iho_bibliography.rb', line 11
def search(text, _year = nil, _opts = {}) warn "[relaton-iho] (\"#{text}\") fetching..."
ref = text.sub(/^IHO\s/, "").downcase.sub(/^([[:alpha:]]+)(\d+)/, '\1-\2')
uri = URI("#{ENDPOINT}#{ref}.yaml")
resp = Net::HTTP.get_response uri
return unless resp.code == "200"
yaml = if RUBY_VERSION.match?(/^2\.5/)
YAML.safe_load(resp.body, [Date])
else
YAML.safe_load(resp.body, permitted_classes: [Date])
end
hash = HashConverter.hash_to_bib yaml
item = IhoBibliographicItem.new(**hash)
warn "[relaton-iho] (\"#{text}\") found #{item.docidentifier.first.id}"
item
rescue SocketError, Errno::EINVAL, Errno::ECONNRESET, EOFError,
Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError,
Net::ProtocolError, Net::ReadTimeout, OpenSSL::SSL::SSLError,
Errno::ETIMEDOUT => e
raise RelatonBib::RequestError, "Could not access #{uri}: #{e.message}"
end
|