hydra-works 0.0.1 → 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 +3 -1
- data/.travis.yml +2 -5
- data/Gemfile +1 -3
- data/README.md +28 -13
- data/hydra-works.gemspec +4 -3
- data/lib/hydra/works.rb +7 -57
- data/lib/hydra/works/models/concerns/block_child_objects.rb +16 -0
- data/lib/hydra/works/models/concerns/collection_behavior.rb +27 -2
- data/lib/hydra/works/models/concerns/generic_file/contained_files.rb +5 -13
- data/lib/hydra/works/models/concerns/generic_file/derivatives.rb +9 -13
- data/lib/hydra/works/models/concerns/generic_file/mime_types.rb +14 -9
- data/lib/hydra/works/models/concerns/generic_file/versioned_content.rb +18 -0
- data/lib/hydra/works/models/concerns/generic_file/virus_check.rb +48 -0
- data/lib/hydra/works/models/concerns/generic_file_behavior.rb +24 -1
- data/lib/hydra/works/models/concerns/generic_work_behavior.rb +32 -3
- data/lib/hydra/works/models/generic_file.rb +3 -0
- data/lib/hydra/works/services/generic_file/add_file_to_generic_file.rb +127 -0
- data/lib/hydra/works/services/generic_file/generate/thumbnail.rb +1 -2
- data/lib/hydra/works/services/generic_file/persist_derivative.rb +22 -0
- data/lib/hydra/works/services/generic_file/upload_file.rb +11 -19
- data/lib/hydra/works/version.rb +1 -1
- data/lib/hydra/works/vocab/works_terms.rb +1 -1
- data/spec/fixtures/Example.ogg +0 -0
- data/spec/fixtures/charter.docx +0 -0
- data/spec/fixtures/countdown.avi +0 -0
- data/spec/fixtures/image.jp2 +0 -0
- data/spec/fixtures/piano_note.wav +0 -0
- data/spec/fixtures/test5.mp3 +0 -0
- data/spec/fixtures/world.png +0 -0
- data/spec/hydra/works/models/collection_spec.rb +499 -16
- data/spec/hydra/works/models/concerns/block_child_objects_spec.rb +19 -0
- data/spec/hydra/works/models/concerns/{file → generic_file}/contained_files_spec.rb +20 -17
- data/spec/hydra/works/models/concerns/generic_file/mime_types_spec.rb +76 -0
- data/spec/hydra/works/models/concerns/generic_file/versioned_content_spec.rb +32 -0
- data/spec/hydra/works/models/concerns/generic_file/virus_check_spec.rb +50 -0
- data/spec/hydra/works/models/concerns/generic_file_behavior_spec.rb +1 -1
- data/spec/hydra/works/models/generic_file_spec.rb +201 -14
- data/spec/hydra/works/models/generic_work_spec.rb +530 -14
- data/spec/hydra/works/services/generic_file/add_file_to_generic_file_spec.rb +110 -0
- data/spec/hydra/works/services/generic_file/upload_file_spec.rb +45 -28
- data/spec/hydra/works/services/persist_derivatives_spec.rb +93 -0
- data/spec/hydra/works_spec.rb +35 -35
- data/spec/spec_helper.rb +6 -0
- metadata +56 -95
- data/lib/hydra/works/models/concerns/aggregates_collections.rb +0 -16
- data/lib/hydra/works/models/concerns/aggregates_generic_files.rb +0 -20
- data/lib/hydra/works/models/concerns/aggregates_generic_works.rb +0 -20
- data/lib/hydra/works/processor.rb +0 -9
- data/lib/hydra/works/services/collection/add_collection.rb +0 -19
- data/lib/hydra/works/services/collection/add_generic_work.rb +0 -19
- data/lib/hydra/works/services/collection/add_related_object.rb +0 -19
- data/lib/hydra/works/services/collection/get_collections.rb +0 -17
- data/lib/hydra/works/services/collection/get_generic_works.rb +0 -17
- data/lib/hydra/works/services/collection/get_related_objects.rb +0 -17
- data/lib/hydra/works/services/collection/remove_collection.rb +0 -19
- data/lib/hydra/works/services/collection/remove_generic_work.rb +0 -20
- data/lib/hydra/works/services/collection/remove_related_object.rb +0 -19
- data/lib/hydra/works/services/generic_file/add_file.rb +0 -55
- data/lib/hydra/works/services/generic_file/add_generic_file.rb +0 -19
- data/lib/hydra/works/services/generic_file/add_original_file.rb +0 -11
- data/lib/hydra/works/services/generic_file/add_related_object.rb +0 -19
- data/lib/hydra/works/services/generic_file/add_versioned_original_file.rb +0 -10
- data/lib/hydra/works/services/generic_file/get_generic_files.rb +0 -17
- data/lib/hydra/works/services/generic_file/get_related_objects.rb +0 -17
- data/lib/hydra/works/services/generic_file/remove_generic_file.rb +0 -20
- data/lib/hydra/works/services/generic_file/remove_related_object.rb +0 -19
- data/lib/hydra/works/services/generic_work/add_generic_file.rb +0 -19
- data/lib/hydra/works/services/generic_work/add_generic_work.rb +0 -19
- data/lib/hydra/works/services/generic_work/add_related_object.rb +0 -19
- data/lib/hydra/works/services/generic_work/get_generic_files.rb +0 -17
- data/lib/hydra/works/services/generic_work/get_generic_works.rb +0 -17
- data/lib/hydra/works/services/generic_work/get_related_objects.rb +0 -17
- data/lib/hydra/works/services/generic_work/move_generic_file.rb +0 -19
- data/lib/hydra/works/services/generic_work/remove_generic_file.rb +0 -20
- data/lib/hydra/works/services/generic_work/remove_generic_work.rb +0 -20
- data/lib/hydra/works/services/generic_work/remove_related_object.rb +0 -19
- data/spec/hydra/works/services/collection/add_collection_spec.rb +0 -166
- data/spec/hydra/works/services/collection/add_generic_work_spec.rb +0 -155
- data/spec/hydra/works/services/collection/add_related_object_spec.rb +0 -149
- data/spec/hydra/works/services/collection/get_collections_spec.rb +0 -35
- data/spec/hydra/works/services/collection/get_generic_works_spec.rb +0 -35
- data/spec/hydra/works/services/collection/get_related_objects_spec.rb +0 -49
- data/spec/hydra/works/services/collection/remove_collection_spec.rb +0 -133
- data/spec/hydra/works/services/collection/remove_generic_work_spec.rb +0 -133
- data/spec/hydra/works/services/collection/remove_related_object_spec.rb +0 -128
- data/spec/hydra/works/services/generic_file/add_file_spec.rb +0 -28
- data/spec/hydra/works/services/generic_file/add_generic_file_spec.rb +0 -174
- data/spec/hydra/works/services/generic_file/add_related_object_spec.rb +0 -150
- data/spec/hydra/works/services/generic_file/get_generic_files_spec.rb +0 -19
- data/spec/hydra/works/services/generic_file/get_related_objects_spec.rb +0 -45
- data/spec/hydra/works/services/generic_file/remove_generic_file_spec.rb +0 -124
- data/spec/hydra/works/services/generic_file/remove_related_object_spec.rb +0 -123
- data/spec/hydra/works/services/generic_work/add_generic_file_spec.rb +0 -156
- data/spec/hydra/works/services/generic_work/add_generic_work_spec.rb +0 -157
- data/spec/hydra/works/services/generic_work/add_related_object_spec.rb +0 -148
- data/spec/hydra/works/services/generic_work/get_generic_files_spec.rb +0 -35
- data/spec/hydra/works/services/generic_work/get_generic_works_spec.rb +0 -35
- data/spec/hydra/works/services/generic_work/get_related_objects_spec.rb +0 -46
- data/spec/hydra/works/services/generic_work/move_generic_file_spec.rb +0 -21
- data/spec/hydra/works/services/generic_work/remove_generic_file_spec.rb +0 -132
- data/spec/hydra/works/services/generic_work/remove_generic_work_spec.rb +0 -133
- data/spec/hydra/works/services/generic_work/remove_related_object_spec.rb +0 -128
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b09c8a80126527ae1e46668a611225e85ed64b85
|
4
|
+
data.tar.gz: 863f6a4b6315edbc5825e65d560a24fcb8372910
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 79734196b519492daf40942ba488aedf9f303483dc3527b9f92ee400d04ef51467d69e65b4c0f4fb6ce23a74a836f3188177faeb5a073fc24ec3b6671de89905
|
7
|
+
data.tar.gz: 2266310f4f914ca326b95f8f57eb294ef2d75f7170c56620e00dbe5eacc3c629be077d785ef114e711e439221a57506a2105a3209dbc9d23e3dd7b1d2534772e
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
@@ -3,12 +3,10 @@ source 'https://rubygems.org'
|
|
3
3
|
# Specify your gem's dependencies in hydra-works.gemspec
|
4
4
|
gemspec
|
5
5
|
|
6
|
-
gem 'activefedora-aggregation', github: 'projecthydra-labs/activefedora-aggregation'
|
7
|
-
gem 'active-fedora', github: 'projecthydra/active_fedora', branch: 'master'
|
8
6
|
gem 'slop', '~> 3.6' # For byebug
|
9
7
|
|
10
8
|
unless ENV['CI']
|
11
9
|
gem 'pry'
|
12
10
|
gem 'pry-byebug'
|
13
11
|
gem 'byebug'
|
14
|
-
end
|
12
|
+
end
|
data/README.md
CHANGED
@@ -36,29 +36,44 @@ class Collection < ActiveFedora::Base
|
|
36
36
|
include Hydra::Works::CollectionBehavior
|
37
37
|
end
|
38
38
|
|
39
|
-
class
|
39
|
+
class Book < ActiveFedora::Base
|
40
40
|
include Hydra::Works::GenericWorkBehavior
|
41
41
|
end
|
42
42
|
|
43
|
-
class
|
43
|
+
class Page < ActiveFedora::Base
|
44
44
|
include Hydra::Works::GenericFileBehavior
|
45
45
|
end
|
46
46
|
|
47
|
-
|
48
|
-
|
49
|
-
|
47
|
+
collection = Collection.create
|
48
|
+
book = BookWork.create
|
49
|
+
page = Page.create
|
50
|
+
|
51
|
+
collection.child_generic_works << book
|
52
|
+
collection.save
|
53
|
+
book.generic_files << page
|
54
|
+
book.save
|
55
|
+
|
56
|
+
file = page.files.build
|
57
|
+
file.content = "The quick brown fox jumped over the lazy dog."
|
58
|
+
page.save
|
59
|
+
```
|
60
|
+
|
61
|
+
## Virus Detection
|
62
|
+
|
63
|
+
To turn on virus detection, install clamav on your system and add the `clamav` gem to your Gemfile
|
50
64
|
|
51
|
-
|
52
|
-
Hydra::Works::AddGenericFileToGenericWork(bw1,bf1)
|
53
|
-
c1.save
|
54
|
-
bw1.save
|
55
|
-
bf1.save
|
65
|
+
gem 'clamav'
|
56
66
|
|
57
|
-
|
58
|
-
|
59
|
-
|
67
|
+
Then include the `VirusCheck` module in your `GenericFile` class:
|
68
|
+
|
69
|
+
```ruby
|
70
|
+
class BookFiles < ActiveFedora::Base
|
71
|
+
include Hydra::Works::GenericFileBehavior
|
72
|
+
include Hydra::Works::GenericFile::VirusCheck
|
73
|
+
end
|
60
74
|
```
|
61
75
|
|
76
|
+
|
62
77
|
## Access controls
|
63
78
|
|
64
79
|
We are using [Web ACL](http://www.w3.org/wiki/WebAccessControl) as implemented by [hydra-access-controls](https://github.com/projecthydra/hydra-head/tree/master/hydra-access-controls).
|
data/hydra-works.gemspec
CHANGED
@@ -18,9 +18,10 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_dependency "hydra-pcdm", "~> 0.
|
22
|
-
spec.add_dependency "hydra-derivatives", "~>
|
23
|
-
spec.add_dependency "activefedora-aggregation", "~> 0.
|
21
|
+
spec.add_dependency "hydra-pcdm", "~> 0.1"
|
22
|
+
spec.add_dependency "hydra-derivatives", "~> 2.0"
|
23
|
+
spec.add_dependency "activefedora-aggregation", "~> 0.4"
|
24
|
+
spec.add_dependency "active-fedora", "~> 9.2"
|
24
25
|
|
25
26
|
spec.add_development_dependency "bundler", "~> 1.7"
|
26
27
|
spec.add_development_dependency "rake", "~> 10.0"
|
data/lib/hydra/works.rb
CHANGED
@@ -2,10 +2,10 @@ require 'hydra/works/version'
|
|
2
2
|
require 'active_fedora/aggregation'
|
3
3
|
require 'hydra/pcdm'
|
4
4
|
require 'hydra/derivatives'
|
5
|
-
require 'hydra/works/processor'
|
6
5
|
|
7
6
|
module Hydra
|
8
7
|
module Works
|
8
|
+
extend ActiveSupport::Autoload
|
9
9
|
|
10
10
|
# vocabularies
|
11
11
|
autoload :WorksVocabularies, 'hydra/works/vocab/works_terms'
|
@@ -14,68 +14,18 @@ module Hydra
|
|
14
14
|
autoload :Collection, 'hydra/works/models/collection'
|
15
15
|
autoload :GenericWork, 'hydra/works/models/generic_work'
|
16
16
|
autoload :GenericFile, 'hydra/works/models/generic_file'
|
17
|
-
|
17
|
+
|
18
18
|
#behaviors
|
19
19
|
autoload :CollectionBehavior, 'hydra/works/models/concerns/collection_behavior'
|
20
20
|
autoload :GenericWorkBehavior, 'hydra/works/models/concerns/generic_work_behavior'
|
21
21
|
autoload :GenericFileBehavior, 'hydra/works/models/concerns/generic_file_behavior'
|
22
|
-
autoload :AggregatesGenericFiles, 'hydra/works/models/concerns/aggregates_generic_files'
|
23
|
-
autoload :AggregatesGenericWorks, 'hydra/works/models/concerns/aggregates_generic_works'
|
24
|
-
autoload :AggregatesCollections, 'hydra/works/models/concerns/aggregates_collections'
|
25
22
|
autoload :GenericFile, 'hydra/works/models/generic_file'
|
26
|
-
|
27
|
-
# collection services
|
28
|
-
autoload :AddCollectionToCollection, 'hydra/works/services/collection/add_collection'
|
29
|
-
autoload :AddGenericWorkToCollection, 'hydra/works/services/collection/add_generic_work'
|
30
|
-
autoload :AddRelatedObjectToCollection, 'hydra/works/services/collection/add_related_object'
|
31
|
-
autoload :GetCollectionsFromCollection, 'hydra/works/services/collection/get_collections'
|
32
|
-
autoload :GetGenericWorksFromCollection, 'hydra/works/services/collection/get_generic_works'
|
33
|
-
autoload :GetRelatedObjectsFromCollection, 'hydra/works/services/collection/get_related_objects'
|
34
|
-
autoload :RemoveCollectionFromCollection, 'hydra/works/services/collection/remove_collection'
|
35
|
-
autoload :RemoveGenericWorkFromCollection, 'hydra/works/services/collection/remove_generic_work'
|
36
|
-
autoload :RemoveRelatedObjectFromCollection, 'hydra/works/services/collection/remove_related_object'
|
37
|
-
|
38
|
-
# generic_work services
|
39
|
-
autoload :AddGenericWorkToGenericWork, 'hydra/works/services/generic_work/add_generic_work'
|
40
|
-
autoload :AddGenericFileToGenericWork, 'hydra/works/services/generic_work/add_generic_file'
|
41
|
-
autoload :AddRelatedObjectToGenericWork, 'hydra/works/services/generic_work/add_related_object'
|
42
|
-
autoload :GetGenericWorksFromGenericWork, 'hydra/works/services/generic_work/get_generic_works'
|
43
|
-
autoload :GetGenericFilesFromGenericWork, 'hydra/works/services/generic_work/get_generic_files'
|
44
|
-
autoload :GetRelatedObjectsFromGenericWork, 'hydra/works/services/generic_work/get_related_objects'
|
45
|
-
autoload :MoveGenericFileToGenericWork, 'hydra/works/services/generic_work/move_generic_file'
|
46
|
-
autoload :RemoveGenericWorkFromGenericWork, 'hydra/works/services/generic_work/remove_generic_work'
|
47
|
-
autoload :RemoveGenericFileFromGenericWork, 'hydra/works/services/generic_work/remove_generic_file'
|
48
|
-
autoload :RemoveRelatedObjectFromGenericWork, 'hydra/works/services/generic_work/remove_related_object'
|
23
|
+
autoload :BlockChildObjects, 'hydra/works/models/concerns/block_child_objects'
|
49
24
|
|
50
25
|
# generic_file services
|
51
|
-
autoload :
|
52
|
-
autoload :
|
53
|
-
autoload :
|
54
|
-
autoload :
|
55
|
-
autoload :GetGenericFilesFromGenericFile, 'hydra/works/services/generic_file/get_generic_files'
|
56
|
-
autoload :GetRelatedObjectsFromGenericFile, 'hydra/works/services/generic_file/get_related_objects'
|
57
|
-
autoload :RemoveGenericFileFromGenericFile, 'hydra/works/services/generic_file/remove_generic_file'
|
58
|
-
autoload :RemoveRelatedObjectFromGenericFile, 'hydra/works/services/generic_file/remove_related_object'
|
59
|
-
autoload :UploadFileToGenericFile, 'hydra/works/services/generic_file/upload_file'
|
60
|
-
autoload :AddOriginalFile, 'hydra/works/services/generic_file/add_original_file'
|
61
|
-
autoload :AddVersionedOriginalFile, 'hydra/works/services/generic_file/add_versioned_original_file'
|
62
|
-
autoload :GenerateThumbnail, 'hydra/works/services/generic_file/generate/thumbnail'
|
63
|
-
|
64
|
-
# model validations
|
65
|
-
def self.collection? collection
|
66
|
-
return false unless collection.respond_to? :type
|
67
|
-
collection.type.include? WorksVocabularies::WorksTerms.Collection
|
68
|
-
end
|
69
|
-
|
70
|
-
def self.generic_work? generic_work
|
71
|
-
return false unless generic_work.respond_to? :type
|
72
|
-
generic_work.type.include? WorksVocabularies::WorksTerms.GenericWork
|
73
|
-
end
|
74
|
-
|
75
|
-
def self.generic_file? generic_file
|
76
|
-
return false unless generic_file.respond_to? :type
|
77
|
-
generic_file.type.include? WorksVocabularies::WorksTerms.GenericFile
|
78
|
-
end
|
79
|
-
|
26
|
+
autoload :AddFileToGenericFile, 'hydra/works/services/generic_file/add_file_to_generic_file'
|
27
|
+
autoload :GenerateThumbnail, 'hydra/works/services/generic_file/generate/thumbnail'
|
28
|
+
autoload :UploadFileToGenericFile, 'hydra/works/services/generic_file/upload_file'
|
29
|
+
autoload :PersistDerivative, 'hydra/works/services/generic_file/persist_derivative'
|
80
30
|
end
|
81
31
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Hydra::Works
|
2
|
+
# Do not allow aggregation of child objects
|
3
|
+
module BlockChildObjects
|
4
|
+
|
5
|
+
def child_objects= objects
|
6
|
+
raise StandardError, "method `child_objects=' not allowed for #{self}"
|
7
|
+
end
|
8
|
+
|
9
|
+
def child_objects
|
10
|
+
raise StandardError, "method `child_objects' not allowed for #{self}"
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
|
@@ -20,8 +20,33 @@ module Hydra::Works
|
|
20
20
|
|
21
21
|
included do
|
22
22
|
type [RDFVocabularies::PCDMTerms.Collection,WorksVocabularies::WorksTerms.Collection]
|
23
|
-
include Hydra::Works::
|
24
|
-
|
23
|
+
include Hydra::Works::BlockChildObjects
|
24
|
+
|
25
|
+
filters_association :members, as: :child_collections, condition: :works_collection?
|
26
|
+
filters_association :members, as: :child_generic_works, condition: :works_generic_work?
|
27
|
+
end
|
28
|
+
|
29
|
+
# @return [Boolean] whether this instance is a Hydra::Works Collection.
|
30
|
+
def works_collection?
|
31
|
+
true
|
32
|
+
end
|
33
|
+
|
34
|
+
# @return [Boolean] whether this instance is a Hydra::Works Generic Work.
|
35
|
+
def works_generic_work?
|
36
|
+
false
|
37
|
+
end
|
38
|
+
|
39
|
+
# @return [Boolean] whether this instance is a Hydra::Works Generic File.
|
40
|
+
def works_generic_file?
|
41
|
+
false
|
42
|
+
end
|
43
|
+
|
44
|
+
def parents
|
45
|
+
aggregated_by
|
46
|
+
end
|
47
|
+
|
48
|
+
def parent_collections
|
49
|
+
aggregated_by.select { |parent| parent.class.included_modules.include?(Hydra::Works::CollectionBehavior) }
|
25
50
|
end
|
26
51
|
|
27
52
|
end
|
@@ -2,21 +2,13 @@ module Hydra::Works::GenericFile::ContainedFiles
|
|
2
2
|
extend ActiveSupport::Concern
|
3
3
|
|
4
4
|
# HydraWorks supports only one each of original_file, thumbnail, and extracted_text. However
|
5
|
-
# you are free to add an unlimited number of
|
5
|
+
# you are free to add an unlimited number of additional types such as different resolutions
|
6
6
|
# of images, different derivatives, etc, and use any established vocabulary you choose.
|
7
7
|
|
8
8
|
# TODO: se PCDM vocab class when projecthydra-labs/hydra-pcdm#80 is merged
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
included do
|
10
|
+
directly_contains_one :original_file, through: :files, type: ::RDF::URI("http://pcdm.org/use#OriginalFile"), class_name: "Hydra::PCDM::File"
|
11
|
+
directly_contains_one :thumbnail, through: :files, type: ::RDF::URI("http://pcdm.org/use#ThumbnailImage"), class_name: "Hydra::PCDM::File"
|
12
|
+
directly_contains_one :extracted_text, through: :files, type: ::RDF::URI("http://pcdm.org/use#ExtractedText"), class_name: "Hydra::PCDM::File"
|
12
13
|
end
|
13
|
-
|
14
|
-
def thumbnail
|
15
|
-
file_of_type(::RDF::URI("http://pcdm.org/ThumbnailImage"))
|
16
|
-
end
|
17
|
-
|
18
|
-
def extracted_text
|
19
|
-
file_of_type(::RDF::URI("http://pcdm.org/ExtractedText"))
|
20
|
-
end
|
21
|
-
|
22
14
|
end
|
@@ -5,28 +5,24 @@ module Hydra::Works::GenericFile
|
|
5
5
|
included do
|
6
6
|
include Hydra::Derivatives
|
7
7
|
|
8
|
+
# Sets output_file_service to PersistDerivative instead of default Hydra::Derivatives::PersistBasicContainedOutputFileService
|
9
|
+
Hydra::Derivatives.output_file_service = Hydra::Works::PersistDerivative
|
10
|
+
|
8
11
|
# This was taken directly from Sufia's GenericFile::Derivatives and modified to exclude any processing that modified the original file
|
9
12
|
makes_derivatives do |obj|
|
10
|
-
case obj.mime_type
|
13
|
+
case obj.original_file.mime_type
|
11
14
|
when *pdf_mime_types
|
12
|
-
obj.transform_file :original_file,
|
15
|
+
obj.transform_file :original_file, thumbnail: { format: 'jpg', size: '338x493' }
|
13
16
|
when *office_document_mime_types
|
14
|
-
obj.transform_file :original_file, { thumbnail: { format: 'jpg', size: '200x150>'
|
17
|
+
obj.transform_file :original_file, { thumbnail: { format: 'jpg', size: '200x150>' } }, processor: :document
|
15
18
|
when *video_mime_types
|
16
|
-
obj.transform_file :original_file, { thumbnail: { format: 'jpg'
|
19
|
+
obj.transform_file :original_file, { thumbnail: { format: 'jpg' } }, processor: :video
|
17
20
|
when *image_mime_types
|
18
|
-
obj.transform_file :original_file,
|
21
|
+
obj.transform_file :original_file, thumbnail: { format: 'jpg', size: '200x150>' }
|
19
22
|
end
|
20
23
|
end
|
21
24
|
|
22
25
|
end
|
23
26
|
|
24
|
-
# This bit was not in Sufia, but needs to be here for derivatives to work
|
25
|
-
# TODO: delegate mime type somewhere else?
|
26
|
-
def mime_type
|
27
|
-
return nil unless self.original_file
|
28
|
-
self.original_file.mime_type
|
29
|
-
end
|
30
|
-
|
31
27
|
end
|
32
|
-
end
|
28
|
+
end
|
@@ -4,23 +4,23 @@ module Hydra::Works::GenericFile
|
|
4
4
|
extend ActiveSupport::Concern
|
5
5
|
|
6
6
|
def pdf?
|
7
|
-
self.class.pdf_mime_types.include?
|
7
|
+
self.class.pdf_mime_types.include? mime_type
|
8
8
|
end
|
9
9
|
|
10
10
|
def image?
|
11
|
-
self.class.image_mime_types.include?
|
11
|
+
self.class.image_mime_types.include? mime_type
|
12
12
|
end
|
13
13
|
|
14
14
|
def video?
|
15
|
-
self.class.video_mime_types.include?
|
15
|
+
self.class.video_mime_types.include? mime_type
|
16
16
|
end
|
17
17
|
|
18
18
|
def audio?
|
19
|
-
self.class.audio_mime_types.include?
|
19
|
+
self.class.audio_mime_types.include? mime_type
|
20
20
|
end
|
21
21
|
|
22
22
|
def office_document?
|
23
|
-
self.class.office_document_mime_types.include?
|
23
|
+
self.class.office_document_mime_types.include? mime_type
|
24
24
|
end
|
25
25
|
|
26
26
|
# TODO: remove?
|
@@ -29,10 +29,15 @@ module Hydra::Works::GenericFile
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def file_format
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
32
|
+
if mime_type.present? && format_label.present?
|
33
|
+
"#{mime_type.split('/').last} (#{format_label.join(", ")})"
|
34
|
+
elsif mime_type.present?
|
35
|
+
mime_type.split('/').last
|
36
|
+
elsif format_label.present?
|
37
|
+
format_label
|
38
|
+
else
|
39
|
+
nil
|
40
|
+
end
|
36
41
|
end
|
37
42
|
|
38
43
|
module ClassMethods
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Hydra::Works::GenericFile
|
2
|
+
# Allows a GenericFile to treat the version history of the original_file as the GenericFile's version history
|
3
|
+
module VersionedContent
|
4
|
+
|
5
|
+
def content_versions
|
6
|
+
self.original_file.versions.all
|
7
|
+
end
|
8
|
+
|
9
|
+
def latest_content_version
|
10
|
+
self.original_file.versions.last
|
11
|
+
end
|
12
|
+
|
13
|
+
def current_content_version_uri
|
14
|
+
self.original_file.versions.last.uri
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Hydra::Works::GenericFile
|
2
|
+
module VirusCheck
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
validate :detect_viruses
|
7
|
+
end
|
8
|
+
|
9
|
+
# Default behavior is to raise a validation error and halt the save if a virus is found
|
10
|
+
def detect_viruses
|
11
|
+
return unless original_file && original_file.new_record?
|
12
|
+
|
13
|
+
path = original_file.is_a?(String) ? original_file : local_path_for_file(original_file)
|
14
|
+
unless defined?(ClamAV)
|
15
|
+
warn "Virus checking disabled, #{path} not checked"
|
16
|
+
return
|
17
|
+
end
|
18
|
+
|
19
|
+
scan_result = ClamAV.instance.scanfile(path)
|
20
|
+
if scan_result == 0
|
21
|
+
true
|
22
|
+
else
|
23
|
+
virus_message = "A virus was found in #{path}: #{scan_result}"
|
24
|
+
warn(virus_message)
|
25
|
+
errors.add(:base, virus_message)
|
26
|
+
false
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
# Returns a path for reading the content of +file+
|
33
|
+
# @param [File] file object to retrieve a path for
|
34
|
+
def local_path_for_file(file)
|
35
|
+
if file.respond_to?(:path)
|
36
|
+
file.path
|
37
|
+
else
|
38
|
+
Tempfile.open('') do |t|
|
39
|
+
t.binmode
|
40
|
+
t.write(file)
|
41
|
+
t.close
|
42
|
+
t.path
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
@@ -15,11 +15,34 @@ module Hydra::Works
|
|
15
15
|
included do
|
16
16
|
type [RDFVocabularies::PCDMTerms.Object,WorksVocabularies::WorksTerms.GenericFile]
|
17
17
|
|
18
|
-
include Hydra::Works::AggregatesGenericFiles
|
19
18
|
include Hydra::Works::GenericFile::ContainedFiles
|
20
19
|
include Hydra::Works::GenericFile::Derivatives
|
21
20
|
include Hydra::Works::GenericFile::MimeTypes
|
21
|
+
include Hydra::Works::GenericFile::VersionedContent
|
22
|
+
include Hydra::Works::BlockChildObjects
|
22
23
|
end
|
23
24
|
|
25
|
+
# @return [Boolean] whether this instance is a Hydra::Works Collection.
|
26
|
+
def works_collection?
|
27
|
+
false
|
28
|
+
end
|
29
|
+
|
30
|
+
# @return [Boolean] whether this instance is a Hydra::Works Generic Work.
|
31
|
+
def works_generic_work?
|
32
|
+
false
|
33
|
+
end
|
34
|
+
|
35
|
+
# @return [Boolean] whether this instance is a Hydra::Works Generic File.
|
36
|
+
def works_generic_file?
|
37
|
+
true
|
38
|
+
end
|
39
|
+
|
40
|
+
def parents
|
41
|
+
aggregated_by
|
42
|
+
end
|
43
|
+
|
44
|
+
def generic_works
|
45
|
+
aggregated_by.select { |parent| parent.class.included_modules.include?(Hydra::Works::GenericWorkBehavior) }
|
46
|
+
end
|
24
47
|
end
|
25
48
|
end
|