ddr-models 1.7.0 → 1.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/models/collection.rb +20 -11
- data/db/migrate/20150109192134_drop_workflow_state.rb~ +11 -0
- data/db/migrate/20150110023410_drop_workflow_states.rb +11 -0
- data/db/migrate/20150110023410_drop_workflow_states.rb~ +4 -0
- data/lib/ddr/auth/user.rb +1 -1
- data/lib/ddr/datastreams.rb +3 -2
- data/lib/ddr/datastreams/admin_metadata_datastream.rb +21 -0
- data/lib/ddr/datastreams/admin_metadata_datastream.rb~ +13 -0
- data/lib/ddr/managers.rb +3 -0
- data/lib/ddr/managers/manager.rb +14 -0
- data/lib/ddr/managers/manager.rb~ +14 -0
- data/lib/ddr/managers/role_manager.rb +31 -0
- data/lib/ddr/managers/role_manager.rb~ +21 -0
- data/lib/ddr/managers/workflow_manager.rb +33 -0
- data/lib/ddr/managers/workflow_manager.rb~ +33 -0
- data/lib/ddr/metadata.rb +0 -1
- data/lib/ddr/metadata/#permanent_id_record.rb# +13 -0
- data/lib/ddr/models.rb +1 -4
- data/lib/ddr/models/#has_ezid_identifier.rb# +26 -0
- data/lib/ddr/models/#has_permanent_identifier.rb# +9 -0
- data/lib/ddr/models/base.rb +1 -3
- data/lib/ddr/models/has_admin_metadata.rb +39 -0
- data/lib/ddr/models/{has_preservation_metadata.rb → has_admin_metadata.rb~} +11 -5
- data/lib/ddr/models/has_content.rb +1 -1
- data/lib/ddr/models/solr_document.rb +1 -1
- data/lib/ddr/models/version.rb +1 -1
- data/lib/ddr/vocab.rb +2 -1
- data/lib/ddr/vocab.rb~ +9 -0
- data/lib/ddr/vocab/asset.rb +11 -0
- data/lib/ddr/{metadata/roles_vocabulary.rb → vocab/roles.rb} +4 -2
- data/lib/ddr/vocab/workflow.rb~ +7 -0
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/schema.rb +1 -11
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +2096 -3163
- data/spec/dummy/log/test.log +77302 -77584
- data/spec/models/ability_spec.rb +2 -2
- data/spec/models/collection_spec.rb +8 -1
- data/spec/models/has_admin_metadata_spec.rb +197 -0
- data/spec/models/has_admin_metadata_spec.rb~ +144 -0
- data/spec/models/user_spec.rb +6 -0
- metadata +40 -17
- data/lib/ddr/models/has_role_assignments.rb +0 -17
- data/lib/ddr/models/has_workflow.rb +0 -29
- data/lib/ddr/vocab/preservation.rb +0 -14
- data/lib/ddr/workflow.rb +0 -8
- data/lib/ddr/workflow/workflow_state.rb +0 -39
- data/spec/models/has_preservation_metadata_spec.rb +0 -109
- data/spec/models/has_role_assignments_spec.rb +0 -29
- data/spec/models/has_workflow_spec.rb +0 -54
- data/spec/models/role_assignments_datastream_spec.rb +0 -25
@@ -1,17 +0,0 @@
|
|
1
|
-
module Ddr
|
2
|
-
module Models
|
3
|
-
module HasRoleAssignments
|
4
|
-
extend ActiveSupport::Concern
|
5
|
-
|
6
|
-
included do
|
7
|
-
has_metadata name: "roleAssignments",
|
8
|
-
type: Ddr::Datastreams::RoleAssignmentsDatastream,
|
9
|
-
versionable: true,
|
10
|
-
control_group: "M"
|
11
|
-
|
12
|
-
delegate :principal_has_role?, to: :roleAssignments
|
13
|
-
end
|
14
|
-
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
module Ddr
|
2
|
-
module Models
|
3
|
-
module HasWorkflow
|
4
|
-
extend ActiveSupport::Concern
|
5
|
-
|
6
|
-
PUBLISHED = Ddr::Workflow::WorkflowState::PUBLISHED
|
7
|
-
UNPUBLISHED = nil
|
8
|
-
|
9
|
-
def workflow_state
|
10
|
-
Ddr::Workflow::WorkflowState.workflow_state_for_object(self)
|
11
|
-
end
|
12
|
-
|
13
|
-
def published?
|
14
|
-
self.workflow_state == PUBLISHED
|
15
|
-
end
|
16
|
-
|
17
|
-
def publish!
|
18
|
-
Ddr::Workflow::WorkflowState.set_for_object(self, PUBLISHED)
|
19
|
-
update_index
|
20
|
-
end
|
21
|
-
|
22
|
-
def unpublish!
|
23
|
-
Ddr::Workflow::WorkflowState.set_for_object(self, UNPUBLISHED)
|
24
|
-
update_index
|
25
|
-
end
|
26
|
-
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
module Ddr
|
2
|
-
module Vocab
|
3
|
-
class Preservation < RDF::StrictVocabulary("http://repository.lib.duke.edu/vocab/preservation/")
|
4
|
-
|
5
|
-
property "permanentId",
|
6
|
-
label: "Permanent Identifier",
|
7
|
-
subPropertyOf: RDF::DC.identifier
|
8
|
-
|
9
|
-
property "permanentUrl",
|
10
|
-
label: "Permanent URL"
|
11
|
-
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
data/lib/ddr/workflow.rb
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
module Ddr
|
2
|
-
module Workflow
|
3
|
-
class WorkflowState < ActiveRecord::Base
|
4
|
-
|
5
|
-
PUBLISHED = "published"
|
6
|
-
|
7
|
-
def self.workflow_state_for_object(obj)
|
8
|
-
workflow_state_for_pid(obj.pid)
|
9
|
-
end
|
10
|
-
|
11
|
-
def self.workflow_state_for_pid(pid)
|
12
|
-
for_pid(pid).present? ? for_pid(pid).first.workflow_state : nil
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.set_for_object(obj, state)
|
16
|
-
set_for_pid(obj.pid, state)
|
17
|
-
end
|
18
|
-
|
19
|
-
def self.set_for_pid(pid, state)
|
20
|
-
if for_pid(pid).present?
|
21
|
-
for_pid(pid).first.update(workflow_state: state)
|
22
|
-
else
|
23
|
-
create(pid: pid, workflow_state: state)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
private
|
28
|
-
|
29
|
-
def self.for_object(obj)
|
30
|
-
for_pid(obj.pid)
|
31
|
-
end
|
32
|
-
|
33
|
-
def self.for_pid(pid)
|
34
|
-
where(pid: pid)
|
35
|
-
end
|
36
|
-
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
@@ -1,109 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Ddr
|
4
|
-
module Models
|
5
|
-
RSpec.describe HasPreservationMetadata, type: :model do
|
6
|
-
|
7
|
-
before(:all) do
|
8
|
-
class PermanentlyIdentifiable < ActiveFedora::Base
|
9
|
-
include Ddr::Models::Describable
|
10
|
-
include Ddr::Models::Indexing
|
11
|
-
include Ddr::Models::HasWorkflow
|
12
|
-
include Ddr::Models::HasPreservationMetadata
|
13
|
-
include Ddr::Models::EventLoggable
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
subject { PermanentlyIdentifiable.new }
|
18
|
-
|
19
|
-
describe "permanent_id" do
|
20
|
-
describe "when a permanent id has not been assigned" do
|
21
|
-
it "should be nil" do
|
22
|
-
expect(subject.permanent_id).to be_nil
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
describe "object lifecycle" do
|
28
|
-
context "when created" do
|
29
|
-
context "and auto-assignment is enabled" do
|
30
|
-
before { allow(Ddr::Models).to receive(:auto_assign_permanent_ids) { true } }
|
31
|
-
it "should assign a permanent id" do
|
32
|
-
expect_any_instance_of(PermanentlyIdentifiable).to receive(:assign_permanent_id!) { nil }
|
33
|
-
PermanentlyIdentifiable.create
|
34
|
-
end
|
35
|
-
end
|
36
|
-
context "and auto-assignment is disabled" do
|
37
|
-
before { allow(Ddr::Models).to receive(:auto_assign_permanent_ids) { false } }
|
38
|
-
it "should not assign a permanent id" do
|
39
|
-
expect_any_instance_of(PermanentlyIdentifiable).not_to receive(:assign_permanent_id!)
|
40
|
-
PermanentlyIdentifiable.create
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
context "when saved" do
|
45
|
-
context "and auto-assignment is enabled" do
|
46
|
-
before { allow(Ddr::Models).to receive(:auto_assign_permanent_ids) { true } }
|
47
|
-
it "should assign a permanent id once" do
|
48
|
-
expect(subject).to receive(:assign_permanent_id!).once { nil }
|
49
|
-
subject.save
|
50
|
-
subject.title = ["New Title"]
|
51
|
-
subject.save
|
52
|
-
end
|
53
|
-
end
|
54
|
-
context "and auto-assignment is disabled" do
|
55
|
-
before { allow(Ddr::Models).to receive(:auto_assign_permanent_ids) { false } }
|
56
|
-
it "should not assign a permanent id" do
|
57
|
-
expect(subject).not_to receive(:assign_permanent_id!)
|
58
|
-
subject.save
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
describe "#assign_permanent_id!" do
|
65
|
-
it "should assign the permanent id later" do
|
66
|
-
expect(subject.permanent_id_manager).to receive(:assign_later) { nil }
|
67
|
-
subject.assign_permanent_id!
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
describe "events" do
|
72
|
-
before { allow(Ddr::Models).to receive(:auto_assign_permanent_ids) { true } }
|
73
|
-
context "when the operation succeeds" do
|
74
|
-
let(:stub_identifier) { double(id: "ark:/99999/fk4zzz", metadata: "_target: http://example.com") }
|
75
|
-
before { allow_any_instance_of(Ddr::Managers::PermanentIdManager).to receive(:mint) { stub_identifier } }
|
76
|
-
it "should create a success event" do
|
77
|
-
expect { subject.save }.to change { subject.update_events.count }.by(1)
|
78
|
-
end
|
79
|
-
end
|
80
|
-
context "when there's an exception" do
|
81
|
-
before { allow(Ezid::Identifier).to receive(:create).and_raise(Ezid::Error) }
|
82
|
-
it "should create a failure event" do
|
83
|
-
begin
|
84
|
-
subject.save
|
85
|
-
rescue Ezid::Error
|
86
|
-
end
|
87
|
-
expect(subject.update_events.last).to be_failure
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
describe "indexing" do
|
93
|
-
let(:permanent_id) { "ark:/99999/fk4zzz" }
|
94
|
-
let(:permanent_url) { "http://id.library.duke.edu/ark:/99999/fk4zzz" }
|
95
|
-
before do
|
96
|
-
subject.permanent_id = permanent_id
|
97
|
-
subject.permanent_url = permanent_url
|
98
|
-
end
|
99
|
-
it "should index the permanent id value" do
|
100
|
-
expect(subject.to_solr[Ddr::IndexFields::PERMANENT_ID]).to eq(permanent_id)
|
101
|
-
end
|
102
|
-
it "should index the permanent url" do
|
103
|
-
expect(subject.to_solr[Ddr::IndexFields::PERMANENT_URL]).to eq(permanent_url)
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Ddr
|
4
|
-
module Models
|
5
|
-
RSpec.describe HasRoleAssignments, type: :model do
|
6
|
-
|
7
|
-
before(:all) do
|
8
|
-
class RoleAssignable < ActiveFedora::Base
|
9
|
-
include HasRoleAssignments
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
subject { RoleAssignable.new }
|
14
|
-
|
15
|
-
describe "#principal_has_role?" do
|
16
|
-
it "should respond when given a list of principals and a valid role" do
|
17
|
-
expect { subject.principal_has_role?(["bob", "admins"], :administrator) }.not_to raise_error
|
18
|
-
end
|
19
|
-
it "should respond when given a principal name and a valid role" do
|
20
|
-
expect { subject.principal_has_role?("bob", :administrator) }.not_to raise_error
|
21
|
-
end
|
22
|
-
it "should raise an error when given an invalid role" do
|
23
|
-
expect { subject.principal_has_role?("bob", :foo) }.to raise_error
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
@@ -1,54 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Ddr
|
4
|
-
module Models
|
5
|
-
RSpec.describe HasWorkflow, type: :model do
|
6
|
-
|
7
|
-
before(:all) do
|
8
|
-
class Workflowable < ActiveFedora::Base
|
9
|
-
include HasWorkflow
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
subject { Workflowable.new(pid: 'test:1') }
|
14
|
-
|
15
|
-
describe "#published?" do
|
16
|
-
context "object is published" do
|
17
|
-
before { Ddr::Workflow::WorkflowState.create(pid: subject.pid, workflow_state: Ddr::Workflow::WorkflowState::PUBLISHED) }
|
18
|
-
it "should return true" do
|
19
|
-
expect(subject.published?).to eql(true)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
context "object is not published" do
|
23
|
-
context "has never been published" do
|
24
|
-
it "should return false" do
|
25
|
-
expect(subject.published?).to eql(false)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
context "has been published and unpublished" do
|
29
|
-
before { Ddr::Workflow::WorkflowState.create(pid: subject.pid, workflow_state: nil) }
|
30
|
-
it "should return false" do
|
31
|
-
expect(subject.published?).to eql(false)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
describe "#publish!" do
|
38
|
-
it "should publish the object" do
|
39
|
-
subject.publish!
|
40
|
-
expect(subject.published?).to eql(true)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
describe "#unpublish!" do
|
45
|
-
before { subject.publish! }
|
46
|
-
it "should unpublish the object" do
|
47
|
-
subject.unpublish!
|
48
|
-
expect(subject.published?).to eql(false)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Ddr
|
4
|
-
module Datastreams
|
5
|
-
RSpec.describe RoleAssignmentsDatastream do
|
6
|
-
|
7
|
-
subject { described_class.new(nil) }
|
8
|
-
|
9
|
-
describe "#principal_has_role?" do
|
10
|
-
before do
|
11
|
-
subject.administrator = ["bob", "sally"]
|
12
|
-
end
|
13
|
-
it "should accept a single principal" do
|
14
|
-
expect(subject.principal_has_role?("sally", :administrator)).to be true
|
15
|
-
expect(subject.principal_has_role?("fred", :administrator)).to be false
|
16
|
-
end
|
17
|
-
it "should accept a list of principals and return if at least one of the principals has the role" do
|
18
|
-
expect(subject.principal_has_role?(["sally", "fred"], :administrator)).to be true
|
19
|
-
expect(subject.principal_has_role?(["wendy", "fred"], :administrator)).to be false
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|