Class: Dor::SuriService

Inherits:
Object
  • Object
show all
Defined in:
lib/dor/services/suri_service.rb

Class Method Summary collapse

Class Method Details

.mint_id(quantity = nil) ⇒ Object

If Dor::Config.suri.mint_ids is set to true, then this method returns Config.suri.id_namespace:id_from_suri Throws an exception if there were any problems



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/dor/services/suri_service.rb', line 11

def self.mint_id(quantity = nil)
  want_array = quantity.is_a?(Numeric)
  quantity = 1 if quantity.nil?
  ids = []
  if Config.suri.mint_ids
    # Post with no body
    resource = RestClient::Resource.new("#{Config.suri.url}/suri2/namespaces/#{Config.suri.id_namespace}",
                                        user: Config.suri.user, password: Config.suri.pass)
    ids = resource["identifiers?quantity=#{quantity}"].post('').chomp.split(/\n/).collect { |id| "#{Config.suri.id_namespace}:#{id.strip}" }
  else
    repo = ActiveFedora::Base.respond_to?(:connection_for_pid) ? ActiveFedora::Base.connection_for_pid(0) : ActiveFedora.fedora.connection
    resp = Nokogiri::XML(repo.api.next_pid(numPIDs: quantity))
    ids = resp.xpath('/pidList/pid').collect(&:text)
    # With modernish (circa 2015/6) dependencies, including Nokogiri and
    # ActiveFedora/Rubydora, `ids` is `[]` above. If that is the case, try
    # the XPath that works (confirmed with most recent `hydra_etd` work)
    ids = resp.xpath('/xmlns:pidList/xmlns:pid').collect(&:text) if ids.empty? && resp.root.namespaces.any?
  end
  want_array ? ids : ids.first

  # rescue Exception => e
  #   Rails.logger.error("Unable to mint id from suri: #{e.to_s}")
  #   raise e
end