common_repository_model 0.0.1 → 0.0.2
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.
- data/common_repository_model.gemspec +1 -0
- data/lib/common_repository_model/area.rb +7 -2
- data/lib/common_repository_model/collection.rb +16 -0
- data/lib/common_repository_model/version.rb +1 -1
- data/spec/common_respository_model/area_spec.rb +27 -10
- data/spec/common_respository_model/collection_spec.rb +9 -2
- data/spec/common_respository_model/data_spec.rb +2 -7
- data/spec/common_respository_model/integration_spec.rb +16 -16
- data/spec/factories/common_repository_model_factories.rb +17 -0
- data/spec/spec_helper.rb +2 -0
- metadata +20 -2
@@ -10,9 +10,14 @@ module CommonRepositoryModel
|
|
10
10
|
)
|
11
11
|
|
12
12
|
has_metadata(name: "properties",type: ActiveFedora::SimpleDatastream) do |m|
|
13
|
-
m.field '
|
13
|
+
m.field 'name', :string
|
14
14
|
end
|
15
15
|
|
16
|
-
|
16
|
+
validates :name, presence: true
|
17
|
+
|
18
|
+
delegate_to 'properties', [:name], unique: true
|
19
|
+
|
20
|
+
# We shouldn't be calling these
|
21
|
+
protected :save, :save!
|
17
22
|
end
|
18
23
|
end
|
@@ -3,6 +3,20 @@ require_relative './area'
|
|
3
3
|
require_relative './data'
|
4
4
|
require 'set'
|
5
5
|
|
6
|
+
class PersistedValidator < ActiveModel::EachValidator
|
7
|
+
def validate_each(record, attribute, value)
|
8
|
+
is_valid = true
|
9
|
+
is_valid = false if value.nil?
|
10
|
+
begin
|
11
|
+
is_valid = false unless value.persisted?
|
12
|
+
rescue NoMethodError
|
13
|
+
is_valid = false
|
14
|
+
end
|
15
|
+
|
16
|
+
record.errors.add(attribute, 'must be persisted') unless is_valid
|
17
|
+
is_valid
|
18
|
+
end
|
19
|
+
end
|
6
20
|
module CommonRepositoryModel
|
7
21
|
class MembershipRegistry
|
8
22
|
def initialize
|
@@ -68,6 +82,8 @@ module CommonRepositoryModel
|
|
68
82
|
property: :is_member_of_area
|
69
83
|
)
|
70
84
|
|
85
|
+
validates :area, presence: true, persisted: true
|
86
|
+
|
71
87
|
has_many(
|
72
88
|
:child_collections,
|
73
89
|
class_name: 'CommonRepositoryModel::Collection',
|
@@ -3,29 +3,46 @@ require 'common_repository_model/area'
|
|
3
3
|
require 'common_repository_model/collection'
|
4
4
|
|
5
5
|
describe CommonRepositoryModel::Area do
|
6
|
+
describe 'meta test' do
|
7
|
+
it {
|
8
|
+
FactoryGirl.create(:area).persisted?.must_equal true
|
9
|
+
}
|
10
|
+
end
|
6
11
|
|
7
|
-
|
8
|
-
|
12
|
+
describe 'without persisting' do
|
13
|
+
subject { FactoryGirl.build(:area, name: name) }
|
14
|
+
let(:name) { 'My Area Name'}
|
9
15
|
|
10
|
-
|
11
|
-
|
12
|
-
|
16
|
+
it 'should find or create by #name' do
|
17
|
+
lambda { subject.save }.must_raise(NoMethodError)
|
18
|
+
lambda { subject.save! }.must_raise(NoMethodError)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should require a #name' do
|
22
|
+
subject.name = nil
|
23
|
+
subject.valid?.must_equal false
|
24
|
+
subject.name = name
|
25
|
+
subject.valid?.must_equal true
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'should have #name' do
|
29
|
+
subject.name.must_equal name
|
30
|
+
end
|
13
31
|
|
14
|
-
describe 'has_many #collections' do
|
15
32
|
it 'should build #collections' do
|
16
33
|
subject.collections.build.
|
17
34
|
must_be_kind_of(CommonRepositoryModel::Collection)
|
18
35
|
end
|
19
36
|
end
|
20
37
|
|
21
|
-
describe 'integration' do
|
22
|
-
|
38
|
+
describe 'integration (with persistence)' do
|
39
|
+
subject { FactoryGirl.create(:area) }
|
40
|
+
let(:collection) { FactoryGirl.build(:collection) }
|
23
41
|
it 'should save' do
|
24
42
|
# Before we can add a collection, the containing object
|
25
43
|
# must be saved
|
26
|
-
subject.save.must_equal true
|
27
44
|
subject.collections << collection
|
28
|
-
subject.save.must_equal true
|
45
|
+
subject.send(:save).must_equal true
|
29
46
|
new_subject = subject.class.find(subject.pid)
|
30
47
|
|
31
48
|
new_subject.collections.size.must_equal 1
|
@@ -3,7 +3,14 @@ require 'common_repository_model/collection'
|
|
3
3
|
|
4
4
|
describe CommonRepositoryModel::Collection do
|
5
5
|
|
6
|
-
subject {
|
6
|
+
subject { FactoryGirl.build(:collection) }
|
7
|
+
|
8
|
+
it 'should require an area' do
|
9
|
+
subject.area.must_be_kind_of(CommonRepositoryModel::Area)
|
10
|
+
subject.valid?.must_equal true
|
11
|
+
subject.area = nil
|
12
|
+
subject.valid?.must_equal false
|
13
|
+
end
|
7
14
|
|
8
15
|
it 'should belong_to #area' do
|
9
16
|
subject.must_respond_to(:area)
|
@@ -46,7 +53,7 @@ describe CommonRepositoryModel::Collection do
|
|
46
53
|
|
47
54
|
|
48
55
|
describe 'integration' do
|
49
|
-
let(:child_collection) {
|
56
|
+
let(:child_collection) { FactoryGirl.build(:collection) }
|
50
57
|
it 'should handle parent/child collection' do
|
51
58
|
# Before we can add a collection, the containing object
|
52
59
|
# must be saved
|
@@ -3,15 +3,10 @@ require 'common_repository_model/data'
|
|
3
3
|
|
4
4
|
describe CommonRepositoryModel::Data do
|
5
5
|
|
6
|
-
subject {
|
7
|
-
CommonRepositoryModel::Data.new(
|
8
|
-
slot_name: '1234',
|
9
|
-
md5_checksum: 'abcdefg'
|
10
|
-
)
|
11
|
-
}
|
6
|
+
subject { FactoryGirl.build(:data) }
|
12
7
|
|
13
8
|
describe 'integration' do
|
14
|
-
let(:collection) {
|
9
|
+
let(:collection) { FactoryGirl.build(:collection) }
|
15
10
|
let(:file_1) { File.new(__FILE__) }
|
16
11
|
let(:file_2) {
|
17
12
|
File.new(File.join(File.dirname(__FILE__), '../spec_helper.rb'))
|
@@ -53,15 +53,15 @@ class Person < CommonRepositoryModel::Collection
|
|
53
53
|
end
|
54
54
|
|
55
55
|
describe CommonRepositoryModel::Collection do
|
56
|
-
|
57
|
-
let(:family) { Family.new }
|
58
|
-
let(:lawyer) { Job.new }
|
59
|
-
let(:doctor) { Job.new }
|
60
|
-
let(:heathcliff) { Person.new }
|
61
|
-
let(:claire) { Person.new }
|
62
|
-
let(:theo) { Person.new }
|
63
|
-
let(:vanessa) { Person.new }
|
64
|
-
let(:rudy) { Person.new }
|
56
|
+
let(:area) { FactoryGirl.create(:area) }
|
57
|
+
let(:family) { Family.new(area: area) }
|
58
|
+
let(:lawyer) { Job.new(area: area) }
|
59
|
+
let(:doctor) { Job.new(area: area) }
|
60
|
+
let(:heathcliff) { Person.new(area: area) }
|
61
|
+
let(:claire) { Person.new(area: area) }
|
62
|
+
let(:theo) { Person.new(area: area) }
|
63
|
+
let(:vanessa) { Person.new(area: area) }
|
64
|
+
let(:rudy) { Person.new(area: area) }
|
65
65
|
let(:dress) { Clothing.new(slot_name: 'outerwear') }
|
66
66
|
|
67
67
|
before(:all) do
|
@@ -107,14 +107,14 @@ describe CommonRepositoryModel::Collection do
|
|
107
107
|
end
|
108
108
|
|
109
109
|
it 'verifies complicated relationships' do
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
110
|
+
verify_initial_relations_for_family
|
111
|
+
verify_initial_relations_for_theo
|
112
|
+
verify_initial_relations_for_claire
|
113
|
+
verify_initial_relations_for_dress
|
114
114
|
|
115
|
-
|
115
|
+
verify_claire_adding_a_child
|
116
116
|
|
117
|
-
|
117
|
+
verify_claire_losing_a_child
|
118
118
|
|
119
119
|
verify_rudy_losing_a_parent
|
120
120
|
end
|
@@ -182,7 +182,7 @@ describe CommonRepositoryModel::Collection do
|
|
182
182
|
end
|
183
183
|
|
184
184
|
def verify_claire_adding_a_child
|
185
|
-
sandra = Person.new
|
185
|
+
sandra = Person.new(area: area)
|
186
186
|
sandra.save
|
187
187
|
@claire.children << sandra
|
188
188
|
@claire.save
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'common_repository_model/area'
|
2
|
+
require 'common_repository_model/collection'
|
3
|
+
require 'common_repository_model/data'
|
4
|
+
|
5
|
+
FactoryGirl.define do
|
6
|
+
factory :area, class: CommonRepositoryModel::Area do
|
7
|
+
sequence(:name) { |n| "Area #{n}" }
|
8
|
+
to_create { |instance| instance.send(:save!) }
|
9
|
+
end
|
10
|
+
factory :collection, class: CommonRepositoryModel::Collection do
|
11
|
+
area { CommonRepositoryModel::Area.all.first }
|
12
|
+
end
|
13
|
+
factory :data, class: CommonRepositoryModel::Data do
|
14
|
+
sequence(:slot_name) { |n| "Slot Name #{n}" }
|
15
|
+
sequence(:md5_checksum) { |n| "#{n}abc"}
|
16
|
+
end
|
17
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
$:.unshift File.expand_path('../../lib', __FILE__)
|
2
2
|
require 'minitest/autorun'
|
3
3
|
require 'active_fedora'
|
4
|
+
require 'factory_girl'
|
5
|
+
FactoryGirl.find_definitions
|
4
6
|
ActiveFedora.init(
|
5
7
|
fedora_config_path: File.join(File.dirname(__FILE__),"config/fedora.yml"),
|
6
8
|
solr_config_path: File.join(File.dirname(__FILE__),"config/solr.yml"),
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: common_repository_model
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-11-
|
12
|
+
date: 2012-11-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -107,6 +107,22 @@ dependencies:
|
|
107
107
|
- - ! '>='
|
108
108
|
- !ruby/object:Gem::Version
|
109
109
|
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: factory_girl
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
110
126
|
description: Notre Dame's Common Fedora Repository Model
|
111
127
|
email:
|
112
128
|
- jeremy.n.friesen@gmail.com
|
@@ -141,6 +157,7 @@ files:
|
|
141
157
|
- spec/config/fedora.yml
|
142
158
|
- spec/config/predicate_mappings.yml
|
143
159
|
- spec/config/solr.yml
|
160
|
+
- spec/factories/common_repository_model_factories.rb
|
144
161
|
- spec/spec_helper.rb
|
145
162
|
homepage: https://github.com/ndlib/common_repository_model
|
146
163
|
licenses: []
|
@@ -176,4 +193,5 @@ test_files:
|
|
176
193
|
- spec/config/fedora.yml
|
177
194
|
- spec/config/predicate_mappings.yml
|
178
195
|
- spec/config/solr.yml
|
196
|
+
- spec/factories/common_repository_model_factories.rb
|
179
197
|
- spec/spec_helper.rb
|