mongoid 2.1.7 → 2.1.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -13,7 +13,7 @@ Mongoid is an ODM (Object-Document-Mapper) framework for MongoDB in Ruby.
13
13
 
14
14
  Mongoid is tested against Ruby 1.8.7, 1.9.2, 1.9.3, REE, Rubinius, and JRuby.
15
15
 
16
- http://travis-ci.org/mongoid/mongoid.png?branch=master&.png {Build History}[http://travis-ci.org/mongoid/mongoid]
16
+ https://secure.travis-ci.org/mongoid/mongoid.png?branch=master&.png {Build History}[http://travis-ci.org/mongoid/mongoid]
17
17
 
18
18
  = Documentation
19
19
 
@@ -26,7 +26,7 @@ en:
26
26
  invalid_field:
27
27
  Defining a field named %{name} is not allowed. Do not define
28
28
  fields that conflict with Mongoid internal attributes or method
29
- names. Use Document#instance_methods to see what names this includes.
29
+ names. Use Mongoid.destructive_fields to see what names this includes.
30
30
  too_many_nested_attribute_records:
31
31
  Accepting nested attributes for %{association} is limited
32
32
  to %{limit} records.
@@ -134,11 +134,12 @@ module Mongoid #:nodoc:
134
134
  #
135
135
  # @since 2.0.0.rc.8
136
136
  def apply_default_attributes
137
- (@attributes ||= {}).tap do |h|
138
- defaults.each_pair do |key, val|
139
- unless h.has_key?(key)
140
- h[key] = val.respond_to?(:call) ? typed_value_for(key, val.call) :
141
- val.duplicable? ? val.dup : val
137
+ (@attributes ||= {}).tap do |attrs|
138
+ defaults.each do |name|
139
+ unless attrs.has_key?(name)
140
+ if field = fields[name]
141
+ attrs[name] = field.eval_default(self)
142
+ end
142
143
  end
143
144
  end
144
145
  end
@@ -8,7 +8,7 @@ module Mongoid #:nodoc
8
8
  # This class is the Mongoid wrapper to the Mongo Ruby driver's collection
9
9
  # object.
10
10
  class Collection
11
- attr_reader :counter, :name
11
+ attr_reader :counter, :klass, :name
12
12
 
13
13
  # All write operations should delegate to the master connection. These
14
14
  # operations mimic the methods on a Mongo:Collection.
@@ -27,7 +27,7 @@ module Mongoid #:nodoc
27
27
  #
28
28
  # @return [ Cursor ] The results.
29
29
  def find(selector = {}, options = {})
30
- cursor = Mongoid::Cursor.new(@klass, self, master(options).find(selector, options))
30
+ cursor = Mongoid::Cursor.new(klass, self, master(options).find(selector, options))
31
31
  if block_given?
32
32
  yield cursor; cursor.close
33
33
  else
@@ -105,7 +105,7 @@ module Mongoid #:nodoc
105
105
  # @return [ Master ] The master connection.
106
106
  def master(options = {})
107
107
  options.delete(:cache)
108
- db = Mongoid.databases[@klass.database] || Mongoid.master
108
+ db = Mongoid.databases[klass.database] || Mongoid.master
109
109
  @master ||= Collections::Master.new(db, @name)
110
110
  end
111
111
 
@@ -124,7 +124,7 @@ module Mongoid #:nodoc
124
124
  #
125
125
  # @since 2.0.0
126
126
  def update(selector, document, options = {})
127
- updater = Threaded.update
127
+ updater = Threaded.update_consumer(klass)
128
128
  if updater
129
129
  updater.consume(selector, document, options)
130
130
  else
@@ -6,11 +6,11 @@ module Mongoid #:nodoc
6
6
  module Collections
7
7
  extend ActiveSupport::Concern
8
8
 
9
+ delegate :collection, :db, :to => "self.class"
10
+
9
11
  included do
10
12
  cattr_accessor :_collection, :collection_name
11
13
  self.collection_name = self.name.collectionize
12
-
13
- delegate :collection, :db, :to => "self.class"
14
14
  end
15
15
 
16
16
  module ClassMethods #:nodoc:
@@ -41,5 +41,53 @@ module Mongoid #:nodoc
41
41
  include Mongoid::Validations
42
42
  include Mongoid::Callbacks
43
43
  include Mongoid::MultiDatabase
44
+
45
+ MODULES = [
46
+ Mongoid::Atomic,
47
+ Mongoid::Attributes,
48
+ Mongoid::Collections,
49
+ Mongoid::Copyable,
50
+ Mongoid::DefaultScope,
51
+ Mongoid::Dirty,
52
+ Mongoid::Extras,
53
+ Mongoid::Fields,
54
+ Mongoid::Hierarchy,
55
+ Mongoid::Indexes,
56
+ Mongoid::Inspection,
57
+ Mongoid::JSON,
58
+ Mongoid::Keys,
59
+ Mongoid::Matchers,
60
+ Mongoid::NamedScope,
61
+ Mongoid::NestedAttributes,
62
+ Mongoid::Persistence,
63
+ Mongoid::Relations,
64
+ Mongoid::Safety,
65
+ Mongoid::Serialization,
66
+ Mongoid::Sharding,
67
+ Mongoid::State,
68
+ Mongoid::Validations,
69
+ Mongoid::Callbacks,
70
+ Mongoid::MultiDatabase,
71
+ ]
72
+
73
+ class << self
74
+
75
+ # Get a list of methods that would be a bad idea to define as field names
76
+ # or override when including Mongoid::Document.
77
+ #
78
+ # @example Bad thing!
79
+ # Mongoid::Components.prohibited_methods
80
+ #
81
+ # @return [ Array<Symbol> ]
82
+ #
83
+ # @since 2.1.8
84
+ def prohibited_methods
85
+ @prohibited_methods ||= MODULES.inject([]) do |methods, mod|
86
+ methods.tap do |mets|
87
+ mets << mod.instance_methods.map{ |m| m.to_sym }
88
+ end
89
+ end.flatten
90
+ end
91
+ end
44
92
  end
45
93
  end
@@ -49,7 +49,6 @@ module Mongoid #:nodoc
49
49
  option :allow_dynamic_fields, :default => true
50
50
  option :autocreate_indexes, :default => false
51
51
  option :binding_defaults, :default => { :binding => false, :continue => true }
52
- option :embedded_object_id, :default => true
53
52
  option :identity_map_enabled, :default => false
54
53
  option :include_root_in_json, :default => false
55
54
  option :max_retries_on_connection_failure, :default => 0
@@ -104,12 +103,7 @@ module Mongoid #:nodoc
104
103
  #
105
104
  # @return [ Array<String> ] An array of bad field names.
106
105
  def destructive_fields
107
- @destructive_fields ||= lambda {
108
- klass = Class.new do
109
- include Mongoid::Document
110
- end
111
- klass.instance_methods(true).collect { |method| method.to_s }
112
- }.call
106
+ Components.prohibited_methods
113
107
  end
114
108
 
115
109
  # Configure mongoid from a hash. This is usually called after parsing a
@@ -251,6 +251,14 @@ module Mongoid #:nodoc:
251
251
  documents
252
252
  end
253
253
 
254
+ def root
255
+ @root ||= documents.first.try(:_root)
256
+ end
257
+
258
+ def root_class
259
+ @root_class ||= root ? root.class : nil
260
+ end
261
+
254
262
  # Set the collection to the collection of the root document.
255
263
  #
256
264
  # @example Set the collection.
@@ -258,7 +266,6 @@ module Mongoid #:nodoc:
258
266
  #
259
267
  # @return [ Collection ] The root collection.
260
268
  def set_collection
261
- root = documents.first.try(:_root)
262
269
  @collection = root.collection if root && !root.embedded?
263
270
  end
264
271
 
@@ -5,10 +5,11 @@ module Mongoid #:nodoc:
5
5
  module Extras
6
6
  extend ActiveSupport::Concern
7
7
 
8
+ delegate :cached?, :to => "self.class"
9
+
8
10
  included do
9
11
  class_attribute :cached
10
12
  self.cached = false
11
- delegate :cached?, :to => "self.class"
12
13
  end
13
14
 
14
15
  module ClassMethods #:nodoc
@@ -13,6 +13,7 @@ require "mongoid/fields/serializable/hash"
13
13
  require "mongoid/fields/serializable/integer"
14
14
  require "mongoid/fields/serializable/bignum"
