common_repository_model 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -17,6 +17,10 @@ module CommonRepositoryModel
17
17
 
18
18
  delegate_to 'properties', [:name], unique: true
19
19
 
20
+ def self.find_by_name(name)
21
+ find({name_s: name}).first
22
+ end
23
+
20
24
  # We shouldn't be calling these
21
25
  protected :save, :save!
22
26
  end
@@ -59,7 +59,10 @@ module CommonRepositoryModel
59
59
  has_and_belongs_to_many(method_name, options)
60
60
  end
61
61
 
62
- def save
62
+ before_save :register_parent_and_collections
63
+ def register_parent_and_collections
64
+ self.__area = CommonRepositoryModel::Area.find(area.pid) if area
65
+
63
66
  collected_has_members = membership_registry.has_members.
64
67
  collect do |association_name|
65
68
  public_send(association_name)
@@ -73,11 +76,36 @@ module CommonRepositoryModel
73
76
 
74
77
  self.parent_collections = collected_is_member_of
75
78
 
76
- super
79
+ true
80
+ end
81
+ protected :register_parent_and_collections
82
+
83
+ def is_root?
84
+ parent_collections.size == 0
85
+ end
86
+
87
+ def parent_areas
88
+ parent_collections.collect(&:__area).uniq
89
+ end
90
+
91
+ def area=(an_area)
92
+ if is_root?
93
+ self.__area = an_area
94
+ else
95
+ self.__area = parent_areas.first
96
+ end
97
+ end
98
+
99
+ def area
100
+ if is_root?
101
+ __area
102
+ else
103
+ parent_areas.first
104
+ end
77
105
  end
78
106
 
79
107
  belongs_to(
80
- :area,
108
+ :__area,
81
109
  class_name:'CommonRepositoryModel::Area',
82
110
  property: :is_member_of_area
83
111
  )
@@ -1,3 +1,3 @@
1
1
  module CommonRepositoryModel
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -3,10 +3,8 @@ 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
- }
6
+ after(:each) do
7
+ subject.delete if subject.persisted?
10
8
  end
11
9
 
12
10
  describe 'without persisting' do
@@ -37,7 +35,12 @@ describe CommonRepositoryModel::Area do
37
35
 
38
36
  describe 'integration (with persistence)' do
39
37
  subject { FactoryGirl.create(:area) }
40
- let(:collection) { FactoryGirl.build(:collection) }
38
+ let(:collection) { FactoryGirl.build(:collection, area: nil) }
39
+ it 'should find by name' do
40
+ CommonRepositoryModel::Area.find_by_name(subject.name).must_equal subject
41
+ CommonRepositoryModel::Area.
42
+ find_by_name("#{subject.name}-tmp").must_equal nil
43
+ end
41
44
  it 'should save' do
42
45
  # Before we can add a collection, the containing object
43
46
  # must be saved
@@ -2,21 +2,15 @@ require_relative '../spec_helper'
2
2
  require 'common_repository_model/collection'
3
3
 
4
4
  describe CommonRepositoryModel::Collection do
5
-
6
5
  subject { FactoryGirl.build(:collection) }
7
-
8
6
  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
14
-
15
- it 'should belong_to #area' do
16
- subject.must_respond_to(:area)
17
- subject.must_respond_to(:area=)
18
- subject.must_respond_to(:area_id)
19
- subject.must_respond_to(:area_id=)
7
+ with_persisted_area do |area|
8
+ subject.area = area
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
20
14
  end
21
15
 
22
16
  describe '#find_or_build_data_for_given_slot_names' do
@@ -53,26 +47,51 @@ describe CommonRepositoryModel::Collection do
53
47
 
54
48
 
55
49
  describe 'integration' do
56
- let(:child_collection) { FactoryGirl.build(:collection) }
50
+ let(:child_collection) { FactoryGirl.build(:collection, area: nil) }
51
+ it 'should keep a child collection in the parent collection' do
52
+ with_persisted_area do |area_1|
53
+ with_persisted_area do |area_2|
54
+ area_1.wont_equal area_2
55
+
56
+ subject.area = area_1
57
+ subject.save!
58
+
59
+ child_collection.area = area_2
60
+
61
+ child_collection.parent_collections += [subject]
62
+
63
+ child_collection.area.must_equal subject.area
64
+
65
+ child_collection.save!
66
+
67
+ child_collection.area.must_equal subject.area
68
+ end
69
+ end
70
+ end
57
71
  it 'should handle parent/child collection' do
