mongoid 2.2.3 → 2.2.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,13 +5,87 @@ For instructions on upgrading to newer versions, visit
5
5
 
6
6
  ## 2.4.0 \[ In Development \] \[ Branch: master \]
7
7
 
8
+ ### New Features
9
+
8
10
  * Ranges can now be passed to #where criteria to create a $gte/$lte query under the
9
11
  covers. `Person.where(dob: start_date...end_date)`
10
12
 
11
- ## 2.3.1 \[ In Development \] \[ Branch: 2.3.0-stable \]
13
+ ### Resolved Issues
14
+
15
+ * \#1333 Fixed errors with custom types that exist in namespaces. (Peter Gumeson)
16
+
17
+ ## 2.3.4 \[ In Development \] \[ Branch: 2.3.0-stable \]
18
+
19
+ ## 2.3.3
20
+
21
+ ### Resolved Issues
22
+
23
+ * \#1386 Lowered mongo/bson dependency to 1.3
24
+
25
+ * \#1377 Fix aggregation functions to properly handle nil or indefined values.
26
+ (Maxime Garcia)
27
+
28
+ * \#1373 Warn if a scope overrides another scope.
29
+
30
+ * \#1372 Never persist when binding inside of a read attribute for validation.
31
+
32
+ * \#1364 Fixed reloading of documents with non bson object id ids.
33
+
34
+ * \#1360 Fixed performance of Mongoid's observer instantiation by hooking into
35
+ Active Support's load hooks, a la AR.
36
+
37
+ * \#1358 Fixed type error on many to many synchronization when inverse_of is
38
+ set to nil.
39
+
40
+ * \#1356 $in criteria can now be chained to non-complex criteria on the same
41
+ key without error.
42
+
43
+ * \#1350, \#1351 Fixed errors in the string conversions of double quotes and
44
+ tilde when paramterizing keys.
45
+
46
+ * \#1349 Mongoid documents should not blow up when including Enumerable.
47
+ (Jonas Nicklas)
48
+
49
+ ## 2.3.2
50
+
51
+ ### Resolved Issues
52
+
53
+ * \#1347 Fix embedded matchers when provided a hash value that does not have a
54
+ modifier as a key.
55
+
56
+ * \#1346 Dup default sorting criteria when calling first/last on a criteria.
57
+
58
+ * \#1343 When passing no arguments to `Criteria#all_of` return all documents.
59
+ (Chris Leishman)
60
+
61
+ * \#1339 Ensure destroy callbacks are run on cascadable children when deleting via
62
+ nested attributes.
63
+
64
+ * \#1324 Setting `inverse_of: nil` on a many-to-many referencing the same class
65
+ returns nil for the inverse foreign key.
66
+
67
+ * \#1323 Allow both strings and symbols as ids in the attributes array for
68
+ nested attributes. (Michael Wood)
69
+
70
+ * \#1312 Setting a logger on the config now accepts anything that quacks like a
71
+ logger.
72
+
73
+ * \#1297 Don't hit the database when accessing relations if the base is new.
74
+
75
+ * \#1239 Allow appending of referenced relations in create blocks, post default set.
76
+
77
+ * \#1236 Ensure all models are loaded in rake tasks, so even in threadsafe mode
78
+ all indexes can be created.
79
+
80
+ * \#736 Calling #reload on embedded documents now works properly.
81
+
82
+ ## 2.3.1
12
83
 
13
84
  ### Resolved Issues
14
85
 
86
+ * \#1338 Calling #find on a scope or relation checks that the document in the
87
+ identity map actually matches other scope parameters.
88
+
15
89
  * \#1321 HABTM no longer allows duplicate entries or keys, instead of the previous
16
90
  inconsistencies.
17
91
 
@@ -22,17 +96,31 @@ For instructions on upgrading to newer versions, visit
22
96
 
23
97
  * \#1311 Fix issue with custom field serialization inheriting from hash.
24
98
 
99
+ * \#1310 The referenced many enumerable target no longer duplicates loaded and
100
+ added documents when the identity map is enabled.
101
+
25
102
  * \#1295 Fixed having multiple includes only execute the eager loading of the first.
26
103
 
27
104
  * \#1287 Fixed max versions limitation with versioning.
28
105
 
29
106
  * \#1277 attribute_will_change! properly flags the attribute even if no change occured.
30
107
 
108
+ * \#1063 Paranoid documents properly run destroy callbacks on soft destroy.
109
+
110
+ * \#1061 Raise `Mongoid::Errors::InvalidTime` when time serialization fails.
111
+
112
+ * \#1002 Check for legal bson ids when attempting conversion.
113
+
31
114
  * \#920 Allow relations to be named target.
32
115
 
116
+ * \#905 Return normalized class name in metadata if string was defined with a
117
+ prefixed ::.
118
+
33
119
  * \#861 accepts_nested_attributes_for is no longer needed to set embedded documents
34
120
  via a hash or array of hashes directly.
35
121
 
122
+ * \#857 Fixed cascading of dependent relations when base document is paranoid.
123
+
36
124
  * \#768 Fixed class_attribute definitions module wide.
37
125
 
38
126
  * \#408 Embedded documents can now be soft deleted via `Mongoid::Paranoia`.
@@ -123,6 +211,27 @@ For instructions on upgrading to newer versions, visit
123
211
  * Deleting versions created with `Mongoid::Versioning` no longer fires off
124
212
  dependent cascading on relations.
125
213
 
214
+ ## 2.2.4
215
+
216
+ * \#1377 Fix aggregation functions to properly handle nil or indefined values.
217
+ (Maxime Garcia)
218
+
219
+ * \#1373 Warn if a scope overrides another scope.
220
+
221
+ * \#1372 Never persist when binding inside of a read attribute for validation.
222
+
223
+ * \#1358 Fixed type error on many to many synchronization when inverse_of is
224
+ set to nil.
225
+
226
+ * \#1356 $in criteria can now be chained to non-complex criteria on the same
227
+ key without error.
228
+
229
+ * \#1350, \#1351 Fixed errors in the string conversions of double quotes and
230
+ tilde when paramterizing keys.
231
+
232
+ * \#1349 Mongoid documents should not blow up when including Enumerable.
233
+ (Jonas Nicklas)
234
+
126
235
  ## 2.2.3
127
236
 
128
237
  * \#1295 Fixed having multiple includes only execute the eager loading of the first.
@@ -383,14 +383,19 @@ module Mongoid #:nodoc:
383
383
  clone.tap do |crit|
384
384
  converted = BSON::ObjectId.convert(klass, attributes || {})
385
385
  converted.each_pair do |key, value|
386
- unless crit.selector[key]
386
+ existing = crit.selector[key]
387
+ unless existing
387
388
  crit.selector[key] = { operator => value }
388
389
  else
389
- if crit.selector[key].has_key?(operator)
390
- new_value = crit.selector[key].values.first.send(combine, value)
391
- crit.selector[key] = { operator => new_value }
390
+ if existing.respond_to?(:merge)
391
+ if existing.has_key?(operator)
392
+ new_value = existing.values.first.send(combine, value)
393
+ crit.selector[key] = { operator => new_value }
394
+ else
395
+ crit.selector[key][operator] = value
396
+ end
392
397
  else
393
- crit.selector[key][operator] = value
398
+ crit.selector[key] = { operator => value }
394
399
  end
395
400
  end
396
401
  end
@@ -14,9 +14,6 @@ module Mongoid #:nodoc:
14
14
  # @example Is the array vacant?
15
15
  # [].vacant?
16
16
  #
17
- # @example Is the hash vacant?
18
- # {}.vacant?
19
- #
20
17
  # @example Is the object vacant?
21
18
  # nil.vacant?
22
19
  #
@@ -24,7 +21,7 @@ module Mongoid #:nodoc:
24
21
  #
25
22
  # @since 2.0.2
26
23
  def _vacant?
27
- is_a?(::Enumerable) || is_a?(::String) ? empty? : !self
24
+ is_a?(::Array) || is_a?(::String) ? empty? : !self
28
25
  end
29
26
  end
30
27
  end
@@ -18,7 +18,7 @@ module Mongoid #:nodoc:
18
18
  CHAR_CONV = {
19
19
  " " => "-",
20
20
  "!" => "-excl-",
21
- "\"" => "-bckslsh-",
21
+ "\"" => "-dblquo-",
22
22
  "#" => "-hash-",
23
23
  "$" => "-dol-",
24
24
  "%" => "-perc-",
@@ -48,7 +48,7 @@ module Mongoid #:nodoc:
48
48
  "{" => "-ocurly-",
49
49
  "|" => "-pipe-",
50
50
  "}" => "-clcurly-",
51
- "~" => "-tilda-"
51
+ "~" => "-tilde-"
52
52
  }
53
53
 