15
15
  require "mongoid/fields/serializable/fixnum"
16
+ require "mongoid/fields/serializable/nil_class"
16
17
  require "mongoid/fields/serializable/object"
17
18
  require "mongoid/fields/serializable/object_id"
18
19
  require "mongoid/fields/serializable/range"
@@ -30,11 +31,9 @@ module Mongoid #:nodoc
30
31
  module Fields
31
32
  extend ActiveSupport::Concern
32
33
 
33
- included do
34
- # Set up the class attributes that must be available to all subclasses.
35
- # These include defaults, fields
36
- delegate :defaults, :fields, :to => "self.class"
34
+ delegate :defaults, :fields, :to => "self.class"
37
35
 
36
+ included do
38
37
  field(:_type, :type => String)
39
38
  field(:_id, :type => BSON::ObjectId)
40
39
 
@@ -88,13 +87,19 @@ module Mongoid #:nodoc
88
87
  #
89
88
  # @return [ Hash ] The field defaults.
90
89
  def defaults
91
- @defaults ||= {}.tap do |defs|
92
- fields.each_pair do |field_name, field|
93
- unless (default = field.default).nil?
94
- defs[field_name.to_s] = default
95
- end
96
- end
97
- end
90
+ @defaults ||= []
91
+ end
92
+
93
+ # Set the defaults for the class.
94
+ #
95
+ # @example Set the defaults.
96
+ # Person.defaults = defaults
97
+ #
98
+ # @param [ Array ] defaults The array of defaults to set.
99
+ #
100
+ # @since 2.0.0.rc.6
101
+ def defaults=(defaults)
102
+ @defaults = defaults
98
103
  end
99
104
 
100
105
  # Defines all the fields that are accessible on the Document
@@ -113,6 +118,7 @@ module Mongoid #:nodoc
113
118
  #
114
119
  # @return [ Field ] The generated field
115
120
  def field(name, options = {})
121
+ check_field_name!(name)
116
122
  add_field(name.to_s, options)
117
123
  end
118
124
 
@@ -152,7 +158,7 @@ module Mongoid #:nodoc
152
158
  # @since 2.0.0.rc.6
153
159
  def inherited(subclass)
154
160
  super
155
- subclass.fields = fields.dup
161
+ subclass.defaults, subclass.fields = defaults.dup, fields.dup
156
162
  end
157
163
 
158
164
  # Replace a field with a new type.
@@ -167,6 +173,7 @@ module Mongoid #:nodoc
167
173
  #
168
174
  # @since 2.1.0
169
175
  def replace_field(name, type)
176
+ defaults.delete_one(name)
170
177
  add_field(name, fields[name].options.merge(:type => type))
171
178
  end
172
179
 
@@ -180,13 +187,12 @@ module Mongoid #:nodoc
180
187
  # @param [ Symbol ] name The name of the field.
181
188
  # @param [ Hash ] options The hash of options.
182
189
  def add_field(name, options = {})
183
- @defaults = nil if @defaults
184
-
185
190
  meth = options.delete(:as) || name
186
191
  Mappings.for(
187
192
  options[:type], options[:identity]
188
193
  ).new(name, options).tap do |field|
189
194
  fields[name] = field
195
+ defaults << name unless field.default.nil?
190
196
  create_accessors(name, meth, options)
191
197
  process_options(field)
192
198
 
@@ -222,6 +228,22 @@ module Mongoid #:nodoc
222
228
  end
223
229
  end
224
230
 
231
+ # Determine if the field name is allowed, if not raise an error.
232
+ #
233
+ # @example Check the field name.
234
+ # Model.check_field_name!(:collection)
235
+ #
236
+ # @param [ Symbol ] name The field name.
237
+ #
238
+ # @raise [ Errors::InvalidField ] If the name is not allowed.
239
+ #
240
+ # @since 2.1.8
241
+ def check_field_name!(name)
242
+ if Mongoid.destructive_fields.include?(name)
243
+ raise Errors::InvalidField.new(name)
244
+ end
245
+ end
246
+
225
247
  # Create the field accessors.
226
248
  #
227
249
  # @example Generate the accessors.
@@ -25,7 +25,7 @@ module Mongoid #:nodoc:
25
25
  module Serializable
26
26
 
27
27
  # Set readers for the instance variables.
