ddr-models 2.6.2 → 2.7.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/.travis.yml +1 -1
- data/Gemfile +2 -3
- data/app/models/collection.rb +11 -3
- data/app/models/component.rb +54 -4
- data/app/models/item.rb +1 -2
- data/config/initializers/active_fedora_base.rb +8 -5
- data/config/initializers/rubydora_monkey_patch.rb +11 -0
- data/config/initializers/subscriptions.rb +16 -9
- data/config/locales/ddr-models.en.yml +3 -0
- data/ddr-models.gemspec +3 -2
- data/lib/ddr/actions/virus_check.rb +10 -16
- data/lib/ddr/auth.rb +0 -8
- data/lib/ddr/datastreams.rb +13 -2
- data/lib/ddr/datastreams/administrative_metadata_datastream.rb +9 -0
- data/lib/ddr/datastreams/content_datastream.rb +5 -0
- data/lib/ddr/datastreams/datastream_behavior.rb +60 -15
- data/lib/ddr/datastreams/delete_external_files.rb +29 -0
- data/lib/ddr/datastreams/descriptive_metadata_datastream.rb +33 -33
- data/lib/ddr/datastreams/external_file_datastream.rb +69 -0
- data/lib/ddr/datastreams/fits_datastream.rb +15 -5
- data/lib/ddr/datastreams/intermediate_file_datastream.rb +5 -0
- data/lib/ddr/datastreams/metadata_datastream.rb +15 -17
- data/lib/ddr/datastreams/multires_image_datastream.rb +5 -0
- data/lib/ddr/derivatives.rb +1 -0
- data/lib/ddr/derivatives/ptif_generator.rb +5 -1
- data/lib/ddr/derivatives/update_derivatives.rb +23 -0
- data/lib/ddr/events/deletion_event.rb +5 -9
- data/lib/ddr/events/event.rb +7 -9
- data/lib/ddr/events/ingestion_event.rb +5 -9
- data/lib/ddr/events/update_event.rb +12 -5
- data/lib/ddr/index.rb +0 -1
- data/lib/ddr/index/csv_query_result.rb +10 -2
- data/lib/ddr/index/fields.rb +10 -9
- data/lib/ddr/index/filter.rb +1 -0
- data/lib/ddr/managers/derivatives_manager.rb +84 -98
- data/lib/ddr/managers/technical_metadata_manager.rb +20 -5
- data/lib/ddr/models.rb +24 -24
- data/lib/ddr/models/base.rb +98 -74
- data/lib/ddr/models/cache.rb +20 -0
- data/lib/ddr/models/engine.rb +4 -6
- data/lib/ddr/models/file_management.rb +57 -152
- data/lib/ddr/models/fixity_checkable.rb +0 -5
- data/lib/ddr/models/has_admin_metadata.rb +4 -2
- data/lib/ddr/models/has_children.rb +35 -1
- data/lib/ddr/models/has_content.rb +3 -33
- data/lib/ddr/models/has_intermediate_file.rb +18 -0
- data/lib/ddr/models/has_multires_image.rb +12 -15
- data/lib/ddr/models/has_struct_metadata.rb +2 -38
- data/lib/ddr/models/indexing.rb +160 -163
- data/lib/ddr/models/permanent_id.rb +26 -49
- data/lib/ddr/models/solr_document.rb +21 -19
- data/lib/ddr/models/structure.rb +168 -41
- data/lib/ddr/models/structures/agent.rb +49 -0
- data/lib/ddr/models/structures/div.rb +64 -0
- data/lib/ddr/models/structures/f_locat.rb +54 -0
- data/lib/ddr/models/structures/file.rb +52 -0
- data/lib/ddr/models/structures/file_grp.rb +35 -0
- data/lib/ddr/models/structures/file_sec.rb +22 -0
- data/lib/ddr/models/structures/fptr.rb +31 -0
- data/lib/ddr/models/structures/mets_hdr.rb +37 -0
- data/lib/ddr/models/structures/mptr.rb +49 -0
- data/lib/ddr/models/structures/struct_map.rb +40 -0
- data/lib/ddr/models/version.rb +1 -1
- data/lib/ddr/notifications.rb +10 -12
- data/lib/ddr/utils.rb +29 -16
- data/lib/ddr/vocab.rb +15 -17
- data/lib/ddr/vocab/asset.rb +29 -19
- data/lib/ddr/vocab/contact.rb +5 -7
- data/lib/ddr/vocab/display.rb +6 -8
- data/lib/ddr/vocab/duke_terms.rb +8 -10
- data/lib/ddr/vocab/rdf_vocabulary_parser.rb +37 -39
- data/lib/ddr/vocab/roles.rb +17 -19
- data/lib/ddr/vocab/vocabulary.rb +26 -26
- data/spec/datastreams/external_file_datastream_spec.rb +37 -0
- data/spec/derivatives/png_generator_spec.rb +21 -25
- data/spec/derivatives/ptif_generator_spec.rb +22 -26
- data/spec/dummy/config/environments/test.rb +1 -1
- data/spec/dummy/db/schema.rb +23 -23
- data/spec/factories/structure_factories.rb +8 -2
- data/spec/fixtures/imageA.jpg +0 -0
- data/spec/fixtures/imageB.jpg +0 -0
- data/spec/index/csv_query_result_spec.rb +3 -3
- data/spec/index/fields_spec.rb +7 -6
- data/spec/managers/derivatives_manager_spec.rb +105 -112
- data/spec/managers/technical_metadata_manager_spec.rb +22 -18
- data/spec/models/active_fedora_base_spec.rb +0 -106
- data/spec/models/active_fedora_datastream_spec.rb +33 -2
- data/spec/models/attachment_spec.rb +0 -2
- data/spec/models/cache_spec.rb +32 -0
- data/spec/models/collection_spec.rb +43 -19
- data/spec/models/component_spec.rb +41 -51
- data/spec/models/descriptive_metadata_datastream_spec.rb +99 -87
- data/spec/models/events_spec.rb +50 -69
- data/spec/models/file_management_spec.rb +79 -187
- data/spec/models/has_children_spec.rb +54 -3
- data/spec/models/has_struct_metadata_spec.rb +32 -38
- data/spec/models/indexing_spec.rb +11 -6
- data/spec/models/item_spec.rb +21 -7
- data/spec/models/permanent_id_spec.rb +1 -5
- data/spec/models/solr_document_spec.rb +13 -41
- data/spec/models/structure_spec.rb +85 -16
- data/spec/models/structures/agent_spec.rb +30 -0
- data/spec/models/structures/div_spec.rb +26 -0
- data/spec/models/structures/f_locat_spec.rb +78 -0
- data/spec/models/structures/file_grp_spec.rb +23 -0
- data/spec/models/structures/file_sec_spec.rb +22 -0
- data/spec/models/structures/file_spec.rb +60 -0
- data/spec/models/structures/fptr_spec.rb +23 -0
- data/spec/models/structures/mets_hdr_spec.rb +26 -0
- data/spec/models/structures/mptr_spec.rb +25 -0
- data/spec/models/structures/struct_map_spec.rb +24 -0
- data/spec/models/target_spec.rb +0 -2
- data/spec/spec_helper.rb +4 -9
- data/spec/support/shared_examples_for_ddr_models.rb +96 -156
- data/spec/support/shared_examples_for_has_content.rb +56 -30
- data/spec/support/shared_examples_for_has_intermediate_spec.rb +28 -0
- data/spec/support/shared_examples_for_non_collection_models.rb +5 -0
- data/spec/support/structural_metadata_helper.rb +230 -59
- data/spec/utils_spec.rb +0 -2
- metadata +86 -44
- data/app/helpers/models_helper.rb +0 -10
- data/lib/ddr/auth/legacy/abstract_legacy_permissions.rb +0 -17
- data/lib/ddr/auth/legacy/legacy_authorization.rb +0 -44
- data/lib/ddr/auth/legacy/legacy_default_permissions.rb +0 -33
- data/lib/ddr/auth/legacy/legacy_permissions.rb +0 -33
- data/lib/ddr/auth/legacy/legacy_roles.rb +0 -25
- data/lib/ddr/index/legacy_license_fields.rb +0 -12
- data/lib/ddr/jobs.rb +0 -12
- data/lib/ddr/jobs/fits_file_characterization.rb +0 -13
- data/lib/ddr/jobs/fixity_check.rb +0 -13
- data/lib/ddr/jobs/job.rb +0 -36
- data/lib/ddr/jobs/queue.rb +0 -27
- data/lib/ddr/jobs/update_index.rb +0 -13
- data/lib/ddr/models/access_controllable.rb +0 -24
- data/lib/ddr/models/struct_div.rb +0 -63
- data/spec/auth/legacy_default_permissions_spec.rb +0 -37
- data/spec/auth/legacy_permissions_spec.rb +0 -37
- data/spec/helpers/models_helper_spec.rb +0 -11
- data/spec/jobs/fits_file_characterization_spec.rb +0 -16
- data/spec/jobs/fixity_check_spec.rb +0 -22
- data/spec/jobs/job_spec.rb +0 -40
- data/spec/jobs/update_index_spec.rb +0 -22
- data/spec/models/struct_div_spec.rb +0 -70
- data/spec/support/shared_examples_for_access_controllables.rb +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6bcaaa83b0e74afeba6108c87f4d93f7a6055140
|
4
|
+
data.tar.gz: 274113e1be0b560d0a71bc6f991cb5bae6020161
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e17be5ca7d910555abeb9946f55776a3b84e8d9fe6c46f34c1498719887d725eefd65fb97014792fdb34fe48cedf45fcd6618a67691edd784747add6d3906921
|
7
|
+
data.tar.gz: 12ad20c8c046d291cea2d022672f5bffcb8bf599c2c31898ee7417fdcc50e622627c945f6478d0b51496768136d409d0e3f4b3907cf7f241b2823931261271b6
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.1
|
1
|
+
2.3.1
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/app/models/collection.rb
CHANGED
@@ -3,10 +3,9 @@
|
|
3
3
|
#
|
4
4
|
class Collection < Ddr::Models::Base
|
5
5
|
|
6
|
-
include Hydra::AdminPolicyBehavior
|
7
|
-
|
8
6
|
include Ddr::Models::HasChildren
|
9
7
|
include Ddr::Models::HasAttachments
|
8
|
+
include Ddr::Models::HasStructMetadata
|
10
9
|
|
11
10
|
has_many :children, property: :is_member_of_collection, class_name: 'Item'
|
12
11
|
has_many :targets, property: :is_external_target_for, class_name: 'Target'
|
@@ -45,7 +44,6 @@ class Collection < Ddr::Models::Base
|
|
45
44
|
end
|
46
45
|
|
47
46
|
def grant_roles_to_creator(creator)
|
48
|
-
roles.grant type: Ddr::Auth::Roles::CURATOR, agent: creator.agent, scope: Ddr::Auth::Roles::RESOURCE_SCOPE
|
49
47
|
roles.grant type: Ddr::Auth::Roles::CURATOR, agent: creator.agent, scope: Ddr::Auth::Roles::POLICY_SCOPE
|
50
48
|
end
|
51
49
|
|
@@ -55,6 +53,16 @@ class Collection < Ddr::Models::Base
|
|
55
53
|
|
56
54
|
private
|
57
55
|
|
56
|
+
def default_roles
|
57
|
+
super.tap do |roles|
|
58
|
+
if Ddr::Auth.metadata_managers_group
|
59
|
+
roles << { type: Ddr::Auth::Roles::METADATA_EDITOR,
|
60
|
+
agent: Ddr::Auth.metadata_managers_group,
|
61
|
+
scope: Ddr::Auth::Roles::POLICY_SCOPE }
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
58
66
|
def set_admin_policy
|
59
67
|
reload
|
60
68
|
self.admin_policy = self
|
data/app/models/component.rb
CHANGED
@@ -6,14 +6,13 @@
|
|
6
6
|
class Component < Ddr::Models::Base
|
7
7
|
|
8
8
|
include Ddr::Models::HasContent
|
9
|
+
include Ddr::Models::HasIntermediateFile
|
9
10
|
include Ddr::Models::HasMultiresImage
|
10
11
|
include Ddr::Models::HasStructMetadata
|
11
12
|
|
12
13
|
belongs_to :parent, :property => :is_part_of, :class_name => 'Item'
|
13
14
|
belongs_to :target, :property => :has_external_target, :class_name => 'Target'
|
14
15
|
|
15
|
-
after_save :index_parent, if: :has_extracted_text?, unless: "parent.nil?"
|
16
|
-
|
17
16
|
alias_method :item, :parent
|
18
17
|
alias_method :item=, :parent=
|
19
18
|
|
@@ -29,8 +28,59 @@ class Component < Ddr::Models::Base
|
|
29
28
|
parent.present? && parent.published?
|
30
29
|
end
|
31
30
|
|
32
|
-
def
|
33
|
-
|
31
|
+
def default_structure
|
32
|
+
build_default_structure if has_content?
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def build_default_structure
|
38
|
+
document = Ddr::Models::Structure.xml_template
|
39
|
+
structure = Ddr::Models::Structure.new(document)
|
40
|
+
metshdr = structure.add_metshdr
|
41
|
+
structure.add_agent(parent: metshdr, role: Ddr::Models::Structures::Agent::ROLE_CREATOR,
|
42
|
+
name: Ddr::Models::Structures::Agent::NAME_REPOSITORY_DEFAULT)
|
43
|
+
filesec = structure.add_filesec
|
44
|
+
structmap = structure.add_structmap(type: Ddr::Models::Structure::TYPE_DEFAULT)
|
45
|
+
div = structure.add_div(parent: structmap)
|
46
|
+
filegrp = structure.add_filegrp(parent: filesec)
|
47
|
+
add_original_file(structure, filegrp, div)
|
48
|
+
add_preservation_master_file(structure, filegrp, div)
|
49
|
+
add_intermediate_file(structure, filegrp, div) if has_intermediate_file?
|
50
|
+
add_service_file(structure, filegrp, div)
|
51
|
+
add_thumbnail_image(structure, filegrp, div) if has_thumbnail?
|
52
|
+
structure
|
53
|
+
end
|
54
|
+
|
55
|
+
def add_original_file(structure, filegrp, div)
|
56
|
+
file = structure.add_file(parent: filegrp, use: Ddr::Models::Structure::USE_ORIGINAL_FILE)
|
57
|
+
structure.add_flocat(parent: file, loctype: 'OTHER', otherloctype: 'AttachedFile', href: Ddr::Datastreams::CONTENT)
|
58
|
+
structure.add_fptr(parent: div, fileid: file['ID'])
|
59
|
+
end
|
60
|
+
|
61
|
+
def add_preservation_master_file(structure, filegrp, div)
|
62
|
+
file = structure.add_file(parent: filegrp, use: Ddr::Models::Structure::USE_PRESERVATION_MASTER_FILE)
|
63
|
+
structure.add_flocat(parent: file, loctype: 'OTHER', otherloctype: 'AttachedFile', href: Ddr::Datastreams::CONTENT)
|
64
|
+
structure.add_fptr(parent: div, fileid: file['ID'])
|
65
|
+
end
|
66
|
+
|
67
|
+
def add_intermediate_file(structure, filegrp, div)
|
68
|
+
file = structure.add_file(parent: filegrp, use: Ddr::Models::Structure::USE_INTERMEDIATE_FILE)
|
69
|
+
structure.add_flocat(parent: file, loctype: 'OTHER', otherloctype: 'AttachedFile', href: Ddr::Datastreams::INTERMEDIATE_FILE)
|
70
|
+
structure.add_fptr(parent: div, fileid: file['ID'])
|
71
|
+
end
|
72
|
+
|
73
|
+
def add_service_file(structure, filegrp, div)
|
74
|
+
file = structure.add_file(parent: filegrp, use: Ddr::Models::Structure::USE_SERVICE_FILE)
|
75
|
+
service_file = has_multires_image? ? Ddr::Datastreams::MULTIRES_IMAGE : Ddr::Datastreams::CONTENT
|
76
|
+
structure.add_flocat(parent: file, loctype: 'OTHER', otherloctype: 'AttachedFile', href: service_file)
|
77
|
+
structure.add_fptr(parent: div, fileid: file['ID'])
|
78
|
+
end
|
79
|
+
|
80
|
+
def add_thumbnail_image(structure, filegrp, div)
|
81
|
+
file = structure.add_file(parent: filegrp, use: Ddr::Models::Structure::USE_THUMBNAIL_IMAGE)
|
82
|
+
structure.add_flocat(parent: file, loctype: 'OTHER', otherloctype: 'AttachedFile', href: Ddr::Datastreams::THUMBNAIL)
|
83
|
+
structure.add_fptr(parent: div, fileid: file['ID'])
|
34
84
|
end
|
35
85
|
|
36
86
|
end
|
data/app/models/item.rb
CHANGED
@@ -26,8 +26,7 @@ class Item < Ddr::Models::Base
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def children_having_extracted_text
|
29
|
-
|
30
|
-
Ddr::Index::Query.new do
|
29
|
+
Ddr::Index::Query.build(self) do |item|
|
31
30
|
is_part_of item
|
32
31
|
where attached_files_having_content: "extractedText"
|
33
32
|
fields :id, :extracted_text
|
@@ -37,11 +37,6 @@ module ActiveFedora
|
|
37
37
|
governable? && admin_policy.present?
|
38
38
|
end
|
39
39
|
|
40
|
-
def has_rights_metadata?
|
41
|
-
ds = self.datastreams[Ddr::Datastreams::RIGHTS_METADATA]
|
42
|
-
ds && ds.size && ds.size > 0
|
43
|
-
end
|
44
|
-
|
45
40
|
def can_have_struct_metadata?
|
46
41
|
datastreams.include? Ddr::Datastreams::STRUCT_METADATA
|
47
42
|
end
|
@@ -50,6 +45,14 @@ module ActiveFedora
|
|
50
45
|
can_have_struct_metadata? && structMetadata.has_content?
|
51
46
|
end
|
52
47
|
|
48
|
+
def can_have_intermediate_file?
|
49
|
+
datastreams.include? Ddr::Datastreams::INTERMEDIATE_FILE
|
50
|
+
end
|
51
|
+
|
52
|
+
def has_intermediate_file?
|
53
|
+
can_have_intermediate_file? && datastreams[Ddr::Datastreams::INTERMEDIATE_FILE].has_content?
|
54
|
+
end
|
55
|
+
|
53
56
|
def can_have_multires_image?
|
54
57
|
datastreams.include? Ddr::Datastreams::MULTIRES_IMAGE
|
55
58
|
end
|
@@ -8,21 +8,28 @@ ActiveSupport::Notifications.subscribe(Ddr::Notifications::FIXITY_CHECK, Ddr::Ev
|
|
8
8
|
# Virus Checks
|
9
9
|
ActiveSupport::Notifications.subscribe(Ddr::Notifications::VIRUS_CHECK, Ddr::Events::VirusCheckEvent)
|
10
10
|
|
11
|
-
# Creation
|
11
|
+
# Ingestion/Creation
|
12
12
|
ActiveSupport::Notifications.subscribe(Ddr::Notifications::CREATION, Ddr::Events::CreationEvent)
|
13
|
+
ActiveSupport::Notifications.subscribe(Ddr::Models::Base::INGEST, Ddr::Events::IngestionEvent)
|
14
|
+
ActiveSupport::Notifications.subscribe(Ddr::Models::Base::INGEST, Ddr::Derivatives::UpdateDerivatives)
|
13
15
|
|
14
16
|
# Update
|
15
17
|
ActiveSupport::Notifications.subscribe(Ddr::Notifications::UPDATE, Ddr::Events::UpdateEvent)
|
16
|
-
ActiveSupport::Notifications.subscribe(
|
18
|
+
ActiveSupport::Notifications.subscribe(Ddr::Models::Base::UPDATE, Ddr::Events::UpdateEvent)
|
19
|
+
ActiveSupport::Notifications.subscribe(Ddr::Models::Base::UPDATE, Ddr::Models::PermanentId)
|
20
|
+
ActiveSupport::Notifications.subscribe(Ddr::Models::Base::UPDATE, Ddr::Derivatives::UpdateDerivatives)
|
17
21
|
|
18
|
-
#
|
22
|
+
# Delete
|
19
23
|
ActiveSupport::Notifications.subscribe(Ddr::Notifications::DELETION, Ddr::Events::DeletionEvent)
|
20
|
-
ActiveSupport::Notifications.subscribe(
|
21
|
-
ActiveSupport::Notifications.subscribe(
|
24
|
+
ActiveSupport::Notifications.subscribe(Ddr::Models::Base::DELETE, Ddr::Models::PermanentId)
|
25
|
+
ActiveSupport::Notifications.subscribe(Ddr::Models::Base::DELETE, Ddr::Events::DeletionEvent)
|
26
|
+
ActiveSupport::Notifications.subscribe(Ddr::Models::Base::DELETE, Ddr::Datastreams::DeleteExternalFiles)
|
22
27
|
|
23
28
|
# Deaccession
|
24
|
-
ActiveSupport::Notifications.subscribe(
|
25
|
-
ActiveSupport::Notifications.subscribe(
|
29
|
+
ActiveSupport::Notifications.subscribe(Ddr::Models::Base::DEACCESSION, Ddr::Models::PermanentId)
|
30
|
+
ActiveSupport::Notifications.subscribe(Ddr::Models::Base::DEACCESSION, Ddr::Events::DeaccessionEvent)
|
31
|
+
ActiveSupport::Notifications.subscribe(Ddr::Models::Base::DEACCESSION, Ddr::Datastreams::DeleteExternalFiles)
|
26
32
|
|
27
|
-
#
|
28
|
-
ActiveSupport::Notifications.subscribe(
|
33
|
+
# Files
|
34
|
+
ActiveSupport::Notifications.subscribe(Ddr::Datastreams::DELETE, Ddr::Derivatives::UpdateDerivatives)
|
35
|
+
ActiveSupport::Notifications.subscribe(Ddr::Datastreams::DELETE, Ddr::Datastreams::DeleteExternalFiles)
|
data/ddr-models.gemspec
CHANGED
@@ -18,9 +18,10 @@ Gem::Specification.new do |s|
|
|
18
18
|
|
19
19
|
s.require_paths = ["lib", "app/models"]
|
20
20
|
|
21
|
-
s.add_dependency "rails", "
|
21
|
+
s.add_dependency "rails", ">= 4.2.7", "< 5" # Hydra 7.x not compatible/tested with Rails 5
|
22
22
|
s.add_dependency "activeresource"
|
23
|
-
s.add_dependency "active-fedora", "
|
23
|
+
s.add_dependency "active-fedora", ">= 7.3.1", "< 8"
|
24
|
+
s.add_dependency "rubydora", "~> 2.0"
|
24
25
|
s.add_dependency "hydra-core", "~> 7.2"
|
25
26
|
s.add_dependency "hydra-validations", "~> 0.5"
|
26
27
|
s.add_dependency "devise", "~> 3.4"
|
@@ -1,26 +1,20 @@
|
|
1
|
-
require "ostruct"
|
2
|
-
require "shellwords"
|
3
|
-
|
4
1
|
module Ddr::Actions
|
5
2
|
class VirusCheck
|
6
3
|
|
7
4
|
# @return [Hash] result data
|
8
5
|
# @raises [Ddr::Antivirus::VirusFoundError]
|
9
6
|
def self.call(file_path)
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
result[:
|
18
|
-
|
7
|
+
Hash.new.tap do |result|
|
8
|
+
begin
|
9
|
+
scan_result = Ddr::Antivirus.scan(file_path)
|
10
|
+
rescue Ddr::Antivirus::ScannerError => e
|
11
|
+
result[:exception] = [e.class.name, e.to_s]
|
12
|
+
scan_result = e.result
|
13
|
+
end
|
14
|
+
result[:event_date_time] = scan_result.scanned_at
|
15
|
+
result[:software] = scan_result.version
|
16
|
+
result[:detail] = scan_result.output
|
19
17
|
end
|
20
|
-
result[:event_date_time] = scan_result.scanned_at
|
21
|
-
result[:software] = scan_result.version
|
22
|
-
result[:detail] = scan_result.output
|
23
|
-
result
|
24
18
|
end
|
25
19
|
|
26
20
|
end
|
data/lib/ddr/auth.rb
CHANGED
@@ -46,14 +46,6 @@ module Ddr
|
|
46
46
|
autoload :SuperuserAbilityDefinitions
|
47
47
|
end
|
48
48
|
|
49
|
-
autoload_under 'legacy' do
|
50
|
-
autoload :AbstractLegacyPermissions
|
51
|
-
autoload :LegacyAuthorization
|
52
|
-
autoload :LegacyDefaultPermissions
|
53
|
-
autoload :LegacyPermissions
|
54
|
-
autoload :LegacyRoles
|
55
|
-
end
|
56
|
-
|
57
49
|
# Name of group whose members are authorized to act as superuser
|
58
50
|
mattr_accessor :superuser_group
|
59
51
|
|
data/lib/ddr/datastreams.rb
CHANGED
@@ -7,16 +7,18 @@ module Ddr
|
|
7
7
|
ADMIN_METADATA = "adminMetadata"
|
8
8
|
CONTENT = "content"
|
9
9
|
DC = "DC"
|
10
|
-
DEFAULT_RIGHTS = "defaultRights"
|
11
10
|
DESC_METADATA = "descMetadata"
|
12
11
|
EXTRACTED_TEXT = "extractedText"
|
13
12
|
FITS = "fits".freeze
|
13
|
+
INTERMEDIATE_FILE = "intermediateFile".freeze
|
14
14
|
MULTIRES_IMAGE = "multiresImage"
|
15
15
|
RELS_EXT = "RELS-EXT"
|
16
|
-
RIGHTS_METADATA = "rightsMetadata"
|
17
16
|
STRUCT_METADATA = "structMetadata"
|
18
17
|
THUMBNAIL = "thumbnail"
|
19
18
|
|
19
|
+
SAVE = "save.repo_file"
|
20
|
+
DELETE = "delete.repo_file"
|
21
|
+
|
20
22
|
CHECKSUM_TYPE_MD5 = "MD5"
|
21
23
|
CHECKSUM_TYPE_SHA1 = "SHA-1"
|
22
24
|
CHECKSUM_TYPE_SHA256 = "SHA-256"
|
@@ -26,12 +28,21 @@ module Ddr
|
|
26
28
|
CHECKSUM_TYPES = [ CHECKSUM_TYPE_MD5, CHECKSUM_TYPE_SHA1, CHECKSUM_TYPE_SHA256, CHECKSUM_TYPE_SHA384, CHECKSUM_TYPE_SHA512 ]
|
27
29
|
|
28
30
|
autoload :AdministrativeMetadataDatastream
|
31
|
+
autoload :ContentDatastream
|
29
32
|
autoload :DatastreamBehavior
|
33
|
+
autoload :DeleteExternalFiles
|
30
34
|
autoload :DescriptiveMetadataDatastream
|
35
|
+
autoload :ExternalFileDatastream
|
31
36
|
autoload :FitsDatastream
|
37
|
+
autoload :IntermediateFileDatastream
|
32
38
|
autoload :MetadataDatastream
|
39
|
+
autoload :MultiresImageDatastream
|
33
40
|
autoload :PlainTextDatastream
|
34
41
|
autoload :StructuralMetadataDatastream
|
35
42
|
|
43
|
+
mattr_accessor :update_derivatives_on_changed do
|
44
|
+
[ CONTENT, INTERMEDIATE_FILE ]
|
45
|
+
end
|
46
|
+
|
36
47
|
end
|
37
48
|
end
|
@@ -52,6 +52,15 @@ module Ddr
|
|
52
52
|
property :is_locked,
|
53
53
|
predicate: Ddr::Vocab::Asset.isLocked
|
54
54
|
|
55
|
+
property :ingested_by,
|
56
|
+
predicate: Ddr::Vocab::Asset.ingestedBy
|
57
|
+
|
58
|
+
property :ingestion_date,
|
59
|
+
predicate: Ddr::Vocab::Asset.ingestionDate
|
60
|
+
|
61
|
+
property :rights_note,
|
62
|
+
predicate: Ddr::Vocab::Asset.rightsNote
|
63
|
+
|
55
64
|
end
|
56
65
|
end
|
57
66
|
end
|
@@ -1,17 +1,23 @@
|
|
1
1
|
module Ddr
|
2
2
|
module Datastreams
|
3
3
|
module DatastreamBehavior
|
4
|
+
extend ActiveSupport::Concern
|
4
5
|
|
5
6
|
DEFAULT_FILE_EXTENSION = "bin"
|
6
7
|
|
7
8
|
STRFTIME_FORMAT = "%Y-%m-%dT%H:%M:%S.%LZ"
|
8
9
|
|
10
|
+
included do
|
11
|
+
around_save :notify_save
|
12
|
+
around_destroy :notify_delete
|
13
|
+
end
|
14
|
+
|
9
15
|
def validate_checksum! checksum, checksum_type=nil
|
10
16
|
raise Ddr::Models::Error, "Checksum cannot be validated on new datastream." if new?
|
11
17
|
raise Ddr::Models::Error, "Checksum cannot be validated on unpersisted content." if content_changed?
|
12
18
|
raise Ddr::Models::ChecksumInvalid, "The repository internal checksum validation failed." unless dsChecksumValid
|
13
19
|
algorithm = checksum_type || self.checksumType
|
14
|
-
ds_checksum = if algorithm == self.checksumType
|
20
|
+
ds_checksum = if !external? && algorithm == self.checksumType
|
15
21
|
self.checksum
|
16
22
|
else
|
17
23
|
content_digest(algorithm)
|
@@ -23,6 +29,10 @@ module Ddr
|
|
23
29
|
end
|
24
30
|
end
|
25
31
|
|
32
|
+
def version_history
|
33
|
+
versions.map(&:profile)
|
34
|
+
end
|
35
|
+
|
26
36
|
def version_uri
|
27
37
|
# E.g., info:fedora/duke:1/content/content.0
|
28
38
|
["info:fedora", pid, dsid, dsVersionID].join("/") unless new?
|
@@ -41,31 +51,35 @@ module Ddr
|
|
41
51
|
Ddr::Utils.digest(self.content, algorithm)
|
42
52
|
end
|
43
53
|
|
44
|
-
# Returns a list of the external file paths for all versions of the datastream.
|
45
54
|
def file_paths
|
46
|
-
|
47
|
-
|
48
|
-
|
55
|
+
if new?
|
56
|
+
return Array(file_path)
|
57
|
+
else
|
58
|
+
versions.map(&:file_path).compact
|
59
|
+
end
|
49
60
|
end
|
50
61
|
|
51
|
-
# Returns the external file path for the datastream.
|
52
|
-
# Returns nil if dsLocation is not a file URI.
|
53
62
|
def file_path
|
54
|
-
|
55
|
-
|
63
|
+
if external? && dsLocation.present? && dsLocation.start_with?("file:")
|
64
|
+
Ddr::Utils.path_from_uri(dsLocation)
|
65
|
+
end
|
56
66
|
end
|
57
67
|
|
58
|
-
# Returns the file name of the external file for the datastream.
|
59
|
-
# See #external_datastream_file_path(ds)
|
60
68
|
def file_name
|
61
|
-
|
62
|
-
|
69
|
+
if path = file_path
|
70
|
+
File.basename(path)
|
71
|
+
end
|
63
72
|
end
|
64
73
|
|
65
74
|
# Returns the size of the external file for the datastream.
|
66
75
|
def file_size
|
67
|
-
|
68
|
-
|
76
|
+
if external?
|
77
|
+
if path = file_path
|
78
|
+
File.size(path)
|
79
|
+
end
|
80
|
+
else
|
81
|
+
dsSize
|
82
|
+
end
|
69
83
|
end
|
70
84
|
|
71
85
|
# Return default file extension for datastream based on MIME type
|
@@ -103,6 +117,37 @@ module Ddr
|
|
103
117
|
end
|
104
118
|
end
|
105
119
|
|
120
|
+
private
|
121
|
+
|
122
|
+
def default_notification_payload
|
123
|
+
{ pid: pid, file_id: dsid, control_group: controlGroup }
|
124
|
+
end
|
125
|
+
|
126
|
+
def delete_notification_payload
|
127
|
+
default_notification_payload.merge(
|
128
|
+
profile: profile.dup,
|
129
|
+
version_history: version_history
|
130
|
+
)
|
131
|
+
end
|
132
|
+
|
133
|
+
def notify_save
|
134
|
+
ActiveSupport::Notifications.instrument(
|
135
|
+
Ddr::Datastreams::SAVE,
|
136
|
+
default_notification_payload.merge(attributes_changed: changes)
|
137
|
+
) do |payload|
|
138
|
+
yield
|
139
|
+
payload[:profile] = profile.dup
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
def notify_delete
|
144
|
+
ActiveSupport::Notifications.instrument(
|
145
|
+
Ddr::Datastreams::DELETE, delete_notification_payload
|
146
|
+
) do |payload|
|
147
|
+
yield
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
106
151
|
end
|
107
152
|
end
|
108
153
|
end
|