libis-services 0.1.5 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1939b9a4c0048b76d3d44dc3a002085ad7f39e28
4
- data.tar.gz: 68fa2f7271055a8433dba8f832af917551c249d9
3
+ metadata.gz: eb98081d6394e2093ac0b8faac32ab71565907a5
4
+ data.tar.gz: dfa48fcdcf42bc7da12135dad5ef2dcac93e7ee3
5
5
  SHA512:
6
- metadata.gz: c57e4e644a234e526ffaa316114194df3fc17284e76e52c68e748d2e0d6821b856d12d110a5df40b33ccc711b1a5cc46e7e351d3a1c36bc763e469e5d33ddefd
7
- data.tar.gz: 3aa269554726807010b99a8273fd9d02db1b9486acb86ea24cd35034e3fe5bc1782a28033c9b99d9d32230a6a74bbb5b7db9ddbbc19454fc7e54a965aed50ddb
6
+ metadata.gz: 630bb576af4a70ab7cfe42bb0f2acca199f6912382b859249c90bad41e6c55450afe504e0e116a4132f4c84d037650bfde2a9ff97271240834cd73af96cf2ef3
7
+ data.tar.gz: b6c80cfadae173fa8ee98a8662c644a843b8e5a09a7267083859396c9711d31c356e7e0d098656491a3d9ef992594badfc1106ccfccb67840e9c82834f97b989
@@ -0,0 +1,96 @@
1
+ require 'oai'
2
+ require 'libis/tools/extend/hash'
3
+ require 'libis/services/service_error'
4
+
5
+ module Libis
6
+ module Services
7
+ class Oai
8
+ include OAI::XPath
9
+
10
+ class Query
11
+ attr_accessor :from, :until, :set, :metadata_prefix
12
+
13
+ def intialize(metadata_prefix = 'oai_dc')
14
+ @from = @until = @set = nil
15
+ @metadata_prefix = metadata_prefix
16
+ end
17
+
18
+ def to_hash
19
+ { from: @from, until: @until, metadata_prefix: @metadata_prefix, set: @set }.cleanup
20
+ end
21
+
22
+ end
23
+
24
+ def initialize(url, options = {})
25
+ options[:debug] = true
26
+ @oai_client = OAI::Client.new(url, options)
27
+ end
28
+
29
+ def identify
30
+ do_oai_request(:identify)
31
+ end
32
+
33
+ def sets(token = nil)
34
+ options = { resumption_token: token }
35
+ do_oai_request(:list_sets, options)
36
+ end
37
+
38
+ def metdata_formats(identifier = nil)
39
+ do_oai_request(:list_metadata_formats, {identifier: identifier})
40
+ end
41
+
42
+ def identifiers(token = nil, query = Query.new)
43
+ options = token ? {resumption_token: token} : query.to_hash
44
+ do_oai_request(:list_identifiers, options)
45
+ end
46
+
47
+ def records(token = nil, query = Query.new)
48
+ options = token ? {resumption_token: token} : query.to_hash
49
+ do_oai_request(:list_records, options)
50
+ end
51
+
52
+ def record(identifier, metadata_prefix)
53
+ do_oai_request(:get_record, identifier: identifier, metadata_prefix: metadata_prefix)
54
+ end
55
+
56
+ private
57
+
58
+ def do_oai_request(method, options = {})
59
+ response = @oai_client.send(method, options.cleanup)
60
+ object_to_hash(response)
61
+ rescue OAI::Exception => e
62
+ raise Libis::Services::ServiceError, "OAI Error: #{e.code} - #{e.message}"
63
+ end
64
+
65
+ def object_to_hash(obj)
66
+ case obj
67
+ when Array
68
+ obj.map { |x| object_to_hash(x) }
69
+ when Hash
70
+ obj.each_with_object({}) do |k,v,h|
71
+ h[k] = object_to_hash(v)
72
+ end
73
+ when REXML::Element
74
+ obj.to_s
75
+ when OAI::Response, OAI::Header, OAI::Record, OAI::MetadataFormat
76
+ result = obj.instance_variables.map do |x|
77
+ x[1..-1].to_sym
78
+ end.select do |x|
79
+ ![:_source, :doc, :resumption_block].include? x
80
+ end.each_with_object({}) do |x, h|
81
+ h[x] = object_to_hash obj.send(x)
82
+ end
83
+ if obj.methods.include?(:entries)
84
+ result[:entries] = obj.entries.map do |entry|
85
+ object_to_hash(entry)
86
+ end
87
+ end
88
+ result
89
+ else
90
+ obj
91
+ end
92
+ end
93
+
94
+ end
95
+ end
96
+ end
@@ -1,18 +1,42 @@
1
+ require 'oci8'
2
+
1
3
  module Libis
2
4
  module Services
3
5
 
4
6
  class OracleClient
5
7
 
8
+ attr_reader :oci
9
+
6
10
  def initialize(database, user, password)
7
11
  @database = database
8
12
  @user = user
9
13
  @password = password
14
+ @oci = OCI8.new(user, password, database)
15
+ ObjectSpace.define_finalizer( self, self.class.finalize(@oci) )
16
+ end
17
+
18
+ def self.finalize(oci)
19
+ proc { oci.logoff }
20
+ end
21
+
22
+ # @param [Boolean] value
23
+ def blocking=(value)
24
+ oci.non_blocking = !value
25
+ blocking?
26
+ end
27
+
28
+ def blocking?
29
+ !oci.non_blocking?
10
30
  end
11
31
 
12
32
  def call(procedure, parameters = [])
13
33
  params = ''
14
34
  params = "'" + parameters.join("','") + "'" if parameters and parameters.size > 0
15
- system "echo \"call #{procedure}(#{params});\" | sqlplus -S #{@user}/#{@password}@#{@database}"
35
+ oci.exec("call #{procedure}(#{params})")
36
+ end
37
+
38
+ def execute(statement, *bindvars, &block)
39
+ oci.exec(statement, *bindvars, &block)
16
40
  end
17
41
 
18
42
  def run(script, parameters = [])
@@ -21,10 +45,6 @@ module Libis
21
45
  process_result `sqlplus -S #{@user}/#{@password}@#{@database} @#{script} #{params}`
22
46
  end
23
47
 
24
- def execute(sql)
25
- process_result `echo \"#{sql}\" | sqlplus -S #{@user}/#{@password}@#{@database}`
26
- end
27
-
28
48
  private
29
49
 
30
50
  def process_result(log)
@@ -1,45 +1,17 @@
1
- # encoding: utf-8
2
- require 'oai'
3
- require 'libis/tools/extend/hash'
1
+ require 'libis/services/oai'
4
2
 
5
3
  module Libis
6
4
  module Services
7
5
  module Rosetta
8
- class OaiPmh
9
- include OAI::XPath
6
+ class OaiPmh < Libis::Services::Oai
10
7
 
11
8
  def initialize(base_url = 'http://depot.lias.be', options = {})
12
- @oai_client = OAI::Client.new(base_url + '/oaiprovider/request', options)
9
+ super('http://depot.lias.be')
13
10
  end
14
11
 
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
12
+ def collections(institute, token = nil, query = Query.new)
13
+ query.set = "#{institute}-collections"
14
+ records(token, query)
43
15
  end
44
16
 
45
17
  end
@@ -1,5 +1,4 @@
1
- # coding: utf-8
2
-
1
+ require 'libis/services/generic_search'
3
2
  require 'libis/services/oracle_client'
4
3
  require 'libis/tools/xml_document'
5
4
 
@@ -10,24 +9,39 @@ module Libis
10
9
  class Search
11
10
  include ::Libis::Services::GenericSearch
12
11
 
12
+ attr_reader :oracle
13
+
13
14
  def initialize
14
15
  @doc = nil
15
16
  end
16
17
 
18
+ def connect(name, password)
19
+ @oracle = OracleClient.new(
20
+ 'libis-db-scope.cc.kuleuven.be:1556/SCOPEP.kuleuven.be',
21
+ name, password
22
+ )
23
+ end
24
+
17
25
  def find(term, options = {})
18
26
  super
19
- OracleClient.new('SCOPE01', 'APLKN_ARCHV_LIAS', 'archvsc').
20
- call('kul_packages.scope_xml_meta_file_ed', [term.upcase])
21
- err_file = "/nas/vol03/oracle/scope01/#{term}_err.XML"
27
+ end
28
+
29
+ def query(term, _options = {})
30
+ @oracle.call('kul_packages.scope_xml_meta_file_ed', [term.upcase])
31
+ term = term.gsub(/[-\/]/, '_')
32
+ err_file = "/nas/vol03/oracle/SCOPEP/#{term}_err.XML"
33
+ md_file = "/nas/vol03/oracle/SCOPEP/#{term}_md.XML"
22
34
  if File.exist? err_file
23
- doc = XmlDocument.open(err_file)
24
- msg = doc.xpath('/error/error_msg').first.content
25
- msg_detail = doc.xpath('/error/error_').first.content
26
- File.delete(err_file)
35
+ doc = Libis::Tools::XmlDocument.open(err_file)
36
+ msg = doc['/error/error_msg']
37
+ detail = doc['/error/error_']
38
+ File.delete(err_file) rescue nil
27
39
  @doc = nil
28
- raise RuntimeError, "Scope search failed: '#{msg}'. Details: '#{msg_detail}'"
40
+ raise RuntimeError, "Scope search failed: '#{msg}'. Details: '#{detail}'"
41
+ elsif File.exist? md_file
42
+ @doc = Libis::Tools::XmlDocument.open(md_file)
29
43
  else
30
- @doc = XmlDocument.open("/nas/vol03/oracle/scope01/#{term}_md.XML").to_hash
44
+ raise RuntimeError, 'Scope search did not generate expected result file.'
31
45
  end
32
46
  end
33
47
 
@@ -1,5 +1,5 @@
1
1
  module Libis
2
2
  module Services
3
- VERSION = '0.1.5'
3
+ VERSION = '0.1.7'
4
4
  end
5
5
  end
@@ -0,0 +1,18 @@
1
+ require 'libis/services/oai'
2
+ require 'base64'
3
+
4
+ module Libis
5
+ module Services
6
+ module Viaa
7
+ class OaiPmh < Libis::Services::Oai
8
+
9
+ def initialize(name, password)
10
+ token = Base64.encode64("#{name}:#{password}").gsub("\n", '')
11
+ base_url = 'https://archief.viaa.be/mediahaven-oai/oai'
12
+ super(base_url, headers: {'Authorization' => "Basic #{token}"})
13
+ end
14
+
15
+ end
16
+ end
17
+ end
18
+ end
@@ -34,6 +34,7 @@ Gem::Specification.new do |spec|
34
34
  spec.add_runtime_dependency 'savon', '~> 2.11'
35
35
  spec.add_runtime_dependency 'rest-client', '~> 1.8'
36
36
  spec.add_runtime_dependency 'oai', '~> 0.4'
37
+ spec.add_runtime_dependency 'ruby-oci8', '~> 2.2.2'
37
38
  spec.add_runtime_dependency 'virtus', '~> 1.0'
38
39
  spec.add_runtime_dependency 'write_xlsx', '~> 0.83'
39
40
  spec.add_runtime_dependency 'awesome_print', '~> 1.6'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: libis-services
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kris Dekeyser
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-11 00:00:00.000000000 Z
11
+ date: 2016-07-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -164,6 +164,20 @@ dependencies:
164
164
  - - "~>"
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0.4'
167
+ - !ruby/object:Gem::Dependency
168
+ name: ruby-oci8
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: 2.2.2
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: 2.2.2
167
181
  - !ruby/object:Gem::Dependency
168
182
  name: virtus
169
183
  requirement: !ruby/object:Gem::Requirement
@@ -235,6 +249,7 @@ files:
235
249
  - lib/libis/services/extend/http_fetch.rb
236
250
  - lib/libis/services/generic_search.rb
237
251
  - lib/libis/services/http_error.rb
252
+ - lib/libis/services/oai.rb
238
253
  - lib/libis/services/oracle_client.rb
239
254
  - lib/libis/services/primo.rb
240
255
  - lib/libis/services/primo/limo.rb
@@ -266,6 +281,7 @@ files:
266
281
  - lib/libis/services/soap_client.rb
267
282
  - lib/libis/services/soap_error.rb
268
283
  - lib/libis/services/version.rb
284
+ - lib/libis/services/viaa/oai_pmh.rb
269
285
  - libis-services.gemspec
270
286
  - spec/alma_service_spec.rb
271
287
  - spec/ie_data.rb
@@ -299,7 +315,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
299
315
  version: '0'
300
316
  requirements: []
301
317
  rubyforge_project:
302
- rubygems_version: 2.4.8
318
+ rubygems_version: 2.6.4
303
319
  signing_key:
304
320
  specification_version: 4
305
321
  summary: LIBIS Services toolbox.