curation_concerns-models 0.8.0 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +4 -0
- data/app/actors/curation_concerns/file_actor.rb +83 -0
- data/app/actors/curation_concerns/file_set_actor.rb +18 -64
- data/app/jobs/ingest_file_job.rb +8 -3
- data/app/models/concerns/curation_concerns/basic_metadata.rb +0 -14
- data/app/models/concerns/curation_concerns/collection_behavior.rb +1 -1
- data/app/models/concerns/curation_concerns/required_metadata.rb +16 -0
- data/app/validators/has_one_title_validator.rb +8 -0
- data/curation_concerns-models.gemspec +1 -1
- data/lib/curation_concerns/configuration.rb +18 -5
- data/lib/curation_concerns/models/engine.rb +0 -1
- data/lib/curation_concerns/models/version.rb +1 -1
- data/lib/generators/curation_concerns/models/templates/config/curation_concerns.rb +18 -51
- metadata +7 -6
- data/app/models/concerns/curation_concerns/file_set/versions.rb +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5660b6eec6ec27f6e8c00a1a9a001a0147a66fe6
|
4
|
+
data.tar.gz: e45350c36fd8061b4ef31871620eeeea5f450447
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2c1ef86aa53fe09e26c1e800780c673b3499a50c01b528257683d3ee91baa2f8719e9dab83cd2e07a621b8f8b0ba90e7c407bf7188b434b4cbaf8144e2f0b950
|
7
|
+
data.tar.gz: c82db879f98a32b61da80ead6d519b3259cc4ca1ad696b2c313adb70d10854d79f1db9d9efe9643417c1a16fbe821b99392b8b7e7f3e074259dc7d8ec0f55d25
|
data/README.md
CHANGED
@@ -16,6 +16,10 @@ To install FITS:
|
|
16
16
|
* Adding the full fits.sh path to your PATH (e.g., in your .bash_profile), OR
|
17
17
|
* Changing config/initializers/sufia.rb to point to your FITS location: config.fits_path = "/<your full path>/fits.sh"
|
18
18
|
|
19
|
+
### Redis 2.6
|
20
|
+
|
21
|
+
The redlock gem requires Redis >= 2.6.
|
22
|
+
|
19
23
|
|
20
24
|
|
21
25
|
## Installation
|
@@ -0,0 +1,83 @@
|
|
1
|
+
module CurationConcerns
|
2
|
+
# actions for a file identified by file_set_id and relation (maps to use predicate)
|
3
|
+
class FileActor
|
4
|
+
attr_reader :file_set, :relation, :user
|
5
|
+
|
6
|
+
# @param [FileSet] file_set the parent FileSet
|
7
|
+
# @param [String] relation the type/use for the file.
|
8
|
+
# @param [User] user the user to record as the Agent acting upon the file
|
9
|
+
def initialize(file_set, relation, user)
|
10
|
+
@file_set = file_set
|
11
|
+
@relation = relation
|
12
|
+
@user = user
|
13
|
+
end
|
14
|
+
|
15
|
+
# Puts the uploaded content into a staging directory. Then kicks off a
|
16
|
+
# job to characterize and create derivatives with this on disk variant.
|
17
|
+
# Simultaneously moving a preservation copy to the repostiory.
|
18
|
+
# TODO: create a job to monitor this directory and prune old files that
|
19
|
+
# have made it to the repo
|
20
|
+
# @param [File, ActionDigest::HTTP::UploadedFile, Tempfile] file the file to save in the repository
|
21
|
+
def ingest_file(file)
|
22
|
+
working_file = copy_file_to_working_directory(file, file_set_id)
|
23
|
+
mime_type = file.respond_to?(:content_type) ? file.content_type : nil
|
24
|
+
IngestFileJob.perform_later(file_set_id, working_file, mime_type, user.user_key, relation)
|
25
|
+
make_derivative(file_set.id, working_file)
|
26
|
+
true
|
27
|
+
end
|
28
|
+
|
29
|
+
def revert_to(revision_id)
|
30
|
+
repository_file = file_set.send(relation.to_sym)
|
31
|
+
repository_file.restore_version(revision_id)
|
32
|
+
|
33
|
+
return false unless file_set.save
|
34
|
+
|
35
|
+
CurationConcerns::VersioningService.create(repository_file, user)
|
36
|
+
|
37
|
+
# Retrieve a copy of the orginal file from the repository
|
38
|
+
working_file = copy_repository_resource_to_working_directory(repository_file)
|
39
|
+
make_derivative(file_set_id, working_file)
|
40
|
+
true
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def file_set_id
|
46
|
+
file_set.id
|
47
|
+
end
|
48
|
+
|
49
|
+
def make_derivative(file_set_id, working_file)
|
50
|
+
CharacterizeJob.perform_later(file_set_id, working_file)
|
51
|
+
end
|
52
|
+
|
53
|
+
# @param [File, ActionDispatch::Http::UploadedFile] file
|
54
|
+
# @param [String] id the identifer of the FileSet
|
55
|
+
# @return [String] path of the working file
|
56
|
+
def copy_file_to_working_directory(file, id)
|
57
|
+
file_name = file.respond_to?(:original_filename) ? file.original_filename : ::File.basename(file)
|
58
|
+
copy_stream_to_working_directory(id, file_name, file)
|
59
|
+
end
|
60
|
+
|
61
|
+
# @param [ActiveFedora::File] file the resource in the repo
|
62
|
+
# @return [String] path of the working file
|
63
|
+
def copy_repository_resource_to_working_directory(file)
|
64
|
+
copy_stream_to_working_directory(file_set_id, file.original_name, StringIO.new(file.content))
|
65
|
+
end
|
66
|
+
|
67
|
+
# @param [String] id the identifer
|
68
|
+
# @param [String] name the file name
|
69
|
+
# @param [#read] stream the stream to copy to the working directory
|
70
|
+
# @return [String] path of the working file
|
71
|
+
def copy_stream_to_working_directory(id, name, stream)
|
72
|
+
working_path = full_filename(id, name)
|
73
|
+
FileUtils.mkdir_p(File.dirname(working_path))
|
74
|
+
IO.copy_stream(stream, working_path)
|
75
|
+
working_path
|
76
|
+
end
|
77
|
+
|
78
|
+
def full_filename(id, original_name)
|
79
|
+
pair = id.scan(/..?/).first(4)
|
80
|
+
File.join(CurationConcerns.config.working_path, *pair, original_name)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -35,46 +35,36 @@ module CurationConcerns
|
|
35
35
|
yield(file_set) if block_given?
|
36
36
|
end
|
37
37
|
|
38
|
-
# Puts the uploaded content into a staging directory. Then kicks off a
|
39
|
-
# job to characterize and create derivatives with this on disk variant.
|
40
|
-
# Simultaneously moving a preservation copy to the repostiory.
|
41
|
-
# TODO: create a job to monitor this directory and prune old files that
|
42
|
-
# have made it to the repo
|
43
38
|
# @param [File, ActionDigest::HTTP::UploadedFile, Tempfile] file the file uploaded by the user.
|
44
|
-
|
45
|
-
|
39
|
+
# @param [String] relation ('original_file')
|
40
|
+
def create_content(file, relation = 'original_file')
|
41
|
+
# If the file set doesn't have a title or label assigned, set a default.
|
46
42
|
file_set.label ||= file.respond_to?(:original_filename) ? file.original_filename : ::File.basename(file)
|
47
43
|
file_set.title = [file_set.label] if file_set.title.blank?
|
48
44
|
|
49
45
|
# Need to save the file_set in order to get an id
|
50
46
|
return false unless file_set.save
|
51
47
|
|
52
|
-
|
53
|
-
mime_type = file.respond_to?(:content_type) ? file.content_type : nil
|
54
|
-
IngestFileJob.perform_later(file_set.id, working_file, mime_type, user.user_key)
|
55
|
-
make_derivative(file_set.id, working_file)
|
48
|
+
FileActor.new(file_set, relation, user).ingest_file(file)
|
56
49
|
true
|
57
50
|
end
|
58
51
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
CurationConcerns.config.callback.run(:after_revert_content, file_set, user, revision_id)
|
71
|
-
true
|
52
|
+
# @param [String] revision_id the revision to revert to
|
53
|
+
# @param [String] relation ('original_file')
|
54
|
+
def revert_content(revision_id, relation = 'original_file')
|
55
|
+
file_actor = FileActor.new(file_set, relation, user)
|
56
|
+
if file_actor.revert_to(revision_id)
|
57
|
+
CurationConcerns.config.callback.run(:after_revert_content, file_set, user, revision_id)
|
58
|
+
true
|
59
|
+
else
|
60
|
+
false
|
61
|
+
end
|
72
62
|
end
|
73
63
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
64
|
+
# @param [File, ActionDigest::HTTP::UploadedFile, Tempfile] file the file uploaded by the user.
|
65
|
+
# @param [String] relation ('original_file')
|
66
|
+
def update_content(file, relation = 'original_file')
|
67
|
+
FileActor.new(file_set, relation, user).ingest_file(file)
|
78
68
|
CurationConcerns.config.callback.run(:after_update_content, file_set, user)
|
79
69
|
true
|
80
70
|
end
|
@@ -96,42 +86,6 @@ module CurationConcerns
|
|
96
86
|
|
97
87
|
private
|
98
88
|
|
99
|
-
def make_derivative(file_set_id, working_file)
|
100
|
-
CharacterizeJob.perform_later(file_set_id, working_file)
|
101
|
-
end
|
102
|
-
|
103
|
-
# @param [File, ActionDispatch::Http::UploadedFile] file
|
104
|
-
# @param [String] id the identifer
|
105
|
-
# @return [String] path of the working file
|
106
|
-
def copy_file_to_working_directory(file, id)
|
107
|
-
# file_set.label not gaurunteed to be set at this point (e.g. if called from update_content)
|
108
|
-
file_set.label ||= file.respond_to?(:original_filename) ? file.original_filename : ::File.basename(file)
|
109
|
-
copy_stream_to_working_directory(id, file_set.label, file)
|
110
|
-
end
|
111
|
-
|
112
|
-
# @param [FileSet] file_set the resource
|
113
|
-
# @return [String] path of the working file
|
114
|
-
def copy_repository_resource_to_working_directory(file_set)
|
115
|
-
file = file_set.original_file
|
116
|
-
copy_stream_to_working_directory(file_set.id, file.original_name, StringIO.new(file.content))
|
117
|
-
end
|
118
|
-
|
119
|
-
# @param [String] id the identifer
|
120
|
-
# @param [String] name the file name
|
121
|
-
# @param [#read] stream the stream to copy to the working directory
|
122
|
-
# @return [String] path of the working file
|
123
|
-
def copy_stream_to_working_directory(id, name, stream)
|
124
|
-
working_path = full_filename(id, name)
|
125
|
-
FileUtils.mkdir_p(File.dirname(working_path))
|
126
|
-
IO.copy_stream(stream, working_path)
|
127
|
-
working_path
|
128
|
-
end
|
129
|
-
|
130
|
-
def full_filename(id, original_name)
|
131
|
-
pair = id.scan(/..?/).first(4)
|
132
|
-
File.join(CurationConcerns.config.working_path, *pair, original_name)
|
133
|
-
end
|
134
|
-
|
135
89
|
# Takes an optional block and executes the block if the save was successful.
|
136
90
|
# returns false if the save was unsuccessful
|
137
91
|
def save
|
data/app/jobs/ingest_file_job.rb
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
class IngestFileJob < ActiveJob::Base
|
2
2
|
queue_as :ingest
|
3
3
|
|
4
|
-
|
4
|
+
# @param [String] file_set_id
|
5
|
+
# @param [String] filename
|
6
|
+
# @param [String,NilClass] mime_type
|
7
|
+
# @param [String] user_key
|
8
|
+
# @param [String] relation ('original_file')
|
9
|
+
def perform(file_set_id, filename, mime_type, user_key, relation = 'original_file')
|
5
10
|
file_set = FileSet.find(file_set_id)
|
6
11
|
|
7
12
|
file = File.open(filename, "rb")
|
@@ -14,14 +19,14 @@ class IngestFileJob < ActiveJob::Base
|
|
14
19
|
end
|
15
20
|
|
16
21
|
# Tell AddFileToFileSet service to skip versioning because versions will be minted by VersionCommitter (called by save_characterize_and_record_committer) when necessary
|
17
|
-
Hydra::Works::AddFileToFileSet.call(file_set, file,
|
22
|
+
Hydra::Works::AddFileToFileSet.call(file_set, file, relation.to_sym, versioning: false)
|
18
23
|
|
19
24
|
# Persist changes to the file_set
|
20
25
|
file_set.save!
|
21
26
|
|
22
27
|
# Do post file ingest actions
|
23
28
|
user = User.find_by_user_key(user_key)
|
24
|
-
CurationConcerns::VersioningService.create(file_set.
|
29
|
+
CurationConcerns::VersioningService.create(file_set.send(relation.to_sym), user)
|
25
30
|
CurationConcerns.config.callback.run(:after_create_content, file_set, user)
|
26
31
|
end
|
27
32
|
end
|
@@ -38,20 +38,6 @@ module CurationConcerns
|
|
38
38
|
index.as :stored_searchable
|
39
39
|
end
|
40
40
|
|
41
|
-
# We reserve date_uploaded for the original creation date of the record.
|
42
|
-
# For example, when migrating data from a fedora3 repo to fedora4,
|
43
|
-
# fedora's system created date will reflect the date when the record
|
44
|
-
# was created in fedora4, but the date_uploaded will preserve the
|
45
|
-
# original creation date from the old repository.
|
46
|
-
property :date_uploaded, predicate: ::RDF::Vocab::DC.dateSubmitted, multiple: false do |index|
|
47
|
-
index.type :date
|
48
|
-
index.as :stored_sortable
|
49
|
-
end
|
50
|
-
|
51
|
-
property :date_modified, predicate: ::RDF::Vocab::DC.modified, multiple: false do |index|
|
52
|
-
index.type :date
|
53
|
-
index.as :stored_sortable
|
54
|
-
end
|
55
41
|
property :subject, predicate: ::RDF::Vocab::DC.subject do |index|
|
56
42
|
index.as :stored_searchable, :facetable
|
57
43
|
end
|
@@ -6,9 +6,25 @@ module CurationConcerns
|
|
6
6
|
property :depositor, predicate: ::RDF::URI.new('http://id.loc.gov/vocabulary/relators/dpt'), multiple: false do |index|
|
7
7
|
index.as :symbol, :stored_searchable
|
8
8
|
end
|
9
|
+
|
9
10
|
property :title, predicate: ::RDF::Vocab::DC.title do |index|
|
10
11
|
index.as :stored_searchable, :facetable
|
11
12
|
end
|
13
|
+
|
14
|
+
# We reserve date_uploaded for the original creation date of the record.
|
15
|
+
# For example, when migrating data from a fedora3 repo to fedora4,
|
16
|
+
# fedora's system created date will reflect the date when the record
|
17
|
+
# was created in fedora4, but the date_uploaded will preserve the
|
18
|
+
# original creation date from the old repository.
|
19
|
+
property :date_uploaded, predicate: ::RDF::Vocab::DC.dateSubmitted, multiple: false do |index|
|
20
|
+
index.type :date
|
21
|
+
index.as :stored_sortable
|
22
|
+
end
|
23
|
+
|
24
|
+
property :date_modified, predicate: ::RDF::Vocab::DC.modified, multiple: false do |index|
|
25
|
+
index.type :date
|
26
|
+
index.as :stored_sortable
|
27
|
+
end
|
12
28
|
end
|
13
29
|
end
|
14
30
|
end
|
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.require_paths = ["lib"]
|
21
21
|
|
22
22
|
spec.add_dependency 'active_attr'
|
23
|
-
spec.add_dependency 'hydra-collections', '~>
|
23
|
+
spec.add_dependency 'hydra-collections', '~> 8.0'
|
24
24
|
spec.add_dependency 'hydra-head', '~> 9.3'
|
25
25
|
spec.add_dependency 'hydra-works', '~> 0.7'
|
26
26
|
spec.add_dependency 'active_fedora-noid', '~> 1.0'
|
@@ -56,11 +56,24 @@ module CurationConcerns
|
|
56
56
|
@fits_message_length ||= 5
|
57
57
|
end
|
58
58
|
|
59
|
-
attr_accessor :temp_file_base, :enable_local_ingest,
|
60
|
-
:
|
61
|
-
|
62
|
-
|
63
|
-
|
59
|
+
attr_accessor :temp_file_base, :enable_local_ingest,
|
60
|
+
:analytics, :analytic_start_date
|
61
|
+
|
62
|
+
attr_writer :display_microdata
|
63
|
+
def display_microdata
|
64
|
+
return @display_microdata unless @display_microdata.nil?
|
65
|
+
@display_microdata = true
|
66
|
+
end
|
67
|
+
|
68
|
+
attr_writer :microdata_default_type
|
69
|
+
def microdata_default_type
|
70
|
+
@microdata_default_type ||= 'http://schema.org/CreativeWork'
|
71
|
+
end
|
72
|
+
|
73
|
+
attr_writer :max_days_between_audits
|
74
|
+
def max_days_between_audits
|
75
|
+
@max_days_between_audits ||= 7
|
76
|
+
end
|
64
77
|
|
65
78
|
attr_writer :enable_noids
|
66
79
|
def enable_noids
|
@@ -1,55 +1,18 @@
|
|
1
1
|
CurationConcerns.configure do |config|
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
config.
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
'Book' => 'Book',
|
13
|
-
'Capstone Project' => 'Capstone Project',
|
14
|
-
'Conference Proceeding' => 'Conference Proceeding',
|
15
|
-
'Dataset' => 'Dataset',
|
16
|
-
'Dissertation' => 'Dissertation',
|
17
|
-
'Image' => 'Image',
|
18
|
-
'Journal' => 'Journal',
|
19
|
-
'Map or Cartographic Material' => 'Map or Cartographic Material',
|
20
|
-
'Masters Thesis' => 'Masters Thesis',
|
21
|
-
'Part of Book' => 'Part of Book',
|
22
|
-
'Poster' => 'Poster',
|
23
|
-
'Presentation' => 'Presentation',
|
24
|
-
'Project' => 'Project',
|
25
|
-
'Report' => 'Report',
|
26
|
-
'Research Paper' => 'Research Paper',
|
27
|
-
'Software or Program Code' => 'Software or Program Code',
|
28
|
-
'Video' => 'Video',
|
29
|
-
'Other' => 'Other'
|
30
|
-
}
|
31
|
-
|
32
|
-
config.display_microdata = true
|
33
|
-
config.microdata_default_type = 'http://schema.org/CreativeWork'
|
34
|
-
|
35
|
-
config.resource_types_to_schema = config.resource_types.map do |k, v|
|
36
|
-
[k, I18n.t("curation_concerns.schema_org.resource_type.#{v}", default: config.microdata_default_type)]
|
37
|
-
end.to_h
|
38
|
-
|
39
|
-
config.permission_levels = {
|
40
|
-
'Choose Access' => 'none',
|
41
|
-
'View/Download' => 'read',
|
42
|
-
'Edit' => 'edit'
|
43
|
-
}
|
44
|
-
|
45
|
-
config.owner_permission_levels = {
|
46
|
-
'Edit' => 'edit'
|
47
|
-
}
|
2
|
+
# Should schema.org microdata be displayed?
|
3
|
+
# config.display_microdata = true
|
4
|
+
|
5
|
+
# What default microdata type should be used if a more appropriate
|
6
|
+
# type can not be found in the locale file?
|
7
|
+
# config.microdata_default_type = 'http://schema.org/CreativeWork'
|
8
|
+
|
9
|
+
# How frequently should a file be audited.
|
10
|
+
# Note: In CurationConcerns you must trigger the FileSetAuditService manually.
|
11
|
+
# config.max_days_between_audits = 7
|
48
12
|
|
49
13
|
# Enable displaying usage statistics in the UI
|
50
|
-
# Defaults to FALSE
|
51
14
|
# Requires a Google Analytics id and OAuth2 keyfile. See README for more info
|
52
|
-
config.analytics = false
|
15
|
+
# config.analytics = false
|
53
16
|
|
54
17
|
# Specify a Google Analytics tracking ID to gather usage statistics
|
55
18
|
# config.google_analytics_id = 'UA-99999999-1'
|
@@ -60,12 +23,15 @@ CurationConcerns.configure do |config|
|
|
60
23
|
# Where to store tempfiles, leave blank for the system temp directory (e.g. /tmp)
|
61
24
|
# config.temp_file_base = '/home/developer1'
|
62
25
|
|
63
|
-
# Specify the form of hostpath to be used in Endnote exports
|
64
|
-
# config.persistent_hostpath = 'http://localhost/files/'
|
65
|
-
|
66
26
|
# Location on local file system where derivatives will be stored.
|
27
|
+
# If you use a multi-server architecture, this MUST be a shared volume.
|
67
28
|
# config.derivatives_path = File.join(Rails.root, 'tmp', 'derivatives')
|
68
29
|
|
30
|
+
# Location on local file system where uploaded files will be staged
|
31
|
+
# prior to being ingested into the repository or having derivatives generated.
|
32
|
+
# If you use a multi-server architecture, this MUST be a shared volume.
|
33
|
+
# config.working_path = File.join(Rails.root, 'tmp', 'uploads')
|
34
|
+
|
69
35
|
# If you have ffmpeg installed and want to transcode audio and video uncomment this line
|
70
36
|
# config.enable_ffmpeg = true
|
71
37
|
|
@@ -77,6 +43,7 @@ CurationConcerns.configure do |config|
|
|
77
43
|
# config.noid_template = ".reeddeeddk"
|
78
44
|
|
79
45
|
# Store identifier minter's state in a file for later replayability
|
46
|
+
# If you use a multi-server architecture, this MUST be on a shared volume.
|
80
47
|
# config.minter_statefile = '/tmp/minter-state'
|
81
48
|
|
82
49
|
# Specify the prefix for Redis keys:
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: curation_concerns-models
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.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: 2016-02-
|
11
|
+
date: 2016-02-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: active_attr
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '8.0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '8.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: hydra-head
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -180,6 +180,7 @@ files:
|
|
180
180
|
- app/actors/concerns/curation_concerns/manages_embargoes_actor.rb
|
181
181
|
- app/actors/curation_concerns/base_actor.rb
|
182
182
|
- app/actors/curation_concerns/embargo_actor.rb
|
183
|
+
- app/actors/curation_concerns/file_actor.rb
|
183
184
|
- app/actors/curation_concerns/file_set_actor.rb
|
184
185
|
- app/actors/curation_concerns/lease_actor.rb
|
185
186
|
- app/actors/curation_concerns/work_actor_behavior.rb
|
@@ -203,7 +204,6 @@ files:
|
|
203
204
|
- app/models/concerns/curation_concerns/file_set/full_text_indexing.rb
|
204
205
|
- app/models/concerns/curation_concerns/file_set/indexing.rb
|
205
206
|
- app/models/concerns/curation_concerns/file_set/querying.rb
|
206
|
-
- app/models/concerns/curation_concerns/file_set/versions.rb
|
207
207
|
- app/models/concerns/curation_concerns/file_set_behavior.rb
|
208
208
|
- app/models/concerns/curation_concerns/has_representative.rb
|
209
209
|
- app/models/concerns/curation_concerns/human_readable_type.rb
|
@@ -234,6 +234,7 @@ files:
|
|
234
234
|
- app/services/curation_concerns/thumbnail_path_service.rb
|
235
235
|
- app/services/curation_concerns/time_service.rb
|
236
236
|
- app/services/curation_concerns/versioning_service.rb
|
237
|
+
- app/validators/has_one_title_validator.rb
|
237
238
|
- config/locales/curation_concerns.en.yml
|
238
239
|
- curation_concerns-models.gemspec
|
239
240
|
- lib/curation_concerns/configuration.rb
|
@@ -282,7 +283,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
282
283
|
version: '0'
|
283
284
|
requirements: []
|
284
285
|
rubyforge_project:
|
285
|
-
rubygems_version: 2.
|
286
|
+
rubygems_version: 2.5.1
|
286
287
|
signing_key:
|
287
288
|
specification_version: 4
|
288
289
|
summary: Simple institutional repository models for Hydra
|
@@ -1,15 +0,0 @@
|
|
1
|
-
module CurationConcerns
|
2
|
-
module FileSet
|
3
|
-
module Versions
|
4
|
-
@@count = 0
|
5
|
-
def record_version_committer(user)
|
6
|
-
version = latest_version
|
7
|
-
# content datastream not (yet?) present
|
8
|
-
return if version.nil?
|
9
|
-
@@count += 1
|
10
|
-
# raise "Recording #{@@count} #{version.uri} for #{user.user_key}" if @@count == 3
|
11
|
-
VersionCommitter.create(version_id: version.uri, committer_login: user.user_key)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|