libis-format 0.9.41 → 0.9.44

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +365 -0
  3. data/bin/droid +1 -1
  4. data/bin/fido +1 -1
  5. data/bin/pdf_copy +1 -1
  6. data/lib/libis/format/config.rb +1 -0
  7. data/lib/libis/format/converter/audio_converter.rb +1 -1
  8. data/lib/libis/format/converter/base.rb +2 -1
  9. data/lib/libis/format/converter/office_converter.rb +2 -2
  10. data/lib/libis/format/converter/pdf_converter.rb +6 -6
  11. data/lib/libis/format/converter/video_converter.rb +96 -2
  12. data/lib/libis/format/identifier.rb +12 -12
  13. data/lib/libis/format/tool/droid.rb +108 -0
  14. data/lib/libis/format/tool/extension_identification.rb +58 -0
  15. data/lib/libis/format/tool/ffmpeg.rb +43 -0
  16. data/lib/libis/format/tool/fido.rb +91 -0
  17. data/lib/libis/format/tool/file_tool.rb +78 -0
  18. data/lib/libis/format/tool/identification_tool.rb +175 -0
  19. data/lib/libis/format/tool/office_to_pdf.rb +54 -0
  20. data/lib/libis/format/tool/pdf_copy.rb +42 -0
  21. data/lib/libis/format/tool/pdf_merge.rb +43 -0
  22. data/lib/libis/format/tool/pdf_optimizer.rb +38 -0
  23. data/lib/libis/format/tool/pdf_split.rb +41 -0
  24. data/lib/libis/format/tool/pdf_to_pdfa.rb +78 -0
  25. data/lib/libis/format/tool/pdfa_validator.rb +63 -0
  26. data/lib/libis/format/tool.rb +23 -0
  27. data/lib/libis/format/version.rb +1 -1
  28. data/lib/libis/format.rb +1 -15
  29. data/libis-format.gemspec +1 -2
  30. data/spec/converter_audio_spec.rb +66 -0
  31. data/spec/converter_image_spec.rb +166 -0
  32. data/spec/converter_office_spec.rb +84 -0
  33. data/spec/converter_pdf_spec.rb +30 -0
  34. data/spec/converter_repository_spec.rb +91 -0
  35. data/spec/converter_video_spec.rb +97 -0
  36. data/spec/data/video/copyright.png +0 -0
  37. data/spec/identifier_spec.rb +3 -15
  38. metadata +32 -33
  39. data/lib/libis/format/droid.rb +0 -106
  40. data/lib/libis/format/extension_identification.rb +0 -55
  41. data/lib/libis/format/ffmpeg.rb +0 -41
  42. data/lib/libis/format/fido.rb +0 -89
  43. data/lib/libis/format/file_tool.rb +0 -76
  44. data/lib/libis/format/identification_tool.rb +0 -174
  45. data/lib/libis/format/office_to_pdf.rb +0 -52
  46. data/lib/libis/format/pdf_copy.rb +0 -40
  47. data/lib/libis/format/pdf_merge.rb +0 -41
  48. data/lib/libis/format/pdf_optimizer.rb +0 -36
  49. data/lib/libis/format/pdf_split.rb +0 -39
  50. data/lib/libis/format/pdf_to_pdfa.rb +0 -74
  51. data/lib/libis/format/pdfa_validator.rb +0 -61
  52. data/spec/converter_spec.rb +0 -433
@@ -0,0 +1,84 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ require 'libis/format/converter/office_converter'
5
+
6
+ describe 'Converters' do
7
+
8
+ let(:repository) {Libis::Format::Converter::Repository}
9
+ let(:file_dir) {File.dirname(__FILE__)}
10
+
11
+ before(:all) {
12
+ Libis::Tools::Config.logger.level = 'off'
13
+ }
14
+
15
+ context 'Office Converter' do
16
+
17
+ let(:converter) {Libis::Format::Converter::OfficeConverter.new}
18
+
19
+ it 'converts Word document to PDF' do
20
+ src_file = File.join(file_dir, 'data', 'test.doc')
21
+ tgt_file = File.join(file_dir, 'work', 'test_doc.pdf')
22
+ FileUtils.mkdir_p File.dirname(tgt_file)
23
+ result = converter.convert(src_file, tgt_file, :PDF)
24
+ expect(result).to eq tgt_file
25
+ FileUtils.rm tgt_file, force: true
26
+ end
27
+
28
+ it 'converts Word 2010 document to PDF' do
29
+ src_file = File.join(file_dir, 'data', 'test.docx')
30
+ tgt_file = File.join(file_dir, 'work', 'test_docx.pdf')
31
+ FileUtils.mkdir_p File.dirname(tgt_file)
32
+ result = converter.convert(src_file, tgt_file, :PDF)
33
+ expect(result).to eq tgt_file
34
+ FileUtils.rm tgt_file, force: true
35
+ end
36
+
37
+ it 'converts OpenOffice document to PDF' do
38
+ src_file = File.join(file_dir, 'data', 'test.odt')
39
+ tgt_file = File.join(file_dir, 'work', 'test_odt.pdf')
40
+ FileUtils.mkdir_p File.dirname(tgt_file)
41
+ result = converter.convert(src_file, tgt_file, :PDF)
42
+ expect(result).to eq tgt_file
43
+ FileUtils.rm tgt_file, force: true
44
+ end
45
+
46
+ it 'converts RTF document to PDF' do
47
+ src_file = File.join(file_dir, 'data', 'test.rtf')
48
+ tgt_file = File.join(file_dir, 'work', 'test_rtf.pdf')
49
+ FileUtils.mkdir_p File.dirname(tgt_file)
50
+ result = converter.convert(src_file, tgt_file, :PDF)
51
+ expect(result).to eq tgt_file
52
+ FileUtils.rm tgt_file, force: true
53
+ end
54
+
55
+ it 'converts TXT document to PDF' do
56
+ src_file = File.join(file_dir, 'data', 'test.txt')
57
+ tgt_file = File.join(file_dir, 'work', 'test_txt.pdf')
58
+ FileUtils.mkdir_p File.dirname(tgt_file)
59
+ result = converter.convert(src_file, tgt_file, :PDF)
60
+ expect(result).to eq tgt_file
61
+ FileUtils.rm tgt_file, force: true
62
+ end
63
+
64
+ it 'converts Excel to PDF' do
65
+ src_file = File.join(file_dir, 'data', 'test.xls')
66
+ tgt_file = File.join(file_dir, 'work', 'test_xls.pdf')
67
+ FileUtils.mkdir_p File.dirname(tgt_file)
68
+ result = converter.convert(src_file, tgt_file, :PDF)
69
+ expect(result).to eq tgt_file
70
+ FileUtils.rm tgt_file, force: true
71
+ end
72
+
73
+ it 'converts Excel 2011 to PDF' do
74
+ src_file = File.join(file_dir, 'data', 'test.xlsx')
75
+ tgt_file = File.join(file_dir, 'work', 'test_xlsx.pdf')
76
+ FileUtils.mkdir_p File.dirname(tgt_file)
77
+ result = converter.convert(src_file, tgt_file, :PDF)
78
+ expect(result).to eq tgt_file
79
+ FileUtils.rm tgt_file, force: true
80
+ end
81
+
82
+ end
83
+
84
+ end
@@ -0,0 +1,30 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ require 'libis/format/converter/pdf_converter'
5
+
6
+ describe 'Converters' do
7
+
8
+ let(:repository) {Libis::Format::Converter::Repository}
9
+ let(:file_dir) {File.dirname(__FILE__)}
10
+
11
+ before(:all) {
12
+ Libis::Tools::Config.logger.level = 'off'
13
+ }
14
+
15
+ context 'Pdf Converter', if: File.exists?(Libis::Format::Config[:ghostscript_path]) do
16
+
17
+ let(:converter) {Libis::Format::Converter::PdfConverter.new}
18
+
19
+ it 'converts PDF to PDF/A' do
20
+ src_file = File.join(file_dir, 'data', 'test.pdf')
21
+ tgt_file = File.join('', 'tmp', 'test_pdfa.pdf')
22
+ FileUtils.mkdir_p File.dirname(tgt_file)
23
+ result = converter.convert(src_file, tgt_file, :PDFA)
24
+ expect(result).to eq tgt_file
25
+ FileUtils.rm tgt_file, force: true
26
+ end
27
+
28
+ end
29
+
30
+ end
@@ -0,0 +1,91 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe 'Converters' do
5
+
6
+ let(:repository) {Libis::Format::Converter::Repository}
7
+ let(:file_dir) {File.dirname(__FILE__)}
8
+
9
+ before(:all) {
10
+ Libis::Tools::Config.logger.level = 'off'
11
+ }
12
+
13
+ context 'Repository' do
14
+
15
+ it 'loads all converters' do
16
+ expect(repository.get_converters.size).to eq 6
17
+ # noinspection RubyResolve
18
+ expect(repository.get_converters.map(&:to_s)).to include 'Libis::Format::Converter::ImageConverter'
19
+ # noinspection RubyResolve
20
+ expect(repository.get_converters.map(&:to_s)).to include 'Libis::Format::Converter::OfficeConverter'
21
+ # noinspection RubyResolve
22
+ expect(repository.get_converters.map(&:to_s)).to include 'Libis::Format::Converter::PdfConverter'
23
+ # noinspection RubyResolve
24
+ expect(repository.get_converters.map(&:to_s)).to include 'Libis::Format::Converter::Jp2Converter'
25
+ # noinspection RubyResolve
26
+ expect(repository.get_converters.map(&:to_s)).to include 'Libis::Format::Converter::AudioConverter'
27
+ # noinspection RubyResolve
28
+ expect(repository.get_converters.map(&:to_s)).to include 'Libis::Format::Converter::VideoConverter'
29
+ end
30
+
31
+ it 'creates simple converter chain' do
32
+ chain = repository.get_converter_chain(:TIFF, :PDF)
33
+ expect(chain).to_not be nil
34
+ expect(chain.to_array.size).to eq 1
35
+ expect(chain.to_array).to match [{converter: Libis::Format::Converter::ImageConverter, input: :TIFF, output: :PDF}]
36
+ end
37
+
38
+ it 'creates complex chain' do
39
+ chain = repository.get_converter_chain(:TIFF, :PDFA)
40
+ expect(chain).to_not be nil
41
+ expect(chain.to_array.size).to eq 2
42
+ expect(chain.to_array).to match [
43
+ {converter: Libis::Format::Converter::ImageConverter, input: :TIFF, output: :PDF},
44
+ {converter: Libis::Format::Converter::PdfConverter, input: :PDF, output: :PDFA},
45
+ ]
46
+ end
47
+
48
+ it 'creates converter chain with options' do
49
+ chain = repository.get_converter_chain(:TIFF, :PDF, {watermark: {}})
50
+ expect(chain).to_not be nil
51
+ expect(chain.to_array.size).to eq 1
52
+ expect(chain.to_array).to match [
53
+ {converter: Libis::Format::Converter::ImageConverter, input: :TIFF, output: :PDF, operations: [{method: :watermark, argument: {}}]}
54
+ ]
55
+ end
56
+
57
+ it 'perfers operations to the end of the chain' do
58
+ chain = repository.get_converter_chain(:TIFF, :PDFA, {watermark: {}})
59
+ expect(chain).to_not be nil
60
+ expect(chain.to_array.size).to eq 2
61
+ expect(chain.to_array).to match [
62
+ {converter: Libis::Format::Converter::ImageConverter, input: :TIFF, output: :PDF},
63
+ {converter: Libis::Format::Converter::PdfConverter, input: :PDF, output: :PDFA, operations: [{method: :watermark, argument: {}}]}
64
+ ]
65
+ end
66
+
67
+ context 'create chain for TIFF to JP2' do
68
+
69
+ it 'without operators' do
70
+ chain = repository.get_converter_chain(:TIFF, :JP2)
71
+ expect(chain).to_not be nil
72
+ expect(chain.to_array.size).to eq 1
73
+ expect(chain.to_array).to match [
74
+ {converter: Libis::Format::Converter::ImageConverter, input: :TIFF, output: :JP2}
75
+ ]
76
+ end
77
+
78
+ it 'with force operator' do
79
+ chain = repository.get_converter_chain(:TIFF, :JP2, {lossless: true})
80
+ expect(chain).to_not be nil
81
+ expect(chain.to_array.size).to eq 1
82
+ expect(chain.to_array).to match [
83
+ {converter: Libis::Format::Converter::Jp2Converter, input: :TIFF, output: :JP2, operations: [{method: :lossless, argument: true}]}
84
+ ]
85
+ end
86
+
87
+ end
88
+
89
+ end
90
+
91
+ end
@@ -0,0 +1,97 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ require 'libis/format/converter/video_converter'
5
+
6
+ describe 'Converters' do
7
+
8
+ let(:repository) {Libis::Format::Converter::Repository}
9
+ let(:file_dir) {File.dirname(__FILE__)}
10
+
11
+ before(:all) {
12
+ Libis::Tools::Config.logger.level = 'off'
13
+ }
14
+
15
+ context 'Video Converter' do
16
+
17
+ let(:converter) {Libis::Format::Converter::VideoConverter.new}
18
+ extensions = %w'3gp avi flv mkv mov mp4 mpg swf webm wmv'
19
+ targets = %w'avi flv mkv mov mp4 swf webm wmv gif'
20
+ # noinspection RubyLiteralArrayInspection
21
+ sources = [
22
+ 'SampleVideo_176x144_2mb',
23
+ 'SampleVideo_320x240_2mb',
24
+ 'SampleVideo_360x240_2mb',
25
+ 'SampleVideo_1080x720_2mb'
26
+ ]
27
+ bad_converts = [
28
+ ]
29
+ let(:data_dir) {File.join(file_dir, 'data', 'video')}
30
+
31
+ context 'converts' do
32
+ sources.each do |source|
33
+ context source do
34
+ extensions.each do |ext|
35
+ next unless (File.exists?(File.join(File.dirname(__FILE__), 'data', 'video', "#{source}.#{ext}")))
36
+ (targets - [ext]).each do |tgt|
37
+ next if bad_converts.include? [ext, tgt]
38
+ it "#{ext} to #{tgt}" do
39
+ src_file = File.join(data_dir, "#{source}.#{ext}")
40
+ tgt_file = File.join('', 'tmp', "test.#{source}.#{ext}.#{tgt}")
41
+ FileUtils.remove tgt_file, force: true
42
+ FileUtils.mkdir_p File.dirname(tgt_file)
43
+ converter.audio_channels(2) if %w'swf wmv'.include?(tgt)
44
+ converter.sampling_freq(44100) if tgt == 'swf'
45
+ if tgt == 'gif'
46
+ converter.start(1)
47
+ converter.duration(3)
48
+ converter.scale('100x100')
49
+ end
50
+ result = converter.convert(src_file, tgt_file, tgt.upcase.to_sym)
51
+ expect(result).to eq tgt_file
52
+ expect(File.size(result)).to be > 2000
53
+ FileUtils.remove tgt_file, force: true
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+
61
+ context 'watermark' do
62
+ # noinspection RubyLiteralArrayInspection
63
+ [
64
+ 'SampleVideo_176x144_2mb.3gp',
65
+ 'SampleVideo_320x240_2mb.3gp',
66
+ 'SampleVideo_360x240_2mb.mp4',
67
+ 'SampleVideo_1080x720_2mb.mp4'
68
+ ].each do |source|
69
+ it "text with default options - #{source}" do
70
+ src_file = File.join(data_dir, "#{source}")
71
+ tgt_file = File.join('', 'tmp', "test.#{source}_watermark.mp4")
72
+ FileUtils.remove tgt_file, force: true
73
+ FileUtils.mkdir_p File.dirname(tgt_file)
74
+ converter.watermark_text '© LIBIS Format gem test'
75
+ result = converter.convert(src_file, tgt_file, :MP4)
76
+ expect(result).to eq tgt_file
77
+ expect(File.size(result)).to be > 2000
78
+ FileUtils.remove tgt_file, force: true
79
+ end
80
+
81
+ it "image with default options - #{source}" do
82
+ src_file = File.join(data_dir, "#{source}")
83
+ tgt_file = File.join('', 'tmp', "test.#{source}_watermark_image.mp4")
84
+ FileUtils.remove tgt_file, force: true
85
+ FileUtils.mkdir_p File.dirname(tgt_file)
86
+ converter.watermark_image File.join(data_dir, 'copyright.png')
87
+ result = converter.convert(src_file, tgt_file, :MP4)
88
+ expect(result).to eq tgt_file
89
+ expect(File.size(result)).to be > 2000
90
+ FileUtils.remove tgt_file, force: true
91
+ end
92
+ end
93
+ end
94
+
95
+ end
96
+
97
+ end
Binary file
@@ -75,18 +75,6 @@ describe 'Identfier' do
75
75
  let (:logoutput) {::Libis::Tools::Config.logger.appenders.last.sio}
76
76
  let (:dir) {File.join File.absolute_path(File.dirname(__FILE__)), 'data'}
77
77
 
78
- # context 'bug test' do
79
- #
80
- # let (:dir) {'/nas/vol03/lbs/alma/etd-kul/sap/FIIW/out/0623689_17450'}
81
- #
82
- # it 'just works' do
83
- # result = identifier.get(dir)
84
- # ap result
85
- # expect(result).not_to be_nil
86
- # end
87
- #
88
- # end
89
-
90
78
  it 'should initialize correctly' do
91
79
  expect(identifier.xml_validations.size).to be 1
92
80
  expect(File.basename identifier.xml_validations['archive/ead']).to eq 'ead.xsd'
@@ -116,7 +104,7 @@ describe 'Identfier' do
116
104
  end
117
105
 
118
106
  it 'should identify all files in a folder with base_dir option' do
119
- result = identifier.get(dir, base_dir: dir)
107
+ result = identifier.get(dir, base_dir: dir, keep_output: true)
120
108
  expect(result[:formats].size).to be >= formatlist.size
121
109
  formatlist.each do |file, format|
122
110
  expect(result[:formats][file]).to include format
@@ -149,7 +137,7 @@ describe 'Identfier' do
149
137
  # expect(File.basename(identifier.fido_formats.first)).to eq 'lias_formats.xml'
150
138
  it 'should identify list of test documents' do
151
139
  filelist = formatlist.keys.map {|file| File.join(dir, file)}
152
- fido_result = ::Libis::Format::Fido.instance.run_list(filelist)
140
+ fido_result = ::Libis::Format::Tool::Fido.instance.run_list(filelist)
153
141
  filelist.each do |filename|
154
142
  result = fido_result[filename]
155
143
  result = result[0] if result
@@ -160,7 +148,7 @@ describe 'Identfier' do
160
148
 
161
149
  it 'should identify dir of test documents' do
162
150
  filelist = fidolist.keys.map {|file| File.join(dir, file)}
163
- fido_result = ::Libis::Format::Fido.instance.run_dir(dir, false)
151
+ fido_result = ::Libis::Format::Tool::Fido.instance.run_dir(dir, false)
164
152
  filelist.each do |filename|
165
153
  result = fido_result[filename]
166
154
  result = result[0] if result
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: libis-format
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.41
4
+ version: 0.9.44
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kris Dekeyser
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-17 00:00:00.000000000 Z
11
+ date: 2017-11-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,20 +52,6 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.1'
55
- - !ruby/object:Gem::Dependency
56
- name: simplecov
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '0.9'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '0.9'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: awesome_print
71
57
  requirement: !ruby/object:Gem::Requirement
@@ -86,14 +72,14 @@ dependencies:
86
72
  requirements:
87
73
  - - "~>"
88
74
  - !ruby/object:Gem::Version
89
- version: 0.9.52
75
+ version: 0.9.57
90
76
  type: :runtime
91
77
  prerelease: false
92
78
  version_requirements: !ruby/object:Gem::Requirement
93
79
  requirements:
94
80
  - - "~>"
95
81
  - !ruby/object:Gem::Version
96
- version: 0.9.52
82
+ version: 0.9.57
97
83
  - !ruby/object:Gem::Dependency
98
84
  name: os
99
85
  requirement: !ruby/object:Gem::Requirement
@@ -191,24 +177,30 @@ files:
191
177
  - lib/libis/format/converter/pdf_converter.rb
192
178
  - lib/libis/format/converter/repository.rb
193
179
  - lib/libis/format/converter/video_converter.rb
194
- - lib/libis/format/droid.rb
195
- - lib/libis/format/extension_identification.rb
196
- - lib/libis/format/ffmpeg.rb
197
- - lib/libis/format/fido.rb
198
- - lib/libis/format/file_tool.rb
199
- - lib/libis/format/identification_tool.rb
200
180
  - lib/libis/format/identifier.rb
201
- - lib/libis/format/office_to_pdf.rb
202
- - lib/libis/format/pdf_copy.rb
203
- - lib/libis/format/pdf_merge.rb
204
- - lib/libis/format/pdf_optimizer.rb
205
- - lib/libis/format/pdf_split.rb
206
- - lib/libis/format/pdf_to_pdfa.rb
207
- - lib/libis/format/pdfa_validator.rb
181
+ - lib/libis/format/tool.rb
182
+ - lib/libis/format/tool/droid.rb
183
+ - lib/libis/format/tool/extension_identification.rb
184
+ - lib/libis/format/tool/ffmpeg.rb
185
+ - lib/libis/format/tool/fido.rb
186
+ - lib/libis/format/tool/file_tool.rb
187
+ - lib/libis/format/tool/identification_tool.rb
188
+ - lib/libis/format/tool/office_to_pdf.rb
189
+ - lib/libis/format/tool/pdf_copy.rb
190
+ - lib/libis/format/tool/pdf_merge.rb
191
+ - lib/libis/format/tool/pdf_optimizer.rb
192
+ - lib/libis/format/tool/pdf_split.rb
193
+ - lib/libis/format/tool/pdf_to_pdfa.rb
194
+ - lib/libis/format/tool/pdfa_validator.rb
208
195
  - lib/libis/format/type_database.rb
209
196
  - lib/libis/format/version.rb
210
197
  - libis-format.gemspec
211
- - spec/converter_spec.rb
198
+ - spec/converter_audio_spec.rb
199
+ - spec/converter_image_spec.rb
200
+ - spec/converter_office_spec.rb
201
+ - spec/converter_pdf_spec.rb
202
+ - spec/converter_repository_spec.rb
203
+ - spec/converter_video_spec.rb
212
204
  - spec/data/Cevennes2.bmp
213
205
  - spec/data/Cevennes2.jp2
214
206
  - spec/data/Cevennes2.ppm
@@ -301,6 +293,7 @@ files:
301
293
  - spec/data/video/SampleVideo_360x240_2mb.flv
302
294
  - spec/data/video/SampleVideo_360x240_2mb.mkv
303
295
  - spec/data/video/SampleVideo_360x240_2mb.mp4
296
+ - spec/data/video/copyright.png
304
297
  - spec/identifier_spec.rb
305
298
  - spec/spec_helper.rb
306
299
  - spec/test_types.yml
@@ -335,7 +328,12 @@ signing_key:
335
328
  specification_version: 4
336
329
  summary: LIBIS File format format services.
337
330
  test_files:
338
- - spec/converter_spec.rb
331
+ - spec/converter_audio_spec.rb
332
+ - spec/converter_image_spec.rb
333
+ - spec/converter_office_spec.rb
334
+ - spec/converter_pdf_spec.rb
335
+ - spec/converter_repository_spec.rb
336
+ - spec/converter_video_spec.rb
339
337
  - spec/data/Cevennes2.bmp
340
338
  - spec/data/Cevennes2.jp2
341
339
  - spec/data/Cevennes2.ppm
@@ -428,6 +426,7 @@ test_files:
428
426
  - spec/data/video/SampleVideo_360x240_2mb.flv
429
427
  - spec/data/video/SampleVideo_360x240_2mb.mkv
430
428
  - spec/data/video/SampleVideo_360x240_2mb.mp4
429
+ - spec/data/video/copyright.png
431
430
  - spec/identifier_spec.rb
432
431
  - spec/spec_helper.rb
433
432
  - spec/test_types.yml
@@ -1,106 +0,0 @@
1
- require 'singleton'
2
-
3
- require 'tempfile'
4
- require 'csv'
5
-
6
- require 'libis/format/config'
7
-
8
- unless CSV::HeaderConverters.has_key?(:droid_headers)
9
- CSV::HeaderConverters[:droid_headers] = lambda {|h|
10
- h.encode(ConverterEncoding).downcase.strip.
11
- gsub(/\W+/, "").to_sym
12
- }
13
- end
14
-
15
- require_relative 'identification_tool'
16
-
17
- module Libis
18
- module Format
19
-
20
- class Droid < Libis::Format::IdentificationTool
21
-
22
- def run_list(filelist)
23
- runner(filelist)
24
- end
25
-
26
- def run_dir(dir, recursive = true)
27
- profile = profile_file_name
28
- report = result_file_name
29
- create_profile(dir, profile, recursive)
30
- create_report(profile, report)
31
- parse_report(report)
32
- end
33
-
34
- def run(file)
35
- runner(file)
36
- end
37
-
38
- protected
39
-
40
- def runner(file_or_list)
41
- profile = profile_file_name
42
- report = result_file_name
43
- create_profile(file_or_list, profile)
44
- create_report(profile, report)
45
- parse_report(report)
46
- end
47
-
48
- def parse_report(report)
49
- keys = [
50
- :id, :parent_id, :uri, :filepath, :filename, :matchtype, :status, :filesize, :type, :extension,
51
- :mod_time, :ext_mismatch, :hash, :format_count, :puid, :mimetype, :format_name, :format_version]
52
- result = CSV.parse(File.readlines(report).join)
53
- .map {|a| Hash[keys.zip(a)]}
54
- .select {|a| a[:type] == 'File'}
55
- # File.delete report
56
- result.each do |r|
57
- r.delete(:id)
58
- r.delete(:parent_id)
59
- r.delete(:uri)
60
- r.delete(:filename)
61
- r.delete(:status)
62
- r.delete(:filesize)
63
- r.delete(:type)
64
- r.delete(:extension)
65
- r.delete(:mod_time)
66
- r.delete(:hash)
67
- r.delete(:format_count)
68
- r[:source] = :droid
69
- end
70
- File.delete report
71
- process_output(result)
72
- end
73
-
74
- def create_report(profile, report)
75
- args = [
76
- '-e', report,
77
- '-p', profile,
78
- '-q'
79
- ]
80
- result = Libis::Tools::Command.run(Libis::Format::Config[:droid_path], *args)
81
- raise RuntimeError, "DROID report errors: #{result[:err].join("\n")}" unless result[:status] == 0
82
- File.delete profile
83
- end
84
-
85
- def create_profile(file_or_list, profile, recursive = false)
86
- args = []
87
- files = (file_or_list.is_a?(Array)) ? file_or_list.map(&:escape_for_string) : [file_or_list.escape_for_string]
88
- files.each { |file| args << '-a' << file}
89
- args << '-p' << profile << '-q'
90
- args << '-R' if recursive
91
- result = Libis::Tools::Command.run(Libis::Format::Config[:droid_path], *args)
92
- raise RuntimeError, "DROID profile errors: #{result[:err].join("\n")}" unless result[:status] == 0
93
- end
94
-
95
- def profile_file_name
96
- File.join Dir.tmpdir, Dir::Tmpname.make_tmpname(%w'droid .profile', nil)
97
- end
98
-
99
- def result_file_name
100
- File.join Dir.tmpdir, Dir::Tmpname.make_tmpname(%w'droid .csv', nil)
101
- end
102
-
103
- end
104
-
105
- end
106
- end
@@ -1,55 +0,0 @@
1
- require_relative 'identification_tool'
2
-
3
- module Libis
4
- module Format
5
-
6
- class ExtensionIdentification < Libis::Format::IdentificationTool
7
-
8
- def run_list(filelist)
9
-
10
- output = runner(nil, filelist)
11
-
12
- process_output(output)
13
-
14
- end
15
-
16
- def run_dir(dir, recursive = true)
17
-
18
- filelist = find_files(dir, recursive)
19
-
20
- output = runner(nil, filelist)
21
-
22
- process_output(output)
23
-
24
- end
25
-
26
- def run(file)
27
-
28
- output = runner(file)
29
-
30
- process_output(output)
31
-
32
- end
33
-
34
- protected
35
-
36
- def runner(*args)
37
-
38
- args.map do |file|
39
- info = ::Libis::Format::TypeDatabase.ext_infos(File.extname(file)).first
40
- if info
41
- {
42
- filepath: file,
43
- mimetype: (info[:MIME].first rescue nil),
44
- puid: (info[:PUID].first rescue nil),
45
- matchtype: 'extension',
46
- source: :type_database
47
- }
48
- end
49
- end.cleanup
50
-
51
- end
52
-
53
- end
54
- end
55
- end
@@ -1,41 +0,0 @@
1
- require 'libis/tools/extend/string'
2
- require 'libis/tools/extend/empty'
3
- require 'libis/tools/command'
4
-
5
- require 'csv'
6
- require 'libis/format/config'
7
-
8
- module Libis
9
- module Format
10
-
11
- class FFMpeg
12
- include Singleton
13
- include ::Libis::Tools::Logger
14
-
15
- def self.run(source, target, options = {})
16
- self.instance.run source, target, options
17
- end
18
-
19
- def run(source, target, options = {})
20
- opts = []
21
- opts += options[:global] unless options[:global].empty?
22
- opts += options[:input] unless options[:input].empty?
23
- opts << '-i' << source
24
- opts += options[:filter] unless options[:filter].empty?
25
- opts += options[:output] unless options[:output].empty?
26
- opts << target
27
- result = Libis::Tools::Command.run(Libis::Format::Config[:ffmpeg_path], *opts)
28
-
29
- unless result[:status] == 0
30
- error "FFMpeg errors: #{(result[:err] + result[:out]).join("\n")}"
31
- return false
32
- end
33
- warn "FFMpeg warnings: #{(result[:err] + result[:out]).join("\n")}" unless result[:err].empty?
34
-
35
- result[:out]
36
- end
37
-
38
- end
39
-
40
- end
41
- end