ddr-core 0.3.0 → 1.2.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/app/models/concerns/ddr/#search_builder_behavior.rb# +10 -0
- data/app/models/concerns/ddr/describable.rb +8 -12
- data/app/models/concerns/ddr/has_admin_metadata.rb +13 -65
- data/app/models/concerns/ddr/has_children.rb +8 -0
- data/app/models/concerns/ddr/has_content.rb +1 -0
- data/app/models/concerns/ddr/has_parent.rb +14 -2
- data/app/models/concerns/ddr/search_builder_behavior.rb~ +9 -0
- data/app/models/concerns/ddr/solr_document_behavior.rb +11 -90
- data/app/models/ddr/#admin_set.rb# +26 -0
- data/app/models/ddr/#auxiliary_resource_cache.rb# +34 -0
- data/app/models/ddr/admin_set.rb +3 -7
- data/app/models/ddr/alert.rb +16 -0
- data/app/models/ddr/auxiliary_resource.rb +24 -0
- data/app/models/ddr/auxiliary_resource.rb~ +13 -0
- data/app/models/ddr/cacheable_auxiliary_resource.rb~ +20 -0
- data/app/models/ddr/collection.rb +5 -4
- data/app/models/ddr/component.rb +8 -0
- data/app/models/ddr/contact.rb +1 -5
- data/app/models/ddr/finding_aid.rb +61 -0
- data/app/models/ddr/item.rb +0 -14
- data/app/models/ddr/language.rb +1 -6
- data/app/models/ddr/resource.rb +14 -0
- data/app/models/ddr/rights_statement.rb +2 -6
- data/config/locales/ddr-core.en.yml +4 -1
- data/db/migrate/20200207194453_add_default_to_lock_version.rb +6 -0
- data/lib/ddr/auth/#duke_person.rb# +9 -0
- data/lib/ddr/auth/ability_definitions/publication_ability_definitions.rb +7 -0
- data/lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb +2 -2
- data/lib/ddr/auth/ability_definitions/superuser_ability_definitions.rb +3 -0
- data/lib/ddr/auth/duke_directory.rb~ +7 -0
- data/lib/ddr/auth/effective_permissions.rb +2 -1
- data/lib/ddr/auth/effective_roles.rb +6 -2
- data/lib/ddr/auth/failure_app.rb +1 -1
- data/lib/ddr/auth/grouper_gateway.rb +2 -2
- data/lib/ddr/auth/permissions.rb +14 -11
- data/lib/ddr/auth/role_based_access_controls_enforcement.rb +1 -37
- data/lib/ddr/auth/roles.rb +15 -3
- data/lib/ddr/auth/roles/role.rb +27 -69
- data/lib/ddr/auth/roles/role_types.rb +13 -6
- data/lib/ddr/core.rb +9 -0
- data/lib/ddr/core/version.rb +1 -1
- data/lib/ddr/fits.rb +0 -91
- data/lib/ddr/index.rb +2 -2
- data/lib/ddr/index/csv_query_result.rb +27 -20
- data/lib/ddr/index/fields.rb +5 -0
- data/lib/ddr/managers/technical_metadata_manager.rb +9 -4
- data/lib/ddr/structure.rb +2 -1
- data/lib/ddr/vocab/asset.rb +4 -0
- data/lib/ddr/workflow.rb +1 -0
- metadata +35 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c58f60f94bc6a54ea670eb5a7a096e69221e5b8e6fce28191b939f283d4c3528
|
4
|
+
data.tar.gz: 170f607020dfabfa89c77c4a31b3daa10bc7d40bd06c251ff3e3d0a0372159e2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7ff5d87897742e3f736e3313a06145a6d378e168e72d6872effc563906370fe66865bf663027defe32041a45ab92910dab97e9d9a1ebd6d21bdf1d9b0b381b84
|
7
|
+
data.tar.gz: 48869cd2b81bd88378779ab319fb4a13407bc9060aa099b6b45d33469e8d6605af177aecff033b921f5588bca616f94e077ce75455d45ddba2a619fc7d0119a7
|
data/README.md
CHANGED
@@ -0,0 +1,10 @@
|
|
1
|
+
module Ddr
|
2
|
+
module SearchBuilderBehavior
|
3
|
+
|
4
|
+
def effective_role_filter(agents)
|
5
|
+
# https://lucene.apache.org/solr/guide/7_7/other-parsers.html#term-query-parser
|
6
|
+
"{!terms f=#{Ddr::Index::Fields::EFFECTIVE_ROLE} method=booleanQuery}#{agents.join(',')}"
|
7
|
+
end
|
8
|
+
|
9
|
+
end
|
10
|
+
end
|
@@ -15,6 +15,8 @@ module Ddr
|
|
15
15
|
term_names
|
16
16
|
end
|
17
17
|
|
18
|
+
# Dublin Core vocabulary comes from the rdf-vocab gem (https://github.com/ruby-rdf/rdf-vocab)
|
19
|
+
# DDR vocabulary is defined locally
|
18
20
|
def self.vocabularies
|
19
21
|
[RDF::Vocab::DC, Ddr::Vocab::DukeTerms].freeze
|
20
22
|
end
|
@@ -34,7 +36,11 @@ module Ddr
|
|
34
36
|
|
35
37
|
included do
|
36
38
|
Ddr::Describable.term_names.each do |term_name|
|
37
|
-
|
39
|
+
if term_name == :available # Intercept dcterms:available and set it to a single date so it can be used for embargoes
|
40
|
+
attribute term_name, Valkyrie::Types::DateTime.optional
|
41
|
+
else
|
42
|
+
attribute term_name, Valkyrie::Types::Set
|
43
|
+
end
|
38
44
|
end
|
39
45
|
end
|
40
46
|
|
@@ -53,7 +59,7 @@ module Ddr
|
|
53
59
|
arg = args.pop
|
54
60
|
terms = case arg.to_sym
|
55
61
|
when :empty
|
56
|
-
desc_metadata_terms.select { |t| values(t).empty? }
|
62
|
+
desc_metadata_terms.select { |t| values(t).nil? || values(t).empty? }
|
57
63
|
when :present
|
58
64
|
desc_metadata_terms.select { |t| values(t).present? }
|
59
65
|
when :defined_attributes
|
@@ -94,15 +100,5 @@ module Ddr
|
|
94
100
|
desc_metadata_terms.each { |t| set_desc_metadata_values(t, term_values_hash[t]) }
|
95
101
|
end
|
96
102
|
|
97
|
-
################
|
98
|
-
# I do not believe this method is needed any longer since I can't find any usage of it in ddr-models, ddr-batch,
|
99
|
-
# dul-hydra, ddr-public, or ddr-portals
|
100
|
-
################
|
101
|
-
# module ClassMethods
|
102
|
-
# def find_by_identifier(identifier)
|
103
|
-
# find(Ddr::Index::Fields::IDENTIFIER_ALL => identifier)
|
104
|
-
# end
|
105
|
-
# end
|
106
|
-
|
107
103
|
end
|
108
104
|
end
|
@@ -7,6 +7,7 @@ module Ddr
|
|
7
7
|
affiliation: Valkyrie::Types::Set,
|
8
8
|
aleph_id: Valkyrie::Types::Strict::String.optional,
|
9
9
|
aspace_id: Valkyrie::Types::Strict::String.optional,
|
10
|
+
contentdm_id: Valkyrie::Types::Strict::String.optional,
|
10
11
|
depositor: Valkyrie::Types::Strict::String.optional,
|
11
12
|
display_format: Valkyrie::Types::Strict::String.optional,
|
12
13
|
doi: Valkyrie::Types::Strict::String.optional,
|
@@ -54,46 +55,10 @@ module Ddr
|
|
54
55
|
workflow_state == Ddr::Workflow::UNPUBLISHED
|
55
56
|
end
|
56
57
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
# self.is_locked = true
|
62
|
-
# end
|
63
|
-
#
|
64
|
-
# def unlock
|
65
|
-
# self.is_locked = false
|
66
|
-
# end
|
67
|
-
#
|
68
|
-
# def lock!
|
69
|
-
# lock
|
70
|
-
# save
|
71
|
-
# end
|
72
|
-
#
|
73
|
-
# def unlock!
|
74
|
-
# unlock
|
75
|
-
# save
|
76
|
-
# end
|
77
|
-
#
|
78
|
-
# Same with publish! and unpublish!, which is currently delegated to Ddr::Managers::WorkflowManager
|
79
|
-
#
|
80
|
-
###############
|
81
|
-
|
82
|
-
###############
|
83
|
-
# attribute defined in has_content, single-valued, stored in adminMetadata datastream
|
84
|
-
###############
|
85
|
-
# property :original_filename,
|
86
|
-
# predicate: Ddr::Vocab::PREMIS.hasOriginalName do |index|
|
87
|
-
# index.as :stored_sortable
|
88
|
-
# end
|
89
|
-
#
|
90
|
-
|
91
|
-
# included do
|
92
|
-
#
|
93
|
-
# delegate :publish!, :unpublish!, :published?, :unpublished?,
|
94
|
-
# to: :workflow
|
95
|
-
# end
|
96
|
-
#
|
58
|
+
# Usually won't be called directly. See `publishable?` on Resource and its derivatives
|
59
|
+
def nonpublishable?
|
60
|
+
workflow_state == Ddr::Workflow::NONPUBLISHABLE
|
61
|
+
end
|
97
62
|
|
98
63
|
def resource_roles
|
99
64
|
roles.select(&:in_resource_scope?)
|
@@ -107,36 +72,19 @@ module Ddr
|
|
107
72
|
( has_admin_policy? && admin_policy.policy_roles ) || []
|
108
73
|
end
|
109
74
|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
# def workflow
|
115
|
-
# @workflow ||= Ddr::Managers::WorkflowManager.new(self)
|
116
|
-
# end
|
117
|
-
#
|
118
|
-
# def grant_roles_to_creator(creator)
|
119
|
-
# roles.grant type: Ddr::Auth::Roles::EDITOR,
|
120
|
-
# agent: creator,
|
121
|
-
# scope: Ddr::Auth::Roles::RESOURCE_SCOPE
|
122
|
-
# end
|
123
|
-
#
|
124
|
-
# def copy_resource_roles_from(other)
|
125
|
-
# roles.grant *(other.roles.in_resource_scope)
|
126
|
-
# end
|
127
|
-
#
|
75
|
+
def effective_roles(agents = nil)
|
76
|
+
Ddr::Auth::EffectiveRoles.call(self, agents)
|
77
|
+
end
|
128
78
|
|
129
79
|
def effective_permissions(agents)
|
130
80
|
Ddr::Auth::EffectivePermissions.call(self, agents)
|
131
81
|
end
|
132
82
|
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
# end
|
139
|
-
#
|
83
|
+
def finding_aid
|
84
|
+
if ead_id
|
85
|
+
FindingAid.new(ead_id)
|
86
|
+
end
|
87
|
+
end
|
140
88
|
|
141
89
|
end
|
142
90
|
end
|
@@ -6,5 +6,13 @@ module Ddr
|
|
6
6
|
Ddr.query_service.find_inverse_references_by(resource: self, property: 'parent_id')
|
7
7
|
end
|
8
8
|
|
9
|
+
def first_child
|
10
|
+
sorted_children.first
|
11
|
+
end
|
12
|
+
|
13
|
+
def sorted_children
|
14
|
+
children.sort_by{ |e| [ e.local_id || '', e.ingestion_date ] }
|
15
|
+
end
|
16
|
+
|
9
17
|
end
|
10
18
|
end
|
@@ -7,12 +7,24 @@ module Ddr
|
|
7
7
|
attribute :parent_id, Valkyrie::Types::ID.optional
|
8
8
|
end
|
9
9
|
|
10
|
+
def has_parent?
|
11
|
+
parent_id.present?
|
12
|
+
end
|
13
|
+
|
10
14
|
def parent
|
11
|
-
Ddr.query_service.find_by(id: parent_id) if
|
15
|
+
Ddr.query_service.find_by(id: parent_id) if has_parent?
|
12
16
|
end
|
13
17
|
|
18
|
+
# Resources with parents (currently, Items and Components) are publishable only if they have not been marked
|
19
|
+
# nonpublishable and their parent is published
|
14
20
|
def publishable?
|
15
|
-
|
21
|
+
!nonpublishable? && parental_publication_guard
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def parental_publication_guard
|
27
|
+
parent.present? && parent.published?
|
16
28
|
end
|
17
29
|
|
18
30
|
end
|
@@ -54,29 +54,9 @@ module Ddr
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def resource
|
57
|
-
@resource
|
57
|
+
@resource ||= Valkyrie::MetadataAdapter.find(:index_solr).query_service.find_by(id: id)
|
58
58
|
end
|
59
59
|
|
60
|
-
### DDRevo: Not sure if / where this is used
|
61
|
-
def to_partial_path
|
62
|
-
'document'
|
63
|
-
end
|
64
|
-
|
65
|
-
### DDRevo: This is probably no longer needed
|
66
|
-
def safe_id
|
67
|
-
id.sub(/:/, "-")
|
68
|
-
end
|
69
|
-
|
70
|
-
### DDRevo: No longer relevant
|
71
|
-
# def object_profile
|
72
|
-
# @object_profile ||= get_json(Ddr::Index::Fields::OBJECT_PROFILE)
|
73
|
-
# end
|
74
|
-
|
75
|
-
### DDRevo: No longer relevant
|
76
|
-
# def object_state
|
77
|
-
# object_profile["objState"]
|
78
|
-
# end
|
79
|
-
|
80
60
|
def object_create_date
|
81
61
|
parse_date(self[Ddr::Index::Fields::RESOURCE_CREATE_DATE])
|
82
62
|
end
|
@@ -93,23 +73,13 @@ module Ddr
|
|
93
73
|
get_date(Ddr::Index::Fields::LAST_VIRUS_CHECK_ON)
|
94
74
|
end
|
95
75
|
|
96
|
-
### DDRevo: No longer relevant
|
97
|
-
# def datastreams
|
98
|
-
# object_profile["datastreams"]
|
99
|
-
# end
|
100
|
-
|
101
|
-
### DDRevo: No longer relevant
|
102
|
-
# def has_datastream?(dsID)
|
103
|
-
# datastreams[dsID].present?
|
104
|
-
# end
|
105
|
-
|
106
76
|
def has_admin_policy?
|
107
77
|
admin_policy_id.present?
|
108
78
|
end
|
109
79
|
|
110
80
|
def admin_policy
|
111
81
|
if has_admin_policy?
|
112
|
-
self.class.find(admin_policy_id)
|
82
|
+
self.class.find(admin_policy_id.gsub(/^id-/,''))
|
113
83
|
end
|
114
84
|
end
|
115
85
|
|
@@ -117,11 +87,6 @@ module Ddr
|
|
117
87
|
resource.children.present?
|
118
88
|
end
|
119
89
|
|
120
|
-
### DDRevo: No longer relevant
|
121
|
-
# def label
|
122
|
-
# object_profile["objLabel"]
|
123
|
-
# end
|
124
|
-
|
125
90
|
def title_display
|
126
91
|
title
|
127
92
|
end
|
@@ -151,11 +116,6 @@ module Ddr
|
|
151
116
|
resource.has_extracted_text?
|
152
117
|
end
|
153
118
|
|
154
|
-
### DDRevo: Not relevant as coded. Not sure if comparable functionality is needed
|
155
|
-
# def content_ds
|
156
|
-
# datastreams[Ddr::Datastreams::CONTENT]
|
157
|
-
# end
|
158
|
-
|
159
119
|
def content_mime_type
|
160
120
|
resource.content_type
|
161
121
|
end
|
@@ -166,11 +126,6 @@ module Ddr
|
|
166
126
|
resource.content_human_size
|
167
127
|
end
|
168
128
|
|
169
|
-
### DDRevo: Not relevant as coded. Not sure if comparable functionality is needed
|
170
|
-
# def content_checksum
|
171
|
-
# content_ds["dsChecksum"] rescue nil
|
172
|
-
# end
|
173
|
-
|
174
129
|
def targets
|
175
130
|
@targets ||= query_service.find_inverse_references_by(resource: resource, property: 'for_collection_id')
|
176
131
|
end
|
@@ -183,11 +138,6 @@ module Ddr
|
|
183
138
|
targets_count > 0
|
184
139
|
end
|
185
140
|
|
186
|
-
### DDRevo Still relevant?
|
187
|
-
# def association(name)
|
188
|
-
# get_pid(ActiveFedora::SolrService.solr_name(name, :symbol))
|
189
|
-
# end
|
190
|
-
|
191
141
|
def tableized_name
|
192
142
|
resource_model.tableize
|
193
143
|
end
|
@@ -197,7 +147,6 @@ module Ddr
|
|
197
147
|
end
|
198
148
|
|
199
149
|
def roles
|
200
|
-
# @roles ||= Ddr::Auth::Roles::Role.from_json(access_role)
|
201
150
|
@roles ||= resource.roles
|
202
151
|
end
|
203
152
|
|
@@ -246,11 +195,8 @@ module Ddr
|
|
246
195
|
end
|
247
196
|
end
|
248
197
|
|
249
|
-
# DRY HasAdminMetadata
|
250
198
|
def finding_aid
|
251
|
-
|
252
|
-
FindingAid.new(ead_id)
|
253
|
-
end
|
199
|
+
resource.finding_aid
|
254
200
|
end
|
255
201
|
|
256
202
|
def intermediate_type
|
@@ -280,14 +226,18 @@ module Ddr
|
|
280
226
|
resource.captionable?
|
281
227
|
end
|
282
228
|
|
229
|
+
def captioned?
|
230
|
+
resource.captioned?
|
231
|
+
end
|
232
|
+
|
283
233
|
def caption_type
|
284
|
-
if
|
234
|
+
if captioned?
|
285
235
|
resource.caption_type
|
286
236
|
end
|
287
237
|
end
|
288
238
|
|
289
239
|
def caption_extension
|
290
|
-
if
|
240
|
+
if captioned?
|
291
241
|
extensions = Ddr.preferred_file_extensions
|
292
242
|
if extensions.include? caption_type
|
293
243
|
extensions[caption_type]
|
@@ -298,7 +248,7 @@ module Ddr
|
|
298
248
|
end
|
299
249
|
|
300
250
|
def caption_path
|
301
|
-
if
|
251
|
+
if captioned?
|
302
252
|
resource.caption_path
|
303
253
|
end
|
304
254
|
end
|
@@ -336,9 +286,8 @@ module Ddr
|
|
336
286
|
end
|
337
287
|
end
|
338
288
|
|
339
|
-
# FIXME - Probably need a more general solution mapping object reader methods to index field names.
|
340
289
|
def rights
|
341
|
-
|
290
|
+
resource.rights
|
342
291
|
end
|
343
292
|
|
344
293
|
def children
|
@@ -351,14 +300,6 @@ module Ddr
|
|
351
300
|
@query_service ||= Valkyrie::MetadataAdapter.find(:index_solr).query_service
|
352
301
|
end
|
353
302
|
|
354
|
-
# def targets_query
|
355
|
-
# "#{Ddr::Index::Fields::IS_EXTERNAL_TARGET_FOR}:#{internal_uri_for_query}"
|
356
|
-
# end
|
357
|
-
#
|
358
|
-
# def internal_uri_for_query
|
359
|
-
# ActiveFedora::SolrService.escape_uri_for_query(internal_uri)
|
360
|
-
# end
|
361
|
-
#
|
362
303
|
def get_date(field)
|
363
304
|
parse_date(self[field])
|
364
305
|
end
|
@@ -371,10 +312,6 @@ module Ddr
|
|
371
312
|
Time.parse(date).localtime if date
|
372
313
|
end
|
373
314
|
|
374
|
-
# def get_pid(field)
|
375
|
-
# ActiveFedora::Base.pid_from_uri(self[field]) rescue nil
|
376
|
-
# end
|
377
|
-
#
|
378
315
|
def inherited_research_help_contact
|
379
316
|
if doc = admin_policy
|
380
317
|
doc.research_help_contact
|
@@ -398,32 +335,16 @@ module Ddr
|
|
398
335
|
end
|
399
336
|
|
400
337
|
def intermediate_extension_default
|
401
|
-
# datastreams[Ddr::Datastreams::INTERMEDIATE_FILE].default_file_extension
|
402
338
|
resource.intermediate_file.default_file_extension
|
403
339
|
end
|
404
340
|
|
405
341
|
def caption_extension_default
|
406
|
-
# datastreams[Ddr::Datastreams::CAPTION].default_file_extension
|
407
342
|
resource.caption.default_file_extension
|
408
343
|
end
|
409
344
|
|
410
345
|
def streamable_media_extension_default
|
411
|
-
# datastreams[Ddr::Datastreams::STREAMABLE_MEDIA].default_file_extension
|
412
346
|
resource.streamable_media.default_file_extension
|
413
347
|
end
|
414
348
|
|
415
|
-
### DDRevo: Using resource.children rather than this query
|
416
|
-
# def children_query
|
417
|
-
# case self[Ddr::Index::Fields::RESOURCE_MODEL]
|
418
|
-
# when 'Ddr::Collection'
|
419
|
-
# Ddr::Index::Query.build(self) do |parent|
|
420
|
-
# is_member_of_collection parent.id
|
421
|
-
# end
|
422
|
-
# when 'Ddr::Item'
|
423
|
-
# Ddr::Index::Query.build(self) do |parent|
|
424
|
-
# is_part_of parent.id
|
425
|
-
# end
|
426
|
-
# end
|
427
|
-
# end
|
428
349
|
end
|
429
350
|
end
|