mongodb 0.0.5 → 0.0.6

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.
@@ -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: