curation_concerns-models 0.1.0 → 0.2.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 +2 -0
- data/Rakefile +1 -1
- data/app/actors/concerns/curation_concerns/manages_embargoes_actor.rb +11 -19
- data/app/actors/curation_concerns/base_actor.rb +41 -45
- data/app/actors/curation_concerns/embargo_actor.rb +19 -0
- data/app/actors/curation_concerns/file_set_actor.rb +200 -0
- data/app/actors/curation_concerns/lease_actor.rb +19 -0
- data/app/actors/curation_concerns/work_actor_behavior.rb +55 -58
- data/app/indexers/curation_concerns/collection_indexer.rb +10 -0
- data/app/indexers/curation_concerns/file_set_indexing_service.rb +24 -0
- data/app/{services/curation_concerns/generic_work_indexing_service.rb → indexers/curation_concerns/work_indexing_service.rb} +6 -6
- data/app/jobs/active_fedora_id_based_job.rb +5 -12
- data/app/jobs/audit_job.rb +11 -17
- data/app/jobs/characterize_job.rb +8 -7
- data/app/jobs/create_derivatives_job.rb +8 -11
- data/app/jobs/import_url_job.rb +12 -25
- data/app/jobs/ingest_file_job.rb +16 -0
- data/app/jobs/ingest_local_file_job.rb +14 -35
- data/app/jobs/resolrize_job.rb +3 -5
- data/app/jobs/upload_set_update_job.rb +68 -0
- data/app/models/checksum_audit_log.rb +2 -3
- data/app/models/concerns/curation_concerns/ability.rb +18 -10
- data/app/models/concerns/curation_concerns/basic_metadata.rb +1 -3
- data/app/models/concerns/curation_concerns/collection_behavior.rb +13 -14
- data/app/models/concerns/curation_concerns/file_set/belongs_to_upload_sets.rb +15 -0
- data/app/models/concerns/curation_concerns/{generic_file → file_set}/belongs_to_works.rb +8 -14
- data/app/models/concerns/curation_concerns/file_set/derivatives.rb +54 -0
- data/app/models/concerns/curation_concerns/{generic_file → file_set}/full_text_indexing.rb +1 -2
- data/app/models/concerns/curation_concerns/{generic_file → file_set}/indexing.rb +2 -2
- data/app/models/concerns/curation_concerns/{generic_file → file_set}/versions.rb +2 -3
- data/app/models/concerns/curation_concerns/file_set_behavior.rb +36 -0
- data/app/models/concerns/curation_concerns/generic_file.rb +1 -1
- data/app/models/concerns/curation_concerns/has_representative.rb +6 -7
- data/app/models/concerns/curation_concerns/human_readable_type.rb +5 -7
- data/app/models/concerns/curation_concerns/permissions.rb +2 -2
- data/app/models/concerns/curation_concerns/permissions/readable.rb +0 -1
- data/app/models/concerns/curation_concerns/permissions/writable.rb +10 -51
- data/app/models/concerns/curation_concerns/serializers.rb +3 -5
- data/app/models/concerns/curation_concerns/solr_document_behavior.rb +37 -40
- data/app/models/concerns/curation_concerns/upload_set_behavior.rb +38 -0
- data/app/models/concerns/curation_concerns/user.rb +4 -51
- data/app/models/concerns/curation_concerns/with_file_sets.rb +28 -0
- data/app/models/concerns/curation_concerns/{generic_work_behavior.rb → work_behavior.rb} +12 -6
- data/app/models/curation_concerns/classify_concern.rb +7 -7
- data/app/models/curation_concerns/quick_classification_query.rb +6 -7
- data/app/models/single_use_link.rb +34 -0
- data/app/models/upload_set.rb +3 -0
- data/app/services/curation_concerns/derivative_path.rb +32 -0
- data/app/services/curation_concerns/{generic_file_audit_service.rb → file_set_audit_service.rb} +17 -18
- data/app/services/curation_concerns/indexes_thumbnails.rb +14 -0
- data/app/services/curation_concerns/local_file_service.rb +10 -0
- data/app/services/curation_concerns/lock_manager.rb +40 -0
- data/app/services/curation_concerns/noid.rb +1 -1
- data/app/services/curation_concerns/persist_derivatives.rb +33 -0
- data/app/services/curation_concerns/persist_directly_contained_output_file_service.rb +26 -0
- data/app/services/curation_concerns/repository_audit_service.rb +1 -3
- data/app/services/curation_concerns/thumbnail_path_service.rb +46 -0
- data/app/services/curation_concerns/time_service.rb +7 -0
- data/app/services/curation_concerns/versioning_service.rb +11 -12
- data/curation_concerns-models.gemspec +6 -6
- data/lib/curation_concerns/configuration.rb +154 -0
- data/lib/curation_concerns/messages.rb +26 -26
- data/lib/curation_concerns/models.rb +5 -14
- data/lib/curation_concerns/models/engine.rb +0 -30
- data/lib/curation_concerns/models/utils.rb +4 -4
- data/lib/curation_concerns/models/version.rb +1 -1
- data/lib/generators/curation_concerns/models/abstract_migration_generator.rb +8 -7
- data/lib/generators/curation_concerns/models/clamav_generator.rb +3 -3
- data/lib/generators/curation_concerns/models/install_generator.rb +13 -20
- data/lib/generators/curation_concerns/models/templates/app/models/file_set.rb +4 -0
- data/lib/generators/curation_concerns/models/templates/config/clamav.rb +1 -1
- data/lib/generators/curation_concerns/models/templates/config/curation_concerns.rb +52 -65
- data/lib/generators/curation_concerns/models/templates/config/redis_config.rb +13 -17
- data/lib/generators/curation_concerns/models/templates/config/resque_config.rb +2 -1
- data/lib/generators/curation_concerns/models/templates/migrations/create_checksum_audit_logs.rb +3 -3
- data/lib/generators/curation_concerns/models/templates/migrations/create_single_use_links.rb +12 -0
- data/lib/tasks/curation_concerns-models_tasks.rake +4 -62
- data/lib/tasks/migrate.rake +1 -1
- data/lib/tasks/resque.rake +1 -0
- data/lib/tasks/solr_reindex.rake +1 -1
- metadata +59 -52
- data/app/actors/curation_concerns/generic_file_actor.rb +0 -150
- data/app/jobs/active_fedora_pid_based_job.rb +0 -6
- data/app/jobs/copy_permissions_job.rb +0 -24
- data/app/models/concerns/curation_concerns/generic_file/characterization.rb +0 -89
- data/app/models/concerns/curation_concerns/generic_file/content.rb +0 -8
- data/app/models/concerns/curation_concerns/generic_file/export.rb +0 -343
- data/app/models/concerns/curation_concerns/generic_file_behavior.rb +0 -44
- data/app/models/concerns/curation_concerns/with_basic_metadata.rb +0 -98
- data/app/models/concerns/curation_concerns/with_generic_files.rb +0 -29
- data/app/models/datastreams/fits_datastream.rb +0 -148
- data/app/services/curation_concerns/characterization_service.rb +0 -71
- data/app/services/curation_concerns/full_text_extraction_service.rb +0 -38
- data/app/services/curation_concerns/generic_file_indexing_service.rb +0 -14
- data/lib/curation_concerns/models/resque.rb +0 -36
- data/lib/generators/curation_concerns/models/fulltext_generator.rb +0 -28
- data/lib/generators/curation_concerns/models/templates/app/models/generic_file.rb +0 -4
- data/lib/generators/curation_concerns/models/templates/config/resque_admin.rb +0 -10
data/app/jobs/resolrize_job.rb
CHANGED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
class UploadSetUpdateJob < ActiveJob::Base
|
|
2
|
+
include Hydra::PermissionsQuery
|
|
3
|
+
include CurationConcerns::Messages
|
|
4
|
+
|
|
5
|
+
queue_as :upload_set_update
|
|
6
|
+
|
|
7
|
+
attr_accessor :login, :title, :file_attributes, :upload_set_id, :visibility, :saved, :denied, :work_attributes
|
|
8
|
+
|
|
9
|
+
def perform(login, upload_set_id, title, file_attributes, visibility)
|
|
10
|
+
@login = login
|
|
11
|
+
@title = title || {}
|
|
12
|
+
@file_attributes = file_attributes
|
|
13
|
+
@visibility = visibility
|
|
14
|
+
@work_attributes = file_attributes.merge(visibility: visibility)
|
|
15
|
+
@upload_set_id = upload_set_id
|
|
16
|
+
@saved = []
|
|
17
|
+
@denied = []
|
|
18
|
+
|
|
19
|
+
upload_set = UploadSet.find_or_create(self.upload_set_id)
|
|
20
|
+
user = User.find_by_user_key(self.login)
|
|
21
|
+
|
|
22
|
+
upload_set.file_sets.each do |file|
|
|
23
|
+
update_file(file, user)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
upload_set.update(status: ["Complete"])
|
|
27
|
+
|
|
28
|
+
if denied.empty?
|
|
29
|
+
unless saved.empty?
|
|
30
|
+
if CurationConcerns.config.callback.set?(:after_upload_set_update_success)
|
|
31
|
+
login = upload_set.depositor
|
|
32
|
+
user = User.find_by_user_key(login)
|
|
33
|
+
CurationConcerns.config.callback.run(:after_upload_set_update_success, user, upload_set, log.created_at)
|
|
34
|
+
end
|
|
35
|
+
return true
|
|
36
|
+
end
|
|
37
|
+
else
|
|
38
|
+
if CurationConcerns.config.callback.set?(:after_upload_set_update_failure)
|
|
39
|
+
login = upload_set.depositor
|
|
40
|
+
user = User.find_by_user_key(login)
|
|
41
|
+
CurationConcerns.config.callback.run(:after_upload_set_update_failure. user, upload_set, log.created_at)
|
|
42
|
+
end
|
|
43
|
+
return false
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def update_file(file, user)
|
|
48
|
+
unless user.can? :edit, file
|
|
49
|
+
ActiveFedora::Base.logger.error "User #{user.user_key} DENIED access to #{file.id}!"
|
|
50
|
+
denied << file
|
|
51
|
+
return
|
|
52
|
+
end
|
|
53
|
+
# update the file using the actor after setting the title
|
|
54
|
+
file.title = title[file.id] if title[file.id]
|
|
55
|
+
CurationConcerns::FileSetActor.new(file, user).update_metadata(file_attributes.merge(visibility: visibility))
|
|
56
|
+
|
|
57
|
+
# update the work to the same metadata as the file.
|
|
58
|
+
# NOTE: For the moment we are assuming copied metadata. This is likely to change.
|
|
59
|
+
# NOTE2: TODO: stop assuming that files only belong to one work
|
|
60
|
+
work = file.in_works.first
|
|
61
|
+
unless work.nil?
|
|
62
|
+
work.title = title[file.id] if title[file.id]
|
|
63
|
+
CurationConcerns::GenericWorkActor.new(work, user, work_attributes).update
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
saved << file
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
class ChecksumAuditLog < ActiveRecord::Base
|
|
2
|
-
|
|
3
2
|
def self.get_audit_log(id, path, version_uri)
|
|
4
|
-
ChecksumAuditLog.find_or_create_by(
|
|
3
|
+
ChecksumAuditLog.find_or_create_by(file_set_id: id, file_id: path, version: version_uri)
|
|
5
4
|
end
|
|
6
5
|
|
|
7
6
|
# Check to see if there are previous passing logs that we can delete
|
|
@@ -16,6 +15,6 @@ class ChecksumAuditLog < ActiveRecord::Base
|
|
|
16
15
|
end
|
|
17
16
|
|
|
18
17
|
def self.logs_for(id, path)
|
|
19
|
-
ChecksumAuditLog.where(
|
|
18
|
+
ChecksumAuditLog.where(file_set_id: id, file_id: path).order('created_at desc, id desc')
|
|
20
19
|
end
|
|
21
20
|
end
|
|
@@ -6,29 +6,37 @@ module CurationConcerns
|
|
|
6
6
|
end
|
|
7
7
|
|
|
8
8
|
def curation_concerns_permissions
|
|
9
|
-
|
|
10
9
|
unless current_user.new_record?
|
|
11
10
|
can :create, CurationConcerns::ClassifyConcern
|
|
12
|
-
# TODO: Shouldn't this be in `everyone_can_create_curation_concerns` ?
|
|
13
|
-
can :create, ::GenericFile
|
|
14
11
|
end
|
|
15
12
|
|
|
16
|
-
if
|
|
17
|
-
|
|
13
|
+
# user can version if they can edit
|
|
14
|
+
alias_action :versions, to: :update
|
|
15
|
+
|
|
16
|
+
if admin?
|
|
17
|
+
admin_permissions
|
|
18
|
+
else
|
|
19
|
+
cannot :index, Hydra::AccessControls::Embargo
|
|
20
|
+
cannot :index, Hydra::AccessControls::Lease
|
|
18
21
|
end
|
|
19
22
|
|
|
20
23
|
can :collect, :all
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def admin_permissions
|
|
27
|
+
can [:create, :discover, :show, :read, :edit, :update, :destroy], :all
|
|
28
|
+
end
|
|
21
29
|
|
|
30
|
+
def admin?
|
|
31
|
+
user_groups.include? 'admin'
|
|
22
32
|
end
|
|
23
33
|
|
|
24
34
|
# Add this to your ability_logic if you want all logged in users to be able
|
|
25
35
|
# to submit content
|
|
26
36
|
def everyone_can_create_curation_concerns
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
end
|
|
37
|
+
return if current_user.new_record?
|
|
38
|
+
can :create, [::FileSet, ::Collection]
|
|
39
|
+
can :create, [CurationConcerns.config.curation_concerns]
|
|
31
40
|
end
|
|
32
|
-
|
|
33
41
|
end
|
|
34
42
|
end
|
|
@@ -3,10 +3,9 @@ module CurationConcerns
|
|
|
3
3
|
extend ActiveSupport::Concern
|
|
4
4
|
|
|
5
5
|
included do
|
|
6
|
-
|
|
7
6
|
property :label, predicate: ActiveFedora::RDF::Fcrepo::Model.downloadFilename, multiple: false
|
|
8
7
|
|
|
9
|
-
property :depositor, predicate: ::RDF::URI.new(
|
|
8
|
+
property :depositor, predicate: ::RDF::URI.new('http://id.loc.gov/vocabulary/relators/dpt'), multiple: false do |index|
|
|
10
9
|
index.as :symbol, :stored_searchable
|
|
11
10
|
end
|
|
12
11
|
|
|
@@ -82,6 +81,5 @@ module CurationConcerns
|
|
|
82
81
|
index.as :stored_searchable
|
|
83
82
|
end
|
|
84
83
|
end
|
|
85
|
-
|
|
86
84
|
end
|
|
87
85
|
end
|
|
@@ -14,34 +14,33 @@ module CurationConcerns
|
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
def add_member(collectible)
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
end
|
|
17
|
+
return unless can_add_to_members?(collectible)
|
|
18
|
+
members << collectible
|
|
19
|
+
save
|
|
21
20
|
end
|
|
22
21
|
|
|
23
22
|
def to_s
|
|
24
|
-
title.present? ? title :
|
|
23
|
+
title.present? ? title : 'No Title'
|
|
25
24
|
end
|
|
26
25
|
|
|
27
26
|
def bytes
|
|
28
27
|
members.reduce(0) { |sum, gf| sum + gf.content.size.to_i }
|
|
29
28
|
end
|
|
30
29
|
|
|
31
|
-
def
|
|
32
|
-
|
|
33
|
-
Solrizer.set_field(solr_doc, 'generic_type', human_readable_type, :facetable)
|
|
34
|
-
end
|
|
30
|
+
def can_be_member_of_collection?(collection)
|
|
31
|
+
collection != self
|
|
35
32
|
end
|
|
36
33
|
|
|
37
|
-
|
|
38
|
-
|
|
34
|
+
module ClassMethods
|
|
35
|
+
def indexer
|
|
36
|
+
CurationConcerns::CollectionIndexer
|
|
37
|
+
end
|
|
39
38
|
end
|
|
40
39
|
|
|
41
40
|
private
|
|
42
41
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
def can_add_to_members?(collectible)
|
|
43
|
+
collectible.try(:can_be_member_of_collection?, self)
|
|
44
|
+
end
|
|
46
45
|
end
|
|
47
46
|
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module CurationConcerns
|
|
2
|
+
module FileSet
|
|
3
|
+
module BelongsToUploadSets
|
|
4
|
+
extend ActiveSupport::Concern
|
|
5
|
+
included do
|
|
6
|
+
belongs_to :upload_set, predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isPartOf
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
# Is this file in the middle of being processed by an UploadSet?
|
|
10
|
+
def processing?
|
|
11
|
+
try(:upload_set).try(:status) == ['processing'.freeze]
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
module CurationConcerns
|
|
2
|
-
module
|
|
2
|
+
module FileSet
|
|
3
3
|
module BelongsToWorks
|
|
4
4
|
extend ActiveSupport::Concern
|
|
5
5
|
|
|
@@ -8,31 +8,30 @@ module CurationConcerns
|
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
def generic_works
|
|
11
|
-
|
|
11
|
+
in_objects # in_objects is provided by Hydra::PCDM::ObjectBehavior
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
+
# OPTIMIZE: We can load this from Solr much faster than loading the objects
|
|
14
15
|
def generic_work_ids
|
|
15
|
-
generic_works.map
|
|
16
|
+
generic_works.map(&:id)
|
|
16
17
|
end
|
|
17
18
|
|
|
18
19
|
# Returns the first parent object
|
|
19
20
|
# This is a hack to handle things like GenericFiles inheriting access controls from their parent. (see CurationConcerns::ParentContainer in app/controllers/concerns/curation_concers/parent_container.rb)
|
|
20
21
|
def parent
|
|
21
|
-
|
|
22
|
+
in_objects.first
|
|
22
23
|
end
|
|
23
24
|
|
|
24
25
|
# Returns the id of first parent object
|
|
25
26
|
# This is a hack to handle things like GenericFiles inheriting access controls from their parent. (see CurationConcerns::ParentContainer in app/controllers/concerns/curation_concers/parent_container.rb)
|
|
26
|
-
|
|
27
|
-
parent.id
|
|
28
|
-
end
|
|
27
|
+
delegate :id, to: :parent, prefix: true
|
|
29
28
|
|
|
30
29
|
# Files with sibling relationships
|
|
31
30
|
# Returns all GenericFiles aggregated by any of the GenericWorks that aggregate the current object
|
|
32
31
|
def related_files
|
|
33
32
|
generic_works = self.generic_works
|
|
34
33
|
return [] if generic_works.empty?
|
|
35
|
-
generic_works.flat_map {|work| work.
|
|
34
|
+
generic_works.flat_map { |work| work.file_sets.select { |file_set| file_set.id != id } }
|
|
36
35
|
end
|
|
37
36
|
|
|
38
37
|
# If any parent works are pointing at this object as their representative, remove that pointer.
|
|
@@ -40,14 +39,9 @@ module CurationConcerns
|
|
|
40
39
|
generic_works = self.generic_works
|
|
41
40
|
return if generic_works.empty?
|
|
42
41
|
generic_works.each do |work|
|
|
43
|
-
if work.
|
|
44
|
-
work.representative = nil
|
|
45
|
-
work.save
|
|
46
|
-
end
|
|
42
|
+
work.update(representative_id: nil) if work.representative_id == id
|
|
47
43
|
end
|
|
48
44
|
end
|
|
49
|
-
|
|
50
45
|
end
|
|
51
46
|
end
|
|
52
47
|
end
|
|
53
|
-
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
module CurationConcerns
|
|
2
|
+
module FileSet
|
|
3
|
+
module Derivatives
|
|
4
|
+
extend ActiveSupport::Concern
|
|
5
|
+
|
|
6
|
+
included do
|
|
7
|
+
Hydra::Derivatives.source_file_service = CurationConcerns::LocalFileService
|
|
8
|
+
Hydra::Derivatives.output_file_service = CurationConcerns::PersistDerivatives
|
|
9
|
+
Hydra::Derivatives::FullTextExtract.output_file_service = CurationConcerns::PersistDirectlyContainedOutputFileService
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# This completely overrides the version in Hydra::Works so that we
|
|
13
|
+
# read and write to a local file. It's important that characterization runs
|
|
14
|
+
# before derivatives so that we have a credible mime_type field to work with.
|
|
15
|
+
def create_derivatives(filename)
|
|
16
|
+
case mime_type
|
|
17
|
+
when *self.class.pdf_mime_types
|
|
18
|
+
Hydra::Derivatives::PdfDerivatives.create(filename,
|
|
19
|
+
outputs: [{ label: :thumbnail, format: 'jpg', size: '338x493', url: derivative_url('thumbnail') }])
|
|
20
|
+
Hydra::Derivatives::FullTextExtract.create(filename,
|
|
21
|
+
outputs: [{ url: uri, container: "extracted_text" }])
|
|
22
|
+
when *self.class.office_document_mime_types
|
|
23
|
+
Hydra::Derivatives::DocumentDerivatives.create(filename,
|
|
24
|
+
outputs: [{ label: :thumbnail, format: 'jpg',
|
|
25
|
+
size: '200x150>',
|
|
26
|
+
url: derivative_url('thumbnail') }])
|
|
27
|
+
Hydra::Derivatives::FullTextExtract.create(filename,
|
|
28
|
+
outputs: [{ url: uri, container: "extracted_text" }])
|
|
29
|
+
when *self.class.audio_mime_types
|
|
30
|
+
Hydra::Derivatives::AudioDerivatives.create(filename,
|
|
31
|
+
outputs: [{ label: 'mp3', format: 'mp3', url: derivative_url('mp3') },
|
|
32
|
+
{ label: 'ogg', format: 'ogg', url: derivative_url('ogg') }])
|
|
33
|
+
when *self.class.video_mime_types
|
|
34
|
+
Hydra::Derivatives::VideoDerivatives.create(filename,
|
|
35
|
+
outputs: [{ label: :thumbnail, format: 'jpg', url: derivative_url('thumbnail') },
|
|
36
|
+
{ label: 'webm', format: 'webm', url: derivative_url('webm') },
|
|
37
|
+
{ label: 'mp4', format: 'mp4', url: derivative_url('mp4') }])
|
|
38
|
+
when *self.class.image_mime_types
|
|
39
|
+
Hydra::Derivatives::ImageDerivatives.create(filename,
|
|
40
|
+
outputs: [{ label: :thumbnail, format: 'jpg', size: '200x150>', url: derivative_url('thumbnail') }])
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
private
|
|
45
|
+
|
|
46
|
+
# The destination_name parameter has to match up with the file parameter
|
|
47
|
+
# passed to the DownloadsController
|
|
48
|
+
def derivative_url(destination_name)
|
|
49
|
+
path = DerivativePath.derivative_path_for_reference(self, destination_name)
|
|
50
|
+
URI("file://#{path}").to_s
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
module CurationConcerns
|
|
2
|
-
module
|
|
2
|
+
module FileSet
|
|
3
3
|
module Indexing
|
|
4
4
|
extend ActiveSupport::Concern
|
|
5
5
|
|
|
6
6
|
module ClassMethods
|
|
7
7
|
# override the default indexing service
|
|
8
8
|
def indexer
|
|
9
|
-
CurationConcerns::
|
|
9
|
+
CurationConcerns::FileSetIndexingService
|
|
10
10
|
end
|
|
11
11
|
end
|
|
12
12
|
end
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
module CurationConcerns
|
|
2
|
-
module
|
|
2
|
+
module FileSet
|
|
3
3
|
module Versions
|
|
4
4
|
@@count = 0
|
|
5
5
|
def record_version_committer(user)
|
|
6
|
-
version =
|
|
6
|
+
version = latest_version
|
|
7
7
|
# content datastream not (yet?) present
|
|
8
8
|
return if version.nil?
|
|
9
9
|
@@count += 1
|
|
10
10
|
# raise "Recording #{@@count} #{version.uri} for #{user.user_key}" if @@count == 3
|
|
11
11
|
VersionCommitter.create(version_id: version.uri, committer_login: user.user_key)
|
|
12
12
|
end
|
|
13
|
-
|
|
14
13
|
end
|
|
15
14
|
end
|
|
16
15
|
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module CurationConcerns
|
|
2
|
+
module FileSetBehavior
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
include Hydra::Works::FileSetBehavior
|
|
5
|
+
include Hydra::Works::VirusCheck
|
|
6
|
+
include Hydra::Works::Characterization
|
|
7
|
+
include Hydra::WithDepositor
|
|
8
|
+
include CurationConcerns::Serializers
|
|
9
|
+
include CurationConcerns::Noid
|
|
10
|
+
include CurationConcerns::FileSet::Derivatives
|
|
11
|
+
include CurationConcerns::Permissions
|
|
12
|
+
include CurationConcerns::BasicMetadata
|
|
13
|
+
include CurationConcerns::FileSet::FullTextIndexing
|
|
14
|
+
include CurationConcerns::FileSet::Indexing
|
|
15
|
+
include CurationConcerns::FileSet::BelongsToWorks
|
|
16
|
+
include CurationConcerns::FileSet::BelongsToUploadSets
|
|
17
|
+
include CurationConcerns::HumanReadableType
|
|
18
|
+
include Hydra::AccessControls::Embargoable
|
|
19
|
+
|
|
20
|
+
included do
|
|
21
|
+
attr_accessor :file
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def human_readable_type
|
|
25
|
+
self.class.to_s.demodulize.titleize
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def representative_id
|
|
29
|
+
to_param
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def thumbnail_id
|
|
33
|
+
to_param
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|