hydra-derivatives 1.0.0 → 1.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/README.md +29 -1
- data/VERSION +1 -1
- data/hydra-derivatives.gemspec +1 -1
- data/lib/hydra/derivatives/document.rb +1 -1
- data/lib/hydra/derivatives/ffmpeg.rb +2 -4
- data/lib/hydra/derivatives/image.rb +14 -0
- data/lib/hydra/derivatives/processor.rb +0 -1
- data/lib/hydra/derivatives/shell_based_processor.rb +3 -1
- data/spec/units/image_spec.rb +29 -1
- data/spec/units/shell_based_processor_spec.rb +22 -0
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 14f09b6670a1ef6add67ed44818c17c7cf8c36b1
|
4
|
+
data.tar.gz: 408048906e8ab82bccb72a05c9849826cc09c742
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d97b2c7b9cff0b1e09f0394feef16e136808cb840b50ff48bb40b6ed8e24903862a88e99b5f054f24fb80a4789a0bce5251cb02c3f942010311ab7ba24f32c9
|
7
|
+
data.tar.gz: 4afab72548ce8ba1524b9d957cd08574d1a543a6a0741ebc9e2ade3dc6675d731b7f7286d479d6b9920ed157e7a0bfc38d8a68e9a51f7cab6d403c378e679cd4
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# hydra-derivatives [](http://badge.fury.io/rb/hydra-derivatives) [](http://badge.fury.io/rb/hydra-derivatives) [](https://travis-ci.org/projecthydra/hydra-derivatives) [](https://gemnasium.com/projecthydra/hydra-derivatives)
|
2
2
|
|
3
3
|
Derivative generation for hydra
|
4
4
|
|
@@ -70,6 +70,34 @@ Then when you call `obj.create_derivatives` two new files, 'thumbnail' and 'cont
|
|
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
|
+
## Configuration
|
74
|
+
|
75
|
+
### Processing Timeouts
|
76
|
+
|
77
|
+
hydra-derivatives can be configured to timeout derivatives processes. Each process type has a separate timeout.
|
78
|
+
If no timeout is set the system will process until complete (possibly indefinitely).
|
79
|
+
|
80
|
+
```
|
81
|
+
require 'hydra/derivatives'
|
82
|
+
|
83
|
+
Hydra::Derivatives::Video::Processor.timeout = 10.minutes
|
84
|
+
Hydra::Derivatives::Document.timeout = 5.minutes
|
85
|
+
Hydra::Derivatives::Audio.timeout = 10.minutes
|
86
|
+
Hydra::Derivatives::Image.timeout = 5.minutes
|
87
|
+
|
88
|
+
```
|
89
|
+
|
90
|
+
### Video Processing configuration
|
91
|
+
|
92
|
+
Flags can be set for using different video codes. Default codecs are shown below
|
93
|
+
|
94
|
+
```
|
95
|
+
Hydra::Derivatives::Video::Processor.config.mpeg4.codec = '-vcodec libx264 -acodec libfdk_aac'
|
96
|
+
Hydra::Derivatives::Video::Processor.config.webm.codec = '-vcodec libvpx -acodec libvorbis'
|
97
|
+
Hydra::Derivatives::Video::Processor.config.mkv.codec = '-vcodec ffv1'
|
98
|
+
Hydra::Derivatives::Video::Processor.config.jpeg.codec = '-vcodec mjpeg'
|
99
|
+
```
|
100
|
+
|
73
101
|
# Installation
|
74
102
|
|
75
103
|
Just add `gem 'hydra-derivatives'` to your Gemfile.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.1.0
|
data/hydra-derivatives.gemspec
CHANGED
@@ -26,7 +26,7 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.add_dependency 'hydra-file_characterization', '~> 0.3'
|
27
27
|
spec.add_dependency 'mini_magick', '>= 3.2', '< 5'
|
28
28
|
spec.add_dependency 'activesupport', '~> 4.0'
|
29
|
-
spec.add_dependency 'mime-types', '~>
|
29
|
+
spec.add_dependency 'mime-types', '~> 1'
|
30
30
|
spec.add_dependency 'deprecation', '~> 0.1'
|
31
31
|
end
|
32
32
|
|
@@ -9,7 +9,7 @@ module Hydra
|
|
9
9
|
execute "#{Hydra::Derivatives.libreoffice_path} --invisible --headless --convert-to #{format} --outdir #{outdir} #{path}"
|
10
10
|
end
|
11
11
|
|
12
|
-
def encode_file(dest_path, file_suffix, mime_type, options =
|
12
|
+
def encode_file(dest_path, file_suffix, mime_type, options = { })
|
13
13
|
new_output = ''
|
14
14
|
source_file.to_tempfile do |f|
|
15
15
|
if mime_type == 'image/jpeg'
|
@@ -19,10 +19,8 @@ module Hydra
|
|
19
19
|
module ClassMethods
|
20
20
|
|
21
21
|
def encode(path, options, output_file)
|
22
|
-
inopts = options[INPUT_OPTIONS]
|
23
|
-
|
24
|
-
outopts = options[OUTPUT_OPTIONS] if options
|
25
|
-
outopts ||= options
|
22
|
+
inopts = options[INPUT_OPTIONS] ||= "-y"
|
23
|
+
outopts = options[OUTPUT_OPTIONS] ||= ""
|
26
24
|
execute "#{Hydra::Derivatives.ffmpeg_path} #{inopts} -i \"#{path}\" #{outopts} #{output_file}"
|
27
25
|
end
|
28
26
|
end
|
@@ -2,7 +2,21 @@ require 'mini_magick'
|
|
2
2
|
module Hydra
|
3
3
|
module Derivatives
|
4
4
|
class Image < Processor
|
5
|
+
class_attribute :timeout
|
6
|
+
|
5
7
|
def process
|
8
|
+
timeout ? process_with_timeout : process_without_timeout
|
9
|
+
end
|
10
|
+
|
11
|
+
def process_with_timeout
|
12
|
+
status = Timeout::timeout(timeout) do
|
13
|
+
process_without_timeout
|
14
|
+
end
|
15
|
+
rescue Timeout::Error => ex
|
16
|
+
raise Hydra::Derivatives::TimeoutError, "Unable to process image derivative\nThe command took longer than #{timeout} seconds to execute"
|
17
|
+
end
|
18
|
+
|
19
|
+
def process_without_timeout
|
6
20
|
directives.each do |name, args|
|
7
21
|
opts = args.kind_of?(Hash) ? args : {size: args}
|
8
22
|
format = opts.fetch(:format, 'png')
|
@@ -24,10 +24,12 @@ module Hydra
|
|
24
24
|
end
|
25
25
|
|
26
26
|
# override this method in subclass if you want to provide specific options.
|
27
|
+
# returns a hash of options that the specific processors use
|
27
28
|
def options_for(format)
|
29
|
+
{}
|
28
30
|
end
|
29
31
|
|
30
|
-
def encode_file(dest_path, file_suffix, mime_type, options
|
32
|
+
def encode_file(dest_path, file_suffix, mime_type, options)
|
31
33
|
out_file = nil
|
32
34
|
output_file = Dir::Tmpname.create(['sufia', ".#{file_suffix}"], Hydra::Derivatives.temp_file_base){}
|
33
35
|
source_file.to_tempfile do |f|
|
data/spec/units/image_spec.rb
CHANGED
@@ -6,7 +6,7 @@ describe Hydra::Derivatives::Image do
|
|
6
6
|
|
7
7
|
subject { Hydra::Derivatives::Image.new(object, 'content', directives)}
|
8
8
|
|
9
|
-
before {
|
9
|
+
before { allow(subject).to receive(:output_file).with(file_name).and_return(output_file) }
|
10
10
|
|
11
11
|
describe "when arguments are passed as a string" do
|
12
12
|
let(:directives) { { thumb: "100x100>" } }
|
@@ -27,4 +27,32 @@ describe Hydra::Derivatives::Image do
|
|
27
27
|
subject.process
|
28
28
|
end
|
29
29
|
end
|
30
|
+
|
31
|
+
describe 'timeout' do
|
32
|
+
let(:directives) { { thumb: "100x100>" } }
|
33
|
+
let(:file_name) { 'content_thumb' }
|
34
|
+
|
35
|
+
before do
|
36
|
+
allow(subject).to receive(:create_resized_image).with(output_file, "100x100>", 'png')
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'when set' do
|
40
|
+
before do
|
41
|
+
subject.timeout = 0.1
|
42
|
+
allow_any_instance_of(Hydra::Derivatives::Image).to receive(:process_without_timeout) { sleep 0.2 }
|
43
|
+
end
|
44
|
+
it 'raises a timeout exception' do
|
45
|
+
expect { subject.process }.to raise_error Hydra::Derivatives::TimeoutError
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'when not set' do
|
50
|
+
before { subject.timeout = nil }
|
51
|
+
it 'processes without a timeout' do
|
52
|
+
expect(subject).to receive(:process_with_timeout).never
|
53
|
+
expect(subject).to receive(:process_without_timeout).once
|
54
|
+
subject.process
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
30
58
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
|
4
|
+
describe Hydra::Derivatives::ShellBasedProcessor do
|
5
|
+
class TestProcessor <
|
6
|
+
include Hydra::Derivatives::ShellBasedProcessor
|
7
|
+
end
|
8
|
+
|
9
|
+
let (:processor) {TestProcessor.new}
|
10
|
+
|
11
|
+
describe "has expected interface" do
|
12
|
+
|
13
|
+
describe "options_for" do
|
14
|
+
it "returns a hash" do
|
15
|
+
expect(processor.options_for("a")).to be_a Hash
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hydra-derivatives
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.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: 2015-
|
11
|
+
date: 2015-03-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -134,14 +134,14 @@ dependencies:
|
|
134
134
|
requirements:
|
135
135
|
- - "~>"
|
136
136
|
- !ruby/object:Gem::Version
|
137
|
-
version: '
|
137
|
+
version: '1'
|
138
138
|
type: :runtime
|
139
139
|
prerelease: false
|
140
140
|
version_requirements: !ruby/object:Gem::Requirement
|
141
141
|
requirements:
|
142
142
|
- - "~>"
|
143
143
|
- !ruby/object:Gem::Version
|
144
|
-
version: '
|
144
|
+
version: '1'
|
145
145
|
- !ruby/object:Gem::Dependency
|
146
146
|
name: deprecation
|
147
147
|
requirement: !ruby/object:Gem::Requirement
|
@@ -214,6 +214,7 @@ files:
|
|
214
214
|
- spec/units/image_spec.rb
|
215
215
|
- spec/units/jpeg2k_spec.rb
|
216
216
|
- spec/units/logger_spec.rb
|
217
|
+
- spec/units/shell_based_processor_spec.rb
|
217
218
|
- spec/units/transcoding_spec.rb
|
218
219
|
- spec/units/video_spec.rb
|
219
220
|
homepage: https://github.com/projecthydra/hydra-derivatives
|
@@ -236,7 +237,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
236
237
|
version: '0'
|
237
238
|
requirements: []
|
238
239
|
rubyforge_project:
|
239
|
-
rubygems_version: 2.
|
240
|
+
rubygems_version: 2.4.6
|
240
241
|
signing_key:
|
241
242
|
specification_version: 4
|
242
243
|
summary: Derivative generation plugin for hydra
|
@@ -262,6 +263,6 @@ test_files:
|
|
262
263
|
- spec/units/image_spec.rb
|
263
264
|
- spec/units/jpeg2k_spec.rb
|
264
265
|
- spec/units/logger_spec.rb
|
266
|
+
- spec/units/shell_based_processor_spec.rb
|
265
267
|
- spec/units/transcoding_spec.rb
|
266
268
|
- spec/units/video_spec.rb
|
267
|
-
has_rdoc:
|