28
- attr_reader :default_value, :label, :name, :options
28
+ attr_reader :default, :label, :name, :options
29
29
 
30
30
  # When reading the field do we need to cast the value? This holds true when
31
31
  # times are stored or for big decimals which are stored as strings.
@@ -44,22 +44,6 @@ module Mongoid #:nodoc:
44
44
  end.include?(:deserialize)
45
45
  end
46
46
 
47
- # Get the default value for the field.
48
- #
49
- # @example Get the default.
50
- # field.default
51
- #
52
- # @return [ Object ] The default value.
53
- #
54
- # @since 2.1.0
55
- def default
56
- if default_value.respond_to?(:call)
57
- serialize(default_value.call)
58
- else
59
- serialize(default_value)
60
- end
61
- end
62
-
63
47
  # Deserialize this field from the type stored in MongoDB to the type
64
48
  # defined on the model
65
49
  #
@@ -73,6 +57,25 @@ module Mongoid #:nodoc:
73
57
  # @since 2.1.0
74
58
  def deserialize(object); object; end
75
59
 
60
+ # Evaluate the default value and return it. Will handle the
61
+ # serialization, proc calls, and duplication if necessary.
62
+ #
63
+ # @example Evaluate the default value.
64
+ # field.eval_default(document)
65
+ #
66
+ # @param [ Document ] doc The document the field belongs to.
67
+ #
68
+ # @return [ Object ] The serialized default value.
69
+ #
70
+ # @since 2.1.8
71
+ def eval_default(doc)
72
+ if default.respond_to?(:call)
73
+ serialize(doc.instance_exec(&default))
74
+ else
75
+ serialize(default.duplicable? ? default.dup : default)
76
+ end
77
+ end
78
+
76
79
  # Create the new field with a name and optional additional options.
77
80
  #
78
81
  # @example Create the new field.
@@ -87,7 +90,7 @@ module Mongoid #:nodoc:
87
90
  # @since 2.1.0
88
91
  def initialize(name, options = {})
89
92
  @name, @options = name, options
90
- @default_value, @label = options[:default], options[:label]
93
+ @default, @label = options[:default], options[:label]
91
94
  end
92
95
 
93
96
  # Serialize the object from the type defined in the model to a MongoDB
@@ -7,20 +7,6 @@ module Mongoid #:nodoc:
7
7
  class Array
8
8
  include Serializable
9
9
 
10
- # Get the default value for the field. If the default is a proc call
11
- # it, otherwise clone the array.
12
- #
13
- # @example Get the default.
14
- # field.default
15
- #
16
- # @return [ Object ] The default value.
17
- #
18
- # @since 2.1.0
19
- def default
20
- return nil unless default_value
21
- default_value.respond_to?(:call) ? default_value.call : default_value.dup
22
- end
23
-
24
10
  # Serialize the object from the type defined in the model to a MongoDB
25
11
  # compatible object to store.
26
12
  #
@@ -8,19 +8,6 @@ module Mongoid #:nodoc:
8
8
  class Array
9
9
  include Serializable
10
10
 
11
- # Get the default value for the field. If the default is a proc call
12
- # it, otherwise clone the array.
13
- #
14
- # @example Get the default.
15
- # field.default
16
- #
17
- # @return [ Object ] The default value cloned.
18
- #
19
- # @since 2.1.0
20
- def default
21
- default_value.dup
22
- end
23
-
24
11
  # Serialize the object from the type defined in the model to a MongoDB
25
12
  # compatible object to store.
26
13
  #
@@ -5,20 +5,6 @@ module Mongoid #:nodoc:
5
5
  # Defines the behaviour for hash fields.
6
6
  class Hash
7
7
  include Serializable
8
-
9
- # Get the default value for the field. If the default is a proc call
10
- # it, otherwise clone the array.
11
- #
12
- # @example Get the default.
13
- # field.default
14
- #
15
- # @return [ Object ] The default value.
16
- #
17
- # @since 2.1.0
18
- def default
19
- return nil unless default_value
20
- default_value.respond_to?(:call) ? default_value.call : default_value.dup
21
- end
22
8
  end
23
9
  end
24
10
  end
@@ -0,0 +1,38 @@
1
+ # encoding: utf-8
2
+ module Mongoid #:nodoc:
3
+ module Fields #:nodoc:
4
+ module Serializable #:nodoc:
5
+
6
+ # Defines the behaviour for nil fields.
7
+ class NilClass
8
+ include Serializable
9
+
10
+ # Deserialize this field from the type stored in MongoDB to the type
11
+ # defined on the model
12
+ #
13
+ # @example Deserialize the field.
14
+ # field.deserialize(object)
15
+ #
16
+ # @param [ Object ] object The object to cast.
17
+ #
18
+ # @return [ nil ] Always nil.
19
+ #
20
+ # @since 2.1.0
21
+ def deserialize(object); nil; end
22
+
23
+ # Serialize the object from the type defined in the model to a MongoDB
24
+ # compatible object to store.
25
+ #
26
+ # @example Serialize the field.
27
+ # field.serialize(object)
28
+ #
29
+ # @param [ Object ] object The object to cast.
30
+ #
31
+ # @return [ nil ] always nil.
32
+ #
33
+ # @since 2.1.0
34
+ def serialize(object); nil; end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -48,10 +48,8 @@ module Mongoid #:nodoc:
48
48
  # @example Set the id.
49
49
  # identity.identify
50
50
  def identify
51
- if !document.embedded? || Mongoid.embedded_object_id
52
- document.id = compose.join(" ").identify if document.primary_key
53
- document.id = generate_id if document.id.blank?
54
- end
51
+ document.id = compose.join(" ").identify if document.primary_key
52
+ document.id = generate_id if document.id.blank?
55
53
  document.id
56
54
  end
57
55
 
@@ -6,12 +6,12 @@ module Mongoid #:nodoc:
6
6
  module Keys
7
7
  extend ActiveSupport::Concern
8
8
 
9
+ attr_reader :identifier
10
+ delegate :primary_key, :using_object_ids?, :to => "self.class"
11
+
9
12
  included do
10
13
  cattr_accessor :primary_key, :using_object_ids
11
14
  self.using_object_ids = true
12
- delegate :primary_key, :using_object_ids?, :to => "self.class"
13
-
14
- attr_reader :identifier
15
15
  end
16
16
 
17
17
  private
@@ -5,11 +5,11 @@ module Mongoid #:nodoc:
5
5
  module NestedAttributes
6
6
  extend ActiveSupport::Concern
7
7
 
8
+ delegate :nested_attributes, :to => "self.class"
9
+
8
10
  included do
9
11
  class_attribute :nested_attributes
10
12
  self.nested_attributes = []
11
-
12
- delegate :nested_attributes, :to => "self.class"
13
13
  end
14
14
 
15
15
  module ClassMethods #:nodoc:
@@ -97,20 +97,6 @@ module Rails #:nodoc:
97
97
  end
98
98
  end
99
99
 
100
- # This initializer warns the user that preloading models is set to false,
101
- # and queries will be inconsistent in dev mode if models are using
102
- # inheritance.
103
- initializer "warn of preload models configuration" do |app|
104
- config.after_initialize do
105
- if !::Mongoid.preload_models && !Rails.configuration.cache_classes
106
- puts "\nMongoid preload_models is set to false. If you are using"
107
- puts "inheritance in your application model please set this to true or "
108
- puts "you will experience querying inconsistencies in dev mode. Note that"
109
- puts "this will severely decrease performance in dev mode only.\n\n"
110
- end
111
- end
112
- end
113
-
114
100
  # Need to include the Mongoid identity map middleware.
115
101
  initializer "include the identity map" do |app|
116
102
  app.config.middleware.use "Rack::Mongoid::Middleware::IdentityMap"
@@ -53,12 +53,13 @@ module Mongoid #:nodoc:
53
53
  #
54
54
  # @since 2.0.0
55
55
  def atomically(modifier, &block)
56
- updater = Threaded.update ||= MODIFIERS[modifier].new
56
+ updater = Threaded.update_consumer(root_class) ||
57
+ Threaded.set_update_consumer(root_class, MODIFIERS[modifier].new)
57
58
  count_executions do
58
59
  block.call if block
59
60
  end.tap do
60
61
  if @executions.zero?
61
- Threaded.update = nil
62
+ Threaded.set_update_consumer(root_class, nil)
62
63
  updater.execute(collection)
63
64
  end
