hyrax 3.0.0.pre.rc4 → 3.0.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/.dassie/config/cable.yml +1 -1
- data/.dassie/config/environments/development.rb +2 -0
- data/.dassie/config/environments/production.rb +1 -1
- data/.dassie/config/redis.yml +1 -0
- data/.dassie/db/seeds.rb +8 -0
- data/.dockerignore +1 -0
- data/Dockerfile +7 -4
- data/app/actors/hyrax/actors/create_with_remote_files_actor.rb +27 -1
- data/app/actors/hyrax/actors/file_actor.rb +4 -2
- data/app/actors/hyrax/actors/file_set_actor.rb +8 -6
- data/app/controllers/concerns/hyrax/works_controller_behavior.rb +16 -5
- data/app/forms/hyrax/forms/resource_form.rb +15 -0
- data/app/helpers/hyrax/hyrax_helper_behavior.rb +8 -0
- data/app/indexers/hyrax/valkyrie_file_set_indexer.rb +116 -0
- data/app/indexers/hyrax/valkyrie_indexer.rb +6 -1
- data/app/indexers/hyrax/valkyrie_work_indexer.rb +2 -0
- data/app/jobs/embargo_expiry_job.rb +7 -5
- data/app/jobs/file_set_attached_event_job.rb +6 -1
- data/app/jobs/lease_expiry_job.rb +6 -4
- data/app/models/concerns/hyrax/ability.rb +11 -0
- data/app/models/concerns/hyrax/solr_document_behavior.rb +7 -1
- data/app/models/hyrax/file_set.rb +1 -0
- data/app/models/hyrax/work.rb +2 -0
- data/app/models/job_io_wrapper.rb +1 -1
- data/app/services/hyrax/access_control_list.rb +1 -1
- data/app/services/hyrax/adapters/nesting_index_adapter.rb +1 -1
- data/app/services/hyrax/embargo_manager.rb +1 -1
- data/app/services/hyrax/graph_exporter.rb +1 -1
- data/app/services/hyrax/listeners/metadata_index_listener.rb +18 -1
- data/app/services/hyrax/versioning_service.rb +1 -1
- data/app/services/hyrax/work_uploads_handler.rb +5 -2
- data/app/views/hyrax/admin/admin_sets/_show_document_list_row.html.erb +1 -1
- data/app/views/hyrax/base/_form_share.html.erb +1 -5
- data/app/views/hyrax/base/_workflow_actions.html.erb +1 -1
- data/app/views/hyrax/batch_edits/edit.html.erb +2 -2
- data/app/views/hyrax/collections/_list_collections.html.erb +1 -1
- data/app/views/hyrax/collections/_search_form.html.erb +1 -1
- data/app/views/hyrax/stats/file.html.erb +1 -1
- data/app/views/hyrax/stats/work.html.erb +1 -1
- data/app/views/hyrax/uploads/_js_templates.html.erb +4 -4
- data/app/views/hyrax/uploads/_js_templates_versioning.html.erb +4 -4
- data/app/views/hyrax/users/_contributions.html.erb +1 -1
- data/app/views/hyrax/users/_profile_tabs.html.erb +2 -2
- data/app/views/hyrax/users/_search_form.html.erb +1 -1
- data/app/views/hyrax/users/_user.html.erb +1 -1
- data/app/views/hyrax/users/_user_info.html.erb +9 -9
- data/bin/db-migrate-seed.sh +3 -1
- data/bin/solrcloud-assign-configset.sh +27 -0
- data/bin/solrcloud-upload-configset.sh +31 -0
- data/chart/hyrax/Chart.yaml +8 -8
- data/chart/hyrax/README.md +42 -6
- data/chart/hyrax/templates/NOTES.txt +1 -1
- data/chart/hyrax/templates/_helpers.tpl +76 -0
- data/chart/hyrax/templates/configmap-env.yaml +10 -11
- data/chart/hyrax/templates/cron-embargo.yaml +24 -0
- data/chart/hyrax/templates/cron-lease.yaml +24 -0
- data/chart/hyrax/templates/deployment.yaml +36 -4
- data/chart/hyrax/templates/secrets.yaml +3 -2
- data/chart/hyrax/values.yaml +72 -1
- data/config/initializers/listeners.rb +2 -0
- data/documentation/developing-your-hyrax-based-app.md +3 -3
- data/lib/hyrax/transactions/container.rb +11 -1
- data/lib/hyrax/transactions/steps/delete_resource.rb +38 -0
- data/lib/hyrax/transactions/steps/destroy_work.rb +1 -0
- data/lib/hyrax/transactions/work_destroy.rb +20 -0
- data/lib/hyrax/version.rb +1 -1
- data/lib/tasks/embargo_lease.rake +27 -0
- data/lib/wings/active_fedora_converter/default_work.rb +4 -0
- data/lib/wings/attribute_transformer.rb +29 -19
- data/lib/wings/model_transformer.rb +4 -19
- data/lib/wings/orm_converter.rb +24 -21
- data/lib/wings/valkyrie/persister.rb +1 -0
- data/lib/wings/valkyrie/query_service.rb +36 -24
- data/template.rb +1 -1
- metadata +14 -20
- data/chart/fcrepo/.gitignore +0 -2
- data/chart/fcrepo/.helmignore +0 -23
- data/chart/fcrepo/Chart.yaml +0 -11
- data/chart/fcrepo/README.md +0 -50
- data/chart/fcrepo/templates/NOTES.txt +0 -21
- data/chart/fcrepo/templates/_helpers.tpl +0 -68
- data/chart/fcrepo/templates/configmap-env.yaml +0 -19
- data/chart/fcrepo/templates/deployment.yaml +0 -109
- data/chart/fcrepo/templates/ingress.yaml +0 -41
- data/chart/fcrepo/templates/pvc.yaml +0 -20
- data/chart/fcrepo/templates/secret.yaml +0 -12
- data/chart/fcrepo/templates/service.yaml +0 -15
- data/chart/fcrepo/templates/serviceaccount.yaml +0 -12
- data/chart/fcrepo/templates/tests/test-connection.yaml +0 -15
- data/chart/fcrepo/values.yaml +0 -79
- data/chart/hyrax/templates/fcrepo-secret.yaml +0 -13
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 92a018038d9094f92a85088a61ff697aba139a326cfa96a95a7d4cdbeca98a0a
|
|
4
|
+
data.tar.gz: 8ca7c54444ba58ba89f2fc977ddcb8597122b985c9d7a7dda21d64fdcc87e648
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d5a60ae3e20bead1941c72d241bfa4fbee221eb6bf4637ad1bf58a53edd07eaaa741108707d06ece69b096b83132512875555fc64c6128b3a0c1046b079cbf9a
|
|
7
|
+
data.tar.gz: 64b2ef5c948183fa190b4f20adfae67ef22a8abc83df98c4e4581cbe83d960b3dc8d67b0453c062da5940d76f915a496fcb16f3b3a29aa63ffdeb2f0b443dab3
|
data/.dassie/config/cable.yml
CHANGED
|
@@ -6,5 +6,5 @@ test:
|
|
|
6
6
|
|
|
7
7
|
production:
|
|
8
8
|
adapter: redis
|
|
9
|
-
url: <%= ENV.fetch("REDIS_URL") { "redis
|
|
9
|
+
url: <%= ENV.fetch("REDIS_URL") { sprintf "redis://%s%s:%s/1", (ENV['REDIS_PASSWORD'].present? ? ":#{ENV['REDIS_PASSWORD']}@" : ''), ENV.fetch('REDIS_HOST', 'localhost'), ENV.fetch('REDIS_PORT', '6379') } %>
|
|
10
10
|
channel_prefix: _dassie_production
|
|
@@ -23,7 +23,7 @@ Rails.application.configure do
|
|
|
23
23
|
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
|
|
24
24
|
|
|
25
25
|
# Compress JavaScripts and CSS.
|
|
26
|
-
config.assets.js_compressor = :
|
|
26
|
+
config.assets.js_compressor = Uglifier.new(harmony: true)
|
|
27
27
|
# config.assets.css_compressor = :sass
|
|
28
28
|
|
|
29
29
|
# Do not fallback to assets pipeline if a precompiled asset is missed.
|
data/.dassie/config/redis.yml
CHANGED
data/.dassie/db/seeds.rb
CHANGED
|
@@ -12,3 +12,11 @@ puts "\n== Loading users"
|
|
|
12
12
|
User.where(email: 'admin@example.com').first_or_create do |f|
|
|
13
13
|
f.password = 'admin_password'
|
|
14
14
|
end
|
|
15
|
+
|
|
16
|
+
User.where(email: 'basic_user@example.com').first_or_create do |f|
|
|
17
|
+
f.password = 'password'
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
User.where(email: 'another_user@example.com').first_or_create do |f|
|
|
21
|
+
f.password = 'password'
|
|
22
|
+
end
|
data/.dockerignore
CHANGED
data/Dockerfile
CHANGED
|
@@ -7,10 +7,12 @@ ARG EXTRA_APK_PACKAGES="git"
|
|
|
7
7
|
|
|
8
8
|
RUN apk --no-cache upgrade && \
|
|
9
9
|
apk --no-cache add build-base \
|
|
10
|
+
curl \
|
|
10
11
|
imagemagick \
|
|
11
12
|
tzdata \
|
|
12
13
|
nodejs \
|
|
13
14
|
yarn \
|
|
15
|
+
zip \
|
|
14
16
|
$DATABASE_APK_PACKAGE \
|
|
15
17
|
$EXTRA_APK_PACKAGES
|
|
16
18
|
|
|
@@ -39,7 +41,7 @@ ARG BUNDLE_WITHOUT="development test"
|
|
|
39
41
|
|
|
40
42
|
ONBUILD COPY --chown=1001:101 $APP_PATH /app/samvera/hyrax-webapp
|
|
41
43
|
ONBUILD RUN bundle install --jobs "$(nproc)"
|
|
42
|
-
ONBUILD RUN DB_ADAPTER=nulldb DATABASE_URL='postgresql://fake' bundle exec rake assets:precompile
|
|
44
|
+
ONBUILD RUN RAILS_ENV=production SECRET_KEY_BASE=`bin/rake secret` DB_ADAPTER=nulldb DATABASE_URL='postgresql://fake' bundle exec rake assets:precompile
|
|
43
45
|
|
|
44
46
|
FROM hyrax-base as hyrax-engine-dev
|
|
45
47
|
|
|
@@ -52,7 +54,7 @@ COPY --chown=1001:101 $APP_PATH /app/samvera/hyrax-webapp
|
|
|
52
54
|
COPY --chown=1001:101 . /app/samvera/hyrax-engine
|
|
53
55
|
|
|
54
56
|
RUN cd /app/samvera/hyrax-engine && bundle install --jobs "$(nproc)"
|
|
55
|
-
RUN DB_ADAPTER=nulldb DATABASE_URL='postgresql://fake' bundle exec rake
|
|
57
|
+
RUN RAILS_ENV=production SECRET_KEY_BASE='fakesecret1234' DB_ADAPTER=nulldb DATABASE_URL='postgresql://fake' bundle exec rake assets:precompile
|
|
56
58
|
|
|
57
59
|
|
|
58
60
|
FROM hyrax-engine-dev as hyrax-engine-dev-worker
|
|
@@ -61,9 +63,10 @@ ENV MALLOC_ARENA_MAX=2
|
|
|
61
63
|
|
|
62
64
|
USER root
|
|
63
65
|
RUN apk --no-cache add bash \
|
|
66
|
+
ffmpeg \
|
|
67
|
+
mediainfo \
|
|
64
68
|
openjdk11-jre \
|
|
65
|
-
perl
|
|
66
|
-
mediainfo
|
|
69
|
+
perl
|
|
67
70
|
USER app
|
|
68
71
|
|
|
69
72
|
RUN mkdir -p /app/fits && \
|
|
@@ -61,9 +61,18 @@ module Hyrax
|
|
|
61
61
|
true
|
|
62
62
|
end
|
|
63
63
|
|
|
64
|
+
def create_file_from_url(env, uri, file_name, auth_header)
|
|
65
|
+
case env.curation_concern
|
|
66
|
+
when Valkyrie::Resource
|
|
67
|
+
create_file_from_url_through_valkyrie(env, uri, file_name, auth_header)
|
|
68
|
+
else
|
|
69
|
+
create_file_from_url_through_active_fedora(env, uri, file_name, auth_header)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
64
73
|
# Generic utility for creating FileSet from a URL
|
|
65
74
|
# Used in to import files using URLs from a file picker like browse_everything
|
|
66
|
-
def
|
|
75
|
+
def create_file_from_url_through_active_fedora(env, uri, file_name, auth_header)
|
|
67
76
|
import_url = URI.decode_www_form_component(uri.to_s)
|
|
68
77
|
::FileSet.new(import_url: import_url, label: file_name) do |fs|
|
|
69
78
|
actor = Hyrax::Actors::FileSetActor.new(fs, env.user)
|
|
@@ -80,6 +89,23 @@ module Hyrax
|
|
|
80
89
|
end
|
|
81
90
|
end
|
|
82
91
|
|
|
92
|
+
# Generic utility for creating Hyrax::FileSet from a URL
|
|
93
|
+
# Used in to import files using URLs from a file picker like browse_everything
|
|
94
|
+
def create_file_from_url_through_valkyrie(env, uri, file_name, auth_header)
|
|
95
|
+
import_url = URI.decode_www_form_component(uri.to_s)
|
|
96
|
+
fs = Hyrax.persister.save(resource: Hyrax::FileSet.new(import_url: import_url, label: file_name))
|
|
97
|
+
actor = Hyrax::Actors::FileSetActor.new(fs, env.user, use_valkyrie: true)
|
|
98
|
+
actor.create_metadata(visibility: env.curation_concern.visibility)
|
|
99
|
+
actor.attach_to_work(env.curation_concern)
|
|
100
|
+
if uri.scheme == 'file'
|
|
101
|
+
# Turn any %20 into spaces.
|
|
102
|
+
file_path = CGI.unescape(uri.path)
|
|
103
|
+
IngestLocalFileJob.perform_later(fs, file_path, env.user)
|
|
104
|
+
else
|
|
105
|
+
ImportUrlJob.perform_later(fs, operation_for(user: actor.user), auth_header)
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
83
109
|
def operation_for(user:)
|
|
84
110
|
Hyrax::Operation.create!(user: user,
|
|
85
111
|
operation_type: "Attach Remote File")
|
|
@@ -11,7 +11,7 @@ module Hyrax
|
|
|
11
11
|
# @param [FileSet] file_set the parent FileSet
|
|
12
12
|
# @param [Symbol, #to_sym] relation the type/use for the file
|
|
13
13
|
# @param [User] user the user to record as the Agent acting upon the file
|
|
14
|
-
def initialize(file_set, relation, user, use_valkyrie:
|
|
14
|
+
def initialize(file_set, relation, user, use_valkyrie: Hyrax.config.query_index_from_valkyrie)
|
|
15
15
|
@use_valkyrie = use_valkyrie
|
|
16
16
|
@file_set = file_set
|
|
17
17
|
@relation = normalize_relation(relation)
|
|
@@ -75,7 +75,7 @@ module Hyrax
|
|
|
75
75
|
CharacterizeJob.perform_later(file_set, repository_file.id, pathhint(io))
|
|
76
76
|
end
|
|
77
77
|
|
|
78
|
-
def perform_ingest_file_through_valkyrie(io)
|
|
78
|
+
def perform_ingest_file_through_valkyrie(io) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
|
79
79
|
file =
|
|
80
80
|
begin
|
|
81
81
|
Hyrax.storage_adapter.upload(resource: file_set, file: io, original_filename: io.original_name, use: relation)
|
|
@@ -87,7 +87,9 @@ module Hyrax
|
|
|
87
87
|
create_version(file_metadata, user)
|
|
88
88
|
id = file_metadata.file_identifier
|
|
89
89
|
file_set.file_ids << id
|
|
90
|
+
file_set.original_file_id = id
|
|
90
91
|
Hyrax.persister.save(resource: file_set)
|
|
92
|
+
Hyrax.publisher.publish('object.metadata.updated', object: file_set, user: user)
|
|
91
93
|
CharacterizeJob.perform_later(file_set, id.to_s, pathhint(io))
|
|
92
94
|
file_metadata
|
|
93
95
|
end
|
|
@@ -6,7 +6,7 @@ module Hyrax
|
|
|
6
6
|
include Lockable
|
|
7
7
|
attr_reader :file_set, :user, :attributes, :use_valkyrie
|
|
8
8
|
|
|
9
|
-
def initialize(file_set, user, use_valkyrie:
|
|
9
|
+
def initialize(file_set, user, use_valkyrie: Hyrax.config.query_index_from_valkyrie)
|
|
10
10
|
@use_valkyrie = use_valkyrie
|
|
11
11
|
@file_set = file_set
|
|
12
12
|
@user = user
|
|
@@ -68,7 +68,6 @@ module Hyrax
|
|
|
68
68
|
yield(file_set) if block_given?
|
|
69
69
|
end
|
|
70
70
|
|
|
71
|
-
# Adds a FileSet to the work using ore:Aggregations.
|
|
72
71
|
# Locks to ensure that only one process is operating on the list at a time.
|
|
73
72
|
def attach_to_work(work, file_set_params = {})
|
|
74
73
|
acquire_lock_for(work.id) do
|
|
@@ -87,15 +86,18 @@ module Hyrax
|
|
|
87
86
|
def attach_to_valkyrie_work(work, file_set_params)
|
|
88
87
|
work = Hyrax.query_service.find_by(id: work.id) unless work.new_record
|
|
89
88
|
file_set.visibility = work.visibility unless assign_visibility?(file_set_params)
|
|
90
|
-
Hyrax.persister.save(resource: file_set)
|
|
91
|
-
|
|
92
|
-
work.
|
|
93
|
-
work.
|
|
89
|
+
fs = Hyrax.persister.save(resource: file_set)
|
|
90
|
+
Hyrax.publisher.publish('object.metadata.updated', object: fs, user: user)
|
|
91
|
+
work.member_ids << fs.id
|
|
92
|
+
work.representative_id = fs.id if work.representative_id.blank?
|
|
93
|
+
work.thumbnail_id = fs.id if work.thumbnail_id.blank?
|
|
94
94
|
# Save the work so the association between the work and the file_set is persisted (head_id)
|
|
95
95
|
# NOTE: the work may not be valid, in which case this save doesn't do anything.
|
|
96
96
|
Hyrax.persister.save(resource: work)
|
|
97
|
+
Hyrax.publisher.publish('object.metadata.updated', object: work, user: user)
|
|
97
98
|
end
|
|
98
99
|
|
|
100
|
+
# Adds a FileSet to the work using ore:Aggregations.
|
|
99
101
|
def attach_to_af_work(work, file_set_params)
|
|
100
102
|
work.reload unless work.new_record?
|
|
101
103
|
file_set.visibility = work.visibility unless assign_visibility?(file_set_params)
|
|
@@ -113,10 +113,21 @@ module Hyrax
|
|
|
113
113
|
end
|
|
114
114
|
|
|
115
115
|
def destroy
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
116
|
+
case curation_concern
|
|
117
|
+
when ActiveFedora::Base
|
|
118
|
+
title = curation_concern.to_s
|
|
119
|
+
env = Actors::Environment.new(curation_concern, current_ability, {})
|
|
120
|
+
return unless actor.destroy(env)
|
|
121
|
+
Hyrax.config.callback.run(:after_destroy, curation_concern.id, current_user, warn: false)
|
|
122
|
+
else
|
|
123
|
+
transactions['work_resource.destroy']
|
|
124
|
+
.with_step_args('work_resource.delete' => { user: current_user })
|
|
125
|
+
.call(curation_concern)
|
|
126
|
+
.value!
|
|
127
|
+
|
|
128
|
+
title = Array(curation_concern.title).first
|
|
129
|
+
end
|
|
130
|
+
|
|
120
131
|
after_destroy_response(title)
|
|
121
132
|
end
|
|
122
133
|
|
|
@@ -380,7 +391,7 @@ module Hyrax
|
|
|
380
391
|
|
|
381
392
|
def after_destroy_response(title)
|
|
382
393
|
respond_to do |wants|
|
|
383
|
-
wants.html { redirect_to my_works_path, notice: "Deleted #{title}" }
|
|
394
|
+
wants.html { redirect_to hyrax.my_works_path, notice: "Deleted #{title}" }
|
|
384
395
|
wants.json { render_json_response(response_type: :deleted, message: "Deleted #{curation_concern.id}") }
|
|
385
396
|
end
|
|
386
397
|
end
|
|
@@ -43,6 +43,20 @@ module Hyrax
|
|
|
43
43
|
property :access, virtual: true, prepopulator: ->(_opts) { self.access = model.mode }
|
|
44
44
|
end
|
|
45
45
|
|
|
46
|
+
##
|
|
47
|
+
# @api private
|
|
48
|
+
InWorksPopulator = lambda do |_options|
|
|
49
|
+
self.in_works_ids =
|
|
50
|
+
if persisted?
|
|
51
|
+
Hyrax.query_service
|
|
52
|
+
.find_inverse_references_by(resource: model, property: :member_ids)
|
|
53
|
+
.select(&:work?)
|
|
54
|
+
.map(&:id)
|
|
55
|
+
else
|
|
56
|
+
[]
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
46
60
|
##
|
|
47
61
|
# @api private
|
|
48
62
|
#
|
|
@@ -90,6 +104,7 @@ module Hyrax
|
|
|
90
104
|
|
|
91
105
|
# pcdm relationships
|
|
92
106
|
property :admin_set_id, prepopulator: ->(_opts) { self.admin_set_id = AdminSet::DEFAULT_ID }
|
|
107
|
+
property :in_works_ids, virtual: true, prepopulator: InWorksPopulator
|
|
93
108
|
property :member_ids, default: [], type: Valkyrie::Types::Array
|
|
94
109
|
property :member_of_collection_ids, default: [], type: Valkyrie::Types::Array
|
|
95
110
|
|
|
@@ -20,6 +20,14 @@ module Hyrax
|
|
|
20
20
|
include Hyrax::WorkFormHelper
|
|
21
21
|
include Hyrax::WorkflowsHelper
|
|
22
22
|
|
|
23
|
+
##
|
|
24
|
+
# @return [Array<String>] the list of all user groups
|
|
25
|
+
def available_user_groups(ability:)
|
|
26
|
+
return ::User.group_service.role_names if ability.admin?
|
|
27
|
+
|
|
28
|
+
ability.user_groups
|
|
29
|
+
end
|
|
30
|
+
|
|
23
31
|
# Which translations are available for the user to select
|
|
24
32
|
# @return [Hash{String => String}] locale abbreviations as keys and flags as values
|
|
25
33
|
def available_translations
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Hyrax
|
|
4
|
+
##
|
|
5
|
+
# Indexes Hyrax::FileSet objects
|
|
6
|
+
class ValkyrieFileSetIndexer < Hyrax::ValkyrieIndexer
|
|
7
|
+
include Hyrax::ResourceIndexer
|
|
8
|
+
include Hyrax::PermissionIndexer
|
|
9
|
+
include Hyrax::VisibilityIndexer
|
|
10
|
+
include Hyrax::Indexer(:core_metadata)
|
|
11
|
+
include Hyrax::Indexer(:basic_metadata)
|
|
12
|
+
|
|
13
|
+
# include Hyrax::IndexesThumbnails # TODO: Is there a Valkyrie version of a thumbnail indexer?
|
|
14
|
+
|
|
15
|
+
def to_solr # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
|
|
16
|
+
super.tap do |solr_doc| # rubocop:disable Metrics/BlockLength
|
|
17
|
+
# Metadata from the FileSet
|
|
18
|
+
solr_doc['file_ids_ssim'] = resource.file_ids&.map(&:to_s)
|
|
19
|
+
solr_doc['original_file_id_ssi'] = resource.original_file_id.to_s
|
|
20
|
+
solr_doc['thumbnail_id_ssi'] = resource.thumbnail_id.to_s
|
|
21
|
+
solr_doc['extracted_text_id_ssi'] = resource.extracted_text_id.to_s
|
|
22
|
+
|
|
23
|
+
# Add in metadata from the original file.
|
|
24
|
+
file_metadata = original_file
|
|
25
|
+
return solr_doc unless file_metadata
|
|
26
|
+
|
|
27
|
+
# Label is the actual file name. It's not editable by the user.
|
|
28
|
+
solr_doc['original_file_alternate_ids_tesim'] = file_metadata.alternate_ids&.map(&:to_s) if file_metadata.alternate_ids.present?
|
|
29
|
+
|
|
30
|
+
solr_doc['original_filename_tesi'] = file_metadata.original_filename if file_metadata.original_filename.present?
|
|
31
|
+
solr_doc['original_filename_ssi'] = file_metadata.original_filename if file_metadata.original_filename.present?
|
|
32
|
+
solr_doc['mime_type_tesi'] = file_metadata.mime_type if file_metadata.mime_type.present?
|
|
33
|
+
solr_doc['mime_type_ssi'] = file_metadata.mime_type if file_metadata.mime_type.present?
|
|
34
|
+
|
|
35
|
+
solr_doc['file_format_tesim'] = file_format(file_metadata)
|
|
36
|
+
solr_doc['file_format_sim'] = file_format(file_metadata)
|
|
37
|
+
solr_doc['file_size_lts'] = file_metadata.size[0]
|
|
38
|
+
solr_doc['type_tesim'] = file_metadata.type if file_metadata.type.present?
|
|
39
|
+
|
|
40
|
+
# attributes set by fits
|
|
41
|
+
solr_doc['format_label_tesim'] = file_metadata.format_label if file_metadata.format_label.present?
|
|
42
|
+
solr_doc['size_tesim'] = file_metadata.size if file_metadata.size.present?
|
|
43
|
+
solr_doc['well_formed_tesim'] = file_metadata.well_formed if file_metadata.well_formed.present?
|
|
44
|
+
solr_doc['valid_tesim'] = file_metadata.valid if file_metadata.valid.present?
|
|
45
|
+
solr_doc['fits_version_tesim'] = file_metadata.fits_version if file_metadata.fits_version.present?
|
|
46
|
+
solr_doc['exif_version_tesim'] = file_metadata.exif_version if file_metadata.exif_version.present?
|
|
47
|
+
solr_doc['checksum_tesim'] = file_metadata.checksum if file_metadata.checksum.present?
|
|
48
|
+
|
|
49
|
+
# shared attributes across multiple file types
|
|
50
|
+
solr_doc['frame_rate_tesim'] = file_metadata.frame_rate if file_metadata.frame_rate.present? # audio, video
|
|
51
|
+
solr_doc['bit_rate_tesim'] = file_metadata.bit_rate if file_metadata.bit_rate.present? # audio, video
|
|
52
|
+
solr_doc['duration_tesim'] = file_metadata.duration if file_metadata.duration.present? # audio, video
|
|
53
|
+
solr_doc['sample_rate_tesim'] = file_metadata.sample_rate if file_metadata.sample_rate.present? # audio, video
|
|
54
|
+
|
|
55
|
+
solr_doc['height_tesim'] = file_metadata.height if file_metadata.height.present? # image, video
|
|
56
|
+
solr_doc['width_tesim'] = file_metadata.width if file_metadata.width.present? # image, video
|
|
57
|
+
|
|
58
|
+
# attributes set by fits for audio files
|
|
59
|
+
solr_doc['bit_depth_tesim'] = file_metadata.bit_depth if file_metadata.bit_depth.present?
|
|
60
|
+
solr_doc['channels_tesim'] = file_metadata.channels if file_metadata.channels.present?
|
|
61
|
+
solr_doc['data_format_tesim'] = file_metadata.data_format if file_metadata.data_format.present?
|
|
62
|
+
solr_doc['offset_tesim'] = file_metadata.offset if file_metadata.offset.present?
|
|
63
|
+
|
|
64
|
+
# attributes set by fits for documents
|
|
65
|
+
solr_doc['file_title_tesim'] = file_metadata.file_title if file_metadata.file_title.present?
|
|
66
|
+
solr_doc['page_count_tesim'] = file_metadata.page_count if file_metadata.page_count.present?
|
|
67
|
+
solr_doc['language_tesim'] = file_metadata.language if file_metadata.language.present?
|
|
68
|
+
solr_doc['word_count_tesim'] = file_metadata.word_count if file_metadata.word_count.present?
|
|
69
|
+
solr_doc['character_count_tesim'] = file_metadata.character_count if file_metadata.character_count.present?
|
|
70
|
+
solr_doc['line_count_tesim'] = file_metadata.line_count if file_metadata.line_count.present?
|
|
71
|
+
solr_doc['character_set_tesim'] = file_metadata.character_set if file_metadata.character_set.present?
|
|
72
|
+
solr_doc['markup_basis_tesim'] = file_metadata.markup_basis if file_metadata.markup_basis.present?
|
|
73
|
+
solr_doc['paragraph_count_tesim'] = file_metadata.paragraph_count if file_metadata.paragraph_count.present?
|
|
74
|
+
solr_doc['markup_language_tesim'] = file_metadata.markup_language if file_metadata.markup_language.present?
|
|
75
|
+
solr_doc['table_count_tesim'] = file_metadata.table_count if file_metadata.table_count.present?
|
|
76
|
+
solr_doc['graphics_count_tesim'] = file_metadata.graphics_count if file_metadata.graphics_count.present?
|
|
77
|
+
|
|
78
|
+
# attributes set by fits for images
|
|
79
|
+
solr_doc['byte_order_tesim'] = file_metadata.byte_order if file_metadata.byte_order.present?
|
|
80
|
+
solr_doc['compression_tesim'] = file_metadata.compression if file_metadata.compression.present?
|
|
81
|
+
solr_doc['color_space_tesim'] = file_metadata.color_space if file_metadata.color_space.present?
|
|
82
|
+
solr_doc['profile_name_tesim'] = file_metadata.profile_name if file_metadata.profile_name.present?
|
|
83
|
+
solr_doc['profile_version_tesim'] = file_metadata.profile_version if file_metadata.profile_version.present?
|
|
84
|
+
solr_doc['orientation_tesim'] = file_metadata.orientation if file_metadata.orientation.present?
|
|
85
|
+
solr_doc['color_map_tesim'] = file_metadata.color_map if file_metadata.color_map.present?
|
|
86
|
+
solr_doc['image_producer_tesim'] = file_metadata.image_producer if file_metadata.image_producer.present?
|
|
87
|
+
solr_doc['capture_device_tesim'] = file_metadata.capture_device if file_metadata.capture_device.present?
|
|
88
|
+
solr_doc['scanning_software_tesim'] = file_metadata.scanning_software if file_metadata.scanning_software.present?
|
|
89
|
+
solr_doc['gps_timestamp_tesim'] = file_metadata.gps_timestamp if file_metadata.gps_timestamp.present?
|
|
90
|
+
solr_doc['latitude_tesim'] = file_metadata.latitude if file_metadata.latitude.present?
|
|
91
|
+
solr_doc['longitude_tesim'] = file_metadata.longitude if file_metadata.longitude.present?
|
|
92
|
+
|
|
93
|
+
# attributes set by fits for video
|
|
94
|
+
solr_doc['aspect_ratio_tesim'] = file_metadata.aspect_ratio if file_metadata.aspect_ratio.present?
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
private
|
|
99
|
+
|
|
100
|
+
def original_file
|
|
101
|
+
Hyrax.custom_queries.find_original_file(file_set: resource)
|
|
102
|
+
rescue Valkyrie::Persistence::ObjectNotFoundError
|
|
103
|
+
Hyrax.custom_queries.find_files(file_set: resource).first
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def file_format(file)
|
|
107
|
+
if file.mime_type.present? && file.format_label.present?
|
|
108
|
+
"#{file.mime_type.split('/').last} (#{file.format_label.join(', ')})"
|
|
109
|
+
elsif file.mime_type.present?
|
|
110
|
+
file.mime_type.split('/').last
|
|
111
|
+
elsif file.format_label.present?
|
|
112
|
+
file.format_label
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
@@ -95,7 +95,12 @@ module Hyrax
|
|
|
95
95
|
# @example
|
|
96
96
|
# ValkyrieIndexer.for(resource: Book.new) # => #<BookIndexer ...>
|
|
97
97
|
def for(resource:)
|
|
98
|
-
|
|
98
|
+
case resource
|
|
99
|
+
when Hyrax::FileSet
|
|
100
|
+
Hyrax::ValkyrieFileSetIndexer.new(resource: resource)
|
|
101
|
+
else
|
|
102
|
+
indexer_class_for(resource).new(resource: resource)
|
|
103
|
+
end
|
|
99
104
|
end
|
|
100
105
|
|
|
101
106
|
private
|
|
@@ -16,6 +16,8 @@ module Hyrax
|
|
|
16
16
|
solr_doc['admin_set_id_ssim'] = [resource.admin_set_id.to_s]
|
|
17
17
|
solr_doc['member_of_collection_ids_ssim'] = resource.member_of_collection_ids.map(&:to_s)
|
|
18
18
|
solr_doc['member_ids_ssim'] = resource.member_ids.map(&:to_s)
|
|
19
|
+
solr_doc['depositor_ssim'] = [resource.depositor]
|
|
20
|
+
solr_doc['depositor_tesim'] = [resource.depositor]
|
|
19
21
|
end
|
|
20
22
|
end
|
|
21
23
|
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
class EmbargoExpiryJob < Hyrax::ApplicationJob
|
|
3
3
|
def perform
|
|
4
|
-
records_with_expired_embargos.each do |
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
records_with_expired_embargos.each do |resource|
|
|
5
|
+
Hyrax::EmbargoManager.release_embargo_for(resource: resource) &&
|
|
6
|
+
Hyrax::AccessControlList(resource).save
|
|
7
7
|
end
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
##
|
|
11
|
-
# @return [Enumerator<
|
|
11
|
+
# @return [Enumerator<Valkyrie::Resource>] ids for all the objects that have expired active embargoes
|
|
12
12
|
def records_with_expired_embargos
|
|
13
|
-
Hyrax::EmbargoService.assets_with_expired_embargoes.map(&:id)
|
|
13
|
+
ids = Hyrax::EmbargoService.assets_with_expired_embargoes.map(&:id)
|
|
14
|
+
|
|
15
|
+
Hyrax.query_service.find_many_by_ids(ids: ids)
|
|
14
16
|
end
|
|
15
17
|
end
|