couchbase-model-relationship 0.1.10 → 0.1.11
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.
@@ -37,6 +37,17 @@ module Couchbase
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
+
def children_changed?
|
41
|
+
changed_children.present?
|
42
|
+
end
|
43
|
+
|
44
|
+
def save_with_changed_children
|
45
|
+
save_if_changed
|
46
|
+
changed_children.each do |child|
|
47
|
+
child.respond_to?(:save_with_changed_children) ? child.save_with_changed_children : child.save_if_changed
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
40
51
|
def delete_with_autodelete_children(options = {})
|
41
52
|
self.class.child_associations.select(&:auto_delete).each do |association|
|
42
53
|
association.fetch(self).try :delete, options
|
@@ -69,6 +80,12 @@ module Couchbase
|
|
69
80
|
end.compact
|
70
81
|
end
|
71
82
|
|
83
|
+
def changed_children
|
84
|
+
loaded_children.select do |child|
|
85
|
+
child.changed? || (child.respond_to?(:children_changed?) ? child.children_changed? : nil)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
72
89
|
def reload_all
|
73
90
|
children.each(&:reload)
|
74
91
|
reload
|
data/spec/dirty_spec.rb
CHANGED
@@ -84,6 +84,23 @@ describe "Dirty" do
|
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
87
|
+
describe "reloading" do
|
88
|
+
before do
|
89
|
+
stub_server DirtyTest
|
90
|
+
end
|
91
|
+
|
92
|
+
it "resets the dirty state" do
|
93
|
+
subject.name = 'abc'
|
94
|
+
subject.save
|
95
|
+
|
96
|
+
subject.name = 'def'
|
97
|
+
subject.should be_changed
|
98
|
+
|
99
|
+
subject.reload
|
100
|
+
subject.should_not be_changed
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
87
104
|
describe "saving" do
|
88
105
|
it "doesn't saves if not changed on request" do
|
89
106
|
subject.stubs(changed?: false)
|
data/spec/parent_spec.rb
CHANGED
@@ -21,6 +21,10 @@ class ParentTest < Couchbase::Model
|
|
21
21
|
child :dont_load, auto_load: false
|
22
22
|
end
|
23
23
|
|
24
|
+
class GrandParentTest < Couchbase::Model
|
25
|
+
child :multiple_child_test
|
26
|
+
end
|
27
|
+
|
24
28
|
class InheritanceTest < ParentTest
|
25
29
|
end
|
26
30
|
|
@@ -144,6 +148,44 @@ describe "parent" do
|
|
144
148
|
subject.save_with_children.should eq(:saved)
|
145
149
|
end
|
146
150
|
|
151
|
+
context "with dirty children" do
|
152
|
+
it "knows if it's children are dirty" do
|
153
|
+
subject = MultipleChildTest.new
|
154
|
+
subject.brother = Brother.new
|
155
|
+
subject.brother.stubs(changed?: false)
|
156
|
+
subject.sister = Sister.new
|
157
|
+
subject.sister.stubs(changed?: true)
|
158
|
+
|
159
|
+
subject.changed_children.should eq([subject.sister])
|
160
|
+
subject.should be_children_changed
|
161
|
+
end
|
162
|
+
|
163
|
+
it "knows if it's grand children are dirty" do
|
164
|
+
subject = GrandParentTest.new
|
165
|
+
subject.multiple_child_test = MultipleChildTest.new
|
166
|
+
subject.multiple_child_test.brother = Brother.new
|
167
|
+
subject.multiple_child_test.brother.stubs(changed?: false)
|
168
|
+
subject.multiple_child_test.sister = Sister.new
|
169
|
+
subject.multiple_child_test.sister.stubs(changed?: true)
|
170
|
+
|
171
|
+
subject.changed_children.should eq([subject.multiple_child_test])
|
172
|
+
subject.should be_children_changed
|
173
|
+
end
|
174
|
+
|
175
|
+
it "saves all dirty objects" do
|
176
|
+
subject = GrandParentTest.new
|
177
|
+
subject.multiple_child_test = MultipleChildTest.new
|
178
|
+
subject.multiple_child_test.brother = Brother.new
|
179
|
+
subject.multiple_child_test.brother.stubs(changed?: false)
|
180
|
+
subject.multiple_child_test.brother.expects(:save).never
|
181
|
+
subject.multiple_child_test.sister = Sister.new
|
182
|
+
subject.multiple_child_test.sister.stubs(changed?: true)
|
183
|
+
subject.multiple_child_test.sister.expects(:save)
|
184
|
+
|
185
|
+
subject.save_with_changed_children
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
147
189
|
it "doesn't save children if the main object isn't valid" do
|
148
190
|
subject = InvalidTest.new
|
149
191
|
subject.brother = Brother.new
|
data/spec/spec_helper.rb
CHANGED
@@ -139,9 +139,9 @@ module RspecHelpers
|
|
139
139
|
end
|
140
140
|
|
141
141
|
def stub_server(*klasses)
|
142
|
-
Thread.current['mock'] = start_mock
|
143
|
-
bucket = Couchbase.connect(:hostname =>
|
144
|
-
|
142
|
+
Thread.current['mock'] = mock = start_mock
|
143
|
+
bucket = Couchbase.connect(:hostname => mock.host, :port => mock.port)
|
144
|
+
klasses.each do |model|
|
145
145
|
model.bucket = bucket
|
146
146
|
end
|
147
147
|
bucket
|
@@ -187,9 +187,9 @@ RSpec.configure do |config|
|
|
187
187
|
config.mock_framework = :mocha
|
188
188
|
config.include RspecHelpers
|
189
189
|
|
190
|
-
|
191
|
-
|
192
|
-
|
190
|
+
config.after(:suite) do
|
191
|
+
Thread.current['mock'].try :stop
|
192
|
+
end
|
193
193
|
end
|
194
194
|
|
195
195
|
Mocha::Configuration.prevent :stubbing_non_existent_method
|
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.
|
4
|
+
version: 0.1.11
|
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:
|
12
|
+
date: 2014-02-06 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:
|
221
|
+
hash: 977357591952759392
|
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:
|
230
|
+
hash: 977357591952759392
|
231
231
|
requirements: []
|
232
232
|
rubyforge_project:
|
233
233
|
rubygems_version: 1.8.24
|