mongodb 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,13 +4,12 @@ module Mongo::Object
4
4
  def valid? opts = {}
5
5
  opts = ::Mongo::Object.parse_options opts
6
6
  begin
7
- return false unless errors.empty?
8
-
9
- return false if opts[:callbacks] and !::Mongo::Object.run_callbacks(self, :before, :validate)
7
+ return false if opts[:callbacks] and !::Mongo::Object.run_before_callbacks(self, :validate)
10
8
 
11
9
  child_opts = opts.merge internal: true
12
- if child_objects.all?{|group| group.all?{|obj| obj.valid?(child_opts)}} and errors.empty?
13
- ::Mongo::Object.run_callbacks(self, :after, :validate) if opts[:callbacks]
10
+ children_valid = child_objects.all?{|group| group.all?{|obj| obj.valid?(child_opts)}}
11
+ if children_valid and ::Mongo::Object.run_validations(self) and errors.empty?
12
+ ::Mongo::Object.run_after_callbacks(self, :validate) if opts[:callbacks]
14
13
  true
15
14
  else
16
15
  false
@@ -136,12 +135,30 @@ module Mongo::Object
136
135
  def build doc
137
136
  return unless doc
138
137
  obj = _build doc
139
- obj.send :update_internal_state! if obj.is_a? ::Mongo::Object
138
+ obj.send :update_original_children! if obj.is_a? ::Mongo::Object
140
139
  obj
141
140
  end
142
141
 
143
- def run_callbacks obj, type, method_name
144
- obj.respond_to?(:run_callbacks) ? obj.run_callbacks(type, method_name) : true
142
+ def run_before_callbacks obj, method
143
+ if obj.respond_to?(:run_before_callbacks)
144
+ obj.run_before_callbacks(:save, method: :save) if method == :update or method == :create
145
+ obj.run_before_callbacks(method, method: method)
146
+ else
147
+ true
148
+ end
149
+ end
150
+
151
+ def run_after_callbacks obj, method
152
+ if obj.respond_to?(:run_before_callbacks)
153
+ obj.run_after_callbacks(method, method: method)
154
+ obj.run_after_callbacks(:save, method: :save) if method == :update or method == :create
155
+ else
156
+ true
157
+ end
158
+ end
159
+
160
+ def run_validations obj
161
+ obj.respond_to?(:run_validations) ? obj.run_validations : true
145
162
  end
146
163
 
147
164
  protected
@@ -183,17 +200,15 @@ module Mongo::Object
183
200
  end
184
201
 
185
202
  protected
186
- attr_writer :_original_children
187
- def _original_children
188
- @_original_children ||= []
189
- end
203
+ attr_writer :original_children
204
+ def original_children; @_original_children ||= [] end
190
205
 
191
- def update_internal_state!
206
+ def update_original_children!
192
207
  return unless ::Mongo.defaults[:callbacks]
193
208
 
194
- _original_children.clear
209
+ original_children.clear
195
210
  ::Mongo::Object.each_object self, false do |obj|
196
- _original_children << obj
211
+ original_children << obj
197
212
  end
198
213
  end
199
214
 
@@ -210,34 +225,34 @@ module Mongo::Object
210
225
  unless @_child_objects
211
226
  created_children, updated_children, destroyed_children = [], [], []
212
227
 
213
- original_children_ids = Set.new; _original_children.each{|obj| original_children_ids << obj.object_id}
228
+ original_children_ids = Set.new; original_children.each{|obj| original_children_ids << obj.object_id}
214
229
  ::Mongo::Object.each_object self, false do |obj|
215
230
  (original_children_ids.include?(obj.object_id) ? updated_children : created_children) << obj
216
231
  end
217
232
 
218
233
  children_ids = Set.new; ::Mongo::Object.each_object(self, false){|obj| children_ids << obj.object_id}
219
- destroyed_children = _original_children.select{|obj| !children_ids.include?(obj.object_id)}
234
+ destroyed_children = original_children.select{|obj| !children_ids.include?(obj.object_id)}
220
235
 
221
236
  @_child_objects = [created_children, updated_children, destroyed_children]
222
237
  end
223
238
  @_child_objects
224
239
  end
225
240
 
226
- def with_object_callbacks method_name, opts, &block
241
+ def with_object_callbacks method, opts, &block
227
242
  opts = ::Mongo::Object.parse_options opts
228
243
 
229
244
  # validation
230
245
  return false if opts[:validate] and !valid?(opts.merge(internal: true))
231
246
 
232
247
  # before callbacks
