mongoid 2.5.0 → 2.5.1

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.
@@ -3,6 +3,16 @@
3
3
  For instructions on upgrading to newer versions, visit
4
4
  [mongoid.org](http://mongoid.org/docs/upgrading.html).
5
5
 
6
+ ## 2.5.1
7
+
8
+ ### Resolved Issues
9
+
10
+ * \#2492 Backport cascading callbacks performance and memory fixes from
11
+ 3.0.0-stable.
12
+
13
+ * \#2464 Backport the nested attributes fix for keeping many relations in
14
+ memory when updating attributes. (Chris Thompson)
15
+
6
16
  ## 2.5.0
7
17
 
8
18
  ### New Features
@@ -23,6 +23,20 @@ module Mongoid #:nodoc:
23
23
  define_model_callbacks :create, :destroy, :save, :update
24
24
  end
25
25
 
26
+ # Is the provided type of callback executable by this document?
27
+ #
28
+ # @example Is the callback executable?
29
+ # document.callback_executable?(:save)
30
+ #
31
+ # @param [ Symbol ] kin The type of callback.
32
+ #
33
+ # @return [ true, false ] If the callback can be executed.
34
+ #
35
+ # @since 2.5.1
36
+ def callback_executable?(kind)
37
+ respond_to?("_#{kind}_callbacks")
38
+ end
39
+
26
40
  # Run the callbacks for the document. This overrides active support's
27
41
  # functionality to cascade callbacks to embedded documents that have been
28
42
  # flagged as such.
@@ -39,35 +53,16 @@ module Mongoid #:nodoc:
39
53
  #
40
54
  # @since 2.3.0
41
55
  def run_callbacks(kind, *args, &block)
42
- run_cascading_callbacks(cascadable_children(kind), kind, *args) {}
43
- super(kind, *args, &block)
44
- end
45
-
46
- private
47
-
48
- # Execute the callbacks, including all children that have cascade callbacks
49
- # set to true.
50
- #
51
- # @example Run the cascading callbacks.
52
- # document.run_cascading_callbacks([], :update)
53
- #
54
- # @param [ Array<Document> ] children The cascading children.
55
- # @param [ Symbol ] kind The callback type.
56
- # @param [ Array ] args The options.
57
- #
58
- # @since 2.3.0
59
- def run_cascading_callbacks(children, kind, *args, &block)
60
- if child = children.pop
61
- run_cascading_callbacks(children, kind, *args) do
62
- child.run_callbacks(child_callback_type(kind, child), *args) do
63
- block.call
64
- end
56
+ cascadable_children(kind).each do |child|
57
+ unless child.run_callbacks(child_callback_type(kind, child), *args)
58
+ return false
65
59
  end
66
- else
67
- block.call
68
60
  end
61
+ callback_executable?(kind) ? super(kind, *args, &block) : true
69
62
  end
70
63
 
64
+ private
65
+
71
66
  # Get all the child embedded documents that are flagged as cascadable.
72
67
  #
73
68
  # @example Get all the cascading children.
@@ -239,15 +239,18 @@ module Mongoid #:nodoc:
239
239
  # @example Conditionally find the last document.
240
240
  # person.posts.find(:last, :conditions => { :title => "Sir" })
241
241
  #
242
- # @param [ Symbol, BSON::ObjectId, Array<BSON::ObjectId> ] arg The
243
- # argument to search with.
244
- # @param [ Hash ] options The options to search with.
242
+ # @note This will keep matching documents in memory for iteration
243
+ # later.
244
+ #
245
+ # @param [ Moped::BSON::ObjectId, Array<Moped::BSON::ObjectId> ] arg The ids.
245
246
  #
246
247
  # @return [ Document, Criteria ] The matching document(s).
247
248
  #
248
249
  # @since 2.0.0.beta.1
249
250
  def find(*args)
250
- criteria.find(*args)
251
+ matching = criteria.find(*args)
252
+ Array(matching).each { |doc| target.push(doc) }
253
+ matching
251
254
  end
252
255
 
253
256
  # Instantiate a new references_many relation. Will set the foreign key
@@ -1,4 +1,4 @@
1
1
  # encoding: utf-8
2
2
  module Mongoid #:nodoc
3
- VERSION = "2.5.0"
3
+ VERSION = "2.5.1"
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.0
4
+ version: 2.5.1
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: 2012-09-08 00:00:00.000000000 Z
12
+ date: 2012-10-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activemodel
@@ -429,7 +429,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
429
429
  version: '0'
430
430
  segments:
431
431
  - 0
432
- hash: 2191788509716055350
432
+ hash: -2098337333332267571
433
433
  required_rubygems_version: !ruby/object:Gem::Requirement
434
434
  none: false
435
435
  requirements: