ddr-core 0.3.0 → 1.2.0.rc1
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 +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
|