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
data/lib/ddr/index.rb
CHANGED
@@ -6,8 +6,35 @@ module Ddr::Index
|
|
6
6
|
MAX_ROWS = 10**8 # Just set to a really high number :)
|
7
7
|
CSV_MV_SEPARATOR = ";"
|
8
8
|
|
9
|
+
DEFAULT_CSV_OPTIONS = {
|
10
|
+
headers: :first_row,
|
11
|
+
return_headers: false,
|
12
|
+
write_headers: true,
|
13
|
+
converters: [
|
14
|
+
# convert semicolons
|
15
|
+
lambda { |f| f.gsub(/\\#{CSV_MV_SEPARATOR}/, CSV_MV_SEPARATOR) rescue f },
|
16
|
+
# convert escaped newlines
|
17
|
+
lambda { |f| f.gsub(/\\r/, "\r").gsub(/\\n/, "\n") rescue f }
|
18
|
+
],
|
19
|
+
}.freeze
|
20
|
+
|
9
21
|
delegate :headers, :to_s, :to_csv, to: :table
|
10
22
|
|
23
|
+
attr_reader :csv_opts
|
24
|
+
|
25
|
+
#
|
26
|
+
# See Ruby docs on CSV::new for details on available keys
|
27
|
+
# and values for the optional `csv_options' Hash parameter.
|
28
|
+
#
|
29
|
+
# N.B. If you want to *add* a converter and retain the
|
30
|
+
# default converters, append DEFAULT_CSV_OPTIONS[:converters]
|
31
|
+
# to your Array of converters.
|
32
|
+
#
|
33
|
+
def initialize(query, csv_opts: {})
|
34
|
+
super(query)
|
35
|
+
@csv_opts = DEFAULT_CSV_OPTIONS.merge(csv_opts)
|
36
|
+
end
|
37
|
+
|
11
38
|
def delete_empty_columns!
|
12
39
|
table.by_col!.delete_if { |c, vals| vals.all?(&:nil?) }
|
13
40
|
end
|
@@ -24,14 +51,6 @@ module Ddr::Index
|
|
24
51
|
@table ||= CSV.parse(data, csv_opts)
|
25
52
|
end
|
26
53
|
|
27
|
-
def csv_opts
|
28
|
-
{ headers: csv_headers,
|
29
|
-
converters: [convert_semicolons, convert_escaped_newlines],
|
30
|
-
return_headers: false,
|
31
|
-
write_headers: true,
|
32
|
-
}
|
33
|
-
end
|
34
|
-
|
35
54
|
def solr_csv_opts
|
36
55
|
{ "csv.mv.separator" => CSV_MV_SEPARATOR,
|
37
56
|
"csv.header" => solr_csv_header?,
|
@@ -44,10 +63,6 @@ module Ddr::Index
|
|
44
63
|
query.fields.map { |f| f.respond_to?(:heading) ? f.heading : f.to_s }
|
45
64
|
end
|
46
65
|
|
47
|
-
def csv_headers
|
48
|
-
:first_row
|
49
|
-
end
|
50
|
-
|
51
66
|
def solr_csv_header?
|
52
67
|
query.fields.empty?
|
53
68
|
end
|
@@ -72,13 +87,5 @@ module Ddr::Index
|
|
72
87
|
Connection.get("select", params: solr_csv_params)
|
73
88
|
end
|
74
89
|
|
75
|
-
def convert_semicolons
|
76
|
-
lambda { |f| f.gsub(/\\#{CSV_MV_SEPARATOR}/, CSV_MV_SEPARATOR) rescue f }
|
77
|
-
end
|
78
|
-
|
79
|
-
def convert_escaped_newlines
|
80
|
-
lambda { |f| f.gsub(/\\r/, "\r").gsub(/\\n/, "\n") rescue f }
|
81
|
-
end
|
82
|
-
|
83
90
|
end
|
84
91
|
end
|
data/lib/ddr/index/fields.rb
CHANGED
@@ -29,15 +29,20 @@ module Ddr::Index
|
|
29
29
|
CONTENT_CREATE_DATE = Field.new :content_create_date, :stored_sortable, type: :date
|
30
30
|
CONTENT_SIZE = Field.new :content_size, solr_name: "content_size_lsi"
|
31
31
|
CONTENT_SIZE_HUMAN = Field.new :content_size_human, :symbol
|
32
|
+
CONTENTDM_ID = Field.new :contentdm_id, :stored_sortable
|
32
33
|
CONTRIBUTOR_FACET = Field.new :contributor_facet, :facetable
|
33
34
|
CREATOR_FACET = Field.new :creator_facet, :facetable
|
34
35
|
DATE_FACET = Field.new :date_facet, :facetable
|
35
36
|
DATE_SORT = Field.new :date_sort, :sortable
|
36
37
|
DC_IS_PART_OF = Field.new :isPartOf, :symbol
|
37
38
|
DEPOSITOR = Field.new :depositor, :stored_sortable
|
39
|
+
# DDR-1997 - description should always be indexed as _tesim regardless of length - Valkyrie indexes fields > 1000
|
40
|
+
# characters in length as _tsim only
|
41
|
+
DESCRIPTION = Field.new :description, :stored_searchable # stored_searchable produces _tesim
|
38
42
|
DISPLAY_FORMAT = Field.new :display_format, :stored_sortable
|
39
43
|
DOI = Field.new :doi, :symbol
|
40
44
|
EAD_ID = Field.new :ead_id, :stored_sortable
|
45
|
+
EFFECTIVE_ROLE = Field.new :effective_role, :symbol
|
41
46
|
ENGRAVER_FACET = Field.new :engraver_facet, :facetable
|
42
47
|
EXTRACTED_TEXT = Field.new :extracted_text, solr_name: "extracted_text_tsm"
|
43
48
|
FCREPO3_PID = Field.new :fcrepo3_pid, :stored_sortable
|
@@ -2,7 +2,9 @@ module Ddr
|
|
2
2
|
module Managers
|
3
3
|
class TechnicalMetadataManager < Manager
|
4
4
|
|
5
|
-
|
5
|
+
FITS_141_TIMESTAMP_FORMAT = "%D %l:%M %p" # Ex. 7/3/15 8:29 PM
|
6
|
+
FITS_150_TIMESTAMP_FORMAT = "%D, %l:%M %p" # Ex. 7/3/15, 8:29 PM
|
7
|
+
FITS_TIMESTAMP_FORMATS = [ FITS_141_TIMESTAMP_FORMAT, FITS_150_TIMESTAMP_FORMAT ]
|
6
8
|
|
7
9
|
delegate :content, to: :object
|
8
10
|
|
@@ -43,9 +45,12 @@ module Ddr
|
|
43
45
|
|
44
46
|
def fits_datetime
|
45
47
|
if fits_timestamp = fits.timestamp.first
|
46
|
-
|
47
|
-
|
48
|
-
|
48
|
+
parsed = nil
|
49
|
+
FITS_TIMESTAMP_FORMATS.each do |format|
|
50
|
+
parsed = Time.zone.strptime(fits_timestamp, format) rescue nil
|
51
|
+
break if parsed
|
52
|
+
end
|
53
|
+
parsed
|
49
54
|
end
|
50
55
|
end
|
51
56
|
|
data/lib/ddr/structure.rb
CHANGED
@@ -82,6 +82,7 @@ module Ddr
|
|
82
82
|
|
83
83
|
def add_filesec(id:nil)
|
84
84
|
filesec = Ddr::Structures::FileSec.build(id: id, document: as_xml_document)
|
85
|
+
|
85
86
|
root.add_child(filesec)
|
86
87
|
filesec
|
87
88
|
end
|
@@ -92,7 +93,7 @@ module Ddr
|
|
92
93
|
filegrp
|
93
94
|
end
|
94
95
|
|
95
|
-
def add_file(parent:, id:SecureRandom.uuid, use:nil)
|
96
|
+
def add_file(parent:, id: "id_" + SecureRandom.uuid, use:nil)
|
96
97
|
file = Ddr::Structures::File.build(id: id, use: use, document: as_xml_document)
|
97
98
|
parent.add_child(file)
|
98
99
|
file
|
data/lib/ddr/vocab/asset.rb
CHANGED
@@ -47,5 +47,9 @@ module Ddr::Vocab
|
|
47
47
|
label: "Nested Path",
|
48
48
|
comment: "The nested/tree path to the object to be reflected in structural metadata."
|
49
49
|
|
50
|
+
property "contentdmId",
|
51
|
+
label: "CONTENTdm ID"
|
52
|
+
comment: "The CONTENTdm reference corresponding to the object."
|
53
|
+
|
50
54
|
end
|
51
55
|
end
|
data/lib/ddr/workflow.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ddr-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.2.0.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jim Coble
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2020-06-10 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: activeresource
|
@@ -89,14 +89,14 @@ dependencies:
|
|
89
89
|
requirements:
|
90
90
|
- - "~>"
|
91
91
|
- !ruby/object:Gem::Version
|
92
|
-
version: 2.
|
92
|
+
version: 2.1.0
|
93
93
|
type: :runtime
|
94
94
|
prerelease: false
|
95
95
|
version_requirements: !ruby/object:Gem::Requirement
|
96
96
|
requirements:
|
97
97
|
- - "~>"
|
98
98
|
- !ruby/object:Gem::Version
|
99
|
-
version: 2.
|
99
|
+
version: 2.1.0
|
100
100
|
- !ruby/object:Gem::Dependency
|
101
101
|
name: grouper-rest-client
|
102
102
|
requirement: !ruby/object:Gem::Requirement
|
@@ -209,6 +209,20 @@ dependencies:
|
|
209
209
|
- - ">="
|
210
210
|
- !ruby/object:Gem::Version
|
211
211
|
version: '0'
|
212
|
+
- !ruby/object:Gem::Dependency
|
213
|
+
name: equivalent-xml
|
214
|
+
requirement: !ruby/object:Gem::Requirement
|
215
|
+
requirements:
|
216
|
+
- - ">="
|
217
|
+
- !ruby/object:Gem::Version
|
218
|
+
version: '0'
|
219
|
+
type: :development
|
220
|
+
prerelease: false
|
221
|
+
version_requirements: !ruby/object:Gem::Requirement
|
222
|
+
requirements:
|
223
|
+
- - ">="
|
224
|
+
- !ruby/object:Gem::Version
|
225
|
+
version: '0'
|
212
226
|
- !ruby/object:Gem::Dependency
|
213
227
|
name: factory_bot_rails
|
214
228
|
requirement: !ruby/object:Gem::Requirement
|
@@ -292,6 +306,7 @@ files:
|
|
292
306
|
- app/assets/config/ddr_core_manifest.js
|
293
307
|
- app/controllers/users/omniauth_callbacks_controller.rb
|
294
308
|
- app/controllers/users/sessions_controller.rb
|
309
|
+
- app/models/concerns/ddr/#search_builder_behavior.rb#
|
295
310
|
- app/models/concerns/ddr/captionable.rb
|
296
311
|
- app/models/concerns/ddr/describable.rb
|
297
312
|
- app/models/concerns/ddr/governable.rb
|
@@ -305,15 +320,23 @@ files:
|
|
305
320
|
- app/models/concerns/ddr/has_parent.rb
|
306
321
|
- app/models/concerns/ddr/has_struct_metadata.rb
|
307
322
|
- app/models/concerns/ddr/has_thumbnail.rb
|
323
|
+
- app/models/concerns/ddr/search_builder_behavior.rb~
|
308
324
|
- app/models/concerns/ddr/solr_document_behavior.rb
|
309
325
|
- app/models/concerns/ddr/streamable.rb
|
326
|
+
- app/models/ddr/#admin_set.rb#
|
327
|
+
- app/models/ddr/#auxiliary_resource_cache.rb#
|
310
328
|
- app/models/ddr/admin_set.rb
|
329
|
+
- app/models/ddr/alert.rb
|
311
330
|
- app/models/ddr/attachment.rb
|
331
|
+
- app/models/ddr/auxiliary_resource.rb
|
332
|
+
- app/models/ddr/auxiliary_resource.rb~
|
333
|
+
- app/models/ddr/cacheable_auxiliary_resource.rb~
|
312
334
|
- app/models/ddr/collection.rb
|
313
335
|
- app/models/ddr/component.rb
|
314
336
|
- app/models/ddr/contact.rb
|
315
337
|
- app/models/ddr/digest.rb
|
316
338
|
- app/models/ddr/file.rb
|
339
|
+
- app/models/ddr/finding_aid.rb
|
317
340
|
- app/models/ddr/item.rb
|
318
341
|
- app/models/ddr/language.rb
|
319
342
|
- app/models/ddr/media_type.rb
|
@@ -325,8 +348,10 @@ files:
|
|
325
348
|
- config/routes.rb
|
326
349
|
- db/migrate/20141104181418_create_users.rb
|
327
350
|
- db/migrate/20141107124012_add_columns_to_user.rb
|
351
|
+
- db/migrate/20200207194453_add_default_to_lock_version.rb
|
328
352
|
- lib/ddr-core.rb
|
329
353
|
- lib/ddr/auth.rb
|
354
|
+
- lib/ddr/auth/#duke_person.rb#
|
330
355
|
- lib/ddr/auth/ability.rb
|
331
356
|
- lib/ddr/auth/ability_definitions.rb
|
332
357
|
- lib/ddr/auth/ability_definitions/admin_set_ability_definitions.rb
|
@@ -347,6 +372,7 @@ files:
|
|
347
372
|
- lib/ddr/auth/auth_context.rb
|
348
373
|
- lib/ddr/auth/auth_context_factory.rb
|
349
374
|
- lib/ddr/auth/detached_auth_context.rb
|
375
|
+
- lib/ddr/auth/duke_directory.rb~
|
350
376
|
- lib/ddr/auth/dynamic_groups.rb
|
351
377
|
- lib/ddr/auth/effective_permissions.rb
|
352
378
|
- lib/ddr/auth/effective_roles.rb
|
@@ -419,7 +445,8 @@ files:
|
|
419
445
|
homepage: https://gitlab.oit.duke.edu/ddr/ddr-core
|
420
446
|
licenses:
|
421
447
|
- BSD-3-Clause
|
422
|
-
metadata:
|
448
|
+
metadata:
|
449
|
+
allowed_push_host: https://rubygems.org
|
423
450
|
post_install_message:
|
424
451
|
rdoc_options: []
|
425
452
|
require_paths:
|
@@ -431,12 +458,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
431
458
|
version: '0'
|
432
459
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
433
460
|
requirements:
|
434
|
-
- - "
|
461
|
+
- - ">"
|
435
462
|
- !ruby/object:Gem::Version
|
436
|
-
version:
|
463
|
+
version: 1.3.1
|
437
464
|
requirements: []
|
438
|
-
|
439
|
-
rubygems_version: 2.7.9
|
465
|
+
rubygems_version: 3.0.8
|
440
466
|
signing_key:
|
441
467
|
specification_version: 4
|
442
468
|
summary: Models used in the Duke Digital Repository
|