libis-tools 0.9.20 → 0.9.21

Sign up to get free protection for your applications and to get access to all the features.
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