hydra-pcdm 0.0.1 → 0.1.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.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +4 -0
  3. data/Gemfile +0 -4
  4. data/README.md +2 -2
  5. data/hydra-pcdm.gemspec +2 -1
  6. data/lib/hydra/pcdm.rb +21 -30
  7. data/lib/hydra/pcdm/ancestor_checker.rb +18 -0
  8. data/lib/hydra/pcdm/collection_indexer.rb +2 -2
  9. data/lib/hydra/pcdm/deep_member_iterator.rb +31 -0
  10. data/lib/hydra/pcdm/models/concerns/collection_behavior.rb +20 -57
  11. data/lib/hydra/pcdm/models/concerns/object_behavior.rb +12 -37
  12. data/lib/hydra/pcdm/models/concerns/pcdm_behavior.rb +34 -0
  13. data/lib/hydra/pcdm/object_indexer.rb +1 -1
  14. data/lib/hydra/pcdm/services/file/get_mime_type.rb +1 -1
  15. data/lib/hydra/pcdm/validators.rb +8 -0
  16. data/lib/hydra/pcdm/validators/ancestor_validator.rb +26 -0
  17. data/lib/hydra/pcdm/validators/composite_validator.rb +17 -0
  18. data/lib/hydra/pcdm/validators/pcdm_object_validator.rb +9 -0
  19. data/lib/hydra/pcdm/validators/pcdm_validator.rb +9 -0
  20. data/lib/hydra/pcdm/version.rb +1 -1
  21. data/lib/hydra/pcdm/vocab/pcdm_terms.rb +1 -1
  22. data/spec/hydra/pcdm/ancestor_checker_spec.rb +29 -0
  23. data/spec/hydra/pcdm/collection_indexer_spec.rb +11 -11
  24. data/spec/hydra/pcdm/deep_member_iterator_spec.rb +52 -0
  25. data/spec/hydra/pcdm/models/collection_spec.rb +691 -17
  26. data/spec/hydra/pcdm/models/file_spec.rb +16 -0
  27. data/spec/hydra/pcdm/models/object_spec.rb +576 -27
  28. data/spec/hydra/pcdm/object_indexer_spec.rb +6 -6
  29. data/spec/spec_helper.rb +8 -1
  30. metadata +31 -52
  31. data/lib/hydra/pcdm/services/collection/add_collection.rb +0 -20
  32. data/lib/hydra/pcdm/services/collection/add_object.rb +0 -19
  33. data/lib/hydra/pcdm/services/collection/add_related_object.rb +0 -21
  34. data/lib/hydra/pcdm/services/collection/get_collections.rb +0 -18
  35. data/lib/hydra/pcdm/services/collection/get_objects.rb +0 -18
  36. data/lib/hydra/pcdm/services/collection/get_related_objects.rb +0 -17
  37. data/lib/hydra/pcdm/services/collection/remove_collection.rb +0 -36
  38. data/lib/hydra/pcdm/services/collection/remove_object.rb +0 -43
  39. data/lib/hydra/pcdm/services/collection/remove_related_object.rb +0 -36
  40. data/lib/hydra/pcdm/services/object/add_object.rb +0 -20
  41. data/lib/hydra/pcdm/services/object/add_related_object.rb +0 -21
  42. data/lib/hydra/pcdm/services/object/get_objects.rb +0 -18
  43. data/lib/hydra/pcdm/services/object/get_related_objects.rb +0 -17
  44. data/lib/hydra/pcdm/services/object/remove_object.rb +0 -43
  45. data/lib/hydra/pcdm/services/object/remove_related_object.rb +0 -36
  46. data/spec/hydra/pcdm/services/collection/add_collection_spec.rb +0 -197
  47. data/spec/hydra/pcdm/services/collection/add_object_spec.rb +0 -132
  48. data/spec/hydra/pcdm/services/collection/add_related_object_spec.rb +0 -94
  49. data/spec/hydra/pcdm/services/collection/get_collections_spec.rb +0 -40
  50. data/spec/hydra/pcdm/services/collection/get_objects_spec.rb +0 -40
  51. data/spec/hydra/pcdm/services/collection/get_related_objects_spec.rb +0 -37
  52. data/spec/hydra/pcdm/services/collection/remove_collection_spec.rb +0 -143
  53. data/spec/hydra/pcdm/services/collection/remove_object_spec.rb +0 -180
  54. data/spec/hydra/pcdm/services/collection/remove_related_object_spec.rb +0 -146
  55. data/spec/hydra/pcdm/services/file/add_type_spec.rb +0 -19
  56. data/spec/hydra/pcdm/services/object/add_object_spec.rb +0 -186
  57. data/spec/hydra/pcdm/services/object/add_related_object_spec.rb +0 -94
  58. data/spec/hydra/pcdm/services/object/get_objects_spec.rb +0 -33
  59. data/spec/hydra/pcdm/services/object/get_related_objects_spec.rb +0 -39
  60. data/spec/hydra/pcdm/services/object/remove_object_spec.rb +0 -158
  61. data/spec/hydra/pcdm/services/object/remove_related_object_spec.rb +0 -126
