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
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
|