hydra-derivatives 0.0.5 → 0.0.6
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.
- data/CONTRIBUTING.md +2 -0
- data/README.md +16 -4
- data/VERSION +1 -1
- data/hydra-derivatives.gemspec +2 -1
- data/lib/hydra/derivatives.rb +0 -1
- data/lib/hydra/derivatives/document.rb +6 -0
- data/lib/hydra/derivatives/extract_metadata.rb +11 -45
- data/lib/hydra/derivatives/image.rb +16 -16
- data/lib/hydra/derivatives/video.rb +1 -1
- data/spec/fixtures/test.doc +0 -0
- data/spec/fixtures/test.xls +0 -0
- data/spec/lib/hydra/derivatives/extract_metadata_spec.rb +33 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/units/extract_spec.rb +22 -0
- data/spec/units/transcoding_spec.rb +45 -4
- metadata +60 -20
- checksums.yaml +0 -7
data/CONTRIBUTING.md
CHANGED
@@ -78,6 +78,8 @@ You should also add yourself to the `CONTRIBUTORS.md` file in the root of the pr
|
|
78
78
|
|
79
79
|
### Submitting Changes
|
80
80
|
|
81
|
+
[Detailed Walkthrough of One Pull Request per Commit](http://ndlib.github.io/practices/one-commit-per-pull-request/)
|
82
|
+
|
81
83
|
* Read the article ["Using Pull Requests"](https://help.github.com/articles/using-pull-requests) on GitHub.
|
82
84
|
* Make sure your branch is up to date with its parent branch (i.e. master)
|
83
85
|
* `git checkout master`
|
data/README.md
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
hydra-derivatives
|
2
2
|
=================
|
3
|
+
[](http://badge.fury.io/rb/hydra-derivatives)
|
3
4
|
|
4
5
|
Derivative generation for hydra
|
5
6
|
|
@@ -47,8 +48,8 @@ Or a class like this:
|
|
47
48
|
transform_datastream :content, { :mp3 => {format: 'mp3'}, :ogg => {format: 'ogg'} }, processor: :audio
|
48
49
|
when 'video/avi'
|
49
50
|
transform_datastream :content, { :mp4 => {format: 'mp4'}, :webm => {format: 'webm'} }, processor: :video
|
50
|
-
when 'image/png', 'image/jpg'
|
51
|
-
transform_datastream :content, { :medium => "300x300>", :thumb => "100x100>" }
|
51
|
+
when 'image/png', 'image/jpg', 'image/tiff'
|
52
|
+
transform_datastream :content, { :medium => "300x300>", :thumb => {size: "100x100>", datastream: 'thumbnail'} }
|
52
53
|
end
|
53
54
|
end
|
54
55
|
end
|
@@ -63,20 +64,31 @@ And you add some content to it:
|
|
63
64
|
obj.save
|
64
65
|
```
|
65
66
|
|
66
|
-
Then when you call `obj.create_derivatives`
|
67
|
+
Then when you call `obj.create_derivatives` two new datastreams, 'thumbnail' and 'content_medium', will have been created with downsized images in them.
|
67
68
|
|
68
69
|
We recommend you run `obj.create_derivatives` in a background worker, because some derivative creation (especially videos) can take a long time.
|
69
70
|
|
70
71
|
# Installation
|
71
72
|
|
73
|
+
Just add `gem 'hydra-derivatives'` to your Gemfile.
|
74
|
+
|
72
75
|
## Dependencies
|
73
76
|
|
74
77
|
* [Fits](https://code.google.com/p/fits/)
|
78
|
+
* [FFMpeg](http://www.ffmpeg.org/)
|
75
79
|
* [LibreOffice](https://www.libreoffice.org/)
|
76
80
|
|
77
|
-
To enable LibreOffice and Fits.sh support, you
|
81
|
+
To enable LibreOffice, FFMpeg and Fits.sh support, you make sure they are on your path. Most people will put that in their .bash_profile or somewhere similar. For example:
|
78
82
|
|
79
83
|
```bash
|
80
84
|
# in .bash_profile
|
81
85
|
export PATH=${PATH}:/Users/justin/workspace/fits-0.6.2:/Applications/LibreOffice.app/Contents/MacOS
|
82
86
|
```
|
87
|
+
|
88
|
+
Alternatively, you can configure their paths:
|
89
|
+
```ruby
|
90
|
+
Hydra::Derivatives.ffmpeg_path = '/opt/local/ffmpeg/bin/ffmpeg'
|
91
|
+
Hydra::Derivatives.fits_path = '/opt/local/fits/bin/fits.sh'
|
92
|
+
Hydra::Derivatives.libreoffice_path = '/opt/local/libreoffice_path/bin/soffice'
|
93
|
+
|
94
|
+
```
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.6
|
data/hydra-derivatives.gemspec
CHANGED
@@ -23,7 +23,8 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_development_dependency "rspec"
|
24
24
|
|
25
25
|
spec.add_dependency 'active-fedora'
|
26
|
-
spec.add_dependency '
|
26
|
+
spec.add_dependency 'hydra-file_characterization'
|
27
|
+
spec.add_dependency 'mini_magick'
|
27
28
|
spec.add_dependency 'activesupport', '>= 3.2.13', '< 5.0'
|
28
29
|
end
|
29
30
|
|
data/lib/hydra/derivatives.rb
CHANGED
@@ -27,6 +27,12 @@ module Hydra
|
|
27
27
|
'application/pdf'
|
28
28
|
when 'odf'
|
29
29
|
'application/vnd.oasis.opendocument.text'
|
30
|
+
when 'docx'
|
31
|
+
'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
|
32
|
+
when 'xslx'
|
33
|
+
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
|
34
|
+
when 'pptx'
|
35
|
+
'application/vnd.openxmlformats-officedocument.presentationml.presentation'
|
30
36
|
else
|
31
37
|
raise "I don't know about the format '#{format}'"
|
32
38
|
end
|
@@ -1,58 +1,24 @@
|
|
1
|
-
require '
|
1
|
+
require 'hydra-file_characterization'
|
2
2
|
module Hydra
|
3
3
|
module Derivatives
|
4
4
|
module ExtractMetadata
|
5
|
-
include Open3
|
6
5
|
|
7
6
|
def extract_metadata
|
8
|
-
out = nil
|
9
|
-
to_tempfile do |f|
|
10
|
-
out = run_fits!(f.path)
|
11
|
-
end
|
12
|
-
out
|
13
|
-
end
|
14
|
-
|
15
|
-
def to_tempfile &block
|
16
7
|
return unless has_content?
|
17
|
-
|
18
|
-
|
19
|
-
extension = type ? ".#{type.extensions.first}" : ''
|
20
|
-
|
21
|
-
f = Tempfile.new(["#{pid}-#{dsVersionID}", extension])
|
22
|
-
f.binmode
|
23
|
-
if content.respond_to? :read
|
24
|
-
f.write(content.read)
|
25
|
-
else
|
26
|
-
f.write(content)
|
8
|
+
Hydra::FileCharacterization.characterize(content, filename_for_characterization, :fits) do |config|
|
9
|
+
config[:fits] = Hydra::Derivatives.fits_path
|
27
10
|
end
|
28
|
-
f.close
|
29
|
-
content.rewind if content.respond_to? :rewind
|
30
|
-
yield(f)
|
31
|
-
f.unlink
|
32
11
|
end
|
33
12
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
def run_fits!(file_path)
|
38
|
-
command = "#{fits_path} -i \"#{file_path}\""
|
39
|
-
stdin, stdout, stderr, wait_thr = popen3(command)
|
40
|
-
stdin.close
|
41
|
-
out = stdout.read
|
42
|
-
stdout.close
|
43
|
-
err = stderr.read
|
44
|
-
stderr.close
|
45
|
-
exit_status = wait_thr.value
|
46
|
-
raise "Unable to execute command \"#{command}\"\n#{err}" unless exit_status.success?
|
47
|
-
out
|
48
|
-
end
|
49
|
-
|
50
|
-
|
51
|
-
def fits_path
|
52
|
-
Hydra::Derivatives.fits_path
|
53
|
-
end
|
13
|
+
protected
|
54
14
|
|
15
|
+
def filename_for_characterization
|
16
|
+
mime_type = MIME::Types[mimeType].first
|
17
|
+
logger.warn "Unable to find a registered mime type for #{mimeType.inspect} on #{pid}" unless mime_type
|
18
|
+
extension = mime_type ? ".#{mime_type.extensions.first}" : ''
|
19
|
+
"#{pid}-#{dsVersionID}#{extension}"
|
55
20
|
end
|
21
|
+
|
56
22
|
end
|
23
|
+
end
|
57
24
|
end
|
58
|
-
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'mini_magick'
|
1
2
|
module Hydra
|
2
3
|
module Derivatives
|
3
4
|
class Image < Processor
|
@@ -16,33 +17,32 @@ module Hydra
|
|
16
17
|
MIME::Types.type_for(format).first.to_s
|
17
18
|
end
|
18
19
|
|
19
|
-
def create_resized_image(
|
20
|
-
create_image(
|
21
|
-
if size
|
22
|
-
xfrm.change_geometry!(size) do |cols, rows, img|
|
23
|
-
img.resize!(cols, rows)
|
24
|
-
end
|
25
|
-
end
|
20
|
+
def create_resized_image(output_datastream, size, format, quality=nil)
|
21
|
+
create_image(output_datastream, format, quality) do |xfrm|
|
22
|
+
xfrm.resize(size) if size.present?
|
26
23
|
end
|
27
|
-
|
24
|
+
output_datastream.mimeType = new_mime_type(format)
|
28
25
|
end
|
29
26
|
|
30
27
|
def create_image(output_datastream, format, quality=nil)
|
31
28
|
xfrm = load_image_transformer
|
32
29
|
yield(xfrm) if block_given?
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
30
|
+
xfrm.format(format)
|
31
|
+
xfrm.quality(quality.to_s) if quality
|
32
|
+
write_image(output_datastream, xfrm)
|
33
|
+
end
|
34
|
+
|
35
|
+
def write_image(output_datastream, xfrm)
|
36
|
+
stream = StringIO.new
|
37
|
+
xfrm.write(stream)
|
38
|
+
stream.rewind
|
39
|
+
output_datastream.content = stream
|
38
40
|
end
|
39
41
|
|
40
42
|
# Override this method if you want a different transformer, or need to load the
|
41
43
|
# raw image from a different source (e.g. external datastream)
|
42
44
|
def load_image_transformer
|
43
|
-
|
44
|
-
xformer.from_blob(source_datastream.content)
|
45
|
-
end
|
45
|
+
MiniMagick::Image.read(source_datastream.content)
|
46
46
|
end
|
47
47
|
end
|
48
48
|
end
|
Binary file
|
Binary file
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Hydra::Derivatives
|
4
|
+
describe ExtractMetadata do
|
5
|
+
let(:class_with_metadata_extraction) {
|
6
|
+
Class.new do
|
7
|
+
attr_reader :content, :mimeType, :pid, :dsVersionID
|
8
|
+
def initialize(options = {})
|
9
|
+
@content = options.fetch(:content, '')
|
10
|
+
@mimeType = options.fetch(:mime_type, nil)
|
11
|
+
@pid = options.fetch(:pid, 'pid-123')
|
12
|
+
@dsVersionID = options.fetch(:dsVersionID, 'version-id-1')
|
13
|
+
end
|
14
|
+
include Hydra::Derivatives::ExtractMetadata
|
15
|
+
def has_content?; content.present?; end
|
16
|
+
end
|
17
|
+
}
|
18
|
+
let(:initialization_options) { {content: 'abc', mime_type: 'text/plain'} }
|
19
|
+
subject { class_with_metadata_extraction.new(initialization_options) }
|
20
|
+
|
21
|
+
context '#extract_metadata' do
|
22
|
+
context 'without content' do
|
23
|
+
let(:initialization_options) { {content: '', mime_type: 'text/plain'} }
|
24
|
+
its(:extract_metadata) { should be_nil}
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'with content' do
|
28
|
+
let(:mime_type) { 'image/jpeg' }
|
29
|
+
its(:extract_metadata) { should match("<identity format=\"Plain text\" mimetype=\"text/plain\"")}
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -0,0 +1,22 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
class ExtractThing < ActiveFedora::Datastream
|
4
|
+
include Hydra::Derivatives::ExtractMetadata
|
5
|
+
attr_accessor :pid
|
6
|
+
end
|
7
|
+
|
8
|
+
describe Hydra::Derivatives::ExtractMetadata, :unless => $in_travis do
|
9
|
+
let(:subject) { ExtractThing.new }
|
10
|
+
let(:attachment) { File.open(File.expand_path('../../fixtures/world.png', __FILE__))}
|
11
|
+
|
12
|
+
describe "Image Content" do
|
13
|
+
it "should get a mime type" do
|
14
|
+
subject.content = attachment
|
15
|
+
subject.pid = "abc"
|
16
|
+
xml = subject.extract_metadata
|
17
|
+
doc = Nokogiri::HTML(xml)
|
18
|
+
identity = doc.xpath('//identity').first
|
19
|
+
identity.attr('mimetype').should == 'image/png'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe "Transcoder" do
|
4
|
-
before do
|
4
|
+
before(:all) do
|
5
5
|
class ContentDatastream < ActiveFedora::Datastream
|
6
6
|
include Hydra::Derivatives::ExtractMetadata
|
7
7
|
end
|
@@ -14,7 +14,7 @@ describe "Transcoder" do
|
|
14
14
|
delegate :mime_type, :to => :characterization, :unique => true
|
15
15
|
has_file_datastream 'content', type: ContentDatastream
|
16
16
|
|
17
|
-
makes_derivatives do |obj|
|
17
|
+
makes_derivatives do |obj|
|
18
18
|
case obj.mime_type
|
19
19
|
when 'application/pdf'
|
20
20
|
obj.transform_datastream :content, { :thumb => "100x100>" }
|
@@ -25,10 +25,15 @@ describe "Transcoder" do
|
|
25
25
|
when 'image/png', 'image/jpg'
|
26
26
|
obj.transform_datastream :content, { :medium => "300x300>", :thumb => "100x100>", :access => {format: 'jpg', datastream: 'access'} }
|
27
27
|
when 'application/vnd.ms-powerpoint'
|
28
|
-
obj.transform_datastream :content, { :access => { :format=>'pdf' } }, processor: 'document'
|
28
|
+
obj.transform_datastream :content, { :preservation=> {:format => 'pptx'}, :access => { :format=>'pdf' } }, processor: 'document'
|
29
29
|
when 'text/rtf'
|
30
30
|
obj.transform_datastream :content, { :preservation=> {:format => 'odf' }, :access => { :format=>'pdf' } }, processor: 'document'
|
31
|
+
when 'application/msword'
|
32
|
+
obj.transform_datastream :content, { :access => { :format=>'pdf' }, :preservation=> {:format => 'docx' } }, processor: 'document'
|
33
|
+
when 'application/vnd.ms-excel'
|
34
|
+
obj.transform_datastream :content, { :access => { :format=>'pdf' }, :preservation=> {:format => 'xslx' } }, processor: 'document'
|
31
35
|
end
|
36
|
+
|
32
37
|
end
|
33
38
|
|
34
39
|
makes_derivatives :generate_special_derivatives
|
@@ -41,6 +46,12 @@ describe "Transcoder" do
|
|
41
46
|
|
42
47
|
end
|
43
48
|
end
|
49
|
+
|
50
|
+
after(:all) do
|
51
|
+
GenericFile.all.each(&:destroy)
|
52
|
+
Object.send(:remove_const, :GenericFile);
|
53
|
+
Object.send(:remove_const, :ContentDatastream);
|
54
|
+
end
|
44
55
|
|
45
56
|
describe "with an attached image" do
|
46
57
|
let(:attachment) { File.open(File.expand_path('../../fixtures/world.png', __FILE__))}
|
@@ -89,7 +100,7 @@ describe "Transcoder" do
|
|
89
100
|
let(:file) { GenericFile.new(mime_type: 'audio/wav').tap { |t| t.content.content = attachment; t.content.mimeType = 'audio/vnd.wav'; t.save } }
|
90
101
|
|
91
102
|
it "should transcode" do
|
92
|
-
expect(logger).to receive(:warn).with("Unable to find a registered mime type for \"audio/vnd.wav\" on #{file.pid}").
|
103
|
+
expect(logger).to receive(:warn).with("Unable to find a registered mime type for \"audio/vnd.wav\" on #{file.pid}").twice
|
93
104
|
file.create_derivatives
|
94
105
|
file.datastreams['content_mp3'].should have_content
|
95
106
|
file.datastreams['content_mp3'].mimeType.should == 'audio/mpeg'
|
@@ -131,6 +142,8 @@ describe "Transcoder" do
|
|
131
142
|
file.create_derivatives
|
132
143
|
file.datastreams['content_access'].should have_content
|
133
144
|
file.datastreams['content_access'].mimeType.should == 'application/pdf'
|
145
|
+
file.datastreams['content_preservation'].should have_content
|
146
|
+
file.datastreams['content_preservation'].mimeType.should == 'application/vnd.openxmlformats-officedocument.presentationml.presentation'
|
134
147
|
end
|
135
148
|
end
|
136
149
|
|
@@ -146,4 +159,32 @@ describe "Transcoder" do
|
|
146
159
|
file.datastreams['content_preservation'].mimeType.should == 'application/vnd.oasis.opendocument.text'
|
147
160
|
end
|
148
161
|
end
|
162
|
+
|
163
|
+
describe "with an attached word doc format", unless: ENV['TRAVIS'] == 'true' do
|
164
|
+
let(:attachment) { File.open(File.expand_path('../../fixtures/test.doc', __FILE__))}
|
165
|
+
let(:file) { GenericFile.new(mime_type: 'application/msword').tap { |t| t.content.content = attachment; t.save } }
|
166
|
+
|
167
|
+
it "should transcode" do
|
168
|
+
file.create_derivatives
|
169
|
+
file.datastreams['content_access'].should have_content
|
170
|
+
file.datastreams['content_access'].mimeType.should == 'application/pdf'
|
171
|
+
file.datastreams['content_preservation'].should have_content
|
172
|
+
file.datastreams['content_preservation'].mimeType.should == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
describe "with an attached excel format", unless: ENV['TRAVIS'] == 'true' do
|
177
|
+
let(:attachment) { File.open(File.expand_path('../../fixtures/test.xls', __FILE__))}
|
178
|
+
let(:file) { GenericFile.new(mime_type: 'application/vnd.ms-excel').tap { |t| t.content.content = attachment; t.save } }
|
179
|
+
|
180
|
+
it "should transcode" do
|
181
|
+
file.create_derivatives
|
182
|
+
puts file.datastreams.inspect
|
183
|
+
file.datastreams['content_access'].should have_content
|
184
|
+
file.datastreams['content_access'].mimeType.should == 'application/pdf'
|
185
|
+
file.datastreams['content_preservation'].should have_content
|
186
|
+
file.datastreams['content_preservation'].mimeType.should == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
149
190
|
end
|
metadata
CHANGED
@@ -1,18 +1,20 @@
|
|
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.0.6
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Justin Coyne
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2013-
|
12
|
+
date: 2013-10-10 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: bundler
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
19
|
- - ~>
|
18
20
|
- !ruby/object:Gem::Version
|
@@ -20,6 +22,7 @@ dependencies:
|
|
20
22
|
type: :development
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
27
|
- - ~>
|
25
28
|
- !ruby/object:Gem::Version
|
@@ -27,78 +30,105 @@ dependencies:
|
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: rake
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
|
-
- - '>='
|
35
|
+
- - ! '>='
|
32
36
|
- !ruby/object:Gem::Version
|
33
37
|
version: '0'
|
34
38
|
type: :development
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
|
-
- - '>='
|
43
|
+
- - ! '>='
|
39
44
|
- !ruby/object:Gem::Version
|
40
45
|
version: '0'
|
41
46
|
- !ruby/object:Gem::Dependency
|
42
47
|
name: jettywrapper
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
44
50
|
requirements:
|
45
|
-
- - '>='
|
51
|
+
- - ! '>='
|
46
52
|
- !ruby/object:Gem::Version
|
47
53
|
version: '0'
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
51
58
|
requirements:
|
52
|
-
- - '>='
|
59
|
+
- - ! '>='
|
53
60
|
- !ruby/object:Gem::Version
|
54
61
|
version: '0'
|
55
62
|
- !ruby/object:Gem::Dependency
|
56
63
|
name: rspec
|
57
64
|
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
58
66
|
requirements:
|
59
|
-
- - '>='
|
67
|
+
- - ! '>='
|
60
68
|
- !ruby/object:Gem::Version
|
61
69
|
version: '0'
|
62
70
|
type: :development
|
63
71
|
prerelease: false
|
64
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
65
74
|
requirements:
|
66
|
-
- - '>='
|
75
|
+
- - ! '>='
|
67
76
|
- !ruby/object:Gem::Version
|
68
77
|
version: '0'
|
69
78
|
- !ruby/object:Gem::Dependency
|
70
79
|
name: active-fedora
|
71
80
|
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
72
82
|
requirements:
|
73
|
-
- - '>='
|
83
|
+
- - ! '>='
|
74
84
|
- !ruby/object:Gem::Version
|
75
85
|
version: '0'
|
76
86
|
type: :runtime
|
77
87
|
prerelease: false
|
78
88
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
79
90
|
requirements:
|
80
|
-
- - '>='
|
91
|
+
- - ! '>='
|
81
92
|
- !ruby/object:Gem::Version
|
82
93
|
version: '0'
|
83
94
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
95
|
+
name: hydra-file_characterization
|
85
96
|
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
86
98
|
requirements:
|
87
|
-
- - '>='
|
99
|
+
- - ! '>='
|
88
100
|
- !ruby/object:Gem::Version
|
89
101
|
version: '0'
|
90
102
|
type: :runtime
|
91
103
|
prerelease: false
|
92
104
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
93
106
|
requirements:
|
94
|
-
- - '>='
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: mini_magick
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
95
124
|
- !ruby/object:Gem::Version
|
96
125
|
version: '0'
|
97
126
|
- !ruby/object:Gem::Dependency
|
98
127
|
name: activesupport
|
99
128
|
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
100
130
|
requirements:
|
101
|
-
- - '>='
|
131
|
+
- - ! '>='
|
102
132
|
- !ruby/object:Gem::Version
|
103
133
|
version: 3.2.13
|
104
134
|
- - <
|
@@ -107,8 +137,9 @@ dependencies:
|
|
107
137
|
type: :runtime
|
108
138
|
prerelease: false
|
109
139
|
version_requirements: !ruby/object:Gem::Requirement
|
140
|
+
none: false
|
110
141
|
requirements:
|
111
|
-
- - '>='
|
142
|
+
- - ! '>='
|
112
143
|
- !ruby/object:Gem::Version
|
113
144
|
version: 3.2.13
|
114
145
|
- - <
|
@@ -148,46 +179,55 @@ files:
|
|
148
179
|
- spec/fixtures/countdown.avi
|
149
180
|
- spec/fixtures/piano_note.wav
|
150
181
|
- spec/fixtures/sample.rtf
|
182
|
+
- spec/fixtures/test.doc
|
151
183
|
- spec/fixtures/test.pdf
|
184
|
+
- spec/fixtures/test.xls
|
152
185
|
- spec/fixtures/world.png
|
186
|
+
- spec/lib/hydra/derivatives/extract_metadata_spec.rb
|
153
187
|
- spec/spec_helper.rb
|
154
188
|
- spec/units/config_spec.rb
|
189
|
+
- spec/units/extract_spec.rb
|
155
190
|
- spec/units/image_spec.rb
|
156
191
|
- spec/units/transcoding_spec.rb
|
157
192
|
- spec/units/video_spec.rb
|
158
193
|
homepage: https://github.com/projecthydra/hydra-derivatives
|
159
194
|
licenses:
|
160
195
|
- APACHE2
|
161
|
-
metadata: {}
|
162
196
|
post_install_message:
|
163
197
|
rdoc_options: []
|
164
198
|
require_paths:
|
165
199
|
- lib
|
166
200
|
required_ruby_version: !ruby/object:Gem::Requirement
|
201
|
+
none: false
|
167
202
|
requirements:
|
168
|
-
- - '>='
|
203
|
+
- - ! '>='
|
169
204
|
- !ruby/object:Gem::Version
|
170
205
|
version: '0'
|
171
206
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
207
|
+
none: false
|
172
208
|
requirements:
|
173
|
-
- - '>='
|
209
|
+
- - ! '>='
|
174
210
|
- !ruby/object:Gem::Version
|
175
211
|
version: '0'
|
176
212
|
requirements: []
|
177
213
|
rubyforge_project:
|
178
|
-
rubygems_version:
|
214
|
+
rubygems_version: 1.8.25
|
179
215
|
signing_key:
|
180
|
-
specification_version:
|
216
|
+
specification_version: 3
|
181
217
|
summary: Derivative generation plugin for hydra
|
182
218
|
test_files:
|
183
219
|
- spec/fixtures/FlashPix.ppt
|
184
220
|
- spec/fixtures/countdown.avi
|
185
221
|
- spec/fixtures/piano_note.wav
|
186
222
|
- spec/fixtures/sample.rtf
|
223
|
+
- spec/fixtures/test.doc
|
187
224
|
- spec/fixtures/test.pdf
|
225
|
+
- spec/fixtures/test.xls
|
188
226
|
- spec/fixtures/world.png
|
227
|
+
- spec/lib/hydra/derivatives/extract_metadata_spec.rb
|
189
228
|
- spec/spec_helper.rb
|
190
229
|
- spec/units/config_spec.rb
|
230
|
+
- spec/units/extract_spec.rb
|
191
231
|
- spec/units/image_spec.rb
|
192
232
|
- spec/units/transcoding_spec.rb
|
193
233
|
- spec/units/video_spec.rb
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 168e645949c93b6ed1981c164f86969d71024cea
|
4
|
-
data.tar.gz: cecd38bd8f89d9de5d6e709cd3a409ee1792f4c7
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 5ccf06b680a87e68f1375d662439edaa451560bd3895c0262032fd8357b7d4f235b2ebf142ac5d2eb78d2aeeac3da2f337cf04473b329ce0e3063a329c4f46fd
|
7
|
-
data.tar.gz: dc693c6c09dde061948bccae85c67576cea915e668d5b7d7bb5e9ca9544950ba9678e087df0b68360e4be5d90e1b9ed60c96c1c7276df37e73dd80c70ea9900a
|