libis-services 0.0.2 → 0.0.3
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 +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
|