58
72
  # Before we can add a collection, the containing object
59
73
  # must be saved
60
- subject.save.must_equal true
61
- subject.child_collections << child_collection
62
- subject.save.must_equal true
63
- @collection = subject.class.find(subject.pid)
64
- @child_collection = child_collection.class.find(child_collection.pid)
65
-
66
- # We shouldn't store any child relations
67
- assert_rels_ext(@collection, :has_members, [])
68
- assert_active_fedora_has_many(
69
- @collection, :child_collections, [@child_collection]
70
- )
71
-
72
- assert_rels_ext(@child_collection, :is_member_of, [@collection])
73
- assert_active_fedora_has_many(
74
- @child_collection, :parent_collections, [@collection]
75
- )
74
+ with_persisted_area do |area|
75
+ subject.area = area
76
+ child_collection.area = area
77
+ subject.save!
78
+ subject.child_collections << child_collection
79
+ subject.save!
80
+
81
+ @collection = subject.class.find(subject.pid)
82
+ @child_collection = child_collection.class.find(child_collection.pid)
83
+
84
+ # We shouldn't store any child relations
85
+ assert_rels_ext(@collection, :has_members, [])
86
+ assert_active_fedora_has_many(
87
+ @collection, :child_collections, [@child_collection]
88
+ )
89
+
90
+ assert_rels_ext(@child_collection, :is_member_of, [@collection])
91
+ assert_active_fedora_has_many(
92
+ @child_collection, :parent_collections, [@collection]
93
+ )
94
+ end
76
95
  end
77
96
  end
78
97
 
@@ -2,7 +2,6 @@ require_relative '../spec_helper'
2
2
  require 'common_repository_model/data'
3
3
 
4
4
  describe CommonRepositoryModel::Data do
5
-
6
5
  subject { FactoryGirl.build(:data) }
7
6
 
8
7
  describe 'integration' do
@@ -15,12 +14,12 @@ describe CommonRepositoryModel::Data do
15
14
  it 'should have #slot_name' do
16
15
  subject.must_respond_to :slot_name
17
16
  subject.must_respond_to :slot_name=
18
- end
17
+ end
19
18
 
20
19
  it 'should have #md5_checksum' do
21
20
  subject.must_respond_to :md5_checksum
22
21
  subject.must_respond_to :md5_checksum=
23
- end
22
+ end
24
23
 
25
24
  it 'should have content versions' do
26
25
  subject.content = file_1
@@ -33,16 +32,20 @@ describe CommonRepositoryModel::Data do
33
32
  end
34
33
 
35
34
  it 'should save' do
36
- # Before we can add a collection, the containing object
37
- # must be saved
38
- collection.save
39
- subject.collection = collection
40
- subject.save
35
+ with_persisted_area do |area|
36
+ collection.area = area
37
+ # Before we can add a collection, the containing object
38
+ # must be saved
39
+ collection.save!
40
+ subject.collection = collection
41
+ subject.save!
42
+
43
+ @subject = subject.class.find(subject.pid)
41
44
 
42
- @subject = subject.class.find(subject.pid)
45
+ assert_rels_ext(@subject, :is_part_of, [collection])
46
+ assert_active_fedora_belongs_to(@subject, :collection, collection)
43
47
 
44
- assert_rels_ext(@subject, :is_part_of, [collection])
45
- assert_active_fedora_belongs_to(@subject, :collection, collection)
48
+ end
46
49
  end
47
50
  end
48
51
  end
@@ -53,6 +53,9 @@ class Person < CommonRepositoryModel::Collection
53
53
  end
54
54
 
55
55
  describe CommonRepositoryModel::Collection do
56
+ after(:each) do
57
+ area.delete if area.persisted?
58
+ end
56
59
  let(:area) { FactoryGirl.create(:area) }
57
60
  let(:family) { Family.new(area: area) }
58
61
  let(:lawyer) { Job.new(area: area) }
data/spec/spec_helper.rb CHANGED
@@ -11,6 +11,14 @@ ActiveFedora.init(
11
11
 
12
12
 
13
13
  class MiniTest::Unit::TestCase
14
+
15
+ def with_persisted_area
16
+ area = FactoryGirl.create(:area)
17
+ yield(area)
18
+ ensure
19
+ area.delete
20
+ end
21
+
14
22
  def assert_rels_ext(subject, predicate, objects = [])
15
23
  assert_equal objects.count, subject.relationships(predicate).count
16
24
  objects.each do |object|
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.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: