mongoid 3.0.0.rc → 3.0.0
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.
- data/CHANGELOG.md +109 -4
- data/README.md +1 -1
- data/Rakefile +1 -0
- data/lib/config/locales/en.yml +15 -1
- data/lib/mongoid.rb +17 -2
- data/lib/mongoid/atomic.rb +54 -7
- data/lib/mongoid/attributes.rb +1 -1
- data/lib/mongoid/attributes/processing.rb +1 -1
- data/lib/mongoid/callbacks.rb +6 -1
- data/lib/mongoid/components.rb +2 -1
- data/lib/mongoid/config.rb +42 -17
- data/lib/mongoid/config/environment.rb +3 -1
- data/lib/mongoid/contextual/aggregable/memory.rb +21 -10
- data/lib/mongoid/contextual/find_and_modify.rb +14 -12
- data/lib/mongoid/contextual/memory.rb +24 -1
- data/lib/mongoid/contextual/mongo.rb +148 -29
- data/lib/mongoid/copyable.rb +6 -24
- data/lib/mongoid/criteria.rb +116 -34
- data/lib/mongoid/document.rb +7 -7
- data/lib/mongoid/errors.rb +1 -0
- data/lib/mongoid/errors/no_metadata.rb +21 -0
- data/lib/mongoid/evolvable.rb +19 -0
- data/lib/mongoid/extensions.rb +1 -1
- data/lib/mongoid/extensions/array.rb +38 -1
- data/lib/mongoid/extensions/big_decimal.rb +1 -1
- data/lib/mongoid/extensions/date_time.rb +6 -1
- data/lib/mongoid/extensions/false_class.rb +12 -0
- data/lib/mongoid/extensions/float.rb +12 -0
- data/lib/mongoid/extensions/hash.rb +33 -1
- data/lib/mongoid/extensions/integer.rb +12 -0
- data/lib/mongoid/extensions/object.rb +51 -1
- data/lib/mongoid/extensions/object_id.rb +2 -1
- data/lib/mongoid/extensions/range.rb +24 -0
- data/lib/mongoid/extensions/string.rb +31 -5
- data/lib/mongoid/extensions/true_class.rb +12 -0
- data/lib/mongoid/fields.rb +20 -21
- data/lib/mongoid/fields/foreign_key.rb +23 -7
- data/lib/mongoid/fields/standard.rb +3 -3
- data/lib/mongoid/finders.rb +3 -7
- data/lib/mongoid/hierarchy.rb +19 -1
- data/lib/mongoid/identity_map.rb +20 -4
- data/lib/mongoid/indexes/validators/options.rb +1 -1
- data/lib/mongoid/multi_parameter_attributes.rb +1 -1
- data/lib/mongoid/paranoia.rb +3 -32
- data/lib/mongoid/persistence.rb +33 -15
- data/lib/mongoid/persistence/atomic/operation.rb +1 -1
- data/lib/mongoid/persistence/operations.rb +16 -0
- data/lib/mongoid/persistence/operations/remove.rb +1 -1
- data/lib/mongoid/persistence/operations/upsert.rb +28 -0
- data/lib/mongoid/persistence/upsertion.rb +30 -0
- data/lib/mongoid/relations.rb +16 -0
- data/lib/mongoid/relations/accessors.rb +1 -1
- data/lib/mongoid/relations/bindings/referenced/in.rb +1 -1
- data/lib/mongoid/relations/builder.rb +1 -1
- data/lib/mongoid/relations/builders/nested_attributes/one.rb +1 -1
- data/lib/mongoid/relations/builders/referenced/many.rb +1 -1
- data/lib/mongoid/relations/cascading.rb +4 -3
- data/lib/mongoid/relations/constraint.rb +1 -1
- data/lib/mongoid/relations/conversions.rb +1 -1
- data/lib/mongoid/relations/embedded/batchable.rb +3 -2
- data/lib/mongoid/relations/embedded/many.rb +4 -4
- data/lib/mongoid/relations/embedded/one.rb +1 -1
- data/lib/mongoid/relations/metadata.rb +67 -23
- data/lib/mongoid/relations/nested_builder.rb +2 -2
- data/lib/mongoid/relations/proxy.rb +9 -7
- data/lib/mongoid/relations/referenced/many.rb +69 -25
- data/lib/mongoid/relations/referenced/many_to_many.rb +14 -13
- data/lib/mongoid/scoping.rb +0 -17
- data/lib/mongoid/serialization.rb +95 -26
- data/lib/mongoid/sessions.rb +30 -6
- data/lib/mongoid/sessions/factory.rb +2 -0
- data/lib/mongoid/threaded.rb +52 -0
- data/lib/mongoid/timestamps/created.rb +1 -1
- data/lib/mongoid/timestamps/updated.rb +2 -1
- data/lib/mongoid/validations/uniqueness.rb +3 -2
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +8 -0
- data/lib/rails/mongoid.rb +8 -5
- metadata +30 -13
- data/lib/mongoid/collections/retry.rb +0 -58
- data/lib/mongoid/javascript.rb +0 -20
- data/lib/mongoid/javascript/functions.yml +0 -63
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.0
|
5
|
-
prerelease:
|
4
|
+
version: 3.0.0
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Durran Jordan
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-07-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activemodel
|
@@ -50,7 +50,7 @@ dependencies:
|
|
50
50
|
requirements:
|
51
51
|
- - ~>
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: 1.
|
53
|
+
version: 1.1.1
|
54
54
|
type: :runtime
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -58,7 +58,7 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 1.
|
61
|
+
version: 1.1.1
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
63
|
name: origin
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,7 +66,7 @@ dependencies:
|
|
66
66
|
requirements:
|
67
67
|
- - ~>
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: 1.0.
|
69
|
+
version: 1.0.3
|
70
70
|
type: :runtime
|
71
71
|
prerelease: false
|
72
72
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -74,13 +74,13 @@ dependencies:
|
|
74
74
|
requirements:
|
75
75
|
- - ~>
|
76
76
|
- !ruby/object:Gem::Version
|
77
|
-
version: 1.0.
|
77
|
+
version: 1.0.3
|
78
78
|
- !ruby/object:Gem::Dependency
|
79
79
|
name: mocha
|
80
80
|
requirement: !ruby/object:Gem::Requirement
|
81
81
|
none: false
|
82
82
|
requirements:
|
83
|
-
- -
|
83
|
+
- - '='
|
84
84
|
- !ruby/object:Gem::Version
|
85
85
|
version: '0.11'
|
86
86
|
type: :development
|
@@ -88,7 +88,7 @@ dependencies:
|
|
88
88
|
version_requirements: !ruby/object:Gem::Requirement
|
89
89
|
none: false
|
90
90
|
requirements:
|
91
|
-
- -
|
91
|
+
- - '='
|
92
92
|
- !ruby/object:Gem::Version
|
93
93
|
version: '0.11'
|
94
94
|
- !ruby/object:Gem::Dependency
|
@@ -107,6 +107,22 @@ dependencies:
|
|
107
107
|
- - ~>
|
108
108
|
- !ruby/object:Gem::Version
|
109
109
|
version: '2.10'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: guard
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - '='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 1.2.1
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - '='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: 1.2.1
|
110
126
|
- !ruby/object:Gem::Dependency
|
111
127
|
name: guard-rspec
|
112
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -143,7 +159,6 @@ files:
|
|
143
159
|
- lib/mongoid/attributes/readonly.rb
|
144
160
|
- lib/mongoid/attributes.rb
|
145
161
|
- lib/mongoid/callbacks.rb
|
146
|
-
- lib/mongoid/collections/retry.rb
|
147
162
|
- lib/mongoid/components.rb
|
148
163
|
- lib/mongoid/config/environment.rb
|
149
164
|
- lib/mongoid/config/inflections.rb
|
@@ -192,6 +207,7 @@ files:
|
|
192
207
|
- lib/mongoid/errors/no_default_session.rb
|
193
208
|
- lib/mongoid/errors/no_environment.rb
|
194
209
|
- lib/mongoid/errors/no_map_reduce_output.rb
|
210
|
+
- lib/mongoid/errors/no_metadata.rb
|
195
211
|
- lib/mongoid/errors/no_parent.rb
|
196
212
|
- lib/mongoid/errors/no_session_config.rb
|
197
213
|
- lib/mongoid/errors/no_session_database.rb
|
@@ -207,6 +223,7 @@ files:
|
|
207
223
|
- lib/mongoid/errors/validations.rb
|
208
224
|
- lib/mongoid/errors/versioning_not_on_root.rb
|
209
225
|
- lib/mongoid/errors.rb
|
226
|
+
- lib/mongoid/evolvable.rb
|
210
227
|
- lib/mongoid/extensions/array.rb
|
211
228
|
- lib/mongoid/extensions/big_decimal.rb
|
212
229
|
- lib/mongoid/extensions/boolean.rb
|
@@ -242,8 +259,6 @@ files:
|
|
242
259
|
- lib/mongoid/indexes/validators/options.rb
|
243
260
|
- lib/mongoid/indexes.rb
|
244
261
|
- lib/mongoid/inspection.rb
|
245
|
-
- lib/mongoid/javascript/functions.yml
|
246
|
-
- lib/mongoid/javascript.rb
|
247
262
|
- lib/mongoid/json.rb
|
248
263
|
- lib/mongoid/loggable.rb
|
249
264
|
- lib/mongoid/matchers/all.rb
|
@@ -286,7 +301,9 @@ files:
|
|
286
301
|
- lib/mongoid/persistence/operations/insert.rb
|
287
302
|
- lib/mongoid/persistence/operations/remove.rb
|
288
303
|
- lib/mongoid/persistence/operations/update.rb
|
304
|
+
- lib/mongoid/persistence/operations/upsert.rb
|
289
305
|
- lib/mongoid/persistence/operations.rb
|
306
|
+
- lib/mongoid/persistence/upsertion.rb
|
290
307
|
- lib/mongoid/persistence.rb
|
291
308
|
- lib/mongoid/railtie.rb
|
292
309
|
- lib/mongoid/railties/database.rake
|
@@ -399,7 +416,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
399
416
|
version: '0'
|
400
417
|
segments:
|
401
418
|
- 0
|
402
|
-
hash:
|
419
|
+
hash: 1324901210162009503
|
403
420
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
404
421
|
none: false
|
405
422
|
requirements:
|
@@ -1,58 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Collections
|
4
|
-
|
5
|
-
# Provides behaviour for retrying commands on connection failure.
|
6
|
-
module Retry
|
7
|
-
|
8
|
-
# Retries command on connection failures.
|
9
|
-
#
|
10
|
-
# This is useful when using replica sets. When a primary server wents
|
11
|
-
# down and a command is issued, the driver will raise a
|
12
|
-
# Mongo::ConnectionFailure. We wait a little bit, because nodes are
|
13
|
-
# electing themselves, and then retry the given command.
|
14
|
-
#
|
15
|
-
# By setting Mongoid.max_retries_on_connection_failure to a value of 0,
|
16
|
-
# no attempt will be made, immediately raising connection failure.
|
17
|
-
# Otherwise it will attempt to make the specified number of retries
|
18
|
-
# and then raising the exception to clients.
|
19
|
-
#
|
20
|
-
# @example Retry the command.
|
21
|
-
# retry_on_connection_failure do
|
22
|
-
# collection.send(name, *args)
|
23
|
-
# end
|
24
|
-
#
|
25
|
-
# @since 2.0.0
|
26
|
-
def retry_on_connection_failure
|
27
|
-
retries = 0
|
28
|
-
begin
|
29
|
-
yield
|
30
|
-
rescue Mongo::ConnectionFailure => ex
|
31
|
-
retries = increase_retry_attempts(retries, ex)
|
32
|
-
retry
|
33
|
-
rescue Mongo::OperationFailure => ex
|
34
|
-
if ex.message =~ /not master/
|
35
|
-
retries = increase_retry_attempts(retries, ex)
|
36
|
-
retry
|
37
|
-
else
|
38
|
-
raise ex
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
private
|
44
|
-
|
45
|
-
def increase_retry_attempts(retries, ex)
|
46
|
-
retries += 1
|
47
|
-
raise ex if retries > Mongoid.max_retries_on_connection_failure
|
48
|
-
Kernel.sleep(0.5)
|
49
|
-
log_retry retries, ex
|
50
|
-
retries
|
51
|
-
end
|
52
|
-
|
53
|
-
def log_retry(retry_number, ex)
|
54
|
-
Mongoid.logger.warn "A #{ex.class.name} was raised. Retry attempt ##{retry_number}." if Mongoid.logger
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
data/lib/mongoid/javascript.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
class Javascript
|
4
|
-
# Constant for the file that defines all the js functions.
|
5
|
-
FUNCTIONS = File.join(File.dirname(__FILE__), "javascript", "functions.yml")
|
6
|
-
|
7
|
-
# Load the javascript functions and define a class method for each one,
|
8
|
-
# that memoizes the value.
|
9
|
-
#
|
10
|
-
# @example Get the function.
|
11
|
-
# Mongoid::Javascript.aggregate
|
12
|
-
YAML.load(File.read(FUNCTIONS)).each_pair do |key, function|
|
13
|
-
(class << self; self; end).class_eval <<-EOT
|
14
|
-
def #{key}
|
15
|
-
@#{key} ||= "#{function}"
|
16
|
-
end
|
17
|
-
EOT
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,63 +0,0 @@
|
|
1
|
-
aggregate:
|
2
|
-
"function(obj, prev) {
|
3
|
-
prev.count++;
|
4
|
-
}"
|
5
|
-
|
6
|
-
group:
|
7
|
-
"function(obj, prev) {
|
8
|
-
prev.group.push(obj);
|
9
|
-
}"
|
10
|
-
|
11
|
-
max:
|
12
|
-
"function(obj, prev) {
|
13
|
-
if (obj.[field] && prev.max == 'start') {
|
14
|
-
prev.max = obj.[field];
|
15
|
-
}
|
16
|
-
if (obj.[field] && prev.max < obj.[field]) {
|
17
|
-
prev.max = obj.[field];
|
18
|
-
}
|
19
|
-
}"
|
20
|
-
|
21
|
-
max_finalize:
|
22
|
-
"function(obj) {
|
23
|
-
if (obj.max == 'start' || isNaN(obj.max)) {
|
24
|
-
obj.max = 0;
|
25
|
-
}
|
26
|
-
return obj;
|
27
|
-
}"
|
28
|
-
|
29
|
-
min:
|
30
|
-
"function(obj, prev) {
|
31
|
-
if (obj.[field] && prev.min == 'start') {
|
32
|
-
prev.min = obj.[field];
|
33
|
-
}
|
34
|
-
if (obj.[field] && prev.min > obj.[field]) {
|
35
|
-
prev.min = obj.[field];
|
36
|
-
}
|
37
|
-
}"
|
38
|
-
|
39
|
-
min_finalize:
|
40
|
-
"function(obj) {
|
41
|
-
if (obj.min == 'start' || isNaN(obj.min)) {
|
42
|
-
obj.min = 0;
|
43
|
-
}
|
44
|
-
return obj;
|
45
|
-
}"
|
46
|
-
|
47
|
-
sum:
|
48
|
-
"function(obj, prev) {
|
49
|
-
if (prev.sum == 'start') {
|
50
|
-
prev.sum = 0;
|
51
|
-
}
|
52
|
-
if (obj.[field]) {
|
53
|
-
prev.sum += obj.[field];
|
54
|
-
}
|
55
|
-
}"
|
56
|
-
|
57
|
-
sum_finalize:
|
58
|
-
"function(obj) {
|
59
|
-
if (obj.sum == 'start' || isNaN(obj.sum)) {
|
60
|
-
obj.sum = 0;
|
61
|
-
}
|
62
|
-
return obj;
|
63
|
-
}"
|