@@ -1,33 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Hydra::PCDM::GetObjectsFromObject do
4
-
5
- subject { Hydra::PCDM::Object.create }
6
-
7
- let(:object1) { Hydra::PCDM::Object.create }
8
- let(:object2) { Hydra::PCDM::Object.create }
9
-
10
- describe '#call' do
11
- it 'should return empty array when no members' do
12
- subject.save
13
- expect(Hydra::PCDM::GetObjectsFromObject.call( subject )).to eq []
14
- end
15
-
16
- context 'with files and objects' do
17
- let(:file1) { subject.files.build }
18
- let(:file2) { subject.files.build }
19
-
20
- before do
21
- file1.content = "I'm a file"
22
- file2.content = "I am too"
23
- Hydra::PCDM::AddObjectToObject.call( subject, object1 )
24
- Hydra::PCDM::AddObjectToObject.call( subject, object2 )
25
- subject.save!
26
- end
27
-
28
- it 'should only return objects' do
29
- expect(Hydra::PCDM::GetObjectsFromObject.call( subject )).to eq [object1,object2]
30
- end
31
- end
32
- end
33
- end
@@ -1,39 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Hydra::PCDM::GetRelatedObjectsFromObject do
4
-
5
- subject { Hydra::PCDM::Object.create }
6
-
7
- let(:object1) { Hydra::PCDM::Object.create }
8
- let(:object2) { Hydra::PCDM::Object.create }
9
-
10
- describe '#call' do
11
- it 'should return empty array when no related object' do
12
- subject.save
13
- expect(Hydra::PCDM::GetRelatedObjectsFromObject.call( subject )).to eq []
14
- end
15
-
16
-
17
- context 'with files and objects' do
18
- let(:file1) { subject.files.build }
19
- let(:file2) { subject.files.build }
20
-
21
- before do
22
- file1.content = "I'm a file"
23
- file2.content = "I am too"
24
- Hydra::PCDM::AddObjectToObject.call( subject, object1 )
25
- Hydra::PCDM::AddObjectToObject.call( subject, object2 )
26
- subject.save!
27
- end
28
-
29
- it 'should return empty array when only files and object are aggregated' do
30
- expect(Hydra::PCDM::GetRelatedObjectsFromObject.call( subject )).to eq []
31
- end
32
-
33
- it 'should only return related objects' do
34
- Hydra::PCDM::AddRelatedObjectToObject.call( subject, object2 )
35
- expect(Hydra::PCDM::GetRelatedObjectsFromObject.call( subject )).to eq [object2]
36
- end
37
- end
38
- end
39
- end
@@ -1,158 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Hydra::PCDM::RemoveObjectFromObject do
4
-
5
- subject { Hydra::PCDM::Object.create }
6
-
7
- let(:object1) { Hydra::PCDM::Object.create }
8
- let(:object2) { Hydra::PCDM::Object.create }
9
- let(:object3) { Hydra::PCDM::Object.create }
10
- let(:object4) { Hydra::PCDM::Object.create }
11
- let(:object5) { Hydra::PCDM::Object.create }
12
-
13
- describe '#call' do
14
- context 'when it is the only object' do
15
- before do
16
- Hydra::PCDM::AddObjectToObject.call( subject, object1 )
17
- subject.save
18
- expect( Hydra::PCDM::GetObjectsFromObject.call( subject.reload )).to eq [object1]
19
- end
20
-
21
- it 'should remove object' do
22
- expect( Hydra::PCDM::RemoveObjectFromObject.call( subject, object1 ) ).to eq object1
23
- expect( Hydra::PCDM::GetObjectsFromObject.call( subject.reload )).to eq []
24
- end
25
- end
26
-
27
- context 'when multiple objects' do
28
- before do
29
- Hydra::PCDM::AddObjectToObject.call( subject, object1 )
30
- Hydra::PCDM::AddObjectToObject.call( subject, object2 )
31
- Hydra::PCDM::AddObjectToObject.call( subject, object3 )
32
- Hydra::PCDM::AddObjectToObject.call( subject, object4 )
33
- Hydra::PCDM::AddObjectToObject.call( subject, object5 )
34
- subject.save
35
- expect( Hydra::PCDM::GetObjectsFromObject.call( subject.reload )).to eq [object1,object2,object3,object4,object5]
36
- end
37
-
38
- it 'should remove first object' do
39
- expect( Hydra::PCDM::RemoveObjectFromObject.call( subject, object1 ) ).to eq object1
40
- expect( Hydra::PCDM::GetObjectsFromObject.call( subject.reload )).to eq [object2,object3,object4,object5]
41
- end
42
-
43
- it 'should remove last object' do
44
- expect( Hydra::PCDM::RemoveObjectFromObject.call( subject, object5 ) ).to eq object5
45
- expect( Hydra::PCDM::GetObjectsFromObject.call( subject.reload )).to eq [object1,object2,object3,object4]
46
- end
47
-
48
- it 'should remove middle object' do
49
- expect( Hydra::PCDM::RemoveObjectFromObject.call( subject, object3 ) ).to eq object3
50
- expect( Hydra::PCDM::GetObjectsFromObject.call( subject.reload )).to eq [object1,object2,object4,object5]
51
- end
52
- end
53
-
54
- context 'when object repeats' do
55
- before do
56
- Hydra::PCDM::AddObjectToObject.call( subject, object1 )
57
- Hydra::PCDM::AddObjectToObject.call( subject, object2 )
58
- Hydra::PCDM::AddObjectToObject.call( subject, object3 )
59
- Hydra::PCDM::AddObjectToObject.call( subject, object2 )
60
- Hydra::PCDM::AddObjectToObject.call( subject, object4 )
61
- Hydra::PCDM::AddObjectToObject.call( subject, object2 )
62
- Hydra::PCDM::AddObjectToObject.call( subject, object5 )
63
- subject.save
64
- expect(Hydra::PCDM::GetObjectsFromObject.call( subject )).to eq [object1,object2,object3,object2,object4,object2,object5]
65
- end
66
-
67
- it 'should remove first occurrence' do
68
- skip 'skipping this test because issue #102 needs to be addressed' do
69
- expect( Hydra::PCDM::RemoveObjectFromObject.call( subject, object2 ) ).to eq object2
70
- expect( Hydra::PCDM::GetObjectsFromObject.call( subject.reload )).to eq [object1,object3,object2,object4,object2,object5]
71
- end
72
- end
73
-
74
- it 'should remove last occurrence' do
75
- skip 'skipping this test because issue #102 needs to be addressed' do
76
- expect( Hydra::PCDM::RemoveObjectFromObject.call( subject, object2, -1 ) ).to eq object2
77
- expect( Hydra::PCDM::GetObjectsFromObject.call( subject.reload )).to eq [object1,object2,object3,object2,object4,object5]
78
- end
79
- end
80
-
81
- it 'should remove nth occurrence' do
82
- skip 'skipping this test because issue #102 needs to be addressed' do
83
- expect( Hydra::PCDM::RemoveObjectFromObject.call( subject, object2, 2 ) ).to eq object2
84
- expect( Hydra::PCDM::GetObjectsFromObject.call( subject.reload )).to eq [object1,object2,object3,object4,object2,object5]
85
- end
86
- end
87
- end
88
-
89
- context 'when object is missing' do
90
- it 'should return nil' do
91
- subject.save
92
- expect( Hydra::PCDM::RemoveObjectFromObject.call( subject.reload, object1 )).to be nil
93
- end
94
-
95
- it 'should return nil' do
96
- Hydra::PCDM::AddObjectToObject.call( subject, object1 )
97
- Hydra::PCDM::AddObjectToObject.call( subject, object2 )
98
- Hydra::PCDM::AddObjectToObject.call( subject, object4 )
99
- Hydra::PCDM::AddObjectToObject.call( subject, object5 )
100
- subject.save
101
- expect( Hydra::PCDM::RemoveObjectFromObject.call( subject.reload, object3 )).to be nil
102
- end
103
- end
104
- end
105
-
106
- context 'with unacceptable objects' do
107
- let(:collection1) { Hydra::PCDM::Collection.create }
108
- let(:file1) { Hydra::PCDM::File.new }
109
- let(:non_PCDM_object) { "I'm not a PCDM object" }
110
- let(:af_base_object) { ActiveFedora::Base.create }
111
-
112
- let(:error_type) { ArgumentError }
113
- let(:error_message) { 'child_object must be a pcdm object' }
114
-
115
- it 'should NOT remove Hydra::PCDM::Collections from objects aggregation' do
116
- expect{ Hydra::PCDM::RemoveObjectFromObject.call( subject, collection1 ) }.to raise_error(error_type,error_message)
117
- end
118
-
119
- it 'should NOT remove Hydra::PCDM::Files from objects aggregation' do
120
- expect{ Hydra::PCDM::RemoveObjectFromObject.call( subject, file1 ) }.to raise_error(error_type,error_message)
121
- end
122
-
123
- it 'should NOT remove non-PCDM objects from objects aggregation' do
124
- expect{ Hydra::PCDM::RemoveObjectFromObject.call( subject, non_PCDM_object ) }.to raise_error(error_type,error_message)
125
- end
126
-
127
- it 'should NOT remove AF::Base objects from objects aggregation' do
128
- expect{ Hydra::PCDM::RemoveObjectFromObject.call( subject, af_base_object ) }.to raise_error(error_type,error_message)
129
- end
130
- end
131
-
132
- context 'with unacceptable parent object' do
133
- let(:object2) { Hydra::PCDM::Object.create }
134
- let(:collection1) { Hydra::PCDM::Collection.create }
135
- let(:file1) { Hydra::PCDM::File.new }
136
- let(:non_PCDM_object) { "I'm not a PCDM object" }
137
- let(:af_base_object) { ActiveFedora::Base.create }
138
-
139
- let(:error_type) { ArgumentError }
140
- let(:error_message) { 'parent_object must be a pcdm object' }
141
-
142
- it 'should NOT accept Hydra::PCDM::Collections as parent object' do
143
- expect{ Hydra::PCDM::RemoveObjectFromObject.call( collection1, object2 ) }.to raise_error(error_type,error_message)
144
- end
145
-
146
- it 'should NOT accept Hydra::PCDM::Files as parent object' do
147
- expect{ Hydra::PCDM::RemoveObjectFromObject.call( file1, object2 ) }.to raise_error(error_type,error_message)
148
- end
149
-
150
- it 'should NOT accept non-PCDM objects as parent object' do
151
- expect{ Hydra::PCDM::RemoveObjectFromObject.call( non_PCDM_object, object2 ) }.to raise_error(error_type,error_message)
152
- end
153
-
154
- it 'should NOT accept AF::Base objects as parent object' do
155
- expect{ Hydra::PCDM::RemoveObjectFromObject.call( af_base_object, object2 ) }.to raise_error(error_type,error_message)
156
- end
157
- end
158
- end
@@ -1,126 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Hydra::PCDM::RemoveRelatedObjectFromObject do
4
-
5
- subject { Hydra::PCDM::Object.create }
6
-
7
- let(:object1) { Hydra::PCDM::Object.create }
8
- let(:object2) { Hydra::PCDM::Object.create }
9
- let(:object3) { Hydra::PCDM::Object.create }
10
- let(:object4) { Hydra::PCDM::Object.create }
11
- let(:object5) { Hydra::PCDM::Object.create }
12
-
13
- let(:file1) { Hydra::PCDM::File.new }
14
- let(:file2) { Hydra::PCDM::File.new }
15
-
16
- describe '#call' do
17
- context 'when it is the only related object' do
18
- before do
19
- Hydra::PCDM::AddRelatedObjectToObject.call( subject, object1 )
20
- subject.save
21
- expect( Hydra::PCDM::GetRelatedObjectsFromObject.call( subject.reload )).to eq [object1]
22
- end
23
-
24
- it 'should remove related object' do
25
- expect( Hydra::PCDM::RemoveRelatedObjectFromObject.call( subject, object1 ) ).to eq object1
26
- expect( Hydra::PCDM::GetRelatedObjectsFromObject.call( subject.reload )).to eq []
27
- end
28
- end
29
-
30
- context 'when multiple related objects' do
31
- before do
32
- Hydra::PCDM::AddRelatedObjectToObject.call( subject, object1 )
33
- Hydra::PCDM::AddRelatedObjectToObject.call( subject, object2 )
34
- Hydra::PCDM::AddRelatedObjectToObject.call( subject, object3 )
35
- Hydra::PCDM::AddRelatedObjectToObject.call( subject, object4 )
36
- Hydra::PCDM::AddRelatedObjectToObject.call( subject, object5 )
37
- subject.save
38
- expect( Hydra::PCDM::GetRelatedObjectsFromObject.call( subject.reload )).to eq [object1,object2,object3,object4,object5]
39
- end
40
-
41
- it 'should remove first related object' do
42
- expect( Hydra::PCDM::RemoveRelatedObjectFromObject.call( subject, object1 ) ).to eq object1
43
- expect( Hydra::PCDM::GetRelatedObjectsFromObject.call( subject.reload )).to eq [object2,object3,object4,object5]
44
- end
45
-
46
- it 'should remove last related object' do
47
- expect( Hydra::PCDM::RemoveRelatedObjectFromObject.call( subject, object5 ) ).to eq object5
48
- expect( Hydra::PCDM::GetRelatedObjectsFromObject.call( subject.reload )).to eq [object1,object2,object3,object4]
49
- end
50
-
51
- it 'should remove middle related object' do
52
- expect( Hydra::PCDM::RemoveRelatedObjectFromObject.call( subject, object3 ) ).to eq object3
53
- expect( Hydra::PCDM::GetRelatedObjectsFromObject.call( subject.reload )).to eq [object1,object2,object4,object5]
54
- end
55
- end
56
-
57
- context 'when related object is missing' do
58
- it 'should return nil when 0 related objects and 0 objects' do
59
- subject.save
60
- expect( Hydra::PCDM::RemoveRelatedObjectFromObject.call( subject.reload, object1 )).to be nil
61
- end
62
-
63
- it 'should return nil when other related objects' do
64
- Hydra::PCDM::AddRelatedObjectToObject.call( subject, object1 )
65
- Hydra::PCDM::AddRelatedObjectToObject.call( subject, object2 )
66
- Hydra::PCDM::AddRelatedObjectToObject.call( subject, object4 )
67
- Hydra::PCDM::AddRelatedObjectToObject.call( subject, object5 )
68
- subject.save
69
- expect( Hydra::PCDM::RemoveRelatedObjectFromObject.call( subject.reload, object3 )).to be nil
70
- end
71
- end
72
- end
73
-
74
- context 'with unacceptable related objects' do
75
- let(:collection1) { Hydra::PCDM::Collection.create }
76
- let(:file1) { Hydra::PCDM::File.new }
77
- let(:non_PCDM_object) { "I'm not a PCDM object" }
78
- let(:af_base_object) { ActiveFedora::Base.create }
79
-
80
- let(:error_type) { ArgumentError }
81
- let(:error_message) { 'child_related_object must be a pcdm object' }
82
-
83
- it 'should NOT remove Hydra::PCDM::Collections from related_objects aggregation' do
84
- expect{ Hydra::PCDM::RemoveRelatedObjectFromObject.call( subject, collection1 ) }.to raise_error(error_type,error_message)
85
- end
86
-
87
- it 'should NOT remove Hydra::PCDM::Files from related_objects aggregation' do
88
- expect{ Hydra::PCDM::RemoveRelatedObjectFromObject.call( subject, file1 ) }.to raise_error(error_type,error_message)
89
- end
90
-
91
- it 'should NOT remove non-PCDM objects from related_objects aggregation' do
92
- expect{ Hydra::PCDM::RemoveRelatedObjectFromObject.call( subject, non_PCDM_object ) }.to raise_error(error_type,error_message)
93
- end
94
-
95
- it 'should NOT remove AF::Base objects from related_objects aggregation' do
96
- expect{ Hydra::PCDM::RemoveRelatedObjectFromObject.call( subject, af_base_object ) }.to raise_error(error_type,error_message)
97
- end
98
- end
99
-
100
- context 'with unacceptable parent object' do
101
- let(:object2) { Hydra::PCDM::Object.create }
102
- let(:collection1) { Hydra::PCDM::Collection.create }
103
- let(:file1) { Hydra::PCDM::File.new }
104
- let(:non_PCDM_object) { "I'm not a PCDM object" }
105
- let(:af_base_object) { ActiveFedora::Base.create }
106
-
107
- let(:error_type) { ArgumentError }
108
- let(:error_message) { 'parent_object must be a pcdm object' }
109
-
110
- it 'should NOT accept Hydra::PCDM::Objects as parent object' do
111
- expect{ Hydra::PCDM::RemoveRelatedObjectFromObject.call( collection1, object2 ) }.to raise_error(error_type,error_message)
112
- end
113
-
114
- it 'should NOT accept Hydra::PCDM::Files as parent object' do
115
- expect{ Hydra::PCDM::RemoveRelatedObjectFromObject.call( file1, object2 ) }.to raise_error(error_type,error_message)
116
- end
117
-
118
- it 'should NOT accept non-PCDM objects as parent object' do
119
- expect{ Hydra::PCDM::RemoveRelatedObjectFromObject.call( non_PCDM_object, object2 ) }.to raise_error(error_type,error_message)
120
- end
121
-
122
- it 'should NOT accept AF::Base objects as parent object' do
123
- expect{ Hydra::PCDM::RemoveRelatedObjectFromObject.call( af_base_object, object2 ) }.to raise_error(error_type,error_message)
124
- end
125
- end
126
- end