class Pitcher::Pitcher

Attributes

message[RW]

Public Instance Methods

create_message(metadata_parsed,settings) click to toggle source
# File lib/pitcher.rb, line 18
def create_message(metadata_parsed,settings)
  self.message = {}
  self.message[:cdmurl] = settings.cdmurl
  self.message[:username] = settings.username
  self.message[:password] = settings.password
  self.message[:license] = settings.license

  metadata_parsed.each do |line|
    self.message[:action] = line[:action]
    self.message[:collection] = line[:collection]

    contentdm_record = {
        'field' => 'dmrecord' ,
        'value' => line[:cdmnumber]
    }

    file_name = {
        'field' => line[:field],
        'value' => line[:value]
    }

    metadata = {'metadata' => [contentdm_record, file_name]}

    metadataList = {'metadataList' => metadata}

    self.message[:metadata] = metadataList
    # Define the server creds and the alias for the collection you want to use
    send_message(self.message)
  end
end
load_csv(file) click to toggle source

load the csv and parse

# File lib/pitcher.rb, line 12
def load_csv(file)
  metadata = File.open(file, 'r')
  metadata_parsed  = CSV.new(metadata, :headers => true, :header_converters => :symbol)
  return metadata_parsed
end
send_message(message) click to toggle source
# File lib/pitcher.rb, line 49
def send_message(message)
  # Initialize the SOAP client with the catcher service url
  client = Savon.client(
      wsdl: 'https://worldcat.org/webservices/contentdm/catcher?wsdl',
      pretty_print_xml: true,
      log: true
  )
  # Create the hash that will be sent as a message to the service with the creds and data above
  response = client.call(:process_conten_tdm, message: message)
  # build request without sending
  request = client.build_request(:process_conten_tdm, message: message)
  
  # parse request body xml, extract username and contendm record number
  doc = Nokogiri::XML(request.body)
  user = doc.at('username').text
  recordids = doc.xpath('//value')
  recordid = recordids[0].text
  # Write response to a file
  File.open('./logs/response-' + user + '.txt', 'a') { |file| file.write("\r\r" + "CONTENTdm Record Number:" + recordid + "\r" + response.body.to_hash[:process_conten_tdm_response][:return] ) }
end