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.
@@ -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
@@ -11,6 +11,9 @@ require "rspec/rails"
11
11
  require "factory_girl_rails"
12
12
  require "database_cleaner"
13
13
  require "tempfile"
14
+ require "resque"
15
+
16
+ Resque.inline = true
14
17
 
15
18
  Dir[File.join(File.dirname(__FILE__), "support", "*.rb")].each { |f| require f }
16
19
 
@@ -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.5.0
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 00:00:00.000000000 Z
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
@@ -1,10 +0,0 @@
1
- module Ddr
2
- module Models
3
- class MintedId < ActiveRecord::Base
4
-
5
- validates_presence_of :minted_id
6
- validates_uniqueness_of :minted_id
7
-
8
- end
9
- end
10
- end
@@ -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