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
|