ddr-models 1.5.0 → 1.6.0
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 -0
- data/db/migrate/20141216040225_drop_minted_ids.rb +9 -0
- data/db/migrate/20141218020612_add_exception_to_events.rb +7 -0
- data/lib/ddr/datastreams.rb +1 -0
- data/lib/ddr/datastreams/preservation_metadata_datastream.rb +13 -0
- data/lib/ddr/events/event.rb +6 -0
- data/lib/ddr/index_fields.rb +1 -0
- data/lib/ddr/managers.rb +8 -0
- data/lib/ddr/managers/permanent_id_manager.rb +93 -0
- data/lib/ddr/metadata/#permanent_id_record.rb# +13 -0
- data/lib/ddr/models.rb +9 -5
- 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 +5 -5
- data/lib/ddr/models/engine.rb +11 -0
- data/lib/ddr/models/has_preservation_metadata.rb +28 -0
- data/lib/ddr/models/indexing.rb +7 -2
- data/lib/ddr/models/version.rb +1 -1
- data/lib/ddr/vocab.rb +8 -0
- data/lib/ddr/vocab.rb~ +9 -0
- data/lib/ddr/vocab/preservation.rb +14 -0
- data/spec/dummy/Rakefile +2 -0
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/schema.rb +2 -11
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +1845 -2902
- data/spec/dummy/log/test.log +67166 -69478
- data/spec/models/has_preservation_metadata_spec.rb +109 -0
- data/spec/spec_helper.rb +3 -0
- data/spec/support/shared_examples_for_events.rb +8 -0
- metadata +44 -20
- data/lib/ddr/models/minted_id.rb +0 -10
- data/lib/ddr/models/permanent_identification.rb +0 -23
- data/spec/models/permanent_identification_spec.rb +0 -67
@@ -0,0 +1,109 @@
|
|
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
|
data/spec/spec_helper.rb
CHANGED
@@ -176,4 +176,12 @@ RSpec.shared_examples "an event" do
|
|
176
176
|
end
|
177
177
|
end
|
178
178
|
end
|
179
|
+
|
180
|
+
describe "when the exception attribute is set" do
|
181
|
+
before { subject.exception = "Gah!" }
|
182
|
+
it "should be persisted as a failure" do
|
183
|
+
subject.save(validate: false)
|
184
|
+
expect(subject).to be_failure
|
185
|
+
end
|
186
|
+
end
|
179
187
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ddr-models
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jim Coble
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-12-
|
12
|
+
date: 2014-12-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -81,20 +81,6 @@ dependencies:
|
|
81
81
|
- - ">="
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: '0'
|
84
|
-
- !ruby/object:Gem::Dependency
|
85
|
-
name: noid
|
86
|
-
requirement: !ruby/object:Gem::Requirement
|
87
|
-
requirements:
|
88
|
-
- - "~>"
|
89
|
-
- !ruby/object:Gem::Version
|
90
|
-
version: '0.7'
|
91
|
-
type: :runtime
|
92
|
-
prerelease: false
|
93
|
-
version_requirements: !ruby/object:Gem::Requirement
|
94
|
-
requirements:
|
95
|
-
- - "~>"
|
96
|
-
- !ruby/object:Gem::Version
|
97
|
-
version: '0.7'
|
98
84
|
- !ruby/object:Gem::Dependency
|
99
85
|
name: ddr-antivirus
|
100
86
|
requirement: !ruby/object:Gem::Requirement
|
@@ -137,6 +123,34 @@ dependencies:
|
|
137
123
|
- - ">="
|
138
124
|
- !ruby/object:Gem::Version
|
139
125
|
version: '0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: ezid-client
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - "~>"
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '0.9'
|
133
|
+
type: :runtime
|
134
|
+
prerelease: false
|
135
|
+
version_requirements: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - "~>"
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0.9'
|
140
|
+
- !ruby/object:Gem::Dependency
|
141
|
+
name: resque
|
142
|
+
requirement: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - "~>"
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '1.25'
|
147
|
+
type: :runtime
|
148
|
+
prerelease: false
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - "~>"
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '1.25'
|
140
154
|
- !ruby/object:Gem::Dependency
|
141
155
|
name: bundler
|
142
156
|
requirement: !ruby/object:Gem::Requirement
|
@@ -260,6 +274,8 @@ files:
|
|
260
274
|
- db/migrate/20141103192146_create_workflow_state.rb
|
261
275
|
- db/migrate/20141104181418_create_users.rb
|
262
276
|
- db/migrate/20141107124012_add_columns_to_user.rb
|
277
|
+
- db/migrate/20141216040225_drop_minted_ids.rb
|
278
|
+
- db/migrate/20141218020612_add_exception_to_events.rb
|
263
279
|
- lib/ddr-models.rb
|
264
280
|
- lib/ddr/actions.rb
|
265
281
|
- lib/ddr/actions/fixity_check.rb
|
@@ -274,6 +290,7 @@ files:
|
|
274
290
|
- lib/ddr/datastreams/content_metadata_datastream.rb
|
275
291
|
- lib/ddr/datastreams/datastream_behavior.rb
|
276
292
|
- lib/ddr/datastreams/descriptive_metadata_datastream.rb
|
293
|
+
- lib/ddr/datastreams/preservation_metadata_datastream.rb
|
277
294
|
- lib/ddr/datastreams/properties_datastream.rb
|
278
295
|
- lib/ddr/datastreams/role_assignments_datastream.rb
|
279
296
|
- lib/ddr/events.rb
|
@@ -288,7 +305,10 @@ files:
|
|
288
305
|
- lib/ddr/events/validation_event.rb
|
289
306
|
- lib/ddr/events/virus_check_event.rb
|
290
307
|
- lib/ddr/index_fields.rb
|
308
|
+
- lib/ddr/managers.rb
|
309
|
+
- lib/ddr/managers/permanent_id_manager.rb
|
291
310
|
- lib/ddr/metadata.rb
|
311
|
+
- lib/ddr/metadata/#permanent_id_record.rb#
|
292
312
|
- lib/ddr/metadata/duke_terms.rb
|
293
313
|
- lib/ddr/metadata/premis_event.rb
|
294
314
|
- lib/ddr/metadata/rdf_vocabulary_parser.rb
|
@@ -296,6 +316,8 @@ files:
|
|
296
316
|
- lib/ddr/metadata/sources/duketerms.rdf.xml
|
297
317
|
- lib/ddr/metadata/vocabulary.rb
|
298
318
|
- lib/ddr/models.rb
|
319
|
+
- lib/ddr/models/#has_ezid_identifier.rb#
|
320
|
+
- lib/ddr/models/#has_permanent_identifier.rb#
|
299
321
|
- lib/ddr/models/access_controllable.rb
|
300
322
|
- lib/ddr/models/base.rb
|
301
323
|
- lib/ddr/models/describable.rb
|
@@ -309,18 +331,20 @@ files:
|
|
309
331
|
- lib/ddr/models/has_children.rb
|
310
332
|
- lib/ddr/models/has_content.rb
|
311
333
|
- lib/ddr/models/has_content_metadata.rb
|
334
|
+
- lib/ddr/models/has_preservation_metadata.rb
|
312
335
|
- lib/ddr/models/has_properties.rb
|
313
336
|
- lib/ddr/models/has_role_assignments.rb
|
314
337
|
- lib/ddr/models/has_thumbnail.rb
|
315
338
|
- lib/ddr/models/has_workflow.rb
|
316
339
|
- lib/ddr/models/indexing.rb
|
317
340
|
- lib/ddr/models/licensable.rb
|
318
|
-
- lib/ddr/models/minted_id.rb
|
319
|
-
- lib/ddr/models/permanent_identification.rb
|
320
341
|
- lib/ddr/models/solr_document.rb
|
321
342
|
- lib/ddr/models/version.rb
|
322
343
|
- lib/ddr/notifications.rb
|
323
344
|
- lib/ddr/utils.rb
|
345
|
+
- lib/ddr/vocab.rb
|
346
|
+
- lib/ddr/vocab.rb~
|
347
|
+
- lib/ddr/vocab/preservation.rb
|
324
348
|
- lib/ddr/workflow.rb
|
325
349
|
- lib/ddr/workflow/workflow_state.rb
|
326
350
|
- spec/dummy/README.rdoc
|
@@ -388,10 +412,10 @@ files:
|
|
388
412
|
- spec/models/descriptive_metadata_datastream_spec.rb
|
389
413
|
- spec/models/events_spec.rb
|
390
414
|
- spec/models/file_management_spec.rb
|
415
|
+
- spec/models/has_preservation_metadata_spec.rb
|
391
416
|
- spec/models/has_role_assignments_spec.rb
|
392
417
|
- spec/models/has_workflow_spec.rb
|
393
418
|
- spec/models/item_spec.rb
|
394
|
-
- spec/models/permanent_identification_spec.rb
|
395
419
|
- spec/models/role_assignments_datastream_spec.rb
|
396
420
|
- spec/models/superuser_spec.rb
|
397
421
|
- spec/models/target_spec.rb
|
@@ -500,10 +524,10 @@ test_files:
|
|
500
524
|
- spec/models/descriptive_metadata_datastream_spec.rb
|
501
525
|
- spec/models/events_spec.rb
|
502
526
|
- spec/models/file_management_spec.rb
|
527
|
+
- spec/models/has_preservation_metadata_spec.rb
|
503
528
|
- spec/models/has_role_assignments_spec.rb
|
504
529
|
- spec/models/has_workflow_spec.rb
|
505
530
|
- spec/models/item_spec.rb
|
506
|
-
- spec/models/permanent_identification_spec.rb
|
507
531
|
- spec/models/role_assignments_datastream_spec.rb
|
508
532
|
- spec/models/superuser_spec.rb
|
509
533
|
- spec/models/target_spec.rb
|
data/lib/ddr/models/minted_id.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
module Ddr
|
2
|
-
module Models
|
3
|
-
module PermanentIdentification
|
4
|
-
extend ActiveSupport::Concern
|
5
|
-
|
6
|
-
PERMALINK_BASE_URL = 'http://id.library.duke.edu/'
|
7
|
-
|
8
|
-
included do
|
9
|
-
has_attributes :permanent_id, datastream: Ddr::Datastreams::PROPERTIES, multiple: false
|
10
|
-
|
11
|
-
def self.permalink(permanent_id)
|
12
|
-
permanent_id.present? ? PERMALINK_BASE_URL + permanent_id : nil
|
13
|
-
end
|
14
|
-
|
15
|
-
end
|
16
|
-
|
17
|
-
def permalink
|
18
|
-
self.class.permalink(permanent_id)
|
19
|
-
end
|
20
|
-
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,67 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Ddr
|
4
|
-
module Models
|
5
|
-
|
6
|
-
RSpec.shared_examples "a permanently identified object" do
|
7
|
-
it "should have a permanent id" do
|
8
|
-
expect(object.permanent_id).to_not be_nil
|
9
|
-
end
|
10
|
-
it "should have an appropriate update event" do
|
11
|
-
expect(object.update_events.map(&:summary)).to include("Assigned permanent ID")
|
12
|
-
end
|
13
|
-
it "should be a referent for the permanent id" do
|
14
|
-
expect(Ddr::Models::MintedId.find_by(minted_id: object.permanent_id).referent).to eql(object.pid)
|
15
|
-
end
|
16
|
-
it "should have a permlink" do
|
17
|
-
expect(object.permalink).to eql(Ddr::Models::PermanentIdentification::PERMALINK_BASE_URL + object.permanent_id)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
RSpec.describe PermanentIdentification, type: :model do
|
22
|
-
|
23
|
-
before { skip }
|
24
|
-
|
25
|
-
before(:all) do
|
26
|
-
class PermanentlyIdentifiable < ActiveFedora::Base
|
27
|
-
include Ddr::Models::Describable
|
28
|
-
include Ddr::Models::HasProperties
|
29
|
-
include Ddr::Models::PermanentIdentification
|
30
|
-
include Ddr::Models::EventLoggable
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
context "creating new object" do
|
35
|
-
let(:object) { PermanentlyIdentifiable.create }
|
36
|
-
it_behaves_like "a permanently identified object"
|
37
|
-
end
|
38
|
-
|
39
|
-
context "saving new object" do
|
40
|
-
let(:object) { PermanentlyIdentifiable.new }
|
41
|
-
before { object.save }
|
42
|
-
it_behaves_like "a permanently identified object"
|
43
|
-
end
|
44
|
-
|
45
|
-
context "saving an existing object" do
|
46
|
-
let(:object) { PermanentlyIdentifiable.create }
|
47
|
-
it "should keep its existing permanent id" do
|
48
|
-
perm_id = object.permanent_id
|
49
|
-
object.title = [ "New Title" ]
|
50
|
-
object.save
|
51
|
-
expect(object.permanent_id).to eq(perm_id)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
context "exception during permanent id minting" do
|
56
|
-
let(:object) { PermanentlyIdentifiable.create }
|
57
|
-
before { allow(Ddr::Services::IdService).to receive(:mint).and_raise(Exception) }
|
58
|
-
it "should have a failure update event" do
|
59
|
-
expect(object.update_events.last.summary).to eq("Assigned permanent ID")
|
60
|
-
expect(object.update_events.last.outcome).to eq(Ddr::Events::Event::FAILURE)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
end
|
65
|
-
|
66
|
-
end
|
67
|
-
end
|