233
- return false if opts[:callbacks] and !run_all_callbacks(:before, method_name)
248
+ return false if opts[:callbacks] and !run_all_callbacks(:before, method)
234
249
 
235
250
  # saving
236
251
  block.call ::Mongo::Object.to_mongo_options(opts)
237
- update_internal_state!
252
+ update_original_children!
238
253
 
239
254
  # after callbacks
240
- run_all_callbacks :after, method_name if opts[:callbacks]
255
+ run_all_callbacks :after, method if opts[:callbacks]
241
256
 
242
257
  true
243
258
  ensure
@@ -245,36 +260,36 @@ module Mongo::Object
245
260
  end
246
261
 
247
262
  # TODO1 move to static method
248
- def run_all_callbacks type, method_name
263
+ def run_all_callbacks type, method
249
264
  result = if type == :before
250
- ::Mongo::Object.run_callbacks self, type, method_name
265
+ ::Mongo::Object.run_before_callbacks self, method
251
266
  else
252
267
  true
253
268
  end
254
269
 
255
- result &= if method_name == :create
270
+ result &= if method == :create
256
271
  child_objects.all? do |group|
257
272
  group.all? do |obj|
258
- obj.run_all_callbacks type, method_name
273
+ obj.run_all_callbacks type, method
259
274
  end
260
275
  end
261
- elsif method_name == :update
276
+ elsif method == :update
262
277
  created_children, updated_children, destroyed_children = child_objects
263
278
  created_children.all?{|obj| obj.run_all_callbacks type, :create} and
264
279
  updated_children.all?{|obj| obj.run_all_callbacks type, :update} and
265
280
  destroyed_children.all?{|obj| obj.run_all_callbacks type, :destroy}
266
- elsif method_name == :destroy
281
+ elsif method == :destroy
267
282
  child_objects.all? do |group|
268
283
  group.all? do |obj|
269
- obj.run_all_callbacks type, method_name
284
+ obj.run_all_callbacks type, method
270
285
  end
271
286
  end
272
287
  else
273
- raise_error "unknown callback method (#{method_name})!"
288
+ raise_error "unknown callback method (#{method})!"
274
289
  end
275
290
 
276
291
  result &= if type == :after
277
- ::Mongo::Object.run_callbacks self, type, method_name
292
+ ::Mongo::Object.run_after_callbacks self, method
278
293
  else
279
294
  true
280
295
  end
@@ -22,7 +22,7 @@ describe 'Object callbacks' do
22
22
  end
23
23
 
24
24
  it 'create' do
25
- %w(before_validate after_validate before_create after_create).each do |name|
25
+ %w(before_validate after_validate before_save before_create after_create after_save).each do |name|
26
26
  @player.should_receive(name).once.ordered.and_return(true)
27
27
  @mission.should_receive(name).once.ordered.and_return(true)
28
28
  end
@@ -33,7 +33,7 @@ describe 'Object callbacks' do
33
33
  it 'update' do
34
34
  db.players.save(@player).should be_true
35
35
 
36
- %w(before_validate after_validate before_update after_update).each do |name|
36
+ %w(before_validate after_validate before_save before_update after_update after_save).each do |name|
37
37
  @player.should_receive(name).once.ordered.and_return(true)
38
38
  @mission.should_receive(name).once.ordered.and_return(true)
39
39
  end
@@ -63,8 +63,8 @@ describe 'Object callbacks' do
63
63
  end
64
64
 
65
65
  it 'should be able interrupt CRUD' do
66
- @mission.stub! :run_callbacks do |type, method_name|
67
- false if type == :before and method_name == :create
66
+ @mission.stub! :run_before_callbacks do |method_name|
67
+ false if method_name == :create
68
68
  end
69
69
  db.players.save(@player).should be_false
70
70
  db.players.count.should == 0
@@ -7,8 +7,13 @@ require 'driver/spec_helper'
7
7
 
8
8
  # To simplify callback expectations
9
9
  module RSpec::CallbackHelper
10
- def run_callbacks type, method_name
11
- callback_method_name = :"#{type}_#{method_name}"
10
+ def run_before_callbacks method_name, opts = {}
11
+ callback_method_name = :"before_#{method_name}"
12
+ respond_to?(callback_method_name) ? send(callback_method_name) : true
13
+ end
14
+
15
+ def run_after_callbacks method_name, opts = {}
16
+ callback_method_name = :"after_#{method_name}"
12
17
  respond_to?(callback_method_name) ? send(callback_method_name) : true
13
18
  end
14
19
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongodb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: