libis-services 1.0.5 → 1.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
 - data/lib/libis/services/aleph/search.rb +1 -1
 - data/lib/libis/services/oai.rb +39 -16
 - data/lib/libis/services/oracle_client.rb +27 -4
 - data/lib/libis/services/rosetta/client.rb +10 -7
 - data/lib/libis/services/rosetta/collection_handler.rb +1 -1
 - data/lib/libis/services/rosetta/deposit_handler.rb +1 -1
 - data/lib/libis/services/rosetta/ie_handler.rb +2 -1
 - data/lib/libis/services/rosetta/oai_pmh.rb +4 -4
 - data/lib/libis/services/rosetta/producer.rb +2 -1
 - data/lib/libis/services/rosetta/producer_agent.rb +56 -0
 - data/lib/libis/services/rosetta/producer_handler.rb +9 -4
 - data/lib/libis/services/rosetta/service.rb +3 -2
 - data/lib/libis/services/rosetta/sip_handler.rb +1 -1
 - data/lib/libis/services/rosetta/user.rb +2 -1
 - data/lib/libis/services/rosetta/user_manager.rb +1 -1
 - data/lib/libis/services/version.rb +1 -1
 - data/libis-services.gemspec +4 -3
 - data/spec/alma_service_spec.rb +12 -134
 - data/spec/ie_data.rb +1 -329
 - data/spec/rosetta_auth_spec.rb +5 -4
 - data/spec/rosetta_collection_spec.rb +9 -20
 - data/spec/rosetta_ie_spec.rb +3 -16
 - data/spec/rosetta_oai_spec.rb +50 -11
 - data/spec/rosetta_pds_spec.rb +4 -3
 - data/spec/rosetta_producer_spec.rb +57 -52
 - data/spec/scope_search_spec.rb +2 -2
 - data/spec/spec_helper.rb +47 -20
 - metadata +22 -8
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 2 
     | 
    
         
            +
            SHA256:
         
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: d769686dc6aacfd5c2284f26e692fe0bb9b2dddcaf7493d39363395b043846c6
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 327783e9345a9f65aee921dda2f834c6610acc9df6658fa3586dc449b01781bc
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 84ec4e272d57865eeca0454d5f7348bc4065a6a34202e3e9982e63c761b4c408125595608429209f02a0788f7b51024da9318e095c1a99e30fb74eadcfbc2fc6
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 9ecfd46c5bf0ee6f60c204d556ce4590023d1a76e074781ecb2cf055527ca8de7693c78f49d1254e4c750db891c01b521bea9cfda8f8c1cc3e4cbc62d557e1b5
         
     | 
    
        data/lib/libis/services/oai.rb
    CHANGED
    
    | 
         @@ -1,5 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'oai'
         
     | 
| 
       2 
2 
     | 
    
         
             
            require 'libis/tools/extend/hash'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'libis/tools/xml_document'
         
     | 
| 
       3 
4 
     | 
    
         
             
            require 'libis/services/service_error'
         
     | 
| 
       4 
5 
     | 
    
         | 
| 
       5 
6 
     | 
    
         
             
            module Libis
         
     | 
| 
         @@ -8,15 +9,24 @@ module Libis 
     | 
|
| 
       8 
9 
     | 
    
         
             
                  include OAI::XPath
         
     | 
| 
       9 
10 
     | 
    
         | 
| 
       10 
11 
     | 
    
         
             
                  class Query
         
     | 
| 
       11 
     | 
    
         
            -
                    attr_accessor :from, :until, :set, :metadata_prefix
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
                    def  
     | 
| 
       14 
     | 
    
         
            -
                      @ 
     | 
| 
       15 
     | 
    
         
            -
                      @metadata_prefix  
     | 
| 
      
 13 
     | 
    
         
            +
                    def initialize(options = {})
         
     | 
| 
      
 14 
     | 
    
         
            +
                      @options = options
         
     | 
| 
      
 15 
     | 
    
         
            +
                      @options[:metadata_prefix] ||= 'oai_dc'
         
     | 
| 
      
 16 
     | 
    
         
            +
                    end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                    def [](key, value)
         
     | 
| 
      
 19 
     | 
    
         
            +
                      @options[key] = value
         
     | 
| 
       16 
20 
     | 
    
         
             
                    end
         
     | 
| 
       17 
21 
     | 
    
         | 
| 
       18 
22 
     | 
    
         
             
                    def to_hash
         
     | 
| 
       19 
     | 
    
         
            -
                      {  
     | 
| 
      
 23 
     | 
    
         
            +
                      { 
         
     | 
| 
      
 24 
     | 
    
         
            +
                        from: @options[:from],
         
     | 
| 
      
 25 
     | 
    
         
            +
                        until: @options[:until],
         
     | 
| 
      
 26 
     | 
    
         
            +
                        metadata_prefix: @options[:metadata_prefix],
         
     | 
| 
      
 27 
     | 
    
         
            +
                        set: @options[:set],
         
     | 
| 
      
 28 
     | 
    
         
            +
                        resumption_token: @options[:token] || @options[:resumption_token]
         
     | 
| 
      
 29 
     | 
    
         
            +
                      }.cleanup
         
     | 
| 
       20 
30 
     | 
    
         
             
                    end
         
     | 
| 
       21 
31 
     | 
    
         | 
| 
       22 
32 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -35,28 +45,41 @@ module Libis 
     | 
|
| 
       35 
45 
     | 
    
         
             
                    do_oai_request(:list_sets, options)
         
     | 
| 
       36 
46 
     | 
    
         
             
                  end
         
     | 
| 
       37 
47 
     | 
    
         | 
| 
       38 
     | 
    
         
            -
                  def  
     | 
| 
      
 48 
     | 
    
         
            +
                  def metadata_formats(identifier = nil)
         
     | 
| 
       39 
49 
     | 
    
         
             
                    do_oai_request(:list_metadata_formats, {identifier: identifier})
         
     | 
| 
       40 
50 
     | 
    
         
             
                  end
         
     | 
| 
       41 
51 
     | 
    
         | 
| 
       42 
     | 
    
         
            -
                  def identifiers( 
     | 
| 
       43 
     | 
    
         
            -
                     
     | 
| 
       44 
     | 
    
         
            -
                    do_oai_request(:list_identifiers, options)
         
     | 
| 
      
 52 
     | 
    
         
            +
                  def identifiers(token_or_query = nil)
         
     | 
| 
      
 53 
     | 
    
         
            +
                    do_oai_request(:list_identifiers, token_or_query_to_hash(token_or_query))
         
     | 
| 
       45 
54 
     | 
    
         
             
                  end
         
     | 
| 
       46 
55 
     | 
    
         | 
| 
       47 
     | 
    
         
            -
                  def records( 
     | 
| 
       48 
     | 
    
         
            -
                     
     | 
| 
       49 
     | 
    
         
            -
                    do_oai_request(:list_records, options)
         
     | 
| 
      
 56 
     | 
    
         
            +
                  def records(token_or_query = nil)
         
     | 
| 
      
 57 
     | 
    
         
            +
                    do_oai_request(:list_records, token_or_query_to_hash(token_or_query))
         
     | 
| 
       50 
58 
     | 
    
         
             
                  end
         
     | 
| 
       51 
59 
     | 
    
         | 
| 
       52 
     | 
    
         
            -
                  def record(identifier, metadata_prefix)
         
     | 
| 
      
 60 
     | 
    
         
            +
                  def record(identifier, metadata_prefix = 'oai_dc')
         
     | 
| 
       53 
61 
     | 
    
         
             
                    do_oai_request(:get_record, identifier: identifier, metadata_prefix: metadata_prefix)
         
     | 
| 
       54 
62 
     | 
    
         
             
                  end
         
     | 
| 
       55 
63 
     | 
    
         | 
| 
       56 
     | 
    
         
            -
                   
     | 
| 
      
 64 
     | 
    
         
            +
                  protected
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                  def token_or_query_to_hash(token_or_query)
         
     | 
| 
      
 67 
     | 
    
         
            +
                    case token_or_query
         
     | 
| 
      
 68 
     | 
    
         
            +
                    when Hash
         
     | 
| 
      
 69 
     | 
    
         
            +
                      Query.new(token_or_query).to_hash
         
     | 
| 
      
 70 
     | 
    
         
            +
                    when Query
         
     | 
| 
      
 71 
     | 
    
         
            +
                      token_or_query.to_hash
         
     | 
| 
      
 72 
     | 
    
         
            +
                    when String
         
     | 
| 
      
 73 
     | 
    
         
            +
                      { resumption_token: token_or_query }
         
     | 
| 
      
 74 
     | 
    
         
            +
                    else
         
     | 
| 
      
 75 
     | 
    
         
            +
                      {}
         
     | 
| 
      
 76 
     | 
    
         
            +
                    end
         
     | 
| 
      
 77 
     | 
    
         
            +
                  end
         
     | 
| 
       57 
78 
     | 
    
         | 
| 
      
 79 
     | 
    
         
            +
                  private
         
     | 
| 
      
 80 
     | 
    
         
            +
                  
         
     | 
| 
       58 
81 
     | 
    
         
             
                  def do_oai_request(method, options = {})
         
     | 
| 
       59 
     | 
    
         
            -
                    response = @oai_client.send(method, options.cleanup)
         
     | 
| 
      
 82 
     | 
    
         
            +
                    response = options.cleanup.empty? ? @oai_client.send(method): @oai_client.send(method, options.cleanup)
         
     | 
| 
       60 
83 
     | 
    
         
             
                    object_to_hash(response)
         
     | 
| 
       61 
84 
     | 
    
         
             
                  rescue OAI::Exception => e
         
     | 
| 
       62 
85 
     | 
    
         
             
                    raise Libis::Services::ServiceError, "OAI Error: #{e.code} - #{e.message}"
         
     | 
| 
         @@ -71,7 +94,7 @@ module Libis 
     | 
|
| 
       71 
94 
     | 
    
         
             
                          h[k] = object_to_hash(v)
         
     | 
| 
       72 
95 
     | 
    
         
             
                        end
         
     | 
| 
       73 
96 
     | 
    
         
             
                      when REXML::Element
         
     | 
| 
       74 
     | 
    
         
            -
                        obj.to_s
         
     | 
| 
      
 97 
     | 
    
         
            +
                        Libis::Tools::XmlDocument.parse(obj.to_s).to_hash
         
     | 
| 
       75 
98 
     | 
    
         
             
                      when OAI::Response, OAI::Header, OAI::Record, OAI::MetadataFormat, OAI::Set
         
     | 
| 
       76 
99 
     | 
    
         
             
                        result = obj.instance_variables.map do |x|
         
     | 
| 
       77 
100 
     | 
    
         
             
                          x[1..-1].to_sym
         
     | 
| 
         @@ -1,4 +1,12 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
             
     | 
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
            if RUBY_PLATFORM == 'java'
         
     | 
| 
      
 3 
     | 
    
         
            +
              require 'java'
         
     | 
| 
      
 4 
     | 
    
         
            +
              require 'ojdbc8.jar'
         
     | 
| 
      
 5 
     | 
    
         
            +
              require 'orai18n.jar'
         
     | 
| 
      
 6 
     | 
    
         
            +
              java_import 'oracle.jdbc.pool.OracleDataSource'
         
     | 
| 
      
 7 
     | 
    
         
            +
            else
         
     | 
| 
      
 8 
     | 
    
         
            +
              require 'oci8'
         
     | 
| 
      
 9 
     | 
    
         
            +
            end
         
     | 
| 
       2 
10 
     | 
    
         | 
| 
       3 
11 
     | 
    
         
             
            module Libis
         
     | 
| 
       4 
12 
     | 
    
         
             
              module Services
         
     | 
| 
         @@ -9,12 +17,27 @@ module Libis 
     | 
|
| 
       9 
17 
     | 
    
         | 
| 
       10 
18 
     | 
    
         
             
                  def initialize(url)
         
     | 
| 
       11 
19 
     | 
    
         
             
                    @url = url
         
     | 
| 
       12 
     | 
    
         
            -
                    @oci =  
     | 
| 
      
 20 
     | 
    
         
            +
                    @oci = if RUBY_PLATFORM == 'java'
         
     | 
| 
      
 21 
     | 
    
         
            +
                      raise RuntimeError, 'Malformed database URL' unless url =~ /^(.*)\/(.*)@(.*)$/
         
     | 
| 
      
 22 
     | 
    
         
            +
                      user, pass, db = $1, $2, $3
         
     | 
| 
      
 23 
     | 
    
         
            +
                      uri = "jdbc:oracle:thin:@#{db}"
         
     | 
| 
      
 24 
     | 
    
         
            +
                      ods = OracleDataSource.new
         
     | 
| 
      
 25 
     | 
    
         
            +
                      ods.set_url(uri)
         
     | 
| 
      
 26 
     | 
    
         
            +
                      ods.set_user(user)
         
     | 
| 
      
 27 
     | 
    
         
            +
                      ods.set_password(pass)
         
     | 
| 
      
 28 
     | 
    
         
            +
                      ods.get_connection
         
     | 
| 
      
 29 
     | 
    
         
            +
                    else
         
     | 
| 
      
 30 
     | 
    
         
            +
                      OCI8.new(url)
         
     | 
| 
      
 31 
     | 
    
         
            +
                    end
         
     | 
| 
       13 
32 
     | 
    
         
             
                    ObjectSpace.define_finalizer(self, self.class.finalize(@oci))
         
     | 
| 
       14 
33 
     | 
    
         
             
                  end
         
     | 
| 
       15 
34 
     | 
    
         | 
| 
       16 
35 
     | 
    
         
             
                  def self.finalize(oci)
         
     | 
| 
       17 
     | 
    
         
            -
                     
     | 
| 
      
 36 
     | 
    
         
            +
                    if RUBY_PLATFORM == 'java'
         
     | 
| 
      
 37 
     | 
    
         
            +
                      proc { oci.close }
         
     | 
| 
      
 38 
     | 
    
         
            +
                    else
         
     | 
| 
      
 39 
     | 
    
         
            +
                      proc { oci.logoff }
         
     | 
| 
      
 40 
     | 
    
         
            +
                    end
         
     | 
| 
       18 
41 
     | 
    
         
             
                  end
         
     | 
| 
       19 
42 
     | 
    
         | 
| 
       20 
43 
     | 
    
         
             
                  # @param [Boolean] value
         
     | 
| 
         @@ -60,7 +83,7 @@ module Libis 
     | 
|
| 
       60 
83 
     | 
    
         | 
| 
       61 
84 
     | 
    
         
             
                  def run(script, parameters = [])
         
     | 
| 
       62 
85 
     | 
    
         
             
                    params = ''
         
     | 
| 
       63 
     | 
    
         
            -
                    params = "\"" + parameters.join("\" \"") + "\"" if parameters 
     | 
| 
      
 86 
     | 
    
         
            +
                    params = "\"" + parameters.join("\" \"") + "\"" if parameters&.size.to_i > 0
         
     | 
| 
       64 
87 
     | 
    
         
             
                    process_result `sqlplus -S #{url} @#{script} #{params}`
         
     | 
| 
       65 
88 
     | 
    
         
             
                  end
         
     | 
| 
       66 
89 
     | 
    
         | 
| 
         @@ -19,6 +19,7 @@ module Libis 
     | 
|
| 
       19 
19 
     | 
    
         
             
                    include ::Libis::Tools::Logger
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
       21 
21 
     | 
    
         
             
                    def initialize(section, service, options = {})
         
     | 
| 
      
 22 
     | 
    
         
            +
                      @clear_soap_action = true
         
     | 
| 
       22 
23 
     | 
    
         
             
                      basic_auth = options.delete(:basic_auth)
         
     | 
| 
       23 
24 
     | 
    
         
             
                      if basic_auth
         
     | 
| 
       24 
25 
     | 
    
         
             
                        options[:basic_auth] = [
         
     | 
| 
         @@ -27,7 +28,7 @@ module Libis 
     | 
|
| 
       27 
28 
     | 
    
         
             
                        ]
         
     | 
| 
       28 
29 
     | 
    
         
             
                      end
         
     | 
| 
       29 
30 
     | 
    
         
             
                      opts = {strip_namespaces: true, logger: ::Libis::Tools::Config.logger}.merge options
         
     | 
| 
       30 
     | 
    
         
            -
                      base_url = opts.delete(:url) || ' 
     | 
| 
      
 31 
     | 
    
         
            +
                      base_url = opts.delete(:url) || 'https://repository.teneo.libis.be'
         
     | 
| 
       31 
32 
     | 
    
         
             
                      configure "#{base_url}/dpsws/#{section}/#{service}?wsdl", opts
         
     | 
| 
       32 
33 
     | 
    
         
             
                    end
         
     | 
| 
       33 
34 
     | 
    
         | 
| 
         @@ -46,16 +47,18 @@ module Libis 
     | 
|
| 
       46 
47 
     | 
    
         | 
| 
       47 
48 
     | 
    
         
             
                    protected
         
     | 
| 
       48 
49 
     | 
    
         | 
| 
      
 50 
     | 
    
         
            +
                    attr_reader :clear_soap_action
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
       49 
52 
     | 
    
         
             
                    def call_raw(operation, args = {})
         
     | 
| 
       50 
     | 
    
         
            -
                       
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
                             end
         
     | 
| 
      
 53 
     | 
    
         
            +
                      opts = {}
         
     | 
| 
      
 54 
     | 
    
         
            +
                      opts[:soap_action] = nil if clear_soap_action
         
     | 
| 
      
 55 
     | 
    
         
            +
                      opts[:headers] = {:Authorization => @auth} if @auth
         
     | 
| 
      
 56 
     | 
    
         
            +
                      data = request operation.to_s.to_sym, args, opts
         
     | 
| 
       55 
57 
     | 
    
         | 
| 
       56 
58 
     | 
    
         
             
                      # remove wrapper
         
     | 
| 
       57 
59 
     | 
    
         
             
                      data = data["#{operation}_response".to_sym]
         
     | 
| 
       58 
     | 
    
         
            -
                      data. 
     | 
| 
      
 60 
     | 
    
         
            +
                      data.delete_if {|key, _value| key.to_s =~ /^@/}
         
     | 
| 
      
 61 
     | 
    
         
            +
                      # data.delete(:'@xmlns:ns1')
         
     | 
| 
       59 
62 
     | 
    
         | 
| 
       60 
63 
     | 
    
         
             
                      # drill down the returned Hash
         
     | 
| 
       61 
64 
     | 
    
         
             
                      data = data.first.last while data.is_a?(Hash) && 1 == data.size
         
     | 
| 
         @@ -12,7 +12,7 @@ module Libis 
     | 
|
| 
       12 
12 
     | 
    
         
             
                  class CollectionHandler < Libis::Services::Rosetta::Client
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
14 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
                    def initialize(base_url = ' 
     | 
| 
      
 15 
     | 
    
         
            +
                    def initialize(base_url = 'https://repository.teneo.libis.be', options = {})
         
     | 
| 
       16 
16 
     | 
    
         
             
                      super 'repository', 'CollectionWebServices', {url: base_url}.merge(options)
         
     | 
| 
       17 
17 
     | 
    
         
             
                    end
         
     | 
| 
       18 
18 
     | 
    
         | 
| 
         @@ -9,7 +9,7 @@ module Libis 
     | 
|
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
                  class DepositHandler < ::Libis::Services::Rosetta::Client
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
                    def initialize(base_url = ' 
     | 
| 
      
 12 
     | 
    
         
            +
                    def initialize(base_url = 'https://repository.teneo.libis.be', options = {})
         
     | 
| 
       13 
13 
     | 
    
         
             
                      super 'deposit', 'DepositWebServices', {url: base_url}.merge(options)
         
     | 
| 
       14 
14 
     | 
    
         
             
                    end
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
         @@ -1,6 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # encoding: utf-8
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            require 'libis/tools/xml_document'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'libis/tools/mets_file'
         
     | 
| 
       4 
5 
     | 
    
         
             
            require_relative 'client'
         
     | 
| 
       5 
6 
     | 
    
         | 
| 
       6 
7 
     | 
    
         
             
            module Libis
         
     | 
| 
         @@ -9,7 +10,7 @@ module Libis 
     | 
|
| 
       9 
10 
     | 
    
         | 
| 
       10 
11 
     | 
    
         
             
                  class IeHandler < Libis::Services::Rosetta::Client
         
     | 
| 
       11 
12 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
                    def initialize(base_url = ' 
     | 
| 
      
 13 
     | 
    
         
            +
                    def initialize(base_url = 'https://repository.teneo.libis.be', options = {})
         
     | 
| 
       13 
14 
     | 
    
         
             
                      super 'repository', 'IEWebServices', {url: base_url}.merge(options)
         
     | 
| 
       14 
15 
     | 
    
         
             
                    end
         
     | 
| 
       15 
16 
     | 
    
         | 
| 
         @@ -1,17 +1,17 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'libis/services/oai'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'libis/tools/xml_document'
         
     | 
| 
       2 
3 
     | 
    
         | 
| 
       3 
4 
     | 
    
         
             
            module Libis
         
     | 
| 
       4 
5 
     | 
    
         
             
              module Services
         
     | 
| 
       5 
6 
     | 
    
         
             
                module Rosetta
         
     | 
| 
       6 
7 
     | 
    
         
             
                  class OaiPmh < Libis::Services::Oai
         
     | 
| 
       7 
8 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
                    def initialize(base_url = ' 
     | 
| 
      
 9 
     | 
    
         
            +
                    def initialize(base_url = 'https://repository.teneo.libis.be', options = {})
         
     | 
| 
       9 
10 
     | 
    
         
             
                      super(base_url + '/oaiprovider/request')
         
     | 
| 
       10 
11 
     | 
    
         
             
                    end
         
     | 
| 
       11 
12 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
                    def collections(institute,  
     | 
| 
       13 
     | 
    
         
            -
                       
     | 
| 
       14 
     | 
    
         
            -
                      records(token, query)
         
     | 
| 
      
 13 
     | 
    
         
            +
                    def collections(institute, token_or_query = nil)
         
     | 
| 
      
 14 
     | 
    
         
            +
                      records(token_or_query_to_hash(token_or_query).merge(set: "#{institute}-collections"))
         
     | 
| 
       15 
15 
     | 
    
         
             
                    end
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
       17 
17 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -61,8 +61,9 @@ module Libis 
     | 
|
| 
       61 
61 
     | 
    
         
             
                          strip_namespaces: true,
         
     | 
| 
       62 
62 
     | 
    
         
             
                          delete_namespace_attributes: true,
         
     | 
| 
       63 
63 
     | 
    
         
             
                          empty_tag_value: nil,
         
     | 
| 
       64 
     | 
    
         
            -
                          convert_tags_to: lambda 
     | 
| 
      
 64 
     | 
    
         
            +
                          convert_tags_to: lambda(&:to_sym)
         
     | 
| 
       65 
65 
     | 
    
         
             
                      )
         
     | 
| 
      
 66 
     | 
    
         
            +
                      # noinspection RubyArgCount
         
     | 
| 
       66 
67 
     | 
    
         
             
                      self.new(hash[:producer_info])
         
     | 
| 
       67 
68 
     | 
    
         
             
                    end
         
     | 
| 
       68 
69 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -0,0 +1,56 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'virtus'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Libis
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Services
         
     | 
| 
      
 5 
     | 
    
         
            +
                module Rosetta
         
     | 
| 
      
 6 
     | 
    
         
            +
                  class ProducerAgent
         
     | 
| 
      
 7 
     | 
    
         
            +
                    # noinspection RubyResolve
         
     | 
| 
      
 8 
     | 
    
         
            +
                    include Virtus.model(nullify_blank: true)
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                    attribute :first_name, String
         
     | 
| 
      
 11 
     | 
    
         
            +
                    attribute :last_name, String
         
     | 
| 
      
 12 
     | 
    
         
            +
                    attribute :user_name, String
         
     | 
| 
      
 13 
     | 
    
         
            +
                    attribute :job_title, String
         
     | 
| 
      
 14 
     | 
    
         
            +
                    attribute :street, String
         
     | 
| 
      
 15 
     | 
    
         
            +
                    attribute :suburb, String
         
     | 
| 
      
 16 
     | 
    
         
            +
                    attribute :city, String
         
     | 
| 
      
 17 
     | 
    
         
            +
                    attribute :country, String
         
     | 
| 
      
 18 
     | 
    
         
            +
                    attribute :address_5, String
         
     | 
| 
      
 19 
     | 
    
         
            +
                    attribute :zip, String
         
     | 
| 
      
 20 
     | 
    
         
            +
                    attribute :email_address, String
         
     | 
| 
      
 21 
     | 
    
         
            +
                    attribute :web_site_url, String
         
     | 
| 
      
 22 
     | 
    
         
            +
                    attribute :telephone_1, String
         
     | 
| 
      
 23 
     | 
    
         
            +
                    attribute :telephone_2, String
         
     | 
| 
      
 24 
     | 
    
         
            +
                    attribute :user_group, String
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                    def to_hash
         
     | 
| 
      
 27 
     | 
    
         
            +
                      attributes.cleanup
         
     | 
| 
      
 28 
     | 
    
         
            +
                    end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                    def to_xml
         
     | 
| 
      
 31 
     | 
    
         
            +
                      Libis::Tools::XmlDocument.build do |xml|
         
     | 
| 
      
 32 
     | 
    
         
            +
                        # noinspection RubyResolve
         
     | 
| 
      
 33 
     | 
    
         
            +
                        xml.user_info {
         
     | 
| 
      
 34 
     | 
    
         
            +
                          xml.parent.default_namespace = 'http://www.exlibrisgroup.com/xsd/dps/backoffice/service'
         
     | 
| 
      
 35 
     | 
    
         
            +
                          self.attributes.each do |name, value|
         
     | 
| 
      
 36 
     | 
    
         
            +
                            xml.send(name, xmlns: '').text(value) if value
         
     | 
| 
      
 37 
     | 
    
         
            +
                          end
         
     | 
| 
      
 38 
     | 
    
         
            +
                        }
         
     | 
| 
      
 39 
     | 
    
         
            +
                      end.to_xml(save_with: Nokogiri::XML::Node::SaveOptions::DEFAULT_XML | Nokogiri::XML::Node::SaveOptions::NO_DECLARATION)
         
     | 
| 
      
 40 
     | 
    
         
            +
                    end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                    def self.from_xml(xml)
         
     | 
| 
      
 43 
     | 
    
         
            +
                      xml_doc = Libis::Tools::XmlDocument.parse(xml)
         
     | 
| 
      
 44 
     | 
    
         
            +
                      hash = xml_doc.to_hash(
         
     | 
| 
      
 45 
     | 
    
         
            +
                          strip_namespaces: true,
         
     | 
| 
      
 46 
     | 
    
         
            +
                          delete_namespace_attributes: true,
         
     | 
| 
      
 47 
     | 
    
         
            +
                          empty_tag_value: nil,
         
     | 
| 
      
 48 
     | 
    
         
            +
                          convert_tags_to: lambda(&:to_sym)
         
     | 
| 
      
 49 
     | 
    
         
            +
                      )
         
     | 
| 
      
 50 
     | 
    
         
            +
                      # noinspection RubyArgCount
         
     | 
| 
      
 51 
     | 
    
         
            +
                      self.new(hash[:producer_info])
         
     | 
| 
      
 52 
     | 
    
         
            +
                    end
         
     | 
| 
      
 53 
     | 
    
         
            +
                  end
         
     | 
| 
      
 54 
     | 
    
         
            +
                end
         
     | 
| 
      
 55 
     | 
    
         
            +
              end
         
     | 
| 
      
 56 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -2,6 +2,7 @@ 
     | 
|
| 
       2 
2 
     | 
    
         
             
            require 'libis/tools/extend/hash'
         
     | 
| 
       3 
3 
     | 
    
         
             
            require 'libis/tools/xml_document'
         
     | 
| 
       4 
4 
     | 
    
         
             
            require_relative 'producer'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require_relative 'producer_agent'
         
     | 
| 
       5 
6 
     | 
    
         
             
            require_relative 'user'
         
     | 
| 
       6 
7 
     | 
    
         | 
| 
       7 
8 
     | 
    
         
             
            require_relative 'client'
         
     | 
| 
         @@ -12,7 +13,7 @@ module Libis 
     | 
|
| 
       12 
13 
     | 
    
         
             
                  class ProducerHandler < Libis::Services::Rosetta::Client
         
     | 
| 
       13 
14 
     | 
    
         | 
| 
       14 
15 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
                    def initialize(base_url = ' 
     | 
| 
      
 16 
     | 
    
         
            +
                    def initialize(base_url = 'https://repository.teneo.libis.be', options = {})
         
     | 
| 
       16 
17 
     | 
    
         
             
                      super 'backoffice', 'ProducerWebServices', {url: base_url}.merge(options)
         
     | 
| 
       17 
18 
     | 
    
         
             
                    end
         
     | 
| 
       18 
19 
     | 
    
         | 
| 
         @@ -39,6 +40,7 @@ module Libis 
     | 
|
| 
       39 
40 
     | 
    
         
             
                    end
         
     | 
| 
       40 
41 
     | 
    
         | 
| 
       41 
42 
     | 
    
         
             
                    def new_producer(producer_info)
         
     | 
| 
      
 43 
     | 
    
         
            +
                      # noinspection RubyArgCount
         
     | 
| 
       42 
44 
     | 
    
         
             
                      producer_info = Rosetta::Producer.new(producer_info) unless producer_info.is_a?(Rosetta::Producer)
         
     | 
| 
       43 
45 
     | 
    
         
             
                      call :create_producer, arg0: @pds_handle, arg1: producer_info.to_xml
         
     | 
| 
       44 
46 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -51,17 +53,18 @@ module Libis 
     | 
|
| 
       51 
53 
     | 
    
         
             
                      if agent_info
         
     | 
| 
       52 
54 
     | 
    
         
             
                        info = agent(agent_id)
         
     | 
| 
       53 
55 
     | 
    
         
             
                        return nil if info.nil?
         
     | 
| 
       54 
     | 
    
         
            -
                        (agent_info.is_a?(Rosetta:: 
     | 
| 
      
 56 
     | 
    
         
            +
                        (agent_info.is_a?(Rosetta::ProducerAgent) ? agent_info.attributes : agent_info).each do |name, value|
         
     | 
| 
       55 
57 
     | 
    
         
             
                          info[name] = value
         
     | 
| 
       56 
58 
     | 
    
         
             
                        end
         
     | 
| 
       57 
59 
     | 
    
         
             
                        call :update_producer_agent, arg0: @pds_handle, arg1: agent_id, arg2: info.to_xml
         
     | 
| 
       58 
60 
     | 
    
         
             
                      else
         
     | 
| 
       59 
     | 
    
         
            -
                        request_object :get_producer_agent, Rosetta:: 
     | 
| 
      
 61 
     | 
    
         
            +
                        request_object :get_producer_agent, Rosetta::ProducerAgent, arg0: @pds_handle, arg1: agent_id
         
     | 
| 
       60 
62 
     | 
    
         
             
                      end
         
     | 
| 
       61 
63 
     | 
    
         
             
                    end
         
     | 
| 
       62 
64 
     | 
    
         | 
| 
       63 
65 
     | 
    
         
             
                    def new_agent(agent_info)
         
     | 
| 
       64 
     | 
    
         
            -
                       
     | 
| 
      
 66 
     | 
    
         
            +
                      # noinspection RubyArgCount
         
     | 
| 
      
 67 
     | 
    
         
            +
                      agent_info = Rosetta::ProducerAgent.new(agent_info) unless agent_info.is_a?(Rosetta::ProducerAgent)
         
     | 
| 
       65 
68 
     | 
    
         
             
                      call :create_producer_agent, arg0: @pds_handle, arg1: agent_info.to_xml
         
     | 
| 
       66 
69 
     | 
    
         
             
                    end
         
     | 
| 
       67 
70 
     | 
    
         | 
| 
         @@ -99,6 +102,7 @@ module Libis 
     | 
|
| 
       99 
102 
     | 
    
         
             
                    end
         
     | 
| 
       100 
103 
     | 
    
         | 
| 
       101 
104 
     | 
    
         
             
                    def new_contact(contact_info)
         
     | 
| 
      
 105 
     | 
    
         
            +
                      # noinspection RubyArgCount
         
     | 
| 
       102 
106 
     | 
    
         
             
                      contact_info = Rosetta::User.new(contact_info) unless contact_info.is_a?(Rosetta::User)
         
     | 
| 
       103 
107 
     | 
    
         
             
                      call :create_contact, arg0: @pds_handle, arg1: contact_info.to_xml
         
     | 
| 
       104 
108 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -108,6 +112,7 @@ module Libis 
     | 
|
| 
       108 
112 
     | 
    
         
             
                    end
         
     | 
| 
       109 
113 
     | 
    
         | 
| 
       110 
114 
     | 
    
         
             
                    def link_contact(contact_id, producer_id, primary = true)
         
     | 
| 
      
 115 
     | 
    
         
            +
                      # noinspection RubySimplifyBooleanInspection
         
     | 
| 
       111 
116 
     | 
    
         
             
                      call :link_contact_to_producer, arg0: @pds_handle, arg1: producer_id, arg2: contact_id, arg3: (!!primary).to_s.upcase
         
     | 
| 
       112 
117 
     | 
    
         
             
                    end
         
     | 
| 
       113 
118 
     | 
    
         | 
| 
         @@ -10,7 +10,8 @@ require 'libis/tools/mets_file' 
     | 
|
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
            require 'csv'
         
     | 
| 
       12 
12 
     | 
    
         
             
            require 'write_xlsx'
         
     | 
| 
       13 
     | 
    
         
            -
            require ' 
     | 
| 
      
 13 
     | 
    
         
            +
            require 'libis/tools/extend/hash'
         
     | 
| 
      
 14 
     | 
    
         
            +
            require 'libis/tools/extend/string'
         
     | 
| 
       14 
15 
     | 
    
         
             
            require 'awesome_print'
         
     | 
| 
       15 
16 
     | 
    
         | 
| 
       16 
17 
     | 
    
         
             
            require_relative '../service_error'
         
     | 
| 
         @@ -25,7 +26,7 @@ module Libis 
     | 
|
| 
       25 
26 
     | 
    
         
             
                    attr_reader :pds_service, :producer_service, :deposit_service, :sip_service, :ie_service, :collection_service
         
     | 
| 
       26 
27 
     | 
    
         | 
| 
       27 
28 
     | 
    
         
             
                    # @param [String] base_url
         
     | 
| 
       28 
     | 
    
         
            -
                    def initialize(base_url = ' 
     | 
| 
      
 29 
     | 
    
         
            +
                    def initialize(base_url = 'https://repository.teneo.libis.be', pds_url = 'https://pds.libis.be', opts = {})
         
     | 
| 
       29 
30 
     | 
    
         
             
                      @pds_service = Libis::Services::Rosetta::PdsHandler.new pds_url
         
     | 
| 
       30 
31 
     | 
    
         
             
                      @producer_service = Libis::Services::Rosetta::ProducerHandler.new base_url, opts
         
     | 
| 
       31 
32 
     | 
    
         
             
                      @deposit_service = Libis::Services::Rosetta::DepositHandler.new base_url, opts
         
     | 
| 
         @@ -11,7 +11,7 @@ module Libis 
     | 
|
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         
             
                  class SipHandler < Libis::Services::Rosetta::Client
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
     | 
    
         
            -
                    def initialize(base_url = ' 
     | 
| 
      
 14 
     | 
    
         
            +
                    def initialize(base_url = 'https://repository.teneo.libis.be', options = {})
         
     | 
| 
       15 
15 
     | 
    
         
             
                      super 'repository', 'SipWebServices', {url: base_url}.merge(options)
         
     | 
| 
       16 
16 
     | 
    
         
             
                    end
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
         @@ -60,8 +60,9 @@ module Libis 
     | 
|
| 
       60 
60 
     | 
    
         
             
                          strip_namespaces: true,
         
     | 
| 
       61 
61 
     | 
    
         
             
                          delete_namespace_attributes: true,
         
     | 
| 
       62 
62 
     | 
    
         
             
                          empty_tag_value: nil,
         
     | 
| 
       63 
     | 
    
         
            -
                          convert_tags_to: lambda 
     | 
| 
      
 63 
     | 
    
         
            +
                          convert_tags_to: lambda(&:to_sym)
         
     | 
| 
       64 
64 
     | 
    
         
             
                      )
         
     | 
| 
      
 65 
     | 
    
         
            +
                      # noinspection RubyArgCount
         
     | 
| 
       65 
66 
     | 
    
         
             
                      self.new(hash[:producer_info])
         
     | 
| 
       66 
67 
     | 
    
         
             
                    end
         
     | 
| 
       67 
68 
     | 
    
         
             
                  end
         
     |