54
54
  REVERSALS = {
@@ -125,10 +125,20 @@ module Mongoid #:nodoc:
125
125
 
126
126
  protected
127
127
 
128
+ # Warns if overriding another scope or method.
129
+ #
130
+ # @example Warn if name exists.
131
+ # Model.valid_scope_name?("test")
132
+ #
133
+ # @param [ String, Symbol ] name The name of the scope.
128
134
  def valid_scope_name?(name)
129
- if !scopes[name] && respond_to?(name, true)
130
- Mongoid.logger.warn "Creating scope :#{name}. " \
131
- "Overwriting existing method #{self.name}.#{name}." if Mongoid.logger
135
+ if scopes[name] || respond_to?(name, true)
136
+ if Mongoid.logger
137
+ Mongoid.logger.warn(
138
+ "Creating scope :#{name}. " +
139
+ "Overwriting existing method #{self.name}.#{name}."
140
+ )
141
+ end
132
142
  end
133
143
  end
134
144
  end
@@ -229,6 +229,19 @@ module Mongoid # :nodoc:
229
229
  !!extension
230
230
  end
231
231
 
232
+ # Does this metadata have a forced nil inverse_of defined. (Used in many
233
+ # to manies)
234
+ #
235
+ # @example Is this a forced nil inverse?
236
+ # metadata.forced_nil_inverse?
237
+ #
238
+ # @return [ true, false ] If inverse_of has been explicitly set to nil.
239
+ #
240
+ # @since 2.3.3
241
+ def forced_nil_inverse?
242
+ has_key?(:inverse_of) && inverse_of.nil?
243
+ end
244
+
232
245
  # Handles all the logic for figuring out what the foreign_key is for each
233
246
  # relations query. The logic is as follows:
234
247
  #
@@ -33,7 +33,7 @@ module Mongoid #:nodoc:
33
33
  args.flatten.each do |doc|
34
34
  next unless doc
35
35
  append(doc)
36
- doc.save if persistable?
36
+ doc.save if persistable? && !doc.validated?
37
37
  end
38
38
  end
39
39
  end
@@ -142,7 +142,9 @@ module Mongoid # :nodoc:
142
142
  #
143
143
  # @since 2.0.0.rc.1
144
144
  def nullify
145
- criteria.pull(metadata.inverse_foreign_key, base.id)
145
+ unless metadata.forced_nil_inverse?
146
+ criteria.pull(metadata.inverse_foreign_key, base.id)
147
+ end
146
148
  if persistable?
147
149
  base.set(
148
150
  metadata.foreign_key,
@@ -93,8 +93,10 @@ module Mongoid # :nodoc:
93
93
  #
94
94
  # @since 2.1.0
95
95
  def synced(metadata)
96
- synced_save(metadata)
97
- synced_destroy(metadata)
96
+ unless metadata.forced_nil_inverse?
97
+ synced_save(metadata)
98
+ synced_destroy(metadata)
99
+ end
98
100
  end
99
101
 
100
102
  private
@@ -44,7 +44,9 @@ module Mongoid #:nodoc:
44
44
  # @since 2.0.0.rc.1
45
45
  def read_attribute_for_validation(attr)
46
46
  if relations[attr.to_s]
47
+ begin_validate
47
48
  relation = send(attr)
49
+ exit_validate
48
50
  relation.do_or_do_not(:in_memory) || relation
49
51
  else
50
52
  send(attr)
@@ -1,4 +1,4 @@
1
1
  # encoding: utf-8
2
2
  module Mongoid #:nodoc
3
- VERSION = "2.2.3"
3
+ VERSION = "2.2.4"
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.2.3
4
+ version: 2.2.4
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-10-11 00:00:00.000000000Z
12
+ date: 2011-10-31 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activemodel
16
- requirement: &70191203667940 !ruby/object:Gem::Requirement
16
+ requirement: &70285743605420 !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: *70191203667940
24
+ version_requirements: *70285743605420
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: tzinfo
27
- requirement: &70191203666840 !ruby/object:Gem::Requirement
27
+ requirement: &70285743604460 !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: *70191203666840
35
+ version_requirements: *70285743604460
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: mongo
38
- requirement: &70191203665380 !ruby/object:Gem::Requirement
38
+ requirement: &70285743603500 !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: *70191203665380
46
+ version_requirements: *70285743603500
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rdoc
49
- requirement: &70191203663940 !ruby/object:Gem::Requirement
49
+ requirement: &70285743602700 !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: *70191203663940
57
+ version_requirements: *70285743602700
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: bson_ext
60
- requirement: &70191203662020 !ruby/object:Gem::Requirement
60
+ requirement: &70285743601320 !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: *70191203662020
68
+ version_requirements: *70285743601320
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: mocha
71
- requirement: &70191203660340 !ruby/object:Gem::Requirement
71
+ requirement: &70285743600280 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 0.9.12
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70191203660340
79
+ version_requirements: *70285743600280
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rspec
82
- requirement: &70191203659100 !ruby/object:Gem::Requirement
82
+ requirement: &70285743588060 !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: *70191203659100
90
+ version_requirements: *70285743588060
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: watchr
93
- requirement: &70191203658200 !ruby/object:Gem::Requirement
93
+ requirement: &70285743587280 !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: *70191203658200
101
+ version_requirements: *70285743587280
102
102
  description: Mongoid is an ODM (Object Document Mapper) Framework for MongoDB, written
103
103
  in Ruby.
104
104
  email:
@@ -385,7 +385,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
385
385
  version: '0'
386
386
  segments:
387
387
  - 0
388
- hash: 598136195800288460
388
+ hash: 1180237711887586276
389
389
  required_rubygems_version: !ruby/object:Gem::Requirement
390
390
  none: false
391
391
  requirements: