class Libis::Metadata::Downloader
Constants
- NO_DECL
Attributes
config[R]
mapper_class[R]
service[R]
Public Class Methods
new()
click to toggle source
# File lib/libis/metadata/downloader.rb, line 23 def initialize @service = nil @target_dir = nil @config = nil @mapper_class = nil end
Public Instance Methods
configure(config)
click to toggle source
# File lib/libis/metadata/downloader.rb, line 30 def configure(config) metadata = config[:metadata] case metadata when 'alma' @service ||= Libis::Services::Alma::SruService.new @mapper_class = Libis::Metadata::Mappers::Kuleuven when 'scope' @service = ::Libis::Services::Scope::Search.new @mapper_class = Libis::Metadata::Mappers::Scope @service.connect(config[:password], config[:password], config[:database]) else raise RuntimeError, "Service '#{service}' unknown" end @target_dir = config[:target_dir] @config = config rescue Exception => e raise RuntimeError "failed to configure metadata service: #{e.message} @ #{e.backtrace.first}" end
download(term, filename, pid = nil)
click to toggle source
# File lib/libis/metadata/downloader.rb, line 49 def download(term, filename, pid = nil) record = search(term) return nil unless record record = md_update_xml(pid, record) if pid record.save File.join(@target_dir, filename) filename end
md_update_xml(pid, record)
click to toggle source
# File lib/libis/metadata/downloader.rb, line 100 def md_update_xml(pid, record) Libis::Tools::XmlDocument.parse <<EO_XML <updateMD xmlns="http://com/exlibris/digitool/repository/api/xmlbeans"> <PID>#{pid}</PID> <metadata> <type>descriptive</type> <subType>dc</subType> <content> <![CDATA[#{record.document.to_xml(save_with: NO_DECL)}]]> </content> </metadata> </updateMD> EO_XML end
save(record, filename)
click to toggle source
# File lib/libis/metadata/downloader.rb, line 90 def save(record, filename) return false unless record record.save File.join(@target_dir, filename) true end
search(term)
click to toggle source
@return [Libis::Metadata::DublinCoreRecord]
# File lib/libis/metadata/downloader.rb, line 61 def search(term) record = case service when ::Libis::Services::Alma::SruService result = service.search(config[:field], CGI.escape("\"#{term}\""), config[:library]) raise RuntimeError "Multiple records found for #{config[:field]}=#{term}" if result.size > 1 result.empty? ? nil : ::Libis::Metadata::Marc21Record.new(result.first.root) when ::Libis::Services::Scope::Search service.query(term, type: config[:field]) service.next_record do |doc| ::Libis::Metadata::DublinCoreRecord.new(doc.to_xml) end else raise RuntimeError "Service '#{service}' unknown" end unless record raise RuntimeError, "No record found for #{config[:field]} = '#{term}'" end record.extend mapper_class record.to_dc rescue Exception => e raise RuntimeError, "Search request failed: #{e.message}" end