libis-services 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/libis/services/alma/web_service.rb +36 -0
- data/lib/libis/services/rosetta/client.rb +7 -6
- data/lib/libis/services/rosetta/collection_handler.rb +1 -1
- data/lib/libis/services/rosetta/collection_info.rb +38 -29
- data/lib/libis/services/rosetta/oai_pmh.rb +48 -0
- data/lib/libis/services/rosetta/oai_set.rb +21 -0
- data/lib/libis/services/rosetta/service.rb +10 -6
- data/lib/libis/services/rosetta/sip_handler.rb +2 -1
- data/lib/libis/services/rosetta.rb +2 -1
- data/lib/libis/services/service_error.rb +16 -0
- data/lib/libis/services/version.rb +1 -1
- data/lib/libis/services.rb +1 -0
- data/libis-services.gemspec +1 -0
- data/spec/alma_service_spec.rb +104 -0
- data/spec/ie_data.rb +726 -0
- data/spec/primo_limo_spec.rb +327 -358
- data/spec/primo_search_spec.rb +1 -1
- data/spec/rosetta_collection_spec.rb +3 -3
- data/spec/rosetta_ie_spec.rb +3 -294
- data/spec/rosetta_oai_spec.rb +52 -0
- data/spec/rosetta_sip_spec.rb +2 -2
- data/spec/spec_helper.rb +16 -0
- metadata +26 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fb0d96192182c5e54643bfd203b7245a3269701b
|
4
|
+
data.tar.gz: df4a65fd9bcf511d3e4719a896d2ae206378f985
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f1969f4ed616aec04c489553fd2234e55b95732ce76b1484c6a28ad1e182c30143fdc538f0c8660665883ed926b9c449426e929ec8e161ebe4df892dbb40b8f6
|
7
|
+
data.tar.gz: 08bc1acb1bc9e41313e2dbdff6e234b67c6c6aeeac81ad1da93dd95d0b006222f3f6f191b22089033655e9868617542afec59c04ba94a79612b0ccc79d2389df
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require 'libis-tools'
|
3
|
+
require 'libis/services/service_error'
|
4
|
+
require 'libis/services/rest_client'
|
5
|
+
|
6
|
+
module Libis
|
7
|
+
module Services
|
8
|
+
module Alma
|
9
|
+
|
10
|
+
class WebService
|
11
|
+
include ::Libis::Services::RestClient
|
12
|
+
|
13
|
+
def initialize(url = 'https://api-eu.hosted.exlibrisgroup.com/almaws/v1/bibs')
|
14
|
+
configure(url)
|
15
|
+
end
|
16
|
+
|
17
|
+
def get_marc(alma_id, apikey = nil)
|
18
|
+
apikey ||= case alma_id
|
19
|
+
when /1480$/
|
20
|
+
'l7xx8879c82a7d7b453a887a6e6dca8300fd'
|
21
|
+
else
|
22
|
+
raise Libis::Services::ServiceError, "No Alma API key available for '#{alma_id}'"
|
23
|
+
end
|
24
|
+
get alma_id, apikey: apikey
|
25
|
+
end
|
26
|
+
|
27
|
+
protected
|
28
|
+
|
29
|
+
def result_parser(response)
|
30
|
+
Libis::Tools::XmlDocument.parse(response)
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -1,12 +1,13 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
-
require '
|
3
|
+
require 'awesome_print'
|
4
|
+
|
4
5
|
require 'libis/tools/extend/hash'
|
5
6
|
require 'libis/tools/config'
|
6
7
|
require 'libis/tools/logger'
|
7
8
|
|
8
|
-
require '
|
9
|
-
|
9
|
+
require 'libis/services/soap_client'
|
10
|
+
require 'libis/services/service_error'
|
10
11
|
module Libis
|
11
12
|
module Services
|
12
13
|
module Rosetta
|
@@ -68,8 +69,8 @@ module Libis
|
|
68
69
|
|
69
70
|
# check for errors
|
70
71
|
if data.delete :is_error
|
71
|
-
|
72
|
-
|
72
|
+
msg = data.delete(:error_description) || data.delete(:message_desc)
|
73
|
+
raise Libis::Services::ServiceError.new(msg)
|
73
74
|
end
|
74
75
|
|
75
76
|
# only delete if there is other info. ProducerService isUserExists uses this field as return value.
|
@@ -95,7 +96,7 @@ module Libis
|
|
95
96
|
data.is_a?(Array) ? data : []
|
96
97
|
end
|
97
98
|
|
98
|
-
def
|
99
|
+
def request_object_array(method, klass, args = {})
|
99
100
|
data = request_array(method, args)
|
100
101
|
data.map { |x| klass.new(x) }
|
101
102
|
end
|
@@ -25,7 +25,7 @@ module Libis
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def create(collection_info)
|
28
|
-
collection_info = collection_info.
|
28
|
+
collection_info = collection_info.to_hash.cleanup if collection_info.is_a? CollectionInfo
|
29
29
|
call :create_collection, pds_handle: @pds_handle, collection: collection_info
|
30
30
|
end
|
31
31
|
|
@@ -1,35 +1,44 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require 'virtus'
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
class MetaData
|
9
|
-
# noinspection RubyResolve
|
10
|
-
include Virtus.model
|
11
|
-
|
12
|
-
attribute :mid, String
|
13
|
-
attribute :type, String
|
14
|
-
attribute :sub_type, String
|
15
|
-
attribute :content, String
|
16
|
-
end
|
4
|
+
module Libis
|
5
|
+
module Services
|
6
|
+
module Rosetta
|
17
7
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
result[:md_source] = result[:md_source].map { |md| md.attributes }
|
32
|
-
result
|
33
|
-
end
|
8
|
+
class CollectionInfo
|
9
|
+
# noinspection RubyResolve
|
10
|
+
include Virtus.model
|
11
|
+
|
12
|
+
class MetaData
|
13
|
+
# noinspection RubyResolve
|
14
|
+
include Virtus.model
|
15
|
+
|
16
|
+
attribute :mid, String
|
17
|
+
attribute :type, String
|
18
|
+
attribute :sub_type, String
|
19
|
+
attribute :content, String
|
20
|
+
end
|
34
21
|
|
22
|
+
attribute :id, String
|
23
|
+
attribute :name, String
|
24
|
+
attribute :parent_id, String
|
25
|
+
attribute :description, String
|
26
|
+
attribute :md_dc, MetaData
|
27
|
+
attribute :md_source, Array[MetaData]
|
28
|
+
attribute :navigate, Boolean
|
29
|
+
attribute :publish, Boolean
|
30
|
+
attribute :external_id, String
|
31
|
+
attribute :external_system, String
|
32
|
+
|
33
|
+
def to_hash
|
34
|
+
result = self.attributes
|
35
|
+
result[:md_dc] = result[:md_dc].attributes if result[:md_dc]
|
36
|
+
result[:md_source] = result[:md_source].map { |md| md.attributes }
|
37
|
+
result
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
35
44
|
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'oai'
|
3
|
+
require 'libis/tools/extend/hash'
|
4
|
+
|
5
|
+
module Libis
|
6
|
+
module Services
|
7
|
+
module Rosetta
|
8
|
+
class OaiPmh
|
9
|
+
include OAI::XPath
|
10
|
+
|
11
|
+
def initialize(base_url = 'http://depot.lias.be', options = {})
|
12
|
+
@oai_client = OAI::Client.new(base_url + '/oaiprovider/request', options)
|
13
|
+
end
|
14
|
+
|
15
|
+
def sets
|
16
|
+
response = @oai_client.list_sets
|
17
|
+
response.map do |oai_set|
|
18
|
+
{name: oai_set.name, spec: oai_set.spec, description: oai_set.description}.cleanup
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def collections(institute, status = {})
|
23
|
+
result = records("#{institute}-collections", status)
|
24
|
+
result.map do |record|
|
25
|
+
record[:title] = xpath_first(record[:metadata], './/dc:title').text
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def records(spec, status = {})
|
30
|
+
options = { set: spec }
|
31
|
+
options[:resumption_token] = status[:token] if status[:token]
|
32
|
+
result = []
|
33
|
+
response = @oai_client.list_records(options)
|
34
|
+
response.each do |record|
|
35
|
+
next if record.deleted?
|
36
|
+
result << {
|
37
|
+
id: record.header.identifier,
|
38
|
+
date: record.header.datestamp,
|
39
|
+
metadata: record.metadata,
|
40
|
+
}
|
41
|
+
end
|
42
|
+
result
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'virtus'
|
2
|
+
|
3
|
+
module Libis
|
4
|
+
module Services
|
5
|
+
module Rosetta
|
6
|
+
class OaiSet
|
7
|
+
# noinspection RubyResolve
|
8
|
+
include Virtus.model nullify_blank: true
|
9
|
+
|
10
|
+
attribute :description, String
|
11
|
+
attribute :name, String
|
12
|
+
attribute :spec, String
|
13
|
+
|
14
|
+
def to_hash
|
15
|
+
super.cleanup
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -4,6 +4,7 @@ require_relative 'deposit_handler'
|
|
4
4
|
require_relative 'sip_handler'
|
5
5
|
require_relative 'ie_handler'
|
6
6
|
require_relative 'collection_handler'
|
7
|
+
require_relative 'oai_pmh'
|
7
8
|
|
8
9
|
require 'libis/tools/mets_file'
|
9
10
|
|
@@ -16,18 +17,20 @@ module Libis
|
|
16
17
|
module Services
|
17
18
|
module Rosetta
|
18
19
|
|
20
|
+
# noinspection RubyTooManyInstanceVariablesInspection
|
19
21
|
class Service
|
20
22
|
|
21
23
|
attr_reader :pds_service, :producer_service, :deposit_service, :sip_service, :ie_service, :collection_service
|
22
24
|
|
23
25
|
# @param [String] base_url
|
24
|
-
def initialize(base_url = 'http://depot.lias.be', pds_url = 'https://pds.libis.be')
|
26
|
+
def initialize(base_url = 'http://depot.lias.be', pds_url = 'https://pds.libis.be', opts = {})
|
25
27
|
@pds_service = Libis::Services::Rosetta::PdsHandler.new pds_url
|
26
|
-
@producer_service = Libis::Services::Rosetta::ProducerHandler.new base_url
|
27
|
-
@deposit_service = Libis::Services::Rosetta::DepositHandler.new base_url
|
28
|
-
@sip_service = Libis::Services::Rosetta::SipHandler.new base_url
|
29
|
-
@ie_service = Libis::Services::Rosetta::IeHandler.new base_url
|
30
|
-
@collection_service = Libis::Services::Rosetta::CollectionHandler.new base_url
|
28
|
+
@producer_service = Libis::Services::Rosetta::ProducerHandler.new base_url, opts
|
29
|
+
@deposit_service = Libis::Services::Rosetta::DepositHandler.new base_url, opts
|
30
|
+
@sip_service = Libis::Services::Rosetta::SipHandler.new base_url, opts
|
31
|
+
@ie_service = Libis::Services::Rosetta::IeHandler.new base_url, opts
|
32
|
+
@collection_service = Libis::Services::Rosetta::CollectionHandler.new base_url, opts
|
33
|
+
@oai_pmh_service = Libis::Services::Rosetta::OaiPmh.new base_url, opts
|
31
34
|
end
|
32
35
|
|
33
36
|
# @param [String] name
|
@@ -40,6 +43,7 @@ module Libis
|
|
40
43
|
@deposit_service.pds_handle = handle
|
41
44
|
@sip_service.pds_handle = handle
|
42
45
|
@ie_service.pds_handle = handle
|
46
|
+
@collection_service.pds_handle = handle
|
43
47
|
handle
|
44
48
|
end
|
45
49
|
|
@@ -1 +1,2 @@
|
|
1
|
-
require_relative 'rosetta/service'
|
1
|
+
require_relative 'rosetta/service'
|
2
|
+
require_relative 'rosetta/oai_pmh'
|
data/lib/libis/services.rb
CHANGED
@@ -3,6 +3,7 @@ module Libis
|
|
3
3
|
|
4
4
|
autoload :HttpError, 'libis/services/http_error'
|
5
5
|
autoload :SoapError, 'libis/services/soap_error'
|
6
|
+
autoload :ServiceError, 'libis/services/service_error'
|
6
7
|
|
7
8
|
autoload :SoapClient, 'libis/services/soap_client'
|
8
9
|
autoload :RestClient, 'libis/services/rest_client'
|
data/libis-services.gemspec
CHANGED
@@ -32,6 +32,7 @@ Gem::Specification.new do |gem|
|
|
32
32
|
gem.add_runtime_dependency 'highline', '~> 1.7'
|
33
33
|
gem.add_runtime_dependency 'savon', '~> 2.11'
|
34
34
|
gem.add_runtime_dependency 'rest-client', '~> 1.8'
|
35
|
+
gem.add_runtime_dependency 'oai', '~> 0.4'
|
35
36
|
gem.add_runtime_dependency 'virtus', '~> 1.0'
|
36
37
|
gem.add_runtime_dependency 'write_xlsx', '~> 0.83'
|
37
38
|
gem.add_runtime_dependency 'awesome_print', '~> 1.6'
|
@@ -0,0 +1,104 @@
|
|
1
|
+
require_relative 'spec_helper'
|
2
|
+
require 'awesome_print'
|
3
|
+
|
4
|
+
require 'libis/services/alma/web_service'
|
5
|
+
|
6
|
+
describe 'Alma web service' do
|
7
|
+
let(:subject) { Libis::Services::Alma::WebService.new }
|
8
|
+
|
9
|
+
context 'marc' do
|
10
|
+
|
11
|
+
let(:record) {
|
12
|
+
{
|
13
|
+
leader: '01206nas 2200337u 4500',
|
14
|
+
controlfield: ['9930800070101480', '20151015113543.0', '881205c19679999be r|p|| 0|||a|dut c'],
|
15
|
+
datafield: [
|
16
|
+
{
|
17
|
+
subfield: '(BeLVLBS)003080007LBS01-Aleph',
|
18
|
+
:@tag => '035', :@ind1 => ' ', :@ind2 => ' '
|
19
|
+
}, {
|
20
|
+
subfield: '(EXLNZ-32KUL_LIBIS_NETWORK)9930800070101471',
|
21
|
+
:@tag => '035', :@ind1 => ' ', :@ind2 => ' '
|
22
|
+
}, {
|
23
|
+
subfield: 'Kerk en leven. Bisdom Antwerpen (0991).',
|
24
|
+
:@tag => '245', :@ind1 => '0', :@ind2 => '0'
|
25
|
+
}, {
|
26
|
+
subfield: 'K & L',
|
27
|
+
:@tag => '246', :@ind1 => '3', :@ind2 => '3'
|
28
|
+
}, {
|
29
|
+
subfield: ['Antwerpen', 'Kerk en leven,', '1967-.'],
|
30
|
+
:@tag => '260', :@ind1 => ' ', :@ind2 => ' '
|
31
|
+
}, {
|
32
|
+
subfield: 'Weekly',
|
33
|
+
:@tag => '310', :@ind1 => ' ', :@ind2 => ' '
|
34
|
+
}, {
|
35
|
+
subfield: %w(text rdacontent),
|
36
|
+
:@tag => '336', :@ind1 => ' ', :@ind2 => ' '
|
37
|
+
}, {
|
38
|
+
subfield: %w(computer rdamedia),
|
39
|
+
:@tag => '337', :@ind1 => ' ', :@ind2 => ' '
|
40
|
+
}, {
|
41
|
+
subfield: ['online resource', 'rdacarrier'],
|
42
|
+
:@tag => '338', :@ind1 => ' ', :@ind2 => ' '
|
43
|
+
}, {
|
44
|
+
subfield: 'Online',
|
45
|
+
:@tag => '340', :@ind1 => ' ', :@ind2 => ' '
|
46
|
+
}, {
|
47
|
+
subfield: 'Digitale kopie van de gedrukte uitgave',
|
48
|
+
:@tag => '500', :@ind1 => ' ', :@ind2 => ' '
|
49
|
+
}, {
|
50
|
+
subfield: 'E-journals',
|
51
|
+
:@tag => '653', :@ind1 => ' ', :@ind2 => '6'
|
52
|
+
}, {
|
53
|
+
subfield: 'Collectie Kerk en Leven',
|
54
|
+
:@tag => '699', :@ind1 => ' ', :@ind2 => ' '
|
55
|
+
}, {
|
56
|
+
subfield: ['KADOC', 'C1', 'Kerken en religie', '(ODIS-HT)'],
|
57
|
+
:@tag => '650', :@ind1 => ' ', :@ind2 => '7'
|
58
|
+
}, {
|
59
|
+
subfield: ['KADOC', 'Antwerpen [deelgemeente in gemeente Antwerpen - BE]', '(ODIS-GEO)10560000006504'],
|
60
|
+
:@tag => '650', :@ind1 => ' ', :@ind2 => '7'
|
61
|
+
}, {
|
62
|
+
subfield: ['KADOC', 'Bisdom Antwerpen (1961-heden)', '(ODIS-ORG)9284'],
|
63
|
+
:@tag => '650', :@ind1 => ' ', :@ind2 => '7'
|
64
|
+
}, {
|
65
|
+
subfield: ['KADOC', 'Studiecentrum voor Zielzorg en Predicatie', '(ODIS-ORG)24894'],
|
66
|
+
:@tag => '650', :@ind1 => ' ', :@ind2 => '7'
|
67
|
+
}, {
|
68
|
+
subfield: 'KYE000486',
|
69
|
+
:@tag => '983', :@ind1 => ' ', :@ind2 => ' '
|
70
|
+
}, {
|
71
|
+
subfield: ['EKAD', '(2007)39-42, 44, 46-49, 51-52'],
|
72
|
+
:@tag => '993', :@ind1 => ' ', :@ind2 => ' '
|
73
|
+
}, {
|
74
|
+
subfield: ['EKAD', '(2008)1-28, 32-53'],
|
75
|
+
:@tag => '993', :@ind1 => ' ', :@ind2 => ' '
|
76
|
+
}, {
|
77
|
+
subfield: ['EKAD', '(2009)1-34, 36-38'],
|
78
|
+
:@tag => '993', :@ind1 => ' ', :@ind2 => ' '
|
79
|
+
}, {
|
80
|
+
subfield: ['EKAD', '(2011)1-13, 15-36, 45-52'],
|
81
|
+
:@tag => '993', :@ind1 => ' ', :@ind2 => ' '
|
82
|
+
}, {
|
83
|
+
subfield: ['EKAD', 'KADOC elektronische tijdschriften'],
|
84
|
+
:@tag => '995', :@ind1 => ' ', :@ind2 => ' '
|
85
|
+
}, {
|
86
|
+
subfield: ['EKAD', 'KADOC lopende periodiek'],
|
87
|
+
:@tag => '995', :@ind1 => ' ', :@ind2 => ' '
|
88
|
+
}, {
|
89
|
+
subfield: ['KADOC', 'online', '201510', 'W', 'Collectie Kerk en Leven', 'local'],
|
90
|
+
:@tag => '996', :@ind1 => ' ', :@ind2 => ' '
|
91
|
+
}
|
92
|
+
],
|
93
|
+
}
|
94
|
+
}
|
95
|
+
|
96
|
+
it 'get record' do
|
97
|
+
result = subject.get_marc('9930800070101480', 'l7xx8879c82a7d7b453a887a6e6dca8300fd').
|
98
|
+
to_hash(:convert_tags_to => lambda { |tag| tag.snakecase.to_sym })
|
99
|
+
check_container(record, result[:bib][:record])
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
103
|
+
|
104
|
+
end
|