couchbase-model-relationship 0.1.14 → 0.1.15

Sign up to get free protection for your applications and to get access to all the features.
@@ -11,18 +11,16 @@ module Couchbase
11
11
  end
12
12
 
13
13
  # Should this only fire if we had a parent and assigned the id?
14
- retried = false
15
14
  begin
16
15
  create_without_parent_id(options)
17
16
  rescue Couchbase::Error::KeyExists => error
18
- if !retried && ok_to_merge_on_key_exists_error?
19
- retried = true
17
+ if ok_to_merge_on_key_exists_error?
20
18
  on_key_exists_merge_from_db!
21
19
 
22
- retry
20
+ save # Can't retry because that still tries 'add'
21
+ else
22
+ raise error
23
23
  end
24
-
25
- raise error
26
24
  end
27
25
  end
28
26
 
@@ -1,7 +1,7 @@
1
1
  module Couchbase
2
2
  class Model
3
3
  module Relationship
4
- VERSION = "0.1.14"
4
+ VERSION = "0.1.15"
5
5
  end
6
6
  end
7
7
  end
data/spec/child_spec.rb CHANGED
@@ -38,33 +38,51 @@ describe "children" do
38
38
  end
39
39
 
40
40
  describe "with collisions" do
41
+
42
+ before(:all) do
43
+ @mock = start_mock
44
+ bucket = Couchbase.connect(:hostname => @mock.host, :port => @mock.port)
45
+
46
+ ChildMergeTest.bucket = bucket
47
+ ChildTest.bucket = bucket
48
+ ChildTestParent.bucket = bucket
49
+ end
50
+
51
+ after(:all) do
52
+ stop_mock @mock
53
+
54
+ ChildMergeTest.bucket = nil
55
+ ChildTest.bucket = nil
56
+ ChildTestParent.bucket = nil
57
+ end
58
+
41
59
  let(:collider) { ChildMergeTest.new(parent: parent) }
42
- let(:bucket) { stub }
60
+ let(:existing) { ChildMergeTest.new(parent: parent).save! }
43
61
 
44
62
  before do
45
- parent.id = "parent:#{Time.now.to_i}"
46
- ChildMergeTest.stubs(bucket: bucket)
63
+ parent.id = "parent:#{Time.now.to_f}"
64
+
65
+ subject.parent = parent
47
66
  end
48
67
 
49
68
  it "just fails if no merge method" do
50
- bucket.expects(:add).raises(Couchbase::Error::KeyExists)
51
- ChildTest.stubs(bucket: bucket)
69
+ subject.class.new(parent: parent).save!
52
70
 
53
71
  expect { subject.save }.to raise_error(Couchbase::Error::KeyExists)
54
72
  end
55
73
 
56
74
  it "just fails with no parent" do
57
- bucket.expects(:add).raises(Couchbase::Error::KeyExists)
58
-
59
75
  collider.parent = nil
76
+ collider.instance_variable_set(:@id, existing.id)
60
77
  collider.expects(:on_key_exists_merge_from_db!).never
61
78
 
62
79
  expect { collider.save }.to raise_error(Couchbase::Error::KeyExists)
63
80
  end
64
81
 
65
82
  it "just fails with a parent and a non-parent derived id" do
66
- collider.instance_variable_set(:@id, "abc123:1234")
67
- bucket.expects(:add).raises(Couchbase::Error::KeyExists)
83
+ ChildMergeTest.bucket.add("abc-123" => "boo")
84
+
85
+ collider.instance_variable_set(:@id, "abc-123")
68
86
  collider.expects(:on_key_exists_merge_from_db!).never
69
87
 
70
88
  expect { collider.save }.to raise_error(Couchbase::Error::KeyExists)
@@ -72,9 +90,7 @@ describe "children" do
72
90
 
73
91
  # These should really exercise a real backend
74
92
  it "retries if mergable" do
75
- seq = sequence("collision")
76
- bucket.expects(:add).raises(Couchbase::Error::KeyExists).in_sequence(seq)
77
- bucket.expects(:add).returns(true).in_sequence(seq)
93
+ existing
78
94
 
79
95
  collider.expects(:on_key_exists_merge_from_db!)
80
96
 
@@ -83,19 +99,20 @@ describe "children" do
83
99
  end
84
100
 
85
101
  it "fails is merging fails" do
86
- bucket.expects(:add).raises(Couchbase::Error::KeyExists)
102
+ existing
87
103
 
88
104
  collider.expects(:on_key_exists_merge_from_db!).raises(ArgumentError)
89
105
 
90
106
  expect { collider.save }.to raise_error(ArgumentError)
91
107
  end
92
108
 
93
- it "only retries once" do
94
- bucket.expects(:add).raises(Couchbase::Error::KeyExists).twice
109
+ it "raises if save after merge fails" do
110
+ existing
95
111
 
96
112
  collider.expects(:on_key_exists_merge_from_db!)
113
+ collider.stubs(:save).raises(RuntimeError)
97
114
 
98
- expect { collider.save }.to raise_error(Couchbase::Error::KeyExists)
115
+ expect { collider.create }.to raise_error(RuntimeError)
99
116
  end
100
117
  end
101
118
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: couchbase-model-relationship
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.14
4
+ version: 0.1.15
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: 2014-06-03 00:00:00.000000000 Z
12
+ date: 2014-06-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activemodel
@@ -218,7 +218,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
218
218
  version: '0'
219
219
  segments:
220
220
  - 0
221
- hash: -1698513283546959422
221
+ hash: -837613692810589615
222
222
  required_rubygems_version: !ruby/object:Gem::Requirement
223
223
  none: false
224
224
  requirements:
@@ -227,7 +227,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
227
227
  version: '0'
228
228
  segments:
229
229
  - 0
230
- hash: -1698513283546959422
230
+ hash: -837613692810589615
231
231
  requirements: []
232
232
  rubyforge_project:
233
233
  rubygems_version: 1.8.24