hyrax 3.0.0 → 3.0.1
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/initializers/riiif.rb +22 -20
- data/.dassie/package.json +3 -5
- data/Dockerfile +34 -14
- data/app/controllers/hyrax/dashboard/collections_controller.rb +2 -4
- data/app/forms/hyrax/forms/collection_form.rb +5 -3
- data/app/indexers/hyrax/valkyrie_indexer.rb +2 -1
- data/app/presenters/hyrax/collection_presenter.rb +10 -14
- data/app/services/hyrax/listeners.rb +2 -0
- data/app/services/hyrax/listeners/member_cleanup_listener.rb +26 -0
- data/app/services/hyrax/listeners/object_lifecycle_listener.rb +1 -1
- data/app/services/hyrax/listeners/trophy_cleanup_listener.rb +17 -0
- data/app/services/hyrax/persist_derivatives.rb +3 -1
- data/app/services/hyrax/thumbnail_path_service.rb +1 -1
- data/app/services/hyrax/visibility_propagator.rb +30 -1
- data/app/views/hyrax/collections/show.html.erb +1 -1
- data/app/views/hyrax/dashboard/collections/_form_branding.html.erb +1 -1
- data/app/views/hyrax/file_sets/_actions.html.erb +10 -0
- data/chart/hyrax/Chart.yaml +2 -2
- data/chart/hyrax/templates/_helpers.tpl +8 -0
- data/chart/hyrax/templates/branding-pvc.yaml +14 -0
- data/chart/hyrax/templates/configmap-env.yaml +8 -1
- data/chart/hyrax/templates/deployment-worker.yaml +92 -0
- data/chart/hyrax/templates/deployment.yaml +42 -0
- data/chart/hyrax/templates/derivatives-pvc.yaml +14 -0
- data/chart/hyrax/templates/secrets.yaml +1 -0
- data/chart/hyrax/templates/uploads-pvc.yaml +14 -0
- data/chart/hyrax/values.yaml +31 -0
- data/config/features.rb +47 -43
- data/config/initializers/listeners.rb +2 -0
- data/documentation/developing-your-hyrax-based-app.md +4 -4
- data/documentation/legacyREADME.md +4 -4
- data/lib/generators/hyrax/templates/config/initializers/riiif.rb +22 -20
- data/lib/hyrax/configuration.rb +8 -0
- data/lib/hyrax/engine.rb +1 -1
- data/lib/hyrax/valkyrie_can_can_adapter.rb +2 -0
- data/lib/hyrax/version.rb +1 -1
- data/lib/wings/converter_value_mapper.rb +2 -2
- data/lib/wings/valkyrie/persister.rb +7 -5
- data/lib/wings/valkyrie/query_service.rb +60 -17
- data/template.rb +1 -1
- metadata +8 -2
data/lib/hyrax/configuration.rb
CHANGED
@@ -367,6 +367,14 @@ module Hyrax
|
|
367
367
|
@banner_image ||= 'https://user-images.githubusercontent.com/101482/29949206-ffa60d2c-8e67-11e7-988d-4910b8787d56.jpg'
|
368
368
|
end
|
369
369
|
|
370
|
+
##
|
371
|
+
# @return [Boolean]
|
372
|
+
def disable_wings
|
373
|
+
return @disable_wings unless @disable_wings.nil?
|
374
|
+
ActiveModel::Type::Boolean.new.cast(ENV.fetch('HYRAX_SKIP_WINGS', false))
|
375
|
+
end
|
376
|
+
attr_writer :disable_wings
|
377
|
+
|
370
378
|
attr_writer :display_media_download_link
|
371
379
|
# @return [Boolean]
|
372
380
|
def display_media_download_link?
|
data/lib/hyrax/engine.rb
CHANGED
@@ -20,6 +20,8 @@ module Hyrax
|
|
20
20
|
# @raise Hyrax::ObjectNotFoundError
|
21
21
|
def self.find(_model_class, id)
|
22
22
|
Hyrax.query_service.find_by_alternate_identifier(alternate_identifier: id)
|
23
|
+
rescue Valkyrie::Persistence::ObjectNotFoundError => err
|
24
|
+
raise Hyrax::ObjectNotFoundError, err.message
|
23
25
|
end
|
24
26
|
end
|
25
27
|
end
|
data/lib/hyrax/version.rb
CHANGED
@@ -73,7 +73,7 @@ module Wings
|
|
73
73
|
end
|
74
74
|
|
75
75
|
def result
|
76
|
-
collections = value.last.map { |id| ActiveFedora::Base.find(id.
|
76
|
+
collections = value.last.map { |id| ActiveFedora::Base.find(id.to_s) }
|
77
77
|
[:member_of_collections, collections]
|
78
78
|
end
|
79
79
|
end
|
@@ -86,7 +86,7 @@ module Wings
|
|
86
86
|
end
|
87
87
|
|
88
88
|
def result
|
89
|
-
members = value.last.map { |id| ActiveFedora::Base.find(id.
|
89
|
+
members = value.last.map { |id| ActiveFedora::Base.find(id.to_s) }
|
90
90
|
[:members, members]
|
91
91
|
end
|
92
92
|
end
|
@@ -41,9 +41,10 @@ module Wings
|
|
41
41
|
# @param [Valkyrie::Resource] resource
|
42
42
|
# @return [Valkyrie::Resource] the persisted/updated resource
|
43
43
|
def save_all(resources:)
|
44
|
-
resources.map
|
45
|
-
|
46
|
-
|
44
|
+
resources.map { |resource| save(resource: resource) }
|
45
|
+
rescue ::Valkyrie::Persistence::StaleObjectError => _err
|
46
|
+
raise(::Valkyrie::Persistence::StaleObjectError,
|
47
|
+
"One or more resources have been updated by another process.")
|
47
48
|
end
|
48
49
|
|
49
50
|
# Deletes a resource persisted using ActiveFedora
|
@@ -51,7 +52,7 @@ module Wings
|
|
51
52
|
# @return [Valkyrie::Resource] the deleted resource
|
52
53
|
def delete(resource:)
|
53
54
|
af_object = ActiveFedora::Base.new
|
54
|
-
af_object.id = resource.
|
55
|
+
af_object.id = resource.id
|
55
56
|
af_object.delete
|
56
57
|
resource
|
57
58
|
end
|
@@ -84,7 +85,8 @@ module Wings
|
|
84
85
|
etag_lock_token_valid?(af_object: af_object, resource: resource) &&
|
85
86
|
last_modified_lock_token_valid?(af_object: af_object, resource: resource)
|
86
87
|
|
87
|
-
raise(::Valkyrie::Persistence::StaleObjectError,
|
88
|
+
raise(::Valkyrie::Persistence::StaleObjectError,
|
89
|
+
"The object #{resource.id} has been updated by another process.")
|
88
90
|
end
|
89
91
|
|
90
92
|
##
|
@@ -2,16 +2,32 @@
|
|
2
2
|
|
3
3
|
module Wings
|
4
4
|
module Valkyrie
|
5
|
+
##
|
6
|
+
# @note does not support duplicates!
|
5
7
|
class QueryService
|
6
8
|
attr_reader :adapter
|
7
9
|
extend Forwardable
|
8
10
|
def_delegator :adapter, :resource_factory
|
9
11
|
|
10
|
-
|
12
|
+
##
|
13
|
+
# @param adapter [Wings::Valkyrie::MetadataAdapter] The adapter which
|
14
|
+
# holds the resource_factory for this query_service.
|
11
15
|
def initialize(adapter:)
|
12
16
|
@adapter = adapter
|
13
17
|
end
|
14
18
|
|
19
|
+
##
|
20
|
+
# @param :model [Class]
|
21
|
+
#
|
22
|
+
# @return [Integer]
|
23
|
+
def count_all_of_model(model:)
|
24
|
+
ActiveFedora::Base
|
25
|
+
.where(has_model_ssim: [model_class_for(model).to_rdf_representation,
|
26
|
+
model.new.internal_resource.to_s])
|
27
|
+
.count
|
28
|
+
end
|
29
|
+
|
30
|
+
##
|
15
31
|
# WARNING: In general, prefer find_by_alternate_identifier over this
|
16
32
|
# method.
|
17
33
|
#
|
@@ -23,14 +39,17 @@ module Wings
|
|
23
39
|
# start getting ObjectNotFoundErrors instead of the objects you wanted
|
24
40
|
#
|
25
41
|
# Find a record using a Valkyrie ID, and map it to a Valkyrie Resource
|
42
|
+
#
|
26
43
|
# @param [Valkyrie::ID, String] id
|
27
44
|
# @return [Valkyrie::Resource]
|
28
|
-
# @raise [
|
45
|
+
# @raise [Valkyrie::Persistence::ObjectNotFoundError]
|
29
46
|
def find_by(id:)
|
30
47
|
find_by_alternate_identifier(alternate_identifier: id)
|
31
48
|
end
|
32
49
|
|
50
|
+
##
|
33
51
|
# Find all work/collection records, and map to Valkyrie Resources
|
52
|
+
#
|
34
53
|
# @return [Array<Valkyrie::Resource>]
|
35
54
|
def find_all
|
36
55
|
::ActiveFedora::Base.all.map do |obj|
|
@@ -38,7 +57,10 @@ module Wings
|
|
38
57
|
end
|
39
58
|
end
|
40
59
|
|
41
|
-
|
60
|
+
##
|
61
|
+
# Find all work/collection records of a given model, and map to Valkyrie
|
62
|
+
# Resources
|
63
|
+
#
|
42
64
|
# @param model [Class]
|
43
65
|
# @return [Array<Valkyrie::Resource>]
|
44
66
|
def find_all_of_model(model:)
|
@@ -73,11 +95,14 @@ module Wings
|
|
73
95
|
end
|
74
96
|
end
|
75
97
|
|
98
|
+
##
|
76
99
|
# Find a record using an alternate ID, and map it to a Valkyrie Resource
|
100
|
+
#
|
77
101
|
# @param [Valkyrie::ID, String] id
|
78
102
|
# @param [boolean] optionally return ActiveFedora object/errors
|
103
|
+
#
|
79
104
|
# @return [Valkyrie::Resource]
|
80
|
-
# @raise [
|
105
|
+
# @raise [Valkyrie::Persistence::ObjectNotFoundError]
|
81
106
|
def find_by_alternate_identifier(alternate_identifier:, use_valkyrie: true)
|
82
107
|
raise(ArgumentError, 'id must be a Valkyrie::ID') unless
|
83
108
|
alternate_identifier.respond_to?(:to_str)
|
@@ -87,12 +112,15 @@ module Wings
|
|
87
112
|
use_valkyrie ? resource_factory.to_resource(object: af_object) : af_object
|
88
113
|
rescue ActiveFedora::ObjectNotFoundError, Ldp::Gone => err
|
89
114
|
raise err unless use_valkyrie
|
90
|
-
raise
|
115
|
+
raise ::Valkyrie::Persistence::ObjectNotFoundError
|
91
116
|
end
|
92
117
|
|
118
|
+
##
|
93
119
|
# Find all members of a given resource, and map to Valkyrie Resources
|
120
|
+
#
|
94
121
|
# @param resource [Valkyrie::Resource]
|
95
122
|
# @param model [Class]
|
123
|
+
#
|
96
124
|
# @return [Array<Valkyrie::Resource>]
|
97
125
|
def find_members(resource:, model: nil)
|
98
126
|
return [] if resource.try(:member_ids).blank?
|
@@ -103,21 +131,27 @@ module Wings
|
|
103
131
|
.select { |member_resource| model_class_for(member_resource.class) == find_model }
|
104
132
|
end
|
105
133
|
|
134
|
+
##
|
106
135
|
# Find the Valkyrie Resources referenced by another Valkyrie Resource
|
136
|
+
#
|
107
137
|
# @param resource [<Valkyrie::Resource>]
|
108
138
|
# @param property [Symbol] the property holding the references to another resource
|
109
139
|
# @return [Array<Valkyrie::Resource>]
|
110
|
-
def find_references_by(resource:, property:)
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
resource_factory.to_resource(object: ::ActiveFedora::Base.find(
|
140
|
+
def find_references_by(resource:, property:, model: nil)
|
141
|
+
return find_many_by_ids(ids: Array(resource.send(property))) unless model
|
142
|
+
|
143
|
+
results = resource.public_send(property).map do |reference|
|
144
|
+
resource_factory.to_resource(object: ::ActiveFedora::Base.find(reference))
|
115
145
|
end
|
146
|
+
|
147
|
+
results.select { |r| r.class.name == model.name }
|
116
148
|
rescue ActiveFedora::ObjectNotFoundError
|
117
149
|
[]
|
118
150
|
end
|
119
151
|
|
152
|
+
##
|
120
153
|
# Get all resources which link to a resource or id with a given property.
|
154
|
+
#
|
121
155
|
# @param resource [Valkyrie::Resource] The resource which is being referenced by
|
122
156
|
# other resources.
|
123
157
|
# @param resource [Valkyrie::ID] The id of the resource which is being referenced by
|
@@ -129,30 +163,37 @@ module Wings
|
|
129
163
|
# @return [Array<Valkyrie::Resource>] All resources in the persistence backend
|
130
164
|
# which have the ID of the given `resource` in their `property` property. Not
|
131
165
|
# in order.
|
132
|
-
def find_inverse_references_by(resource: nil, id: nil, property:)
|
166
|
+
def find_inverse_references_by(resource: nil, id: nil, model: nil, property:)
|
133
167
|
raise ArgumentError, "Provide resource or id" unless resource || id
|
134
|
-
id ||= resource.
|
168
|
+
id ||= resource.id
|
135
169
|
raise ArgumentError, "Resource has no id; is it persisted?" unless id
|
136
|
-
|
137
|
-
|
170
|
+
|
171
|
+
active_fedora_model = model ? model_class_for(model) : ActiveFedora::Base
|
172
|
+
|
173
|
+
uri = active_fedora_model.id_to_uri(id.to_s)
|
174
|
+
active_fedora_model.where("+(#{property}_ssim: \"#{uri}\" OR #{property}_ssim: \"#{id}\")").map do |obj|
|
138
175
|
resource_factory.to_resource(object: obj)
|
139
176
|
end
|
140
177
|
end
|
141
178
|
|
179
|
+
##
|
142
180
|
# Find all parents of a given resource.
|
181
|
+
#
|
143
182
|
# @param resource [Valkyrie::Resource] The resource whose parents are being searched
|
144
183
|
# for.
|
145
184
|
# @return [Array<Valkyrie::Resource>] All resources which are parents of the given
|
146
185
|
# `resource`. This means the resource's `id` appears in their `member_ids`
|
147
186
|
# array.
|
148
187
|
def find_parents(resource:)
|
149
|
-
|
150
|
-
ActiveFedora::Base.where("member_ids_ssim: \"#{id}\"").map do |obj|
|
188
|
+
ActiveFedora::Base.where("member_ids_ssim: \"#{resource.id}\"").map do |obj|
|
151
189
|
resource_factory.to_resource(object: obj)
|
152
190
|
end
|
153
191
|
end
|
154
192
|
|
155
|
-
|
193
|
+
##
|
194
|
+
# Constructs a Valkyrie::Persistence::CustomQueryContainer using this
|
195
|
+
# query service
|
196
|
+
#
|
156
197
|
# @return [Valkyrie::Persistence::CustomQueryContainer]
|
157
198
|
def custom_queries
|
158
199
|
@custom_queries ||= ::Valkyrie::Persistence::CustomQueryContainer.new(query_service: self)
|
@@ -160,7 +201,9 @@ module Wings
|
|
160
201
|
|
161
202
|
private
|
162
203
|
|
204
|
+
##
|
163
205
|
# Determines whether or not an Object is a Valkyrie ID
|
206
|
+
#
|
164
207
|
# @param [Object] id
|
165
208
|
# @raise [ArgumentError]
|
166
209
|
def validate_id(id)
|
data/template.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hyrax
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Coyne
|
@@ -14,7 +14,7 @@ authors:
|
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
|
-
date: 2021-03-
|
17
|
+
date: 2021-03-31 00:00:00.000000000 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
name: rails
|
@@ -2108,9 +2108,11 @@ files:
|
|
2108
2108
|
- app/services/hyrax/listeners/batch_notification_listener.rb
|
2109
2109
|
- app/services/hyrax/listeners/file_set_lifecycle_listener.rb
|
2110
2110
|
- app/services/hyrax/listeners/file_set_lifecycle_notification_listener.rb
|
2111
|
+
- app/services/hyrax/listeners/member_cleanup_listener.rb
|
2111
2112
|
- app/services/hyrax/listeners/metadata_index_listener.rb
|
2112
2113
|
- app/services/hyrax/listeners/object_lifecycle_listener.rb
|
2113
2114
|
- app/services/hyrax/listeners/proxy_deposit_listener.rb
|
2115
|
+
- app/services/hyrax/listeners/trophy_cleanup_listener.rb
|
2114
2116
|
- app/services/hyrax/listeners/workflow_listener.rb
|
2115
2117
|
- app/services/hyrax/local_file_service.rb
|
2116
2118
|
- app/services/hyrax/lock_manager.rb
|
@@ -2608,16 +2610,20 @@ files:
|
|
2608
2610
|
- chart/hyrax/README.md
|
2609
2611
|
- chart/hyrax/templates/NOTES.txt
|
2610
2612
|
- chart/hyrax/templates/_helpers.tpl
|
2613
|
+
- chart/hyrax/templates/branding-pvc.yaml
|
2611
2614
|
- chart/hyrax/templates/configmap-env.yaml
|
2612
2615
|
- chart/hyrax/templates/cron-embargo.yaml
|
2613
2616
|
- chart/hyrax/templates/cron-lease.yaml
|
2617
|
+
- chart/hyrax/templates/deployment-worker.yaml
|
2614
2618
|
- chart/hyrax/templates/deployment.yaml
|
2619
|
+
- chart/hyrax/templates/derivatives-pvc.yaml
|
2615
2620
|
- chart/hyrax/templates/hpa.yaml
|
2616
2621
|
- chart/hyrax/templates/ingress.yaml
|
2617
2622
|
- chart/hyrax/templates/secrets.yaml
|
2618
2623
|
- chart/hyrax/templates/service.yaml
|
2619
2624
|
- chart/hyrax/templates/serviceaccount.yaml
|
2620
2625
|
- chart/hyrax/templates/tests/test-connection.yaml
|
2626
|
+
- chart/hyrax/templates/uploads-pvc.yaml
|
2621
2627
|
- chart/hyrax/values.yaml
|
2622
2628
|
- config/brakeman.ignore
|
2623
2629
|
- config/features.rb
|