64
65
  end
@@ -7,6 +7,10 @@ module Mongoid # :nodoc:
7
7
  module Macros
8
8
  extend ActiveSupport::Concern
9
9
 
10
+ # Convenience methods for the instance to know about attributes that
11
+ # are located at the class level.
12
+ delegate :associations, :relations, :to => "self.class"
13
+
10
14
  included do
11
15
  cattr_accessor :embedded
12
16
  class_attribute :relations
@@ -21,10 +25,6 @@ module Mongoid # :nodoc:
21
25
  alias :associations :relations
22
26
  alias :embedded? :embedded
23
27
  end
24
-
25
- # Convenience methods for the instance to know about attributes that
26
- # are located at the class level.
27
- delegate :associations, :relations, :to => "self.class"
28
28
  end
29
29
 
30
30
  module ClassMethods #:nodoc:
@@ -17,6 +17,20 @@ module Mongoid # :nodoc:
17
17
  def in_memory
18
18
  [ target ]
19
19
  end
20
+
21
+ # Since method_missing is overridden we should override this as well.
22
+ #
23
+ # @example Does the proxy respond to the method?
24
+ # relation.respond_to?(:name)
25
+ #
26
+ # @param [ Symbol ] name The method name.
27
+ #
28
+ # @return [ true, false ] If the proxy responds to the method.
29
+ #
30
+ # @since 2.1.8
31
+ def respond_to?(name, include_private = false)
32
+ target.respond_to?(name, include_private) || super
33
+ end
20
34
  end
21
35
  end
22
36
  end
@@ -151,6 +151,18 @@ module Mongoid # :nodoc:
151
151
  def raise_unsaved(doc)
152
152
  raise Errors::UnsavedDocument.new(base, doc)
153
153
  end
154
+
155
+ # Get the class of the root document in the hierarchy.
156
+ #
157
+ # @example Get the root's class.
158
+ # proxy.root_class
159
+ #
160
+ # @return [ Class ] The root class.
161
+ #
162
+ # @since 2.1.8
163
+ def root_class
164
+ @root_class ||= base._root.class
165
+ end
154
166
  end
155
167
  end
156
168
  end
@@ -40,8 +40,8 @@ module Mongoid # :nodoc:
40
40
  def substitute(replacement)
41
41
  tap do |proxy|
42
42
  proxy.unbind_one
43
- proxy.target.delete if persistable?
44
43
  return nil unless replacement
44
+ proxy.target.delete if persistable?
45
45
  proxy.target = replacement
46
46
  proxy.bind_one
47
47
  end
@@ -57,6 +57,7 @@ module Mongoid # :nodoc:
57
57
  return nil unless replacement
58
58
  proxy.target = replacement
59
59
  proxy.bind_one
60
+ replacement.save if persistable?
60
61
  end
61
62
  end
62
63
 
@@ -7,12 +7,9 @@ module Mongoid # :nodoc:
7
7
  module Reflections
8
8
  extend ActiveSupport::Concern
9
9
 
10
- included do
11
-
12
- delegate \
13
- :reflect_on_association,
14
- :reflect_on_all_associations, :to => "self.class"
15
- end
10
+ delegate \
11
+ :reflect_on_association,
12
+ :reflect_on_all_associations, :to => "self.class"
16
13
 
17
14
  module ClassMethods #:nodoc
18
15
 
@@ -5,11 +5,11 @@ module Mongoid #:nodoc
5
5
  module Sharding
6
6
  extend ActiveSupport::Concern
7
7
 
8
+ delegate :shard_key_fields, :to => "self.class"
9
+
8
10
  included do
9
11
  cattr_accessor :shard_key_fields
10
12
  self.shard_key_fields = []
11
-
12
- delegate :shard_key_fields, :to => "self.class"
13
13
  end
14
14
 
15
15
  # Get the document selector with the defined shard keys.
@@ -154,8 +154,8 @@ module Mongoid #:nodoc:
154
154
  # @return [ Object ] The atomic update consumer.
155
155
  #
156
156
  # @since 2.1.0
157
- def update
158
- Thread.current[:"[mongoid]:update-consumer"]
157
+ def update_consumer(klass)
158
+ Thread.current[:"[mongoid][#{klass}]:update-consumer"]
159
159
  end
160
160
 
161
161
  # Set the update consumer on the current thread.
@@ -168,8 +168,8 @@ module Mongoid #:nodoc:
168
168
  # @return [ Object ] The update consumer.
169
169
  #
170
170
  # @since 2.1.0
171
- def update=(consumer)
172
- Thread.current[:"[mongoid]:update-consumer"] = consumer
171
+ def set_update_consumer(klass, consumer)
172
+ Thread.current[:"[mongoid][#{klass}]:update-consumer"] = consumer
173
173
  end
174
174
  end
175
175
  end
@@ -1,4 +1,4 @@
1
1
  # encoding: utf-8
2
2
  module Mongoid #:nodoc
3
- VERSION = "2.1.7"
3
+ VERSION = "2.1.8"
4
4
  end
@@ -7,6 +7,8 @@ module Mongoid #:nodoc:
7
7
  module Versioning
8
8
  extend ActiveSupport::Concern
9
9
 
10
+ delegate :version_max, :to => "self.class"
11
+
10
12
  included do
11
13
  field :version, :type => Integer, :default => 1
12
14
 
@@ -20,7 +22,6 @@ module Mongoid #:nodoc:
20
22
  set_callback :save, :before, :revise, :if => :revisable?
21
23
 
22
24
  class_attribute :version_max
23
- delegate :version_max, :to => "self.class"
24
25
  self.cyclic = true
25
26
  end
26
27
 
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.1.7
4
+ version: 2.1.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-08-08 00:00:00.000000000Z
12
+ date: 2011-08-16 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activemodel
16
- requirement: &70273131511360 !ruby/object:Gem::Requirement
16
+ requirement: &70188037296020 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '3.0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70273131511360
24
+ version_requirements: *70188037296020
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: tzinfo
27
- requirement: &70273131510360 !ruby/object:Gem::Requirement
27
+ requirement: &70188037295340 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 0.3.22
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70273131510360
35
+ version_requirements: *70188037295340
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: mongo
38
- requirement: &70273131509340 !ruby/object:Gem::Requirement
38
+ requirement: &70188037294640 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '1.3'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70273131509340
46
+ version_requirements: *70188037294640
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rdoc
49
- requirement: &70273131507880 !ruby/object:Gem::Requirement
49
+ requirement: &70188037293900 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 3.5.0
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70273131507880
57
+ version_requirements: *70188037293900
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: bson_ext
60
- requirement: &70273131506780 !ruby/object:Gem::Requirement
60
+ requirement: &70188037293360 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '1.3'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70273131506780
68
+ version_requirements: *70188037293360
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: mocha
71
- requirement: &70273131505780 !ruby/object:Gem::Requirement
71
+ requirement: &70188037292580 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 0.9.8
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70273131505780
79
+ version_requirements: *70188037292580
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rspec
82
- requirement: &70273131504680 !ruby/object:Gem::Requirement
82
+ requirement: &70188037291660 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ~>
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '2.6'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70273131504680
90
+ version_requirements: *70188037291660
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: watchr
93
- requirement: &70273131503420 !ruby/object:Gem::Requirement
93
+ requirement: &70188037290960 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ~>
@@ -98,7 +98,7 @@ dependencies:
98
98
  version: '0.6'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *70273131503420
101
+ version_requirements: *70188037290960
102
102
  description: Mongoid is an ODM (Object Document Mapper) Framework for MongoDB, written
103
103
  in Ruby.
104
104
  email:
@@ -211,6 +211,7 @@ files:
211
211
  - lib/mongoid/fields/serializable/foreign_keys/object.rb
212
212
  - lib/mongoid/fields/serializable/hash.rb
213
213
  - lib/mongoid/fields/serializable/integer.rb
214
+ - lib/mongoid/fields/serializable/nil_class.rb
214
215
  - lib/mongoid/fields/serializable/object.rb
215
216
  - lib/mongoid/fields/serializable/object_id.rb
216
217
  - lib/mongoid/fields/serializable/range.rb
@@ -379,7 +380,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
379
380
  version: '0'
380
381
  segments:
381
382
  - 0
382
- hash: 1942003466087624126
383
+ hash: -2233289623287425963
383
384
  required_rubygems_version: !ruby/object:Gem::Requirement
384
385
  none: false
385
386
  requirements: