libis-tools 0.9.20 → 0.9.21

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.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +36 -233
  3. data/Rakefile +5 -0
  4. data/lib/libis/tools.rb +1 -0
  5. data/lib/libis/tools/assert.rb +11 -0
  6. data/lib/libis/tools/checksum.rb +22 -5
  7. data/lib/libis/tools/command.rb +24 -3
  8. data/lib/libis/tools/config.rb +61 -33
  9. data/lib/libis/tools/config_file.rb +0 -1
  10. data/lib/libis/tools/deep_struct.rb +10 -2
  11. data/lib/libis/tools/extend/empty.rb +2 -2
  12. data/lib/libis/tools/extend/hash.rb +37 -18
  13. data/lib/libis/tools/extend/kernel.rb +9 -0
  14. data/lib/libis/tools/extend/string.rb +17 -8
  15. data/lib/libis/tools/logger.rb +95 -44
  16. data/lib/libis/tools/metadata.rb +5 -1
  17. data/lib/libis/tools/metadata/dublin_core_record.rb +22 -4
  18. data/lib/libis/tools/metadata/field_format.rb +49 -9
  19. data/lib/libis/tools/metadata/fix_field.rb +5 -0
  20. data/lib/libis/tools/metadata/mapper.rb +2 -1
  21. data/lib/libis/tools/metadata/mappers/flandrica.rb +8 -1
  22. data/lib/libis/tools/metadata/mappers/kuleuven.rb +6 -2
  23. data/lib/libis/tools/metadata/marc21_record.rb +1 -0
  24. data/lib/libis/tools/metadata/marc_record.rb +31 -12
  25. data/lib/libis/tools/metadata/parser/basic_parser.rb +2 -0
  26. data/lib/libis/tools/metadata/parser/dublin_core_parser.rb +2 -1
  27. data/lib/libis/tools/metadata/parser/marc21_parser.rb +2 -1
  28. data/lib/libis/tools/metadata/parser/marc_format_parser.rb +2 -1
  29. data/lib/libis/tools/metadata/parser/marc_rules.rb +2 -1
  30. data/lib/libis/tools/metadata/parser/marc_select_parser.rb +2 -1
  31. data/lib/libis/tools/metadata/parser/patch.rb +1 -0
  32. data/lib/libis/tools/metadata/parser/subfield_criteria_parser.rb +2 -1
  33. data/lib/libis/tools/metadata/sharepoint_mapping.rb +1 -0
  34. data/lib/libis/tools/metadata/sharepoint_record.rb +2 -0
  35. data/lib/libis/tools/metadata/var_field.rb +8 -0
  36. data/lib/libis/tools/mets_dnx.rb +61 -0
  37. data/lib/libis/tools/mets_file.rb +87 -604
  38. data/lib/libis/tools/mets_objects.rb +534 -0
  39. data/lib/libis/tools/parameter.rb +144 -21
  40. data/lib/libis/tools/thread_safe.rb +31 -0
  41. data/lib/libis/tools/version.rb +1 -1
  42. data/lib/libis/tools/xml_document.rb +18 -24
  43. data/libis-tools.gemspec +6 -2
  44. data/spec/config_spec.rb +3 -4
  45. data/spec/logger_spec.rb +13 -30
  46. data/spec/mets_file_spec.rb +17 -17
  47. metadata +53 -7
data/libis-tools.gemspec CHANGED
@@ -25,6 +25,7 @@ Gem::Specification.new do |spec|
25
25
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
26
26
 
27
27
  spec.require_paths = ['lib']
28
+ spec.has_rdoc = 'yard'
28
29
 
29
30
  spec.add_development_dependency 'bundler', '~> 1.6'
30
31
  spec.add_development_dependency 'rake', '~> 10.3'
@@ -35,9 +36,12 @@ Gem::Specification.new do |spec|
35
36
 
36
37
  spec.add_runtime_dependency 'backports', '~> 3.6'
37
38
  spec.add_runtime_dependency 'nokogiri', '~> 1.6'
38
- spec.add_runtime_dependency 'gyoku', '~> 1.2'
39
- spec.add_runtime_dependency 'nori', '~> 2.4'
39
+ spec.add_runtime_dependency 'gyoku', '~> 1.3'
40
+ spec.add_runtime_dependency 'nori', '~> 2.6'
40
41
  spec.add_runtime_dependency 'recursive-open-struct', '~> 1.0'
41
42
  spec.add_runtime_dependency 'parslet', '~> 1.7'
42
43
  spec.add_runtime_dependency 'simple_xlsx_reader', '~> 1.0'
44
+ spec.add_runtime_dependency 'logging', '~> 2.0'
45
+ spec.add_runtime_dependency 'concurrent-ruby', '~> 1.0'
46
+ spec.add_runtime_dependency 'yard', '~> 0.8'
43
47
  end
data/spec/config_spec.rb CHANGED
@@ -11,21 +11,20 @@ describe 'Config' do
11
11
  subject(:config) { ::Libis::Tools::Config.clear! }
12
12
 
13
13
  it 'has defaults set' do
14
- expect(config.logger).to be_a ::Logger
14
+ expect(config.logger).to be_a ::Logging::Logger
15
15
  end
16
16
 
17
17
  it 'clears all values' do
18
18
  # noinspection RubyResolve
19
19
  config.test_value = 5
20
- config.logger.level = ::Logger::FATAL
20
+ config.logger.level = :FATAL
21
21
  # noinspection RubyResolve
22
22
  expect(config.test_value).to be 5
23
- expect(config.logger.level).to be ::Logger::FATAL
23
+ expect(config.logger.level).to be ::Logging::level_num(:FATAL)
24
24
 
25
25
  config.clear!
26
26
  # noinspection RubyResolve
27
27
  expect(config.test_value).to be_nil
28
- expect(config.logger.level).to be ::Logger::DEBUG
29
28
  end
30
29
 
31
30
  context 'adding values with setters' do
data/spec/logger_spec.rb CHANGED
@@ -7,60 +7,59 @@ describe 'Logger' do
7
7
 
8
8
  class TestLogger
9
9
  include ::Libis::Tools::Logger
10
- attr_accessor :options
11
- def initialize
12
- @options = {}
13
- end
14
10
  end
15
11
 
16
12
  before(:context) do
17
13
  end
18
14
 
19
15
  before(:example) do
20
- ::Libis::Tools::Config[:appname] = ''
21
- @logoutput = StringIO.new
22
- ::Libis::Tools::Config.logger = ::Logger.new @logoutput
23
- ::Libis::Tools::Config.logger.level = ::Logger::DEBUG
16
+ appender = ::Logging::Appenders.string_io('StringIO', layout: ::Libis::Tools::Config.get_log_formatter)
17
+ ::Libis::Tools::Config.logger.add_appenders(appender)
18
+ @logoutput = appender.sio
19
+ ::Libis::Tools::Config.logger.level = :all
24
20
  @test_logger = TestLogger.new
25
21
  end
22
+
23
+ let(:timestamp_regex) { '\[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3} #\d+\.\d+\]'}
26
24
 
27
25
  it 'should log debug output' do
28
26
  @test_logger.debug 'Debug message'
27
+ puts "LOG OUTPUT: #{@logoutput.string}"
29
28
  output = @logoutput.string.lines.map(&:chomp)
30
29
  expect(output.size).to eq 1
31
- expect(output.first).to match /^D, \[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6} #\d+\] DEBUG -- TestLogger: Debug message$/
30
+ expect(output.first).to match /^D, #{timestamp_regex} DEBUG : Debug message$/
32
31
  end
33
32
 
34
33
  it 'should log info output' do
35
34
  @test_logger.info 'Info message'
36
35
  output = @logoutput.string.lines.map(&:chomp)
37
36
  expect(output.size).to eq 1
38
- expect(output.first).to match /^I, \[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6} #\d+\] INFO -- TestLogger: Info message$/
37
+ expect(output.first).to match /^I, #{timestamp_regex} INFO : Info message$/
39
38
  end
40
39
 
41
40
  it 'should log warning output' do
42
41
  @test_logger.warn 'Warning message'
43
42
  output = @logoutput.string.lines.map(&:chomp)
44
43
  expect(output.size).to eq 1
45
- expect(output.first).to match /^W, \[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6} #\d+\] WARN -- TestLogger: Warning message$/
44
+ expect(output.first).to match /^W, #{timestamp_regex} WARN : Warning message$/
46
45
  end
47
46
 
48
47
  it 'should log error output' do
49
48
  @test_logger.error 'Error message'
50
49
  output = @logoutput.string.lines.map(&:chomp)
51
50
  expect(output.size).to eq 1
52
- expect(output.first).to match /^E, \[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6} #\d+\] ERROR -- TestLogger: Error message$/
51
+ expect(output.first).to match /^E, #{timestamp_regex} ERROR : Error message$/
53
52
  end
54
53
 
55
54
  it 'should log fatal output' do
56
55
  @test_logger.fatal 'Fatal message'
57
56
  output = @logoutput.string.lines.map(&:chomp)
58
57
  expect(output.size).to eq 1
59
- expect(output.first).to match /^F, \[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6} #\d+\] FATAL -- TestLogger: Fatal message$/
58
+ expect(output.first).to match /^F, #{timestamp_regex} FATAL : Fatal message$/
60
59
  end
61
60
 
62
61
  it 'should be quiet when asked to' do
63
- @test_logger.options[:quiet] = true
62
+ ::Libis::Tools::Config.logger.level = :error
64
63
 
65
64
  @test_logger.debug 'Debug message'
66
65
  output = @logoutput.string.lines.map(&:chomp)
@@ -88,20 +87,4 @@ describe 'Logger' do
88
87
  expect(output).not_to be_empty
89
88
  end
90
89
 
91
- it 'should display application name in log' do
92
- ::Libis::Tools::Config[:appname] = 'Test Application'
93
- @test_logger.info 'Info message'
94
- output = @logoutput.string.lines.map(&:chomp)
95
- expect(output.size).to eq 1
96
- expect(output.first).to match /^I, \[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6} #\d+\] INFO -- Test Application: Info message$/
97
- end
98
-
99
- it 'should display name value in log' do
100
- @test_logger.define_singleton_method(:name) { 'Logger for testing' }
101
- @test_logger.info 'Info message'
102
- output = @logoutput.string.lines.map(&:chomp)
103
- expect(output.size).to eq 1
104
- expect(output.first).to match /^I, \[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6} #\d+\] INFO -- Logger for testing: Info message$/
105
- end
106
-
107
90
  end
@@ -43,27 +43,27 @@ describe 'METS File' do
43
43
 
44
44
  let(:marc_record) {
45
45
  Libis::Tools::XmlDocument.parse <<-STR
46
- <?xml version="1.0" encoding="UTF-8"?>
47
- <record xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"
48
- xmlns="http://www.loc.gov/MARC21/slim" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
49
- <leader>abcdefghiljklmnopqrstuvwxyz</leader>
50
- <controlfield tag="001">1234567890</controlfield>
51
- <datafield tag="010" ind1="a" ind2="b">
52
- <subfield code="a">abc</subfield>
53
- <subfield code="b">xyz</subfield>
54
- </datafield>
55
- </record>
56
- STR
46
+ <?xml version="1.0" encoding="UTF-8"?>
47
+ <record xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"
48
+ xmlns="http://www.loc.gov/MARC21/slim" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
49
+ <leader>abcdefghiljklmnopqrstuvwxyz</leader>
50
+ <controlfield tag="001">1234567890</controlfield>
51
+ <datafield tag="010" ind1="a" ind2="b">
52
+ <subfield code="a">abc</subfield>
53
+ <subfield code="b">xyz</subfield>
54
+ </datafield>
55
+ </record>
56
+ STR
57
57
  }
58
58
 
59
59
  let(:src_record) {
60
60
  Libis::Tools::XmlDocument.parse <<-STR
61
- <my_description xmlns="http://www.libis.be/description/">
62
- <title>Title</title>
63
- <importance>high</importance>
64
- <location>here</location>
65
- </my_description>
66
- STR
61
+ <my_description xmlns="http://www.libis.be/description/">
62
+ <title>Title</title>
63
+ <importance>high</importance>
64
+ <location>here</location>
65
+ </my_description>
66
+ STR
67
67
  }
68
68
 
69
69
  let(:target) {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: libis-tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.20
4
+ version: 0.9.21
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-01-06 00:00:00.000000000 Z
11
+ date: 2016-03-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -128,28 +128,28 @@ dependencies:
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: '1.2'
131
+ version: '1.3'
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: '1.2'
138
+ version: '1.3'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: nori
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: '2.4'
145
+ version: '2.6'
146
146
  type: :runtime
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: '2.4'
152
+ version: '2.6'
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: recursive-open-struct
155
155
  requirement: !ruby/object:Gem::Requirement
@@ -192,6 +192,48 @@ dependencies:
192
192
  - - "~>"
193
193
  - !ruby/object:Gem::Version
194
194
  version: '1.0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: logging
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "~>"
200
+ - !ruby/object:Gem::Version
201
+ version: '2.0'
202
+ type: :runtime
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - "~>"
207
+ - !ruby/object:Gem::Version
208
+ version: '2.0'
209
+ - !ruby/object:Gem::Dependency
210
+ name: concurrent-ruby
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - "~>"
214
+ - !ruby/object:Gem::Version
215
+ version: '1.0'
216
+ type: :runtime
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - "~>"
221
+ - !ruby/object:Gem::Version
222
+ version: '1.0'
223
+ - !ruby/object:Gem::Dependency
224
+ name: yard
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - "~>"
228
+ - !ruby/object:Gem::Version
229
+ version: '0.8'
230
+ type: :runtime
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - "~>"
235
+ - !ruby/object:Gem::Version
236
+ version: '0.8'
195
237
  description: Some tool classes for other LIBIS gems.
196
238
  email:
197
239
  - kris.dekeyser@libis.be
@@ -243,8 +285,11 @@ files:
243
285
  - lib/libis/tools/metadata/sharepoint_mapping.rb
244
286
  - lib/libis/tools/metadata/sharepoint_record.rb
245
287
  - lib/libis/tools/metadata/var_field.rb
288
+ - lib/libis/tools/mets_dnx.rb
246
289
  - lib/libis/tools/mets_file.rb
290
+ - lib/libis/tools/mets_objects.rb
247
291
  - lib/libis/tools/parameter.rb
292
+ - lib/libis/tools/thread_safe.rb
248
293
  - lib/libis/tools/version.rb
249
294
  - lib/libis/tools/xml_document.rb
250
295
  - libis-tools.gemspec
@@ -297,7 +342,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
297
342
  version: '0'
298
343
  requirements: []
299
344
  rubyforge_project:
300
- rubygems_version: 2.2.2
345
+ rubygems_version: 2.4.8
301
346
  signing_key:
302
347
  specification_version: 4
303
348
  summary: LIBIS toolbox.
@@ -330,3 +375,4 @@ test_files:
330
375
  - test/test_helper.rb
331
376
  - test/webservices/test_ca_item_info.rb
332
377
  - test/webservices/test_ca_search.rb
378
+ has_rdoc: yard