ddr-models 2.0.1 → 2.1.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 +23 -17
- data/app/models/collection.rb +1 -35
- data/ddr-models.gemspec +2 -1
- data/lib/ddr/actions.rb +1 -0
- data/lib/ddr/actions/virus_check.rb +28 -0
- data/lib/ddr/auth.rb +4 -0
- data/lib/ddr/auth/ability_definitions/datastream_ability_definitions.rb +7 -5
- data/lib/ddr/auth/grouper_gateway.rb +9 -1
- data/lib/ddr/auth/permissions.rb +2 -1
- data/lib/ddr/auth/role_based_access_controls_enforcement.rb +5 -5
- data/lib/ddr/auth/roles/role_types.rb +2 -1
- data/lib/ddr/datastreams.rb +2 -2
- data/lib/ddr/datastreams/administrative_metadata_datastream.rb +27 -14
- data/lib/ddr/datastreams/datastream_behavior.rb +13 -0
- data/lib/ddr/datastreams/fits_datastream.rb +88 -0
- data/lib/ddr/derivatives/png_generator.rb +2 -0
- data/lib/ddr/derivatives/ptif_generator.rb +2 -0
- data/lib/ddr/events/fixity_check_event.rb +2 -2
- data/lib/ddr/events/virus_check_event.rb +2 -14
- data/lib/ddr/index.rb +29 -0
- data/lib/ddr/index/abstract_query_result.rb +23 -0
- data/lib/ddr/index/connection.rb +17 -0
- data/lib/ddr/index/csv_query_result.rb +61 -0
- data/lib/ddr/index/document_builder.rb +9 -0
- data/lib/ddr/index/field.rb +23 -0
- data/lib/ddr/index/fields.rb +83 -0
- data/lib/ddr/index/filter.rb +48 -0
- data/lib/ddr/index/filters.rb +19 -0
- data/lib/ddr/index/legacy_license_fields.rb +14 -0
- data/lib/ddr/index/query.rb +35 -0
- data/lib/ddr/index/query_builder.rb +74 -0
- data/lib/ddr/index/query_clause.rb +52 -0
- data/lib/ddr/index/query_result.rb +70 -0
- data/lib/ddr/index/query_value.rb +16 -0
- data/lib/ddr/index/response.rb +13 -0
- data/lib/ddr/index/unique_key_field.rb +12 -0
- data/lib/ddr/index_fields.rb +7 -53
- data/lib/ddr/jobs.rb +1 -1
- data/lib/ddr/jobs/fits_file_characterization.rb +51 -0
- data/lib/ddr/managers.rb +1 -0
- data/lib/ddr/managers/technical_metadata_manager.rb +104 -0
- data/lib/ddr/models.rb +39 -23
- data/lib/ddr/models/base.rb +0 -2
- data/lib/ddr/models/describable.rb +1 -1
- data/lib/ddr/models/effective_license.rb +9 -0
- data/lib/ddr/models/engine.rb +13 -0
- data/lib/ddr/models/file_management.rb +157 -160
- data/lib/ddr/models/governable.rb +0 -4
- data/lib/ddr/models/has_admin_metadata.rb +80 -72
- data/lib/ddr/models/has_children.rb +1 -1
- data/lib/ddr/models/has_content.rb +18 -0
- data/lib/ddr/models/has_struct_metadata.rb +5 -1
- data/lib/ddr/models/indexing.rb +32 -20
- data/lib/ddr/models/inherited_license.rb +13 -0
- data/lib/ddr/models/license.rb +38 -0
- data/lib/ddr/models/solr_document.rb +195 -211
- data/lib/ddr/models/version.rb +1 -1
- data/lib/ddr/models/year_facet.rb +154 -0
- data/lib/ddr/utils.rb +13 -1
- data/lib/ddr/vocab/roles.rb +0 -10
- data/spec/controllers/including_role_based_access_controls_enforcement_spec.rb +4 -4
- data/spec/datastreams/fits_datastream_spec.rb +84 -0
- data/spec/fixtures/fits/document.xml +65 -0
- data/spec/fixtures/fits/image.xml +59 -0
- data/spec/index/filter_spec.rb +47 -0
- data/spec/index/filters_spec.rb +17 -0
- data/spec/index/query_spec.rb +19 -0
- data/spec/jobs/fits_file_characterization_spec.rb +52 -0
- data/spec/managers/technical_metadata_manager_spec.rb +140 -0
- data/spec/models/active_fedora_datastream_spec.rb +44 -0
- data/spec/models/collection_spec.rb +7 -12
- data/spec/models/component_spec.rb +3 -6
- data/spec/models/effective_license_spec.rb +49 -0
- data/spec/models/has_admin_metadata_spec.rb +143 -194
- data/spec/models/has_struct_metadata_spec.rb +2 -2
- data/spec/models/indexing_spec.rb +40 -0
- data/spec/models/solr_document_spec.rb +96 -37
- data/spec/models/year_facet_spec.rb +65 -0
- data/spec/spec_helper.rb +1 -7
- data/spec/support/shared_examples_for_ddr_models.rb +0 -2
- data/spec/support/shared_examples_for_has_content.rb +37 -3
- metadata +79 -32
- data/lib/ddr/datastreams/properties_datastream.rb +0 -25
- data/lib/ddr/jobs/migrate_legacy_authorization.rb +0 -23
- data/lib/ddr/models/has_properties.rb +0 -15
- data/lib/ddr/models/licensable.rb +0 -28
- data/spec/auth/legacy_authorization_spec.rb +0 -94
- data/spec/auth/legacy_roles_spec.rb +0 -32
- data/spec/jobs/migrate_legacy_authorization_spec.rb +0 -43
- data/spec/support/shared_examples_for_has_properties.rb +0 -5
- data/spec/support/shared_examples_for_licensable.rb +0 -15
@@ -1,25 +0,0 @@
|
|
1
|
-
module Ddr
|
2
|
-
module Datastreams
|
3
|
-
class PropertiesDatastream < ActiveFedora::OmDatastream
|
4
|
-
|
5
|
-
set_terminology do |t|
|
6
|
-
t.root(:path => "fields")
|
7
|
-
t.original_filename
|
8
|
-
t.permanent_id
|
9
|
-
end
|
10
|
-
|
11
|
-
def prefix
|
12
|
-
# Squash AF 8.0 deprecation warning
|
13
|
-
""
|
14
|
-
end
|
15
|
-
|
16
|
-
def self.xml_template
|
17
|
-
builder = Nokogiri::XML::Builder.new do |xml|
|
18
|
-
xml.fields
|
19
|
-
end
|
20
|
-
builder.doc
|
21
|
-
end
|
22
|
-
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
module Ddr::Jobs
|
2
|
-
class MigrateLegacyAuthorization
|
3
|
-
|
4
|
-
@queue = :migration
|
5
|
-
|
6
|
-
SUMMARY = "Legacy authorization data migrated to roles"
|
7
|
-
|
8
|
-
def self.perform(pid)
|
9
|
-
obj = ActiveFedora::Base.find(pid)
|
10
|
-
event_args = { pid: pid, summary: SUMMARY }
|
11
|
-
begin
|
12
|
-
event_args[:detail] = obj.legacy_authorization.migrate
|
13
|
-
obj.save!
|
14
|
-
rescue Exception => e
|
15
|
-
event_args[:exception] = e
|
16
|
-
raise e
|
17
|
-
ensure
|
18
|
-
Ddr::Events::UpdateEvent.create(event_args)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|
23
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
module Ddr
|
2
|
-
module Models
|
3
|
-
module HasProperties
|
4
|
-
extend ActiveSupport::Concern
|
5
|
-
|
6
|
-
included do
|
7
|
-
has_metadata name: Ddr::Datastreams::PROPERTIES,
|
8
|
-
type: Ddr::Datastreams::PropertiesDatastream,
|
9
|
-
versionable: true,
|
10
|
-
label: "Properties for this object",
|
11
|
-
control_group: 'M'
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
module Ddr
|
2
|
-
module Models
|
3
|
-
module Licensable
|
4
|
-
extend ActiveSupport::Concern
|
5
|
-
|
6
|
-
included do
|
7
|
-
has_attributes :license_title, datastream: Ddr::Datastreams::RIGHTS_METADATA, at: [:license, :title], multiple: false
|
8
|
-
has_attributes :license_description, datastream: Ddr::Datastreams::RIGHTS_METADATA, at: [:license, :description], multiple: false
|
9
|
-
has_attributes :license_url, datastream: Ddr::Datastreams::RIGHTS_METADATA, at: [:license, :url], multiple: false
|
10
|
-
end
|
11
|
-
|
12
|
-
def license
|
13
|
-
if license_title.present? or license_description.present? or license_url.present?
|
14
|
-
{title: license_title, description: license_description, url: license_url}.with_indifferent_access
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def license=(new_license)
|
19
|
-
raise ArgumentError unless new_license.is_a?(Hash)
|
20
|
-
l = new_license.with_indifferent_access
|
21
|
-
self.license_title = l[:title]
|
22
|
-
self.license_description = l[:description]
|
23
|
-
self.license_url = l[:url]
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
@@ -1,94 +0,0 @@
|
|
1
|
-
module Ddr::Auth
|
2
|
-
RSpec.describe LegacyAuthorization do
|
3
|
-
|
4
|
-
subject { described_class.new(obj) }
|
5
|
-
|
6
|
-
before do
|
7
|
-
@deprecation_behavior = Deprecation.default_deprecation_behavior
|
8
|
-
Deprecation.default_deprecation_behavior = :silence
|
9
|
-
end
|
10
|
-
|
11
|
-
after do
|
12
|
-
Deprecation.default_deprecation_behavior = @deprecation_behavior
|
13
|
-
end
|
14
|
-
|
15
|
-
|
16
|
-
describe "with a Collection" do
|
17
|
-
let(:obj) { FactoryGirl.build(:collection) }
|
18
|
-
|
19
|
-
before do
|
20
|
-
obj.permissions_attributes = [{access: "edit", type: "person", name: "bob@example.com"}]
|
21
|
-
obj.default_permissions = [{access: "edit", type: "group", name: "Editors"},
|
22
|
-
{access: "discover", type: "group", name: "public"},
|
23
|
-
{access: "read", type: "group", name: "registered"}]
|
24
|
-
end
|
25
|
-
|
26
|
-
it "should convert the legacy authorization data to roles" do
|
27
|
-
expect(subject.to_roles)
|
28
|
-
.to eq(Roles::DetachedRoleSet.new(
|
29
|
-
[ Roles::Role.build(type: "Curator", agent: "Editors", scope: "policy"),
|
30
|
-
Roles::Role.build(type: "Viewer", agent: "public", scope: "policy"),
|
31
|
-
Roles::Role.build(type: "Viewer", agent: "registered", scope: "policy"),
|
32
|
-
Roles::Role.build(type: "Editor", agent: "bob@example.com", scope: "resource") ]
|
33
|
-
))
|
34
|
-
end
|
35
|
-
|
36
|
-
it "should clear the legacy authorization data" do
|
37
|
-
subject.clear
|
38
|
-
expect(subject).to be_clear
|
39
|
-
expect(obj.permissions).to be_empty
|
40
|
-
expect(obj.default_permissions).to be_empty
|
41
|
-
expect(obj.adminMetadata.downloader).to be_empty
|
42
|
-
end
|
43
|
-
|
44
|
-
it "should migrate the legacy authorization data" do
|
45
|
-
subject.migrate
|
46
|
-
expect(subject).to be_clear
|
47
|
-
expect(obj.roles)
|
48
|
-
.to eq(Roles::DetachedRoleSet.new(
|
49
|
-
[ Roles::Role.build(type: "Curator", agent: "Editors", scope: "policy"),
|
50
|
-
Roles::Role.build(type: "Viewer", agent: "public", scope: "policy"),
|
51
|
-
Roles::Role.build(type: "Viewer", agent: "registered", scope: "policy"),
|
52
|
-
Roles::Role.build(type: "Editor", agent: "bob@example.com", scope: "resource") ]
|
53
|
-
))
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
describe "with a Component" do
|
58
|
-
let(:obj) { FactoryGirl.build(:component) }
|
59
|
-
|
60
|
-
before do
|
61
|
-
obj.permissions_attributes = [{access: "edit", type: "person", name: "bob@example.com"}]
|
62
|
-
obj.adminMetadata.downloader = ["Downloaders", "sally@example.com"]
|
63
|
-
end
|
64
|
-
|
65
|
-
it "should convert the legacy authorization to roles" do
|
66
|
-
expect(subject.to_roles)
|
67
|
-
.to eq(Roles::DetachedRoleSet.new(
|
68
|
-
[ Roles::Role.build(type: "Downloader", agent: "Downloaders", scope: "resource"),
|
69
|
-
Roles::Role.build(type: "Downloader", agent: "sally@example.com", scope: "resource"),
|
70
|
-
Roles::Role.build(type: "Editor", agent: "bob@example.com", scope: "resource") ]
|
71
|
-
))
|
72
|
-
end
|
73
|
-
|
74
|
-
it "should clear the legacy authorization data" do
|
75
|
-
subject.clear
|
76
|
-
expect(subject).to be_clear
|
77
|
-
expect(obj.permissions).to be_empty
|
78
|
-
expect(obj.adminMetadata.downloader).to be_empty
|
79
|
-
end
|
80
|
-
|
81
|
-
it "should migrate the legacy authorization data" do
|
82
|
-
subject.migrate
|
83
|
-
expect(subject).to be_clear
|
84
|
-
expect(obj.roles)
|
85
|
-
.to eq(Roles::DetachedRoleSet.new(
|
86
|
-
[ Roles::Role.build(type: "Downloader", agent: "Downloaders", scope: "resource"),
|
87
|
-
Roles::Role.build(type: "Downloader", agent: "sally@example.com", scope: "resource"),
|
88
|
-
Roles::Role.build(type: "Editor", agent: "bob@example.com", scope: "resource") ]
|
89
|
-
))
|
90
|
-
end
|
91
|
-
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
module Ddr::Auth
|
2
|
-
RSpec.describe LegacyRoles do
|
3
|
-
|
4
|
-
subject { described_class.new(obj) }
|
5
|
-
|
6
|
-
let(:obj) { FactoryGirl.build(:component) }
|
7
|
-
|
8
|
-
before do
|
9
|
-
@deprecation_behavior = Deprecation.default_deprecation_behavior
|
10
|
-
Deprecation.default_deprecation_behavior = :silence
|
11
|
-
obj.adminMetadata.downloader = ["bob@example.com", "Downloaders"]
|
12
|
-
end
|
13
|
-
|
14
|
-
after do
|
15
|
-
Deprecation.default_deprecation_behavior = @deprecation_behavior
|
16
|
-
end
|
17
|
-
|
18
|
-
it "should convert the legacy roles to new roles" do
|
19
|
-
expect(subject.to_roles)
|
20
|
-
.to eq(Roles::DetachedRoleSet.new(
|
21
|
-
[ Roles::Role.build(type: "Downloader", agent: "Downloaders", scope: "resource"),
|
22
|
-
Roles::Role.build(type: "Downloader", agent: "bob@example.com", scope: "resource")
|
23
|
-
]
|
24
|
-
))
|
25
|
-
end
|
26
|
-
|
27
|
-
it "should clear the legacy roles" do
|
28
|
-
expect { subject.clear }.to change(obj.adminMetadata.downloader, :empty?).from(false).to(true)
|
29
|
-
end
|
30
|
-
|
31
|
-
end
|
32
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
module Ddr::Jobs
|
2
|
-
RSpec.describe MigrateLegacyAuthorization do
|
3
|
-
|
4
|
-
let(:obj) { FactoryGirl.build(:collection) }
|
5
|
-
|
6
|
-
before do
|
7
|
-
@deprecation_behavior = Deprecation.default_deprecation_behavior
|
8
|
-
Deprecation.default_deprecation_behavior = :silence
|
9
|
-
obj.permissions_attributes = [{access: "edit", type: "person", name: "bob@example.com"}]
|
10
|
-
obj.adminMetadata.downloader = ["Downloaders", "sally@example.com"]
|
11
|
-
obj.default_permissions = [{access: "edit", type: "group", name: "Editors"},
|
12
|
-
{access: "discover", type: "group", name: "public"},
|
13
|
-
{access: "read", type: "group", name: "registered"}]
|
14
|
-
obj.save!
|
15
|
-
end
|
16
|
-
|
17
|
-
after do
|
18
|
-
Deprecation.default_deprecation_behavior = @deprecation_behavior
|
19
|
-
end
|
20
|
-
|
21
|
-
it "should migrate the authorization data to roles" do
|
22
|
-
Resque.enqueue(described_class, obj.pid)
|
23
|
-
obj.reload
|
24
|
-
expect(obj.legacy_authorization).to be_clear
|
25
|
-
expect(obj.roles)
|
26
|
-
.to eq(Ddr::Auth::Roles::DetachedRoleSet.new(
|
27
|
-
[ Ddr::Auth::Roles::Role.build(type: "Curator", agent: "Editors", scope: "policy"),
|
28
|
-
Ddr::Auth::Roles::Role.build(type: "Viewer", agent: "public", scope: "policy"),
|
29
|
-
Ddr::Auth::Roles::Role.build(type: "Viewer", agent: "registered", scope: "policy"),
|
30
|
-
Ddr::Auth::Roles::Role.build(type: "Editor", agent: "bob@example.com", scope: "resource"),
|
31
|
-
Ddr::Auth::Roles::Role.build(type: "Downloader", agent: "Downloaders", scope: "resource"),
|
32
|
-
Ddr::Auth::Roles::Role.build(type: "Downloader", agent: "sally@example.com", scope: "resource")
|
33
|
-
]
|
34
|
-
))
|
35
|
-
event = obj.update_events.last
|
36
|
-
expect(event).to be_success
|
37
|
-
expect(event.summary).to eq("Legacy authorization data migrated to roles")
|
38
|
-
expect(event.detail).to match(/LEGACY AUTHORIZATION DATA/)
|
39
|
-
expect(event.detail).to match(/ROLES/)
|
40
|
-
end
|
41
|
-
|
42
|
-
end
|
43
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
RSpec.shared_examples "a licensable object" do
|
2
|
-
let(:object) { described_class.new }
|
3
|
-
before do
|
4
|
-
object.license_title = "License Title"
|
5
|
-
object.license_description = "License Description"
|
6
|
-
object.license_url = "http://library.duke.edu"
|
7
|
-
end
|
8
|
-
describe "indexing" do
|
9
|
-
it "should index the license terms" do
|
10
|
-
expect(object.to_solr[Ddr::IndexFields::LICENSE_TITLE]).to eq("License Title")
|
11
|
-
expect(object.to_solr[Ddr::IndexFields::LICENSE_DESCRIPTION]).to eq("License Description")
|
12
|
-
expect(object.to_solr[Ddr::IndexFields::LICENSE_URL]).to eq("http://library.duke.edu")
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|