mongoid 3.0.11 → 3.0.12

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,24 @@
3
3
  For instructions on upgrading to newer versions, visit
4
4
  [mongoid.org](http://mongoid.org/docs/upgrading.html).
5
5
 
6
+ ## 3.0.12
7
+
8
+ ### Resolved Issues
9
+
10
+ * \#2542 Allow embedded documents using `store_as` to properly alias in
11
+ criteria.
12
+
13
+ * \#2541 Ensure that the type change is correct when upcasting/downcasting a
14
+ document via `Document#becomes` (Łukasz Bandzarewicz)
15
+
16
+ * \#2529 Fields on subclasses that override fields in the parent where both have
17
+ defaults with procs now properly override the default in the subclass.
18
+
19
+ * \#2528 Aliased fields need to be duped when subclassing.
20
+
21
+ * \#2527 Ensure removal of docs in a `has_many` does a multi update when setting
22
+ to an empty array.
23
+
6
24
  ## 3.0.11
7
25
 
8
26
  ### Resolved Issues
@@ -53,7 +53,9 @@ module Mongoid
53
53
  # @return [ Hash ] The mass assignment options.
54
54
  #
55
55
  # @since 3.0.7
56
- attr_writer :mass_assignment_options
56
+ def mass_assignment_options=(options)
57
+ @mass_assignment_options = options
58
+ end
57
59
 
58
60
  # If the key provided is the name of a relation or a nested attribute, we
59
61
  # need to wait until all other attributes are set before processing
@@ -217,12 +217,14 @@ module Mongoid
217
217
  unless klass.include?(Mongoid::Document)
218
218
  raise ArgumentError, "A class which includes Mongoid::Document is expected"
219
219
  end
220
+
220
221
  became = klass.new(as_document.__deep_copy__)
221
222
  became.id = id
222
223
  became.instance_variable_set(:@changed_attributes, changed_attributes)
223
224
  became.instance_variable_set(:@errors, errors)
224
225
  became.instance_variable_set(:@new_record, new_record?)
225
226
  became.instance_variable_set(:@destroyed, destroyed?)
227
+ became.changed_attributes["_type"] = self.class.to_s
226
228
  became._type = klass.to_s
227
229
  became
228
230
  end
@@ -444,8 +444,8 @@ module Mongoid
444
444
  re_define_method("#{meth}_translations=") do |value|
445
445
  attribute_will_change!(name)
446
446
  if value
447
- value.update_values do |value|
448
- field.type.mongoize(value)
447
+ value.update_values do |_value|
448
+ field.type.mongoize(_value)
449
449
  end
450
450
  end
451
451
  attributes[name] = value
@@ -483,9 +483,10 @@ module Mongoid
483
483
  end
484
484
 
485
485
  def field_for(name, options)
486
- return Fields::Localized.new(name, options) if options[:localize]
487
- return Fields::ForeignKey.new(name, options) if options[:identity]
488
- Fields::Standard.new(name, options)
486
+ opts = options.merge(klass: self)
487
+ return Fields::Localized.new(name, opts) if options[:localize]
488
+ return Fields::ForeignKey.new(name, opts) if options[:identity]
489
+ Fields::Standard.new(name, opts)
489
490
  end
490
491
  end
491
492
  end
@@ -86,6 +86,13 @@ module Mongoid
86
86
  @options = options
87
87
  @label = options[:label]
88
88
  @default_val = options[:default]
89
+
90
+ # @todo: Durran, change API in 4.0 to take the class as a parameter.
91
+ # This is here temporarily to address #2529 without changing the
92
+ # constructor signature.
93
+ if default_val.respond_to?(:call)
94
+ define_default_method(options[:klass])
95
+ end
89
96
  end
90
97
 
91
98
  # Is the field localized or not?
@@ -186,13 +193,12 @@ module Mongoid
186
193
  #
187
194
  # @note Ruby's instance_exec was just too slow.
188
195
  #
189
- # @param [ Document ] doc The document.
196
+ # @param [ Class, Module ] object The class or module the field is
197
+ # defined on.
190
198
  #
191
199
  # @since 3.0.0
192
- def define_default_method(doc)
193
- unless doc.respond_to?(default_name)
194
- doc.class.__send__(:define_method, default_name, default_val)
195
- end
200
+ def define_default_method(object)
201
+ object.__send__(:define_method, default_name, default_val)
196
202
  end
197
203
 
198
204
  # Is the field included in the fields that were returned from the
@@ -243,7 +249,6 @@ module Mongoid
243
249
  #
244
250
  # @since 3.0.0
245
251
  def evaluate_default_proc(doc)
246
- define_default_method(doc)
247
252
  serialize_default(doc.__send__(default_name))
248
253
  end
249
254
 
@@ -156,6 +156,7 @@ module Mongoid
156
156
  def inherited(subclass)
157
157
  super
158
158
  @_type = nil
159
+ subclass.aliased_fields = aliased_fields.dup
159
160
  subclass.fields = fields.dup
160
161
  subclass.pre_processed_defaults = pre_processed_defaults.dup
161
162
  subclass.post_processed_defaults = post_processed_defaults.dup
@@ -118,11 +118,7 @@ module Rails
118
118
 
119
119
  # Need to include the Mongoid identity map middleware.
120
120
  initializer "include the identity map" do |app|
121
- if ::Mongoid.running_with_passenger?
122
- app.config.middleware.use "Rack::Mongoid::Middleware::IdentityMap::Passenger"
123
- else
124
- app.config.middleware.use "Rack::Mongoid::Middleware::IdentityMap"
125
- end
121
+ app.config.middleware.use "Rack::Mongoid::Middleware::IdentityMap"
126
122
  end
127
123
 
128
124
  # Instantitate any registered observers after Rails initialization and
@@ -283,8 +283,8 @@ module Mongoid
283
283
  #
284
284
  # @since 3.0.0
285
285
  def embed(name, metadata)
286
- self.embedded_relations =
287
- embedded_relations.merge(name.to_s => metadata)
286
+ self.embedded_relations = embedded_relations.merge(name.to_s => metadata)
287
+ aliased_fields[name.to_s] = metadata.store_as if metadata.store_as
288
288
  end
289
289
 
290
290
  # Defines a field to be used as a foreign key in the relation and
@@ -474,7 +474,7 @@ module Mongoid
474
474
  if metadata.destructive?
475
475
  removed.delete_all
476
476
  else
477
- removed.update(foreign_key => nil)
477
+ removed.update_all(foreign_key => nil)
478
478
  end
479
479
  in_memory.each do |doc|
480
480
  if !ids.include?(doc.id)
@@ -1,4 +1,4 @@
1
1
  # encoding: utf-8
2
2
  module Mongoid
3
- VERSION = "3.0.11"
3
+ VERSION = "3.0.12"
4
4
  end
@@ -31,43 +31,7 @@ module Rack
31
31
  #
32
32
  # @since 2.1.0
33
33
  def call(env)
34
- response = @app.call(env)
35
- response[2] = ::Rack::BodyProxy.new(response[2]) do
36
- ::Mongoid::IdentityMap.clear
37
- end
38
- response
39
- end
40
-
41
- # Passenger 3 does not execute the block provided to a Rack::BodyProxy
42
- # so the identity map never gets cleared. Since there's no streaming
43
- # support in it anyways we do not need the proxy functionality.
44
- class Passenger
45
-
46
- # Initialize the new middleware.
47
- #
48
- # @example Init the middleware.
49
- # IdentityMap.new(app)
50
- #
51
- # @param [ Object ] app The application.
52
- #
53
- # @since 3.0.11
54
- def initialize(app)
55
- @app = app
56
- end
57
-
58
- # Make the request with the provided environment.
59
- #
60
- # @example Make the request.
61
- # identity_map.call(env)
62
- #
63
- # @param [ Object ] env The environment.
64
- #
65
- # @return [ Array ] The status, headers, and response.
66
- #
67
- # @since 3.0.11
68
- def call(env)
69
- ::Mongoid.unit_of_work { @app.call(env) }
70
- end
34
+ ::Mongoid.unit_of_work { @app.call(env) }
71
35
  end
72
36
  end
73
37
  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: 3.0.11
4
+ version: 3.0.12
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-11-04 00:00:00.000000000 Z
12
+ date: 2012-11-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activemodel
@@ -352,7 +352,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
352
352
  version: '0'
353
353
  segments:
354
354
  - 0
355
- hash: 1182744462779695789
355
+ hash: -1846973672677676988
356
356
  required_rubygems_version: !ruby/object:Gem::Requirement
357
357
  none: false
358
358
  requirements: