hydra-derivatives 0.0.8 → 0.1.0
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/.gitignore +2 -0
- data/Gemfile +3 -0
- data/History.md +6 -3
- data/README.md +8 -8
- data/VERSION +1 -1
- data/lib/hydra/derivatives.rb +7 -10
- data/lib/hydra/derivatives/document.rb +18 -8
- data/lib/hydra/derivatives/shell_based_processor.rb +2 -7
- data/spec/fixtures/test.docx +0 -0
- data/spec/fixtures/test.pptx +0 -0
- data/spec/fixtures/test.xlsx +0 -0
- data/spec/units/transcoding_spec.rb +55 -48
- metadata +31 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e5c7df4967dcb508c79af83f929109d51177b4c9
|
4
|
+
data.tar.gz: 8e6337d340b299ebde7aabc85f7b0157ff37382e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 571c14601cbe8d592c123e6522fc29ddc43071d61e6208d7c061ccebc717a0fa13a6cfcaec423ca6e7a4be7be9de942a6885df4eb724c388df12a5c2f7f963bb
|
7
|
+
data.tar.gz: 0e2612a962f3f9c5d0da7114d89b1fcf78c7e5a11233b9dd347bc500a0ad8264f9c9d6cbf7d23e3ac974d9f3670b9015725c4f92338787c27afc001a90b00324
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/History.md
CHANGED
@@ -1,7 +1,10 @@
|
|
1
|
-
|
1
|
+
## 0.1.0 (2014-05-09)
|
2
|
+
- Add support for thumbnailing documents
|
3
|
+
|
4
|
+
## 0.0.8 (2014-04-09)
|
2
5
|
- Add support for JPEG2000 Derivatives
|
3
6
|
- Correcting Railtie initializer
|
4
|
-
- Added ImageMagick dependency
|
7
|
+
- Added ImageMagick dependency
|
5
8
|
- Updated FITS URL
|
6
9
|
- Adding input and output options to ffmpeg and video processor
|
7
10
|
- Revert "Switch to streamio_ffmpeg for easier handling of ffmpeg arguments"
|
@@ -12,7 +15,7 @@
|
|
12
15
|
- Restore `Hydra::Derivatives::ExtractMetadata#to_tempfile`
|
13
16
|
|
14
17
|
## 0.0.6 (2013-10-10)
|
15
|
-
- Added version badge
|
18
|
+
- Added version badge
|
16
19
|
- Adding Hydra::FileCharacterization
|
17
20
|
- Updating CONTRIBUTING.md as per Hydra v6.0.0
|
18
21
|
- Adding microsoft openxmlformats as output formats
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# hydra-derivatives [](http://badge.fury.io/rb/hydra-derivatives) [](https://travis-ci.org/projecthydra/hydra-derivatives) [](https://gemnasium.com/projecthydra/hydra-derivatives)
|
1
|
+
# hydra-derivatives [](http://badge.fury.io/rb/hydra-derivatives) [](https://travis-ci.org/projecthydra-labs/hydra-derivatives) [](https://gemnasium.com/projecthydra-labs/hydra-derivatives)
|
2
2
|
|
3
3
|
Derivative generation for hydra
|
4
4
|
|
@@ -6,12 +6,12 @@ If you have an ActiveFedora class like this:
|
|
6
6
|
```ruby
|
7
7
|
class GenericFile < ActiveFedora::Base
|
8
8
|
include Hydra::Derivatives
|
9
|
-
|
9
|
+
|
10
10
|
has_file_datastream :content
|
11
11
|
attr_accessor :mime_type
|
12
|
-
|
12
|
+
|
13
13
|
# Use a block to declare which derivatives you want to generate
|
14
|
-
makes_derivatives do |obj|
|
14
|
+
makes_derivatives do |obj|
|
15
15
|
case obj.mime_type
|
16
16
|
when 'application/pdf'
|
17
17
|
obj.transform_datastream :content, { :thumb => "100x100>" }
|
@@ -33,13 +33,13 @@ Or a class like this:
|
|
33
33
|
```ruby
|
34
34
|
class GenericFile < ActiveFedora::Base
|
35
35
|
include Hydra::Derivatives
|
36
|
-
|
36
|
+
|
37
37
|
has_file_datastream :content
|
38
38
|
attr_accessor :mime_type
|
39
39
|
|
40
40
|
# Use a callback method to declare which derivatives you want
|
41
41
|
makes_derivatives :generate_derivatives
|
42
|
-
|
42
|
+
|
43
43
|
def generate_derivatives
|
44
44
|
case mime_type
|
45
45
|
when 'application/pdf'
|
@@ -70,7 +70,7 @@ Then when you call `obj.create_derivatives` two new datastreams, 'thumbnail' and
|
|
70
70
|
|
71
71
|
We recommend you run `obj.create_derivatives` in a background worker, because some derivative creation (especially videos) can take a long time.
|
72
72
|
|
73
|
-
# Installation
|
73
|
+
# Installation
|
74
74
|
|
75
75
|
Just add `gem 'hydra-derivatives'` to your Gemfile.
|
76
76
|
|
@@ -101,7 +101,7 @@ Hydra::Derivatives.kdu_compress_path = '/usr/local/bin/kdu_compress'
|
|
101
101
|
|
102
102
|
## JPEG2k Directives
|
103
103
|
|
104
|
-
Unlike the other processors, the `Jpeg2kImage` processor does not generally accept arguments that directly (or nearly so) translate to the arguments you would give to the corresponding command line utility.
|
104
|
+
Unlike the other processors, the `Jpeg2kImage` processor does not generally accept arguments that directly (or nearly so) translate to the arguments you would give to the corresponding command line utility.
|
105
105
|
|
106
106
|
Instead, each directive may contain these arguments:
|
107
107
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0
|
1
|
+
0.1.0
|
data/lib/hydra/derivatives.rb
CHANGED
@@ -25,8 +25,7 @@ module Hydra
|
|
25
25
|
@config = Config.new
|
26
26
|
end
|
27
27
|
|
28
|
-
|
29
|
-
[:ffmpeg_path, :libreoffice_path, :temp_file_base, :fits_path, :kdu_compress_path,
|
28
|
+
[:ffmpeg_path, :libreoffice_path, :temp_file_base, :fits_path, :kdu_compress_path,
|
30
29
|
:kdu_compress_recipes, :enable_ffmpeg].each do |method|
|
31
30
|
module_eval <<-RUBY
|
32
31
|
def self.#{method.to_s}
|
@@ -42,14 +41,13 @@ module Hydra
|
|
42
41
|
class_attribute :transformation_schemes
|
43
42
|
end
|
44
43
|
|
45
|
-
|
46
44
|
# Runs all of the transformations immediately.
|
47
45
|
# You may want to run this job in the background as it may take a long time.
|
48
|
-
def create_derivatives
|
46
|
+
def create_derivatives
|
49
47
|
if transformation_schemes.present?
|
50
48
|
transformation_schemes.each do |transform_scheme|
|
51
49
|
if transform_scheme.instance_of?(Proc)
|
52
|
-
transform_scheme.call(self)
|
50
|
+
transform_scheme.call(self)
|
53
51
|
else
|
54
52
|
send(transform_scheme)
|
55
53
|
end
|
@@ -60,10 +58,10 @@ module Hydra
|
|
60
58
|
end
|
61
59
|
|
62
60
|
# Create derivatives from a datastream according to transformation directives
|
63
|
-
# @param datastream_name
|
61
|
+
# @param datastream_name
|
64
62
|
# @param [Hash] transform_directives - each key corresponds to a desired derivative. Associated values vary according to processor being used.
|
65
63
|
# @param [Hash] opts for specifying things like choice of :processor (processor defaults to :image)
|
66
|
-
#
|
64
|
+
#
|
67
65
|
# @example This will create content_thumb
|
68
66
|
# transform_datastream :content, { :thumb => "100x100>" }
|
69
67
|
#
|
@@ -82,13 +80,12 @@ module Hydra
|
|
82
80
|
"Hydra::Derivatives::#{processor.to_s.classify}".constantize.new(self, datastream_name, transform_directives).process
|
83
81
|
end
|
84
82
|
|
85
|
-
|
86
83
|
module ClassMethods
|
87
|
-
# Register transformation schemes for generating derivatives.
|
84
|
+
# Register transformation schemes for generating derivatives.
|
88
85
|
# You can do this using a block or by defining a callback method.
|
89
86
|
#
|
90
87
|
# @example Define transformation scheme using a block
|
91
|
-
# makes_derivatives do |obj|
|
88
|
+
# makes_derivatives do |obj|
|
92
89
|
# case obj.mime_type
|
93
90
|
# when 'application/pdf'
|
94
91
|
# obj.transform_datastream :content, { :thumb => "100x100>" }
|
@@ -2,6 +2,7 @@ module Hydra
|
|
2
2
|
module Derivatives
|
3
3
|
class Document < Processor
|
4
4
|
include ShellBasedProcessor
|
5
|
+
|
5
6
|
def self.encode(path, options, output_file)
|
6
7
|
format = File.extname(output_file).sub('.', '')
|
7
8
|
outdir = File.dirname(output_file)
|
@@ -9,18 +10,25 @@ module Hydra
|
|
9
10
|
end
|
10
11
|
|
11
12
|
def encode_datastream(dest_dsid, file_suffix, mime_type, options = '')
|
12
|
-
output_file = Dir::Tmpname.create([
|
13
|
+
output_file = Dir::Tmpname.create(["#{object.id}-content.", ".#{file_suffix}"], Hydra::Derivatives.temp_file_base){}
|
13
14
|
new_output = ''
|
14
15
|
source_datastream.to_tempfile do |f|
|
15
|
-
|
16
|
-
|
16
|
+
if mime_type == 'image/jpeg'
|
17
|
+
temp_file = File.join(Hydra::Derivatives.temp_file_base, [File.basename(f.path).sub(File.extname(f.path), ''), 'pdf'].join('.'))
|
18
|
+
new_output = File.join(Hydra::Derivatives.temp_file_base, [File.basename(temp_file).sub(File.extname(temp_file), ''), file_suffix].join('.'))
|
19
|
+
self.class.encode(f.path, options, temp_file)
|
20
|
+
self.class.encode(temp_file, options, output_file)
|
21
|
+
File.unlink(temp_file)
|
22
|
+
else
|
23
|
+
self.class.encode(f.path, options, output_file)
|
24
|
+
new_output = File.join(Hydra::Derivatives.temp_file_base, [File.basename(f.path).sub(File.extname(f.path), ''), file_suffix].join('.'))
|
25
|
+
end
|
17
26
|
end
|
18
27
|
out_file = File.open(new_output, "rb")
|
19
|
-
object.add_file_datastream(out_file.read, :
|
28
|
+
object.add_file_datastream(out_file.read, dsid: dest_dsid, mimeType: mime_type)
|
20
29
|
File.unlink(out_file)
|
21
30
|
end
|
22
31
|
|
23
|
-
|
24
32
|
def new_mime_type(format)
|
25
33
|
case format
|
26
34
|
when 'pdf'
|
@@ -28,11 +36,13 @@ module Hydra
|
|
28
36
|
when 'odf'
|
29
37
|
'application/vnd.oasis.opendocument.text'
|
30
38
|
when 'docx'
|
31
|
-
|
39
|
+
'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
|
32
40
|
when 'xslx'
|
33
|
-
|
41
|
+
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
|
34
42
|
when 'pptx'
|
35
|
-
|
43
|
+
'application/vnd.openxmlformats-officedocument.presentationml.presentation'
|
44
|
+
when 'jpg'
|
45
|
+
'image/jpeg'
|
36
46
|
else
|
37
47
|
raise "I don't know about the format '#{format}'"
|
38
48
|
end
|
@@ -5,7 +5,7 @@ require 'open3'
|
|
5
5
|
|
6
6
|
module Hydra
|
7
7
|
module Derivatives
|
8
|
-
module ShellBasedProcessor
|
8
|
+
module ShellBasedProcessor
|
9
9
|
extend ActiveSupport::Concern
|
10
10
|
|
11
11
|
included do
|
@@ -13,7 +13,7 @@ module Hydra
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def process
|
16
|
-
directives.each do |name, args|
|
16
|
+
directives.each do |name, args|
|
17
17
|
format = args[:format]
|
18
18
|
raise ArgumentError, "You must provide the :format you want to transcode into. You provided #{args}" unless format
|
19
19
|
# TODO if the source is in the correct format, we could just copy it and skip transcoding.
|
@@ -38,7 +38,6 @@ module Hydra
|
|
38
38
|
end
|
39
39
|
|
40
40
|
module ClassMethods
|
41
|
-
|
42
41
|
def execute(command)
|
43
42
|
stdin, stdout, stderr, wait_thr = popen3(command)
|
44
43
|
stdin.close
|
@@ -48,11 +47,7 @@ module Hydra
|
|
48
47
|
stderr.close
|
49
48
|
raise "Unable to execute command \"#{command}\"\n#{err}" unless wait_thr.value.success?
|
50
49
|
end
|
51
|
-
|
52
50
|
end
|
53
|
-
|
54
51
|
end
|
55
52
|
end
|
56
53
|
end
|
57
|
-
|
58
|
-
|
Binary file
|
Binary file
|
Binary file
|
@@ -5,10 +5,11 @@ describe "Transcoder" do
|
|
5
5
|
class ContentDatastream < ActiveFedora::Datastream
|
6
6
|
include Hydra::Derivatives::ExtractMetadata
|
7
7
|
end
|
8
|
+
|
8
9
|
class GenericFile < ActiveFedora::Base
|
9
10
|
include Hydra::Derivatives
|
10
11
|
has_metadata 'characterization', type: ActiveFedora::SimpleDatastream do |m|
|
11
|
-
|
12
|
+
m.field "mime_type", :string
|
12
13
|
end
|
13
14
|
|
14
15
|
has_attributes :mime_type, datastream: :characterization, multiple: false
|
@@ -17,65 +18,67 @@ describe "Transcoder" do
|
|
17
18
|
makes_derivatives do |obj|
|
18
19
|
case obj.mime_type
|
19
20
|
when 'application/pdf'
|
20
|
-
obj.transform_datastream :content, { :
|
21
|
+
obj.transform_datastream :content, { thumb: '100x100>' }
|
21
22
|
when 'audio/wav'
|
22
|
-
obj.transform_datastream :content, { :
|
23
|
+
obj.transform_datastream :content, { mp3: { format: 'mp3' }, ogg: { format: 'ogg'} }, processor: :audio
|
23
24
|
when 'video/avi'
|
24
|
-
obj.transform_datastream :content, { :
|
25
|
-
:thumbnail=> {:format => 'jpg' , datastream: 'thumbnail'} }, processor: :video
|
25
|
+
obj.transform_datastream :content, { mp4: { format: 'mp4' }, webm: { format: 'webm'}, thumbnail: { format: 'jpg', datastream: 'thumbnail' } }, processor: :video
|
26
26
|
when 'image/png', 'image/jpg'
|
27
|
-
obj.transform_datastream :content, { :
|
27
|
+
obj.transform_datastream :content, { medium: "300x300>", thumb: "100x100>", access: { format: 'jpg', datastream: 'access'} }
|
28
28
|
when 'application/vnd.ms-powerpoint'
|
29
|
-
obj.transform_datastream :content, { :
|
29
|
+
obj.transform_datastream :content, { preservation: { format: 'pptx'}, access: { format: 'pdf' }, thumbnail: { format: 'jpg' } }, processor: 'document'
|
30
30
|
when 'text/rtf'
|
31
|
-
obj.transform_datastream :content, { :
|
31
|
+
obj.transform_datastream :content, { preservation: { format: 'odf' }, access: { format: 'pdf' }, thumbnail: { format: 'jpg' } }, processor: 'document'
|
32
32
|
when 'application/msword'
|
33
|
-
obj.transform_datastream :content, { :
|
33
|
+
obj.transform_datastream :content, { access: { format: 'pdf' }, preservation: { format: 'docx' }, thumbnail: { format: 'jpg' } }, processor: 'document'
|
34
34
|
when 'application/vnd.ms-excel'
|
35
|
-
obj.transform_datastream :content, { :
|
35
|
+
obj.transform_datastream :content, { access: { format: 'pdf' }, preservation: { format: 'xslx' }, thumbnail: { format: 'jpg' } }, processor: 'document'
|
36
36
|
when 'image/tiff'
|
37
|
-
obj.transform_datastream :content, {
|
37
|
+
obj.transform_datastream :content, {
|
38
38
|
resized: { recipe: :default, resize: "600x600>", datastream: 'resized' },
|
39
39
|
config_lookup: { recipe: :default, datastream: 'config_lookup' },
|
40
40
|
string_recipe: { recipe: '-quiet', datastream: 'string_recipe' },
|
41
41
|
diy: { }
|
42
42
|
}, processor: 'jpeg2k_image'
|
43
|
-
|
44
43
|
end
|
45
44
|
|
46
45
|
end
|
47
|
-
|
46
|
+
|
48
47
|
makes_derivatives :generate_special_derivatives
|
49
|
-
|
48
|
+
|
50
49
|
def generate_special_derivatives
|
51
50
|
if label == "special" && mime_type == 'image/png'
|
52
|
-
transform_datastream :content, { :
|
51
|
+
transform_datastream :content, { medium: { size: "200x300>", datastream: 'special_ds' } }
|
53
52
|
end
|
54
53
|
end
|
55
|
-
|
56
54
|
end
|
57
55
|
end
|
58
56
|
|
59
57
|
after(:all) do
|
60
|
-
GenericFile.
|
58
|
+
GenericFile.destroy_all
|
61
59
|
Object.send(:remove_const, :GenericFile);
|
62
60
|
Object.send(:remove_const, :ContentDatastream);
|
63
61
|
end
|
64
|
-
|
62
|
+
|
65
63
|
describe "with an attached image" do
|
66
64
|
let(:attachment) { File.open(File.expand_path('../../fixtures/world.png', __FILE__))}
|
67
|
-
let(:file)
|
65
|
+
let(:file) do
|
66
|
+
GenericFile.new(mime_type: 'image/png').tap do |f|
|
67
|
+
f.content.content = attachment
|
68
|
+
f.save
|
69
|
+
end
|
70
|
+
end
|
68
71
|
|
69
72
|
it "should transcode" do
|
70
73
|
file.datastreams.key?('content_medium').should be_false
|
71
74
|
file.create_derivatives
|
72
75
|
file.datastreams['content_medium'].should have_content
|
73
76
|
file.datastreams['content_medium'].mimeType.should == 'image/png'
|
74
|
-
file.datastreams['content_thumb'].should have_content
|
77
|
+
file.datastreams['content_thumb'].should have_content
|
75
78
|
file.datastreams['content_thumb'].mimeType.should == 'image/png'
|
76
|
-
file.datastreams['access'].should have_content
|
79
|
+
file.datastreams['access'].should have_content
|
77
80
|
file.datastreams['access'].mimeType.should == 'image/jpeg'
|
78
|
-
file.datastreams.key?('content_text').should be_false
|
81
|
+
file.datastreams.key?('content_text').should be_false
|
79
82
|
end
|
80
83
|
end
|
81
84
|
|
@@ -86,7 +89,7 @@ describe "Transcoder" do
|
|
86
89
|
it "should transcode" do
|
87
90
|
file.datastreams.key?('content_thumb').should be_false
|
88
91
|
file.create_derivatives
|
89
|
-
file.datastreams['content_thumb'].should have_content
|
92
|
+
file.datastreams['content_thumb'].should have_content
|
90
93
|
file.datastreams['content_thumb'].mimeType.should == 'image/png'
|
91
94
|
end
|
92
95
|
end
|
@@ -99,7 +102,7 @@ describe "Transcoder" do
|
|
99
102
|
file.create_derivatives
|
100
103
|
file.datastreams['content_mp3'].should have_content
|
101
104
|
file.datastreams['content_mp3'].mimeType.should == 'audio/mpeg'
|
102
|
-
file.datastreams['content_ogg'].should have_content
|
105
|
+
file.datastreams['content_ogg'].should have_content
|
103
106
|
file.datastreams['content_ogg'].mimeType.should == 'audio/ogg'
|
104
107
|
end
|
105
108
|
end
|
@@ -124,13 +127,13 @@ describe "Transcoder" do
|
|
124
127
|
file.create_derivatives
|
125
128
|
file.datastreams['content_mp4'].should have_content
|
126
129
|
file.datastreams['content_mp4'].mimeType.should == 'video/mp4'
|
127
|
-
file.datastreams['content_webm'].should have_content
|
130
|
+
file.datastreams['content_webm'].should have_content
|
128
131
|
file.datastreams['content_webm'].mimeType.should == 'video/webm'
|
129
132
|
file.datastreams['thumbnail'].should have_content
|
130
133
|
file.datastreams['thumbnail'].mimeType.should == 'image/jpeg'
|
131
134
|
end
|
132
135
|
end
|
133
|
-
|
136
|
+
|
134
137
|
describe "using callback methods" do
|
135
138
|
let(:attachment) { File.open(File.expand_path('../../fixtures/world.png', __FILE__))}
|
136
139
|
let(:file) { GenericFile.new(mime_type: 'image/png', label: "special").tap { |t| t.content.content = attachment; t.save } }
|
@@ -138,23 +141,24 @@ describe "Transcoder" do
|
|
138
141
|
it "should transcode" do
|
139
142
|
file.datastreams.key?('special_ds').should be_false
|
140
143
|
file.create_derivatives
|
141
|
-
file.datastreams['special_ds'].should have_content
|
144
|
+
file.datastreams['special_ds'].should have_content
|
142
145
|
file.datastreams['special_ds'].mimeType.should == 'image/png'
|
143
|
-
file.datastreams['special_ds'].should have_content
|
146
|
+
file.datastreams['special_ds'].should have_content
|
144
147
|
end
|
145
148
|
end
|
146
149
|
|
147
|
-
|
148
150
|
describe "with an attached Powerpoint", unless: ENV['TRAVIS'] == 'true' do
|
149
151
|
let(:attachment) { File.open(File.expand_path('../../fixtures/FlashPix.ppt', __FILE__))}
|
150
152
|
let(:file) { GenericFile.new(mime_type: 'application/vnd.ms-powerpoint').tap { |t| t.content.content = attachment; t.save } }
|
151
153
|
|
152
154
|
it "should transcode" do
|
153
155
|
file.create_derivatives
|
154
|
-
file.datastreams['
|
155
|
-
file.datastreams['
|
156
|
-
file.datastreams['
|
157
|
-
file.datastreams['
|
156
|
+
expect(file.datastreams['content_thumbnail']).to have_content
|
157
|
+
expect(file.datastreams['content_thumbnail'].mimeType).to eq('image/jpeg')
|
158
|
+
expect(file.datastreams['content_access']).to have_content
|
159
|
+
expect(file.datastreams['content_access'].mimeType).to eq('application/pdf')
|
160
|
+
expect(file.datastreams['content_preservation']).to have_content
|
161
|
+
expect(file.datastreams['content_preservation'].mimeType).to eq('application/vnd.openxmlformats-officedocument.presentationml.presentation')
|
158
162
|
end
|
159
163
|
end
|
160
164
|
|
@@ -164,10 +168,12 @@ describe "Transcoder" do
|
|
164
168
|
|
165
169
|
it "should transcode" do
|
166
170
|
file.create_derivatives
|
167
|
-
file.datastreams['
|
168
|
-
file.datastreams['
|
169
|
-
file.datastreams['
|
170
|
-
file.datastreams['
|
171
|
+
expect(file.datastreams['content_thumbnail']).to have_content
|
172
|
+
expect(file.datastreams['content_thumbnail'].mimeType).to eq('image/jpeg')
|
173
|
+
expect(file.datastreams['content_access']).to have_content
|
174
|
+
expect(file.datastreams['content_access'].mimeType).to eq('application/pdf')
|
175
|
+
expect(file.datastreams['content_preservation']).to have_content
|
176
|
+
expect(file.datastreams['content_preservation'].mimeType).to eq('application/vnd.oasis.opendocument.text')
|
171
177
|
end
|
172
178
|
end
|
173
179
|
|
@@ -177,10 +183,12 @@ describe "Transcoder" do
|
|
177
183
|
|
178
184
|
it "should transcode" do
|
179
185
|
file.create_derivatives
|
180
|
-
file.datastreams['
|
181
|
-
file.datastreams['
|
182
|
-
file.datastreams['
|
183
|
-
file.datastreams['
|
186
|
+
expect(file.datastreams['content_thumbnail']).to have_content
|
187
|
+
expect(file.datastreams['content_thumbnail'].mimeType).to eq('image/jpeg')
|
188
|
+
expect(file.datastreams['content_access']).to have_content
|
189
|
+
expect(file.datastreams['content_access'].mimeType).to eq('application/pdf')
|
190
|
+
expect(file.datastreams['content_preservation']).to have_content
|
191
|
+
expect(file.datastreams['content_preservation'].mimeType).to eq('application/vnd.openxmlformats-officedocument.wordprocessingml.document')
|
184
192
|
end
|
185
193
|
end
|
186
194
|
|
@@ -190,16 +198,16 @@ describe "Transcoder" do
|
|
190
198
|
|
191
199
|
it "should transcode" do
|
192
200
|
file.create_derivatives
|
193
|
-
|
194
|
-
file.datastreams['
|
195
|
-
file.datastreams['content_access'].
|
196
|
-
file.datastreams['
|
197
|
-
file.datastreams['content_preservation'].
|
201
|
+
expect(file.datastreams['content_thumbnail']).to have_content
|
202
|
+
expect(file.datastreams['content_thumbnail'].mimeType).to eq('image/jpeg')
|
203
|
+
expect(file.datastreams['content_access']).to have_content
|
204
|
+
expect(file.datastreams['content_access'].mimeType).to eq('application/pdf')
|
205
|
+
expect(file.datastreams['content_preservation']).to have_content
|
206
|
+
expect(file.datastreams['content_preservation'].mimeType).to eq('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
|
198
207
|
end
|
199
208
|
end
|
200
209
|
|
201
210
|
describe "with an attached tiff", unless: ENV['TRAVIS'] == 'true' do
|
202
|
-
|
203
211
|
let(:attachment) { File.open(File.expand_path('../../fixtures/test.tif', __FILE__))}
|
204
212
|
let(:file) { GenericFile.new(mime_type: 'image/tiff').tap { |t| t.content.content = attachment; t.save } }
|
205
213
|
it "should transcode" do
|
@@ -214,5 +222,4 @@ describe "Transcoder" do
|
|
214
222
|
file.datastreams['string_recipe'].mimeType.should == 'image/jp2'
|
215
223
|
end
|
216
224
|
end
|
217
|
-
|
218
225
|
end
|
metadata
CHANGED
@@ -1,131 +1,131 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hydra-derivatives
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Coyne
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-05-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.3'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: jettywrapper
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - '>='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: active-fedora
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - '>='
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - '>='
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: hydra-file_characterization
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - '>='
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - '>='
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: mini_magick
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - '>='
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
type: :runtime
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - '>='
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: activesupport
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - '>='
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: 3.2.13
|
118
|
-
- -
|
118
|
+
- - <
|
119
119
|
- !ruby/object:Gem::Version
|
120
120
|
version: '5.0'
|
121
121
|
type: :runtime
|
122
122
|
prerelease: false
|
123
123
|
version_requirements: !ruby/object:Gem::Requirement
|
124
124
|
requirements:
|
125
|
-
- -
|
125
|
+
- - '>='
|
126
126
|
- !ruby/object:Gem::Version
|
127
127
|
version: 3.2.13
|
128
|
-
- -
|
128
|
+
- - <
|
129
129
|
- !ruby/object:Gem::Version
|
130
130
|
version: '5.0'
|
131
131
|
description: Derivative generation plugin for hydra
|
@@ -135,9 +135,9 @@ executables: []
|
|
135
135
|
extensions: []
|
136
136
|
extra_rdoc_files: []
|
137
137
|
files:
|
138
|
-
-
|
139
|
-
-
|
140
|
-
-
|
138
|
+
- .gitignore
|
139
|
+
- .rspec
|
140
|
+
- .travis.yml
|
141
141
|
- CONTRIBUTING.md
|
142
142
|
- Gemfile
|
143
143
|
- History.md
|
@@ -170,9 +170,12 @@ files:
|
|
170
170
|
- spec/fixtures/piano_note.wav
|
171
171
|
- spec/fixtures/sample.rtf
|
172
172
|
- spec/fixtures/test.doc
|
173
|
+
- spec/fixtures/test.docx
|
173
174
|
- spec/fixtures/test.pdf
|
175
|
+
- spec/fixtures/test.pptx
|
174
176
|
- spec/fixtures/test.tif
|
175
177
|
- spec/fixtures/test.xls
|
178
|
+
- spec/fixtures/test.xlsx
|
176
179
|
- spec/fixtures/world.png
|
177
180
|
- spec/lib/hydra/derivatives/extract_metadata_spec.rb
|
178
181
|
- spec/spec_helper.rb
|
@@ -192,12 +195,12 @@ require_paths:
|
|
192
195
|
- lib
|
193
196
|
required_ruby_version: !ruby/object:Gem::Requirement
|
194
197
|
requirements:
|
195
|
-
- -
|
198
|
+
- - '>='
|
196
199
|
- !ruby/object:Gem::Version
|
197
200
|
version: '0'
|
198
201
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
199
202
|
requirements:
|
200
|
-
- -
|
203
|
+
- - '>='
|
201
204
|
- !ruby/object:Gem::Version
|
202
205
|
version: '0'
|
203
206
|
requirements: []
|
@@ -214,9 +217,12 @@ test_files:
|
|
214
217
|
- spec/fixtures/piano_note.wav
|
215
218
|
- spec/fixtures/sample.rtf
|
216
219
|
- spec/fixtures/test.doc
|
220
|
+
- spec/fixtures/test.docx
|
217
221
|
- spec/fixtures/test.pdf
|
222
|
+
- spec/fixtures/test.pptx
|
218
223
|
- spec/fixtures/test.tif
|
219
224
|
- spec/fixtures/test.xls
|
225
|
+
- spec/fixtures/test.xlsx
|
220
226
|
- spec/fixtures/world.png
|
221
227
|
- spec/lib/hydra/derivatives/extract_metadata_spec.rb
|
222
228
|
- spec/spec_helper.rb
|