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