mongoid 2.3.5 → 2.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +34 -176
- data/LICENSE +1 -1
- data/lib/config/locales/bg.yml +6 -0
- data/lib/config/locales/de.yml +6 -0
- data/lib/config/locales/en-GB.yml +8 -0
- data/lib/config/locales/en.yml +8 -0
- data/lib/config/locales/es.yml +9 -3
- data/lib/config/locales/fr.yml +6 -0
- data/lib/config/locales/hi.yml +6 -0
- data/lib/config/locales/hu.yml +6 -0
- data/lib/config/locales/id.yml +6 -0
- data/lib/config/locales/it.yml +6 -0
- data/lib/config/locales/ja.yml +6 -0
- data/lib/config/locales/kr.yml +6 -0
- data/lib/config/locales/nl.yml +8 -0
- data/lib/config/locales/pl.yml +6 -0
- data/lib/config/locales/pt-BR.yml +6 -0
- data/lib/config/locales/pt.yml +8 -2
- data/lib/config/locales/ro.yml +6 -0
- data/lib/config/locales/ru.yml +6 -0
- data/lib/config/locales/sv.yml +6 -0
- data/lib/config/locales/vi.yml +14 -8
- data/lib/config/locales/zh-CN.yml +6 -0
- data/lib/mongoid/atomic.rb +62 -13
- data/lib/mongoid/atomic/modifiers.rb +33 -1
- data/lib/mongoid/attributes.rb +5 -19
- data/lib/mongoid/callbacks.rb +2 -1
- data/lib/mongoid/collection.rb +2 -2
- data/lib/mongoid/collections/retry.rb +18 -6
- data/lib/mongoid/components.rb +2 -0
- data/lib/mongoid/config.rb +8 -63
- data/lib/mongoid/config/environment.rb +41 -0
- data/lib/mongoid/config/options.rb +74 -0
- data/lib/mongoid/contexts/enumerable.rb +0 -24
- data/lib/mongoid/contexts/mongo.rb +33 -3
- data/lib/mongoid/copyable.rb +1 -1
- data/lib/mongoid/criteria.rb +4 -2
- data/lib/mongoid/criterion/inclusion.rb +1 -16
- data/lib/mongoid/criterion/optional.rb +37 -10
- data/lib/mongoid/criterion/scoping.rb +83 -0
- data/lib/mongoid/criterion/selector.rb +9 -6
- data/lib/mongoid/default_scope.rb +1 -1
- data/lib/mongoid/dirty.rb +163 -29
- data/lib/mongoid/document.rb +58 -7
- data/lib/mongoid/errors.rb +2 -0
- data/lib/mongoid/errors/no_environment.rb +19 -0
- data/lib/mongoid/errors/scope_overwrite.rb +21 -0
- data/lib/mongoid/extensions.rb +6 -0
- data/lib/mongoid/extensions/array/deep_copy.rb +25 -0
- data/lib/mongoid/extensions/hash/deep_copy.rb +25 -0
- data/lib/mongoid/extensions/hash/scoping.rb +1 -1
- data/lib/mongoid/extensions/object/deep_copy.rb +21 -0
- data/lib/mongoid/extensions/proc/scoping.rb +2 -2
- data/lib/mongoid/extensions/symbol/inflections.rb +1 -0
- data/lib/mongoid/fields.rb +171 -104
- data/lib/mongoid/fields/{serializable → internal}/array.rb +33 -1
- data/lib/mongoid/fields/{serializable → internal}/big_decimal.rb +16 -1
- data/lib/mongoid/fields/{serializable → internal}/bignum.rb +1 -1
- data/lib/mongoid/fields/{serializable → internal}/binary.rb +1 -1
- data/lib/mongoid/fields/{serializable → internal}/boolean.rb +16 -1
- data/lib/mongoid/fields/{serializable → internal}/date.rb +1 -1
- data/lib/mongoid/fields/{serializable → internal}/date_time.rb +1 -1
- data/lib/mongoid/fields/{serializable → internal}/fixnum.rb +1 -1
- data/lib/mongoid/fields/{serializable → internal}/float.rb +16 -1
- data/lib/mongoid/fields/internal/foreign_keys/array.rb +74 -0
- data/lib/mongoid/fields/{serializable → internal}/foreign_keys/object.rb +11 -2
- data/lib/mongoid/fields/{serializable → internal}/hash.rb +1 -1
- data/lib/mongoid/fields/{serializable → internal}/integer.rb +16 -1
- data/lib/mongoid/fields/{serializable → internal}/localized.rb +23 -2
- data/lib/mongoid/fields/{serializable → internal}/nil_class.rb +16 -1
- data/lib/mongoid/fields/{serializable → internal}/object.rb +1 -1
- data/lib/mongoid/fields/{serializable → internal}/object_id.rb +16 -1
- data/lib/mongoid/fields/{serializable → internal}/range.rb +21 -2
- data/lib/mongoid/fields/{serializable → internal}/set.rb +16 -1
- data/lib/mongoid/fields/{serializable → internal}/string.rb +16 -1
- data/lib/mongoid/fields/{serializable → internal}/symbol.rb +17 -1
- data/lib/mongoid/fields/{serializable → internal}/time.rb +1 -1
- data/lib/mongoid/fields/{serializable → internal}/time_with_zone.rb +1 -1
- data/lib/mongoid/fields/{serializable → internal}/timekeeping.rb +16 -1
- data/lib/mongoid/fields/mappings.rb +8 -3
- data/lib/mongoid/fields/serializable.rb +34 -3
- data/lib/mongoid/hierarchy.rb +14 -14
- data/lib/mongoid/identity_map.rb +3 -2
- data/lib/mongoid/logger.rb +1 -7
- data/lib/mongoid/named_scope.rb +16 -12
- data/lib/mongoid/observer.rb +5 -1
- data/lib/mongoid/paranoia.rb +1 -0
- data/lib/mongoid/persistence.rb +11 -4
- data/lib/mongoid/persistence/atomic.rb +4 -1
- data/lib/mongoid/persistence/atomic/add_to_set.rb +17 -1
- data/lib/mongoid/persistence/atomic/sets.rb +1 -1
- data/lib/mongoid/railties/database.rake +1 -1
- data/lib/mongoid/relations.rb +1 -3
- data/lib/mongoid/relations/auto_save.rb +1 -1
- data/lib/mongoid/relations/builders.rb +1 -1
- data/lib/mongoid/relations/builders/embedded/many.rb +2 -6
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +1 -1
- data/lib/mongoid/relations/builders/nested_attributes/one.rb +1 -1
- data/lib/mongoid/relations/builders/referenced/many_to_many.rb +1 -1
- data/lib/mongoid/relations/cascading/delete.rb +1 -1
- data/lib/mongoid/relations/cyclic.rb +10 -6
- data/lib/mongoid/relations/embedded/atomic.rb +3 -3
- data/lib/mongoid/relations/embedded/many.rb +98 -20
- data/lib/mongoid/relations/macros.rb +2 -0
- data/lib/mongoid/relations/many.rb +13 -0
- data/lib/mongoid/relations/metadata.rb +3 -3
- data/lib/mongoid/relations/nested_builder.rb +4 -3
- data/lib/mongoid/relations/proxy.rb +0 -1
- data/lib/mongoid/relations/referenced/batch.rb +3 -2
- data/lib/mongoid/relations/referenced/in.rb +3 -3
- data/lib/mongoid/relations/referenced/many.rb +89 -10
- data/lib/mongoid/relations/referenced/many_to_many.rb +34 -43
- data/lib/mongoid/relations/referenced/one.rb +8 -4
- data/lib/mongoid/relations/synchronization.rb +22 -5
- data/lib/mongoid/threaded.rb +38 -276
- data/lib/mongoid/threaded/lifecycle.rb +18 -18
- data/lib/mongoid/timestamps/updated.rb +13 -3
- data/lib/mongoid/validations.rb +22 -1
- data/lib/mongoid/validations/presence.rb +40 -0
- data/lib/mongoid/validations/uniqueness.rb +14 -3
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/versioning.rb +6 -2
- data/lib/rails/mongoid.rb +7 -1
- metadata +64 -45
- data/lib/mongoid/fields/serializable/foreign_keys/array.rb +0 -42
- data/lib/mongoid/relations/embedded/sort.rb +0 -31
data/lib/config/locales/pt.yml
CHANGED
@@ -22,7 +22,7 @@ pt:
|
|
22
22
|
"Invalid option :%{invalid} provided to relation :%{name}. Valid options
|
23
23
|
are: %{valid}."
|
24
24
|
unsupported_version:
|
25
|
-
MongoDB %{version} não é suportada, por favor actualize para a
|
25
|
+
MongoDB %{version} não é suportada, por favor actualize para a
|
26
26
|
versão %{mongo_version}.
|
27
27
|
validations:
|
28
28
|
A validação falhou - %{errors}.
|
@@ -32,7 +32,7 @@ pt:
|
|
32
32
|
do documento raiz.
|
33
33
|
invalid_field:
|
34
34
|
Não é permitido definir um campo com o nome %{name}. Não defina
|
35
|
-
campos que entrem em conflito com os nomes dos atributos internos e métodos
|
35
|
+
campos que entrem em conflito com os nomes dos atributos internos e métodos
|
36
36
|
do Mongoid. Use Document#instance_methods para consultar esses nomes.
|
37
37
|
too_many_nested_attribute_records:
|
38
38
|
A aceitação de atributos encadeados para %{association} encontra-se limitada
|
@@ -51,3 +51,9 @@ pt:
|
|
51
51
|
mixed_relations:
|
52
52
|
Referencing a(n) %{embedded} document from the %{root} document via a
|
53
53
|
relational association is not allowed since the %{embedded} is embedded.
|
54
|
+
no_environment:
|
55
|
+
"Mongoid attempted to find the appropriate environment but no Rails.env,
|
56
|
+
Sinatra::Base.environment, or RACK_ENV could be found."
|
57
|
+
scope_overwrite:
|
58
|
+
"Cannot create scope :%{scope_name}, because of existing method
|
59
|
+
%{model_name}.%{scope_name}."
|
data/lib/config/locales/ro.yml
CHANGED
@@ -57,3 +57,9 @@ ro:
|
|
57
57
|
mixed_relations:
|
58
58
|
Referencing a(n) %{embedded} document from the %{root} document via a
|
59
59
|
relational association is not allowed since the %{embedded} is embedded.
|
60
|
+
no_environment:
|
61
|
+
"Mongoid attempted to find the appropriate environment but no Rails.env,
|
62
|
+
Sinatra::Base.environment, or RACK_ENV could be found."
|
63
|
+
scope_overwrite:
|
64
|
+
"Cannot create scope :%{scope_name}, because of existing method
|
65
|
+
%{model_name}.%{scope_name}."
|
data/lib/config/locales/ru.yml
CHANGED
@@ -52,3 +52,9 @@ ru:
|
|
52
52
|
mixed_relations:
|
53
53
|
Referencing a(n) %{embedded} document from the %{root} document via a
|
54
54
|
relational association is not allowed since the %{embedded} is embedded.
|
55
|
+
no_environment:
|
56
|
+
"Mongoid attempted to find the appropriate environment but no Rails.env,
|
57
|
+
Sinatra::Base.environment, or RACK_ENV could be found."
|
58
|
+
scope_overwrite:
|
59
|
+
"Cannot create scope :%{scope_name}, because of existing method
|
60
|
+
%{model_name}.%{scope_name}."
|
data/lib/config/locales/sv.yml
CHANGED
@@ -51,3 +51,9 @@ sv:
|
|
51
51
|
mixed_relations:
|
52
52
|
Referencing a(n) %{embedded} document from the %{root} document via a
|
53
53
|
relational association is not allowed since the %{embedded} is embedded.
|
54
|
+
no_environment:
|
55
|
+
"Mongoid attempted to find the appropriate environment but no Rails.env,
|
56
|
+
Sinatra::Base.environment, or RACK_ENV could be found."
|
57
|
+
scope_overwrite:
|
58
|
+
"Cannot create scope :%{scope_name}, because of existing method
|
59
|
+
%{model_name}.%{scope_name}."
|
data/lib/config/locales/vi.yml
CHANGED
@@ -16,7 +16,7 @@ vi:
|
|
16
16
|
invalid_time:
|
17
17
|
"'%{value}' is not a valid Time."
|
18
18
|
invalid_type:
|
19
|
-
Trường được định nghĩa là một %{klass}, nhưng nhận được %{other} với
|
19
|
+
Trường được định nghĩa là một %{klass}, nhưng nhận được %{other} với
|
20
20
|
giá trị %{value}.
|
21
21
|
invalid_options:
|
22
22
|
"Invalid option :%{invalid} provided to relation :%{name}. Valid options
|
@@ -27,15 +27,15 @@ vi:
|
|
27
27
|
validations:
|
28
28
|
Kiểm định không thành công - %{errors}.
|
29
29
|
invalid_collection:
|
30
|
-
Không được phép truy cập tập văn bản cuả %{klass} vì đây
|
31
|
-
là một văn bản nhúng, xin vui lòng truy cập tập văn bản từ
|
30
|
+
Không được phép truy cập tập văn bản cuả %{klass} vì đây
|
31
|
+
là một văn bản nhúng, xin vui lòng truy cập tập văn bản từ
|
32
32
|
văn bản gốc.
|
33
33
|
invalid_field:
|
34
|
-
Không được phép định nghĩa tên trường là %{name}. Không định nghĩa
|
34
|
+
Không được phép định nghĩa tên trường là %{name}. Không định nghĩa
|
35
35
|
tên trường trùng với các thuộc tính có sẵn hoặc các tên hàm cuả Mongoid.
|
36
36
|
Sử dụng Use Document#instance_methods để xem danh sách tên đã được dùng.
|
37
37
|
too_many_nested_attribute_records:
|
38
|
-
Số lượng các thuộc tính lồng cho %{association} bị giới hạn
|
38
|
+
Số lượng các thuộc tính lồng cho %{association} bị giới hạn
|
39
39
|
ở %{limit} bản ghi.
|
40
40
|
embedded_in_must_have_inverse_of:
|
41
41
|
Phải cho thêm inverse_of vào lực chọn cuả kết hợp embedded_in.
|
@@ -43,13 +43,19 @@ vi:
|
|
43
43
|
Lựa chọn dependent => destroy|delete
|
44
44
|
chỉ có hiệu lực với kết hợp references_one hoặc references_many.
|
45
45
|
association_cant_have_inverse_of:
|
46
|
-
Không được phép định nghĩa inverse_of cho kết hợp này. Chỉ
|
46
|
+
Không được phép định nghĩa inverse_of cho kết hợp này. Chỉ
|
47
47
|
sử dụng lựa chọn này cho embedded_in or references_many as array.
|
48
48
|
calling_document_find_with_nil_is_invalid:
|
49
49
|
Không được phép gọi Document#find với giá trị nil
|
50
50
|
unsaved_document:
|
51
|
-
Bạn không được gọi create hoặc create! thông qua một quan hệ kết hợp
|
51
|
+
Bạn không được gọi create hoặc create! thông qua một quan hệ kết hợp
|
52
52
|
mà văn bản gốc (%{base}) chưa được lưu.
|
53
53
|
mixed_relations:
|
54
|
-
Không được phép tham chiếu một văn bản %{embedded} từ văn bản %{root} thông qua một
|
54
|
+
Không được phép tham chiếu một văn bản %{embedded} từ văn bản %{root} thông qua một
|
55
55
|
quan hệ kết hợp vì %{embedded} là kiểu nhúng.
|
56
|
+
no_environment:
|
57
|
+
"Mongoid attempted to find the appropriate environment but no Rails.env,
|
58
|
+
Sinatra::Base.environment, or RACK_ENV could be found."
|
59
|
+
scope_overwrite:
|
60
|
+
"Cannot create scope :%{scope_name}, because of existing method
|
61
|
+
%{model_name}.%{scope_name}."
|
@@ -44,3 +44,9 @@ zh-CN:
|
|
44
44
|
mixed_relations:
|
45
45
|
Referencing a(n) %{embedded} document from the %{root} document via a
|
46
46
|
relational association is not allowed since the %{embedded} is embedded.
|
47
|
+
no_environment:
|
48
|
+
"Mongoid attempted to find the appropriate environment but no Rails.env,
|
49
|
+
Sinatra::Base.environment, or RACK_ENV could be found."
|
50
|
+
scope_overwrite:
|
51
|
+
"Cannot create scope :%{scope_name}, because of existing method
|
52
|
+
%{model_name}.%{scope_name}."
|
data/lib/mongoid/atomic.rb
CHANGED
@@ -9,6 +9,16 @@ module Mongoid #:nodoc:
|
|
9
9
|
module Atomic
|
10
10
|
extend ActiveSupport::Concern
|
11
11
|
|
12
|
+
UPDATES = [
|
13
|
+
:atomic_array_pushes,
|
14
|
+
:atomic_array_pulls,
|
15
|
+
:atomic_array_add_to_sets,
|
16
|
+
:atomic_pulls,
|
17
|
+
:atomic_unsets,
|
18
|
+
:delayed_atomic_sets,
|
19
|
+
:delayed_atomic_pulls
|
20
|
+
]
|
21
|
+
|
12
22
|
included do
|
13
23
|
|
14
24
|
# When MongoDB finally fully implements the positional operator, we can
|
@@ -16,6 +26,55 @@ module Mongoid #:nodoc:
|
|
16
26
|
attr_accessor :_index
|
17
27
|
end
|
18
28
|
|
29
|
+
# Add the document as an atomic pull.
|
30
|
+
#
|
31
|
+
# @example Add the atomic pull.
|
32
|
+
# person.add_atomic_pull(address)
|
33
|
+
#
|
34
|
+
# @param [ Document ] The embedded document to pull.
|
35
|
+
#
|
36
|
+
# @since 2.2.0
|
37
|
+
def add_atomic_pull(document)
|
38
|
+
document.flagged_for_destroy = true
|
39
|
+
(delayed_atomic_pulls[document.metadata.name.to_s] ||= []).push(document)
|
40
|
+
end
|
41
|
+
|
42
|
+
# For array fields these are the pushes that need to happen.
|
43
|
+
#
|
44
|
+
# @example Get the array pushes.
|
45
|
+
# person.atomic_array_pushes
|
46
|
+
#
|
47
|
+
# @return [ Hash ] The array pushes.
|
48
|
+
#
|
49
|
+
# @since 2.4.0
|
50
|
+
def atomic_array_pushes
|
51
|
+
@atomic_array_pushes ||= {}
|
52
|
+
end
|
53
|
+
|
54
|
+
# For array fields these are the pulls that need to happen.
|
55
|
+
#
|
56
|
+
# @example Get the array pulls.
|
57
|
+
# person.atomic_array_pulls
|
58
|
+
#
|
59
|
+
# @return [ Hash ] The array pulls.
|
60
|
+
#
|
61
|
+
# @since 2.4.0
|
62
|
+
def atomic_array_pulls
|
63
|
+
@atomic_array_pulls ||= {}
|
64
|
+
end
|
65
|
+
|
66
|
+
# For array fields these are the unique adds that need to happen.
|
67
|
+
#
|
68
|
+
# @example Get the array unique adds.
|
69
|
+
# person.atomic_array_add_to_sets
|
70
|
+
#
|
71
|
+
# @return [ Hash ] The array add_to_sets.
|
72
|
+
#
|
73
|
+
# @since 2.4.0
|
74
|
+
def atomic_array_add_to_sets
|
75
|
+
@atomic_array_add_to_sets ||= {}
|
76
|
+
end
|
77
|
+
|
19
78
|
# Get all the atomic updates that need to happen for the current
|
20
79
|
# +Document+. This includes all changes that need to happen in the
|
21
80
|
# entire hierarchy that exists below where the save call was made.
|
@@ -112,19 +171,6 @@ module Mongoid #:nodoc:
|
|
112
171
|
end
|
113
172
|
end
|
114
173
|
|
115
|
-
# Add the document as an atomic pull.
|
116
|
-
#
|
117
|
-
# @example Add the atomic pull.
|
118
|
-
# person.add_atomic_pull(address)
|
119
|
-
#
|
120
|
-
# @param [ Document ] The embedded document to pull.
|
121
|
-
#
|
122
|
-
# @since 2.2.0
|
123
|
-
def add_atomic_pull(document)
|
124
|
-
document.flagged_for_destroy = true
|
125
|
-
(delayed_atomic_pulls[document.metadata.name.to_s] ||= []).push(document)
|
126
|
-
end
|
127
|
-
|
128
174
|
# Get all the push attributes that need to occur.
|
129
175
|
#
|
130
176
|
# @example Get the pushes.
|
@@ -225,6 +271,9 @@ module Mongoid #:nodoc:
|
|
225
271
|
mods.set(doc.atomic_sets)
|
226
272
|
mods.set(doc.delayed_atomic_sets)
|
227
273
|
mods.push(doc.atomic_pushes)
|
274
|
+
mods.push(doc.atomic_array_pushes)
|
275
|
+
mods.add_to_set(doc.atomic_array_add_to_sets)
|
276
|
+
mods.pull(doc.atomic_array_pulls)
|
228
277
|
end
|
229
278
|
end
|
230
279
|
end
|
@@ -6,6 +6,26 @@ module Mongoid #:nodoc:
|
|
6
6
|
# database.
|
7
7
|
class Modifiers < Hash
|
8
8
|
|
9
|
+
# Add the atomic $addToSet modifiers to the hash.
|
10
|
+
#
|
11
|
+
# @example Add the $addToSet modifiers.
|
12
|
+
# modifiers.add_to_set({ "preference_ids" => [ "one" ] })
|
13
|
+
#
|
14
|
+
# @param [ Hash ] modifications The add to set modifiers.
|
15
|
+
#
|
16
|
+
# @since 2.4.0
|
17
|
+
def add_to_set(modifications)
|
18
|
+
modifications.each_pair do |field, value|
|
19
|
+
if add_to_sets.has_key?(field)
|
20
|
+
value.each do |val|
|
21
|
+
add_to_sets[field]["$each"].push(val)
|
22
|
+
end
|
23
|
+
else
|
24
|
+
add_to_sets[field] = { "$each" => value }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
9
29
|
# Adds pull modifiers to the modifiers hash.
|
10
30
|
#
|
11
31
|
# @example Add pull operations.
|
@@ -90,6 +110,18 @@ module Mongoid #:nodoc:
|
|
90
110
|
end
|
91
111
|
end
|
92
112
|
|
113
|
+
# Get the $addToSet operations or intialize a new one.
|
114
|
+
#
|
115
|
+
# @example Get the $addToSet operations.
|
116
|
+
# modifiers.add_to_sets
|
117
|
+
#
|
118
|
+
# @return [ Hash ] The $addToSet operations.
|
119
|
+
#
|
120
|
+
# @since 2.4.0
|
121
|
+
def add_to_sets
|
122
|
+
self["$addToSet"] ||= {}
|
123
|
+
end
|
124
|
+
|
93
125
|
# Is the operation going to be a conflict for a $set?
|
94
126
|
#
|
95
127
|
# @example Is this a conflict for a set?
|
@@ -194,7 +226,7 @@ module Mongoid #:nodoc:
|
|
194
226
|
# Get the $pullAll operations or intialize a new one.
|
195
227
|
#
|
196
228
|
# @example Get the $pullAll operations.
|
197
|
-
# modifiers.
|
229
|
+
# modifiers.pulls
|
198
230
|
#
|
199
231
|
# @return [ Hash ] The $pullAll operations.
|
200
232
|
#
|
data/lib/mongoid/attributes.rb
CHANGED
@@ -157,24 +157,6 @@ module Mongoid #:nodoc:
|
|
157
157
|
|
158
158
|
protected
|
159
159
|
|
160
|
-
# Set any missing default values in the attributes.
|
161
|
-
#
|
162
|
-
# @example Get the raw attributes after defaults have been applied.
|
163
|
-
# person.apply_defaults
|
164
|
-
#
|
165
|
-
# @return [ Hash ] The raw attributes.
|
166
|
-
#
|
167
|
-
# @since 2.0.0.rc.8
|
168
|
-
def apply_defaults
|
169
|
-
defaults.each do |name|
|
170
|
-
unless attributes.has_key?(name)
|
171
|
-
if field = fields[name]
|
172
|
-
attributes[name] = field.eval_default(self)
|
173
|
-
end
|
174
|
-
end
|
175
|
-
end
|
176
|
-
end
|
177
|
-
|
178
160
|
# Used for allowing accessor methods for dynamic attributes.
|
179
161
|
#
|
180
162
|
# @param [ String, Symbol ] name The name of the method.
|
@@ -226,8 +208,12 @@ module Mongoid #:nodoc:
|
|
226
208
|
alias :#{name} :#{original}
|
227
209
|
alias :#{name}= :#{original}=
|
228
210
|
alias :#{name}? :#{original}?
|
211
|
+
alias :#{name}_change :#{original}_change
|
212
|
+
alias :#{name}_changed? :#{original}_changed?
|
213
|
+
alias :reset_#{name}! :reset_#{original}!
|
214
|
+
alias :#{name}_was :#{original}_was
|
215
|
+
alias :#{name}_will_change! :#{original}_will_change!
|
229
216
|
RUBY
|
230
|
-
super
|
231
217
|
end
|
232
218
|
end
|
233
219
|
end
|
data/lib/mongoid/callbacks.rb
CHANGED
@@ -7,7 +7,7 @@ module Mongoid #:nodoc:
|
|
7
7
|
|
8
8
|
CALLBACKS = [
|
9
9
|
:before_validation, :after_validation,
|
10
|
-
:after_initialize,
|
10
|
+
:after_initialize, :after_build,
|
11
11
|
:before_create, :around_create, :after_create,
|
12
12
|
:before_destroy, :around_destroy, :after_destroy,
|
13
13
|
:before_save, :around_save, :after_save,
|
@@ -19,6 +19,7 @@ module Mongoid #:nodoc:
|
|
19
19
|
include ActiveModel::Validations::Callbacks
|
20
20
|
|
21
21
|
define_model_callbacks :initialize, :only => :after
|
22
|
+
define_model_callbacks :build, :only => :after
|
22
23
|
define_model_callbacks :create, :destroy, :save, :update
|
23
24
|
end
|
24
25
|
|
data/lib/mongoid/collection.rb
CHANGED
@@ -91,7 +91,7 @@ module Mongoid #:nodoc
|
|
91
91
|
#
|
92
92
|
# @since 2.0.2, batch-relational-insert
|
93
93
|
def insert(documents, options = {})
|
94
|
-
consumer = Threaded.insert
|
94
|
+
consumer = Threaded.insert(name)
|
95
95
|
if consumer
|
96
96
|
consumer.consume(documents, options)
|
97
97
|
else
|
@@ -142,7 +142,7 @@ module Mongoid #:nodoc
|
|
142
142
|
#
|
143
143
|
# @since 2.0.0
|
144
144
|
def update(selector, document, options = {})
|
145
|
-
updater = Threaded.update_consumer(
|
145
|
+
updater = Threaded.update_consumer(klass)
|
146
146
|
if updater
|
147
147
|
updater.consume(selector, document, options)
|
148
148
|
else
|
@@ -28,18 +28,30 @@ module Mongoid #:nodoc:
|
|
28
28
|
begin
|
29
29
|
yield
|
30
30
|
rescue Mongo::ConnectionFailure => ex
|
31
|
-
retries
|
32
|
-
raise ex if retries > Mongoid.max_retries_on_connection_failure
|
33
|
-
Kernel.sleep(0.5)
|
34
|
-
log_retry retries
|
31
|
+
retries = increase_retry_attempts(retries, ex)
|
35
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
|
36
40
|
end
|
37
41
|
end
|
38
42
|
|
39
43
|
private
|
40
44
|
|
41
|
-
def
|
42
|
-
|
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}."
|
43
55
|
end
|
44
56
|
end
|
45
57
|
end
|
data/lib/mongoid/components.rb
CHANGED
data/lib/mongoid/config.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require "uri"
|
3
3
|
require "mongoid/config/database"
|
4
|
+
require "mongoid/config/environment"
|
4
5
|
require "mongoid/config/replset_database"
|
6
|
+
require "mongoid/config/options"
|
5
7
|
|
6
8
|
module Mongoid #:nodoc
|
7
9
|
|
@@ -11,40 +13,11 @@ module Mongoid #:nodoc
|
|
11
13
|
# @todo Durran: This module needs an overhaul, remove singleton, etc.
|
12
14
|
module Config
|
13
15
|
extend self
|
16
|
+
extend Options
|
14
17
|
include ActiveModel::Observing
|
15
18
|
|
16
|
-
|
17
|
-
|
18
|
-
@defaults = {}
|
19
|
-
|
20
|
-
# Define a configuration option with a default.
|
21
|
-
#
|
22
|
-
# @example Define the option.
|
23
|
-
# Config.option(:persist_in_safe_mode, :default => false)
|
24
|
-
#
|
25
|
-
# @param [ Symbol ] name The name of the configuration option.
|
26
|
-
# @param [ Hash ] options Extras for the option.
|
27
|
-
#
|
28
|
-
# @option options [ Object ] :default The default value.
|
29
|
-
#
|
30
|
-
# @since 2.0.0.rc.1
|
31
|
-
def option(name, options = {})
|
32
|
-
defaults[name] = settings[name] = options[:default]
|
33
|
-
|
34
|
-
class_eval <<-RUBY
|
35
|
-
def #{name}
|
36
|
-
settings[#{name.inspect}]
|
37
|
-
end
|
38
|
-
|
39
|
-
def #{name}=(value)
|
40
|
-
settings[#{name.inspect}] = value
|
41
|
-
end
|
42
|
-
|
43
|
-
def #{name}?
|
44
|
-
#{name}
|
45
|
-
end
|
46
|
-
RUBY
|
47
|
-
end
|
19
|
+
# @attribute [rw] master The master database.
|
20
|
+
attr_accessor :master
|
48
21
|
|
49
22
|
option :allow_dynamic_fields, :default => true
|
50
23
|
option :autocreate_indexes, :default => false
|
@@ -52,6 +25,7 @@ module Mongoid #:nodoc
|
|
52
25
|
option :include_root_in_json, :default => false
|
53
26
|
option :max_retries_on_connection_failure, :default => 0
|
54
27
|
option :parameterize_keys, :default => true
|
28
|
+
option :scope_overwrite_exception, :default => false
|
55
29
|
option :persist_in_safe_mode, :default => false
|
56
30
|
option :preload_models, :default => false
|
57
31
|
option :raise_not_found_error, :default => true
|
@@ -130,10 +104,8 @@ module Mongoid #:nodoc
|
|
130
104
|
#
|
131
105
|
# @since 2.0.1
|
132
106
|
def load!(path)
|
133
|
-
|
134
|
-
|
135
|
-
if settings.present?
|
136
|
-
from_hash(settings)
|
107
|
+
Environment.load_yaml(path).tap do |settings|
|
108
|
+
from_hash(settings) if settings.present?
|
137
109
|
end
|
138
110
|
end
|
139
111
|
|
@@ -258,24 +230,6 @@ module Mongoid #:nodoc
|
|
258
230
|
end
|
259
231
|
end
|
260
232
|
|
261
|
-
# Reset the configuration options to the defaults.
|
262
|
-
#
|
263
|
-
# @example Reset the configuration options.
|
264
|
-
# config.reset
|
265
|
-
def reset
|
266
|
-
settings.replace(defaults)
|
267
|
-
end
|
268
|
-
|
269
|
-
# @deprecated User replica sets instead.
|
270
|
-
def slaves
|
271
|
-
slave_warning!
|
272
|
-
end
|
273
|
-
|
274
|
-
# @deprecated User replica sets instead.
|
275
|
-
def slaves=(dbs)
|
276
|
-
slave_warning!
|
277
|
-
end
|
278
|
-
|
279
233
|
protected
|
280
234
|
|
281
235
|
# Check if the database is valid and the correct version.
|
@@ -334,14 +288,5 @@ module Mongoid #:nodoc
|
|
334
288
|
end
|
335
289
|
end
|
336
290
|
end
|
337
|
-
|
338
|
-
# Temporarily here so people can move to replica sets.
|
339
|
-
def slave_warning!
|
340
|
-
warn(
|
341
|
-
"Using Mongoid for traditional slave databases will be removed in the " +
|
342
|
-
"next release in preference of replica sets. Please change your setup " +
|
343
|
-
"accordingly."
|
344
|
-
)
|
345
|
-
end
|
346
291
|
end
|
347
292
|
end
|