hydra-derivatives 0.0.4 → 0.0.5
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/History.md +3 -0
- data/README.md +9 -1
- data/VERSION +1 -1
- data/lib/hydra/derivatives/image.rb +17 -21
- data/spec/units/image_spec.rb +9 -4
- data/spec/units/transcoding_spec.rb +5 -3
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 168e645949c93b6ed1981c164f86969d71024cea
|
4
|
+
data.tar.gz: cecd38bd8f89d9de5d6e709cd3a409ee1792f4c7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5ccf06b680a87e68f1375d662439edaa451560bd3895c0262032fd8357b7d4f235b2ebf142ac5d2eb78d2aeeac3da2f337cf04473b329ce0e3063a329c4f46fd
|
7
|
+
data.tar.gz: dc693c6c09dde061948bccae85c67576cea915e668d5b7d7bb5e9ca9544950ba9678e087df0b68360e4be5d90e1b9ed60c96c1c7276df37e73dd80c70ea9900a
|
data/History.md
CHANGED
data/README.md
CHANGED
@@ -67,7 +67,15 @@ Then when you call `obj.create_derivatives` a new datastream, called 'thumbnail'
|
|
67
67
|
|
68
68
|
We recommend you run `obj.create_derivatives` in a background worker, because some derivative creation (especially videos) can take a long time.
|
69
69
|
|
70
|
-
|
70
|
+
# Installation
|
71
|
+
|
72
|
+
## Dependencies
|
73
|
+
|
74
|
+
* [Fits](https://code.google.com/p/fits/)
|
75
|
+
* [LibreOffice](https://www.libreoffice.org/)
|
76
|
+
|
77
|
+
To enable LibreOffice and Fits.sh support, you must make sure they are on your path. Most people will put that in their .bash_profile or somewhere similar. For example:
|
78
|
+
|
71
79
|
```bash
|
72
80
|
# in .bash_profile
|
73
81
|
export PATH=${PATH}:/Users/justin/workspace/fits-0.6.2:/Applications/LibreOffice.app/Contents/MacOS
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.5
|
@@ -3,42 +3,38 @@ module Hydra
|
|
3
3
|
class Image < Processor
|
4
4
|
def process
|
5
5
|
directives.each do |name, args|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
output_datastream_name = args[:datastream] if args[:datastream]
|
11
|
-
end
|
12
|
-
create_resized_image(output_datastream_name, size, new_mime_type)
|
6
|
+
opts = args.kind_of?(Hash) ? args : {size: args}
|
7
|
+
format = opts.fetch(:format, 'png')
|
8
|
+
output_datastream_name = opts.fetch(:datastream, output_datastream_id(name))
|
9
|
+
create_resized_image(output_datastream(output_datastream_name), opts[:size], format)
|
13
10
|
end
|
14
11
|
end
|
15
12
|
|
16
|
-
|
17
13
|
protected
|
18
14
|
|
19
|
-
def new_mime_type
|
20
|
-
|
15
|
+
def new_mime_type(format)
|
16
|
+
MIME::Types.type_for(format).first.to_s
|
21
17
|
end
|
22
18
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
19
|
+
def create_resized_image(output_ds, size, format, quality=nil)
|
20
|
+
create_image(output_ds, format, quality) do |xfrm|
|
21
|
+
if size
|
22
|
+
xfrm.change_geometry!(size) do |cols, rows, img|
|
23
|
+
img.resize!(cols, rows)
|
24
|
+
end
|
28
25
|
end
|
29
26
|
end
|
27
|
+
output_ds.mimeType = new_mime_type(format)
|
30
28
|
end
|
31
29
|
|
32
|
-
def create_image(
|
30
|
+
def create_image(output_datastream, format, quality=nil)
|
33
31
|
xfrm = load_image_transformer
|
34
32
|
yield(xfrm) if block_given?
|
35
|
-
|
36
|
-
|
37
|
-
xfrm.to_blob { self.quality = quality }
|
33
|
+
output_datastream.content = if quality
|
34
|
+
xfrm.to_blob { self.quality = quality; self.format = format.upcase }
|
38
35
|
else
|
39
|
-
xfrm.to_blob
|
36
|
+
xfrm.to_blob { self.format = format.upcase }
|
40
37
|
end
|
41
|
-
output_datastream(dsid).mimeType = mime_type
|
42
38
|
end
|
43
39
|
|
44
40
|
# Override this method if you want a different transformer, or need to load the
|
data/spec/units/image_spec.rb
CHANGED
@@ -1,20 +1,25 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Hydra::Derivatives::Image do
|
4
|
+
let(:object) { ActiveFedora::Base.new }
|
4
5
|
describe "when arguments are passed as a string" do
|
5
6
|
let(:directives) {{ :thumb => "100x100>" } }
|
6
|
-
subject { Hydra::Derivatives::Image.new(
|
7
|
+
subject { Hydra::Derivatives::Image.new(object, 'content', directives)}
|
7
8
|
|
8
9
|
it "should use the string as the size and the name is autogenerated" do
|
9
|
-
subject.should_receive(:create_resized_image).with(
|
10
|
+
subject.should_receive(:create_resized_image).with(an_instance_of(ActiveFedora::Datastream), "100x100>", 'png') do |ds|
|
11
|
+
ds.dsid.should == 'content_thumb'
|
12
|
+
end
|
10
13
|
subject.process
|
11
14
|
end
|
12
15
|
end
|
13
16
|
describe "when arguments are passed as a hash" do
|
14
17
|
let(:directives) {{ :thumb => {size: "200x300>", datastream: 'thumbnail'} }}
|
15
|
-
subject { Hydra::Derivatives::Image.new(
|
18
|
+
subject { Hydra::Derivatives::Image.new(object, 'content', directives)}
|
16
19
|
it "should use the specified size and name" do
|
17
|
-
subject.should_receive(:create_resized_image).with(
|
20
|
+
subject.should_receive(:create_resized_image).with(an_instance_of(ActiveFedora::Datastream), "200x300>", 'png') do |ds|
|
21
|
+
ds.dsid.should == 'thumbnail'
|
22
|
+
end
|
18
23
|
subject.process
|
19
24
|
|
20
25
|
end
|
@@ -23,7 +23,7 @@ describe "Transcoder" do
|
|
23
23
|
when 'video/avi'
|
24
24
|
obj.transform_datastream :content, { :mp4 => {format: 'mp4'}, :webm => {format: 'webm'} }, processor: :video
|
25
25
|
when 'image/png', 'image/jpg'
|
26
|
-
obj.transform_datastream :content, { :medium => "300x300>", :thumb => "100x100>" }
|
26
|
+
obj.transform_datastream :content, { :medium => "300x300>", :thumb => "100x100>", :access => {format: 'jpg', datastream: 'access'} }
|
27
27
|
when 'application/vnd.ms-powerpoint'
|
28
28
|
obj.transform_datastream :content, { :access => { :format=>'pdf' } }, processor: 'document'
|
29
29
|
when 'text/rtf'
|
@@ -53,6 +53,8 @@ describe "Transcoder" do
|
|
53
53
|
file.datastreams['content_medium'].mimeType.should == 'image/png'
|
54
54
|
file.datastreams['content_thumb'].should have_content
|
55
55
|
file.datastreams['content_thumb'].mimeType.should == 'image/png'
|
56
|
+
file.datastreams['access'].should have_content
|
57
|
+
file.datastreams['access'].mimeType.should == 'image/jpeg'
|
56
58
|
file.datastreams.key?('content_text').should be_false
|
57
59
|
end
|
58
60
|
end
|
@@ -82,12 +84,12 @@ describe "Transcoder" do
|
|
82
84
|
end
|
83
85
|
end
|
84
86
|
|
85
|
-
describe "when the source datastrem has an unknown mime_type" do
|
87
|
+
describe "when the source datastrem has an unknown mime_type", unless: ENV['TRAVIS'] == 'true' do
|
86
88
|
let(:attachment) { File.open(File.expand_path('../../fixtures/piano_note.wav', __FILE__))}
|
87
89
|
let(:file) { GenericFile.new(mime_type: 'audio/wav').tap { |t| t.content.content = attachment; t.content.mimeType = 'audio/vnd.wav'; t.save } }
|
88
90
|
|
89
91
|
it "should transcode" do
|
90
|
-
expect(logger).to receive(:warn).with("Unable to find a registered mime type for \"audio/vnd.wav\" on #{file.pid}").
|
92
|
+
expect(logger).to receive(:warn).with("Unable to find a registered mime type for \"audio/vnd.wav\" on #{file.pid}").at_least(1).times
|
91
93
|
file.create_derivatives
|
92
94
|
file.datastreams['content_mp3'].should have_content
|
93
95
|
file.datastreams['content_mp3'].mimeType.should == 'audio/mpeg'
|