mongoid 2.0.0.beta.18 → 2.0.0.beta.19
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/lib/config/locales/bg.yml +42 -0
- data/lib/config/locales/de.yml +41 -0
- data/lib/config/locales/en.yml +2 -0
- data/lib/config/locales/hu.yml +45 -0
- data/lib/config/locales/ro.yml +47 -0
- data/lib/config/locales/zh-CN.yml +31 -0
- data/lib/mongoid.rb +1 -0
- data/lib/mongoid/collections/operations.rb +1 -0
- data/lib/mongoid/components.rb +1 -0
- data/lib/mongoid/config.rb +29 -0
- data/lib/mongoid/criteria.rb +8 -2
- data/lib/mongoid/criterion/optional.rb +3 -3
- data/lib/mongoid/document.rb +1 -1
- data/lib/mongoid/errors/validations.rb +2 -0
- data/lib/mongoid/extensions.rb +3 -3
- data/lib/mongoid/extensions/date/conversions.rb +1 -0
- data/lib/mongoid/extensions/{objectid → object_id}/conversions.rb +10 -10
- data/lib/mongoid/extensions/time_conversions.rb +11 -8
- data/lib/mongoid/field.rb +1 -1
- data/lib/mongoid/finders.rb +1 -1
- data/lib/mongoid/identity.rb +1 -1
- data/lib/mongoid/keys.rb +6 -6
- data/lib/mongoid/multi_parameter_attributes.rb +80 -0
- data/lib/mongoid/railties/database.rake +1 -1
- data/lib/mongoid/validations/uniqueness.rb +11 -2
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +0 -1
- metadata +54 -53
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
bg:
|
|
2
|
+
activemodel:
|
|
3
|
+
errors:
|
|
4
|
+
messages:
|
|
5
|
+
taken: е вече заето
|
|
6
|
+
|
|
7
|
+
mongoid:
|
|
8
|
+
errors:
|
|
9
|
+
messages:
|
|
10
|
+
document_not_found:
|
|
11
|
+
Не е намерен документ %{klass} с id(та) %{identifiers}.
|
|
12
|
+
invalid_database:
|
|
13
|
+
Базата данни трябва да е от тип Mnogo:DB, а не %{name}.
|
|
14
|
+
invalid_type:
|
|
15
|
+
Полето е дефинирано като a(n) %{klass}, но се присвоява %{other}
|
|
16
|
+
със стойност %{value}.
|
|
17
|
+
unsupported_version:
|
|
18
|
+
MongoDB %{version} не се подържа, моля ползвайте версия след %{mongo_version}.
|
|
19
|
+
validations:
|
|
20
|
+
Неуспешна валидация - %{errors} грешки.
|
|
21
|
+
invalid_collection:
|
|
22
|
+
Достъпа до колекцията за %{klass} не е разрешена, тъй като
|
|
23
|
+
тя е вложен документ, можете да я достъпите през главният документ
|
|
24
|
+
invalid_field:
|
|
25
|
+
Дефинирането на поле с име %{name} не е разрешено. Не дефинирайте
|
|
26
|
+
полета, които са в конфликт с Mongoid вътрешните атрибути.
|
|
27
|
+
Можете да ги видите с Document#instance_methods
|
|
28
|
+
too_many_nested_attribute_records:
|
|
29
|
+
Присвояването на вложини атрибути за %{association} е
|
|
30
|
+
ограничено до %{limit} записа
|
|
31
|
+
embedded_in_must_have_inverse_of:
|
|
32
|
+
Опциите на embedded_in асоциацията трябва да съдържат invers_of.
|
|
33
|
+
dependent_only_references_one_or_many:
|
|
34
|
+
Опцията dependent => destroy|delete, която е посочена е
|
|
35
|
+
валидна само за references_one или references_many връзки
|
|
36
|
+
association_cant_have_inverse_of:
|
|
37
|
+
Дефинирането на inverse_of за тази асоциация не е позволено.
|
|
38
|
+
Използвайте тази опция само за embedded_in или
|
|
39
|
+
references_many като масив.
|
|
40
|
+
calling_document_find_with_nil_is_invalid:
|
|
41
|
+
Извикването на Document#find със nil е невалидно
|
|
42
|
+
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
de:
|
|
2
|
+
activemodel:
|
|
3
|
+
errors:
|
|
4
|
+
messages:
|
|
5
|
+
taken: ist bereits vergeben
|
|
6
|
+
|
|
7
|
+
mongoid:
|
|
8
|
+
errors:
|
|
9
|
+
messages:
|
|
10
|
+
document_not_found:
|
|
11
|
+
Dokument für Klasse %{klass} mit ID(s) %{identifiers} nicht gefunden.
|
|
12
|
+
invalid_database:
|
|
13
|
+
Datenbank sollte eine Mongo::DB sein, nicht %{name}.
|
|
14
|
+
invalid_type:
|
|
15
|
+
Feld wurde als a(n) %{klass} definiert, doch der Wert %{value} vom Typ
|
|
16
|
+
%{other} wurde übergeben.
|
|
17
|
+
unsupported_version:
|
|
18
|
+
MongoDB %{version} wird nicht unterstützt, bitte auf Version
|
|
19
|
+
%{mongo_version} aktualisieren.
|
|
20
|
+
validations:
|
|
21
|
+
Validierung fehlgeschlagen - %{errors}.
|
|
22
|
+
invalid_collection:
|
|
23
|
+
Zugriff auf die Collection von %{klass} ist nicht erlaubt,
|
|
24
|
+
da es sich um ein eingebettetes Dokument handelt. Auf die Collection
|
|
25
|
+
kann vom Wurzeldokument aus zugegriffen werden.
|
|
26
|
+
invalid_field:
|
|
27
|
+
Das Feld %{name} kann nicht definiert werden, da sein Name mit
|
|
28
|
+
einem internen Mongoid-Attribut oder Methodennamen kollidiert.
|
|
29
|
+
Siehe Document#instance_methods für eine Auflistung dieser Namen.
|
|
30
|
+
too_many_nested_attribute_records:
|
|
31
|
+
Verschachtelte Attribute für %{association} sind auf %{limit} Einträge
|
|
32
|
+
beschränkt.
|
|
33
|
+
embedded_in_must_have_inverse_of:
|
|
34
|
+
Die Optionen für eine embedded_in-Beziehung müssen inverse_of beinhalten.
|
|
35
|
+
dependent_only_references_one_or_many:
|
|
36
|
+
Die dependent => destroy|delete-Option ist nur für
|
|
37
|
+
references_one oder references_many-Beziehungen gültig.
|
|
38
|
+
association_cant_have_inverse_of:
|
|
39
|
+
Es ist nicht erlaubt, inverse_of für diese Beziehung zu definieren.
|
|
40
|
+
Diese Option kann nur für embedded_in oder references_many als Array
|
|
41
|
+
verwendet werden.
|
data/lib/config/locales/en.yml
CHANGED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
hu:
|
|
2
|
+
activemodel:
|
|
3
|
+
errors:
|
|
4
|
+
messages:
|
|
5
|
+
taken: már foglalt
|
|
6
|
+
|
|
7
|
+
mongoid:
|
|
8
|
+
errors:
|
|
9
|
+
messages:
|
|
10
|
+
document_not_found:
|
|
11
|
+
%{klass} osztályban, %{identifiers} id(k)-el nem található dokumentum.
|
|
12
|
+
invalid_database:
|
|
13
|
+
Az adatbázisnak Mongo::DB-nek kellene lennie, nem %{name}.
|
|
14
|
+
invalid_type:
|
|
15
|
+
A mező %{klass} -ként volt meghatározva, de a kapott érték %{value}
|
|
16
|
+
egy %{other}.
|
|
17
|
+
unsupported_version:
|
|
18
|
+
MongoDB %{version} nem támogatott, kérjük frissítsen
|
|
19
|
+
a %{mongo_version} verzióra.
|
|
20
|
+
validations:
|
|
21
|
+
Érvénytelen - %{errors}.
|
|
22
|
+
invalid_collection:
|
|
23
|
+
%{klass} osztálybeli kollekcióhoz való hozzáférés nem engedélyezett,
|
|
24
|
+
mivel egy beágyazott dokumentum. A kollekció a gyökér dokumentumból
|
|
25
|
+
érhető el.
|
|
26
|
+
invalid_field:
|
|
27
|
+
%{name} mező név nem engedélyezett, mivel a Mongoid által használt
|
|
28
|
+
belső tulajdonság vagy eljárás névvel eggyezik. Használja a
|
|
29
|
+
Document#instance_methods parancsot ezen nevek lekérdezéséhez.
|
|
30
|
+
too_many_nested_attribute_records:
|
|
31
|
+
%{association} esetében a beágyazott tulajdonságok %{limit} számú
|
|
32
|
+
bejegyzésre elfogadhatóak.
|
|
33
|
+
embedded_in_must_have_inverse_of:
|
|
34
|
+
Az embedded_in tipusú kapcsolat esetében kötelező az inverse_of
|
|
35
|
+
opció használata.
|
|
36
|
+
dependent_only_references_one_or_many:
|
|
37
|
+
A dependent => destroy|delete opció csak a references_one vagy
|
|
38
|
+
references_many kapcsolatok esetében érvényes.
|
|
39
|
+
association_cant_have_inverse_of:
|
|
40
|
+
Ezen a tipusú kapcsolaton az inverse_of opció érvénytelen, csak
|
|
41
|
+
az embedded_in vagy references_many as array tipusú kapcsolatok
|
|
42
|
+
esetében használható.
|
|
43
|
+
calling_document_find_with_nil_is_invalid:
|
|
44
|
+
Document#find parancs nil érték esetében érvénytelen.
|
|
45
|
+
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
en:
|
|
2
|
+
activemodel:
|
|
3
|
+
errors:
|
|
4
|
+
messages:
|
|
5
|
+
taken: este deja folosit
|
|
6
|
+
|
|
7
|
+
mongoid:
|
|
8
|
+
errors:
|
|
9
|
+
messages:
|
|
10
|
+
document_not_found:
|
|
11
|
+
Nu există document în clasa %{klass} cu id %{identifiers}.
|
|
12
|
+
invalid_database:
|
|
13
|
+
Baza de date ar trebui să fie de tipul Mongo::DB, nu %{name}.
|
|
14
|
+
invalid_type:
|
|
15
|
+
Câmpul a fost definit ca şi un(o) %{klass}, dar valoarea
|
|
16
|
+
recepţionată %{value} este de clasa %{other}.
|
|
17
|
+
unsupported_version:
|
|
18
|
+
Versiunea MongoDB %{version} nu este suportată.
|
|
19
|
+
Vă rugăm să folosiţi versiunea %{mongo_version}.
|
|
20
|
+
validations:
|
|
21
|
+
Validare nereuşită - %{errors}.
|
|
22
|
+
invalid_collection:
|
|
23
|
+
Accesul la colecţie din clasa %{klass} este interzisă, fiindcă
|
|
24
|
+
este un document încorporat. Vă rugăm accesaţi colecţia din
|
|
25
|
+
documentul rădăcină.
|
|
26
|
+
invalid_field:
|
|
27
|
+
Folosirea denumirii %{name} ptr. un câmp este interzisă. Vă
|
|
28
|
+
rugăm să evitaţi utilizarea acelor cuvinte care intră în conflict
|
|
29
|
+
cu denumirile folosite de proprietăţile sau metodele Mongoid-lui.
|
|
30
|
+
Folosiţi comanda Document#instance_methods pentru a afla care
|
|
31
|
+
sunt acestea.
|
|
32
|
+
too_many_nested_attribute_records:
|
|
33
|
+
În cazul %{association} folosirea atributelor îmbricate este
|
|
34
|
+
limitat la %{limit} înregistrări.
|
|
35
|
+
embedded_in_must_have_inverse_of:
|
|
36
|
+
Folosirea opţiunii inverse_of este obligatorie în cazul
|
|
37
|
+
asociaţiilor de tip embedded_in.
|
|
38
|
+
dependent_only_references_one_or_many:
|
|
39
|
+
Opţiunea dependent => destroy|delete poate fi folosită doar în
|
|
40
|
+
cazul asociaţiilor de tip references_one sau references_many.
|
|
41
|
+
association_cant_have_inverse_of:
|
|
42
|
+
Folosire opţiunii inverse_of la acest tip de asociaţie este
|
|
43
|
+
interzisă. Aceasta poate fi folosită doar la asociaţiile de
|
|
44
|
+
tip embedded_in sau references_many as array.
|
|
45
|
+
calling_document_find_with_nil_is_invalid:
|
|
46
|
+
Folosirea metodei Document#find cu valoarea nil este invalidă.
|
|
47
|
+
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
en:
|
|
2
|
+
activemodel:
|
|
3
|
+
errors:
|
|
4
|
+
messages:
|
|
5
|
+
taken: 已占用
|
|
6
|
+
|
|
7
|
+
mongoid:
|
|
8
|
+
errors:
|
|
9
|
+
messages:
|
|
10
|
+
document_not_found:
|
|
11
|
+
没有发现类是%{klass}id(s)是%{identifiers}的文档
|
|
12
|
+
invalid_database:
|
|
13
|
+
数据库应该是Mongo::DB,而不是%{name}.
|
|
14
|
+
invalid_type:
|
|
15
|
+
在类%{klass}中定义了字段,实际值是%{value}的%{other}.
|
|
16
|
+
unsupported_version:
|
|
17
|
+
MongoDB %{version} 版本已过期,请升级到 %{mongo_version}.
|
|
18
|
+
validations:
|
|
19
|
+
校验失败 - %{errors}.
|
|
20
|
+
invalid_collection:
|
|
21
|
+
不允许直接访问嵌入式的集合%{klass} , 请从文档的根访问集合.
|
|
22
|
+
invalid_field:
|
|
23
|
+
字段的名字不允许为 %{name}. 你不应该定义跟Mongoid内部属性或者方法相同的名字,详细请看Use Document#instance_methods.
|
|
24
|
+
too_many_nested_attribute_records:
|
|
25
|
+
被关联的%{association} 嵌入式属性不能超过 %{limit}.
|
|
26
|
+
embedded_in_must_have_inverse_of:
|
|
27
|
+
embedded_in的关联属性必须包含inverse_of.
|
|
28
|
+
dependent_only_references_one_or_many:
|
|
29
|
+
dependent => destroy|delete 选项只有在references_one或者references_many时候有效.
|
|
30
|
+
association_cant_have_inverse_of:
|
|
31
|
+
在当前的关联中,不允许定义inverse_of去,其只有在embedded_in或者references_many是数组的情况下使用
|
data/lib/mongoid.rb
CHANGED
data/lib/mongoid/components.rb
CHANGED
data/lib/mongoid/config.rb
CHANGED
|
@@ -48,6 +48,35 @@ module Mongoid #:nodoc
|
|
|
48
48
|
attr_reader :use_utc
|
|
49
49
|
alias_method :use_utc?, :use_utc
|
|
50
50
|
|
|
51
|
+
# Sets whether the times returned from the database use the ruby or
|
|
52
|
+
# the ActiveSupport time zone.
|
|
53
|
+
# If you omit this setting, then times will use the ruby time zone.
|
|
54
|
+
#
|
|
55
|
+
# Example:
|
|
56
|
+
#
|
|
57
|
+
# <tt>Config.use_activesupport_time_zone = true</tt>
|
|
58
|
+
#
|
|
59
|
+
# Returns:
|
|
60
|
+
#
|
|
61
|
+
# A boolean
|
|
62
|
+
def use_activesupport_time_zone=(value)
|
|
63
|
+
@use_activesupport_time_zone = value || false
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Sets whether the times returned from the database use the ruby or
|
|
67
|
+
# the ActiveSupport time zone.
|
|
68
|
+
# If the setting is false, then times will use the ruby time zone.
|
|
69
|
+
#
|
|
70
|
+
# Example:
|
|
71
|
+
#
|
|
72
|
+
# <tt>Config.use_activesupport_time_zone</tt>
|
|
73
|
+
#
|
|
74
|
+
# Returns:
|
|
75
|
+
#
|
|
76
|
+
# A boolean
|
|
77
|
+
attr_reader :use_activesupport_time_zone
|
|
78
|
+
alias_method :use_activesupport_time_zone?, :use_activesupport_time_zone
|
|
79
|
+
|
|
51
80
|
# Sets the Mongo::DB master database to be used. If the object trying to be
|
|
52
81
|
# set is not a valid +Mongo::DB+, then an error will be raised.
|
|
53
82
|
#
|
data/lib/mongoid/criteria.rb
CHANGED
|
@@ -235,8 +235,14 @@ module Mongoid #:nodoc:
|
|
|
235
235
|
unless @selector[key]
|
|
236
236
|
@selector[key] = { operator => value }
|
|
237
237
|
else
|
|
238
|
-
|
|
239
|
-
|
|
238
|
+
if @selector[key].has_key?(operator)
|
|
239
|
+
# add the value to the current operator
|
|
240
|
+
new_value = @selector[key].values.first + value
|
|
241
|
+
@selector[key] = { operator => new_value }
|
|
242
|
+
else
|
|
243
|
+
# create a new operator on this key
|
|
244
|
+
@selector[key][operator] = value
|
|
245
|
+
end
|
|
240
246
|
end
|
|
241
247
|
end; self
|
|
242
248
|
end
|
|
@@ -91,7 +91,7 @@ module Mongoid #:nodoc:
|
|
|
91
91
|
#
|
|
92
92
|
# Options:
|
|
93
93
|
#
|
|
94
|
-
# object_id: A single id or an array of ids in +String+ or <tt>BSON::
|
|
94
|
+
# object_id: A single id or an array of ids in +String+ or <tt>BSON::ObjectId</tt> format
|
|
95
95
|
#
|
|
96
96
|
# Example:
|
|
97
97
|
#
|
|
@@ -103,11 +103,11 @@ module Mongoid #:nodoc:
|
|
|
103
103
|
ids.flatten!
|
|
104
104
|
if ids.size > 1
|
|
105
105
|
self.in(
|
|
106
|
-
:_id => ::BSON::
|
|
106
|
+
:_id => ::BSON::ObjectId.cast!(@klass, ids, @klass.primary_key.nil?)
|
|
107
107
|
)
|
|
108
108
|
else
|
|
109
109
|
@selector[:_id] =
|
|
110
|
-
::BSON::
|
|
110
|
+
::BSON::ObjectId.cast!(@klass, ids.first, @klass.primary_key.nil?)
|
|
111
111
|
end
|
|
112
112
|
self
|
|
113
113
|
end
|
data/lib/mongoid/document.rb
CHANGED
|
@@ -100,9 +100,9 @@ module Mongoid #:nodoc:
|
|
|
100
100
|
#
|
|
101
101
|
# attrs: The attributes +Hash+ to set up the document with.
|
|
102
102
|
def initialize(attrs = nil)
|
|
103
|
+
@new_record = true
|
|
103
104
|
@attributes = default_attributes
|
|
104
105
|
process(attrs)
|
|
105
|
-
@new_record = true
|
|
106
106
|
document = yield self if block_given?
|
|
107
107
|
identify
|
|
108
108
|
run_callbacks(:initialize) do
|
data/lib/mongoid/extensions.rb
CHANGED
|
@@ -26,7 +26,7 @@ require "mongoid/extensions/string/inflections"
|
|
|
26
26
|
require "mongoid/extensions/symbol/inflections"
|
|
27
27
|
require "mongoid/extensions/symbol/conversions"
|
|
28
28
|
require "mongoid/extensions/true_class/equality"
|
|
29
|
-
require "mongoid/extensions/
|
|
29
|
+
require "mongoid/extensions/object_id/conversions"
|
|
30
30
|
|
|
31
31
|
class Array #:nodoc
|
|
32
32
|
include Mongoid::Extensions::Array::Accessors
|
|
@@ -112,8 +112,8 @@ class TrueClass #:nodoc
|
|
|
112
112
|
include Mongoid::Extensions::TrueClass::Equality
|
|
113
113
|
end
|
|
114
114
|
|
|
115
|
-
class BSON::
|
|
116
|
-
extend Mongoid::Extensions::
|
|
115
|
+
class BSON::ObjectId #:nodoc
|
|
116
|
+
extend Mongoid::Extensions::ObjectId::Conversions
|
|
117
117
|
|
|
118
118
|
def as_json(options = nil)
|
|
119
119
|
to_s
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
module Mongoid #:nodoc:
|
|
3
3
|
module Extensions #:nodoc:
|
|
4
|
-
module
|
|
4
|
+
module ObjectId #:nodoc:
|
|
5
5
|
module Conversions #:nodoc:
|
|
6
6
|
|
|
7
7
|
def set(value)
|
|
8
8
|
if value.is_a?(::String)
|
|
9
|
-
BSON::
|
|
9
|
+
BSON::ObjectId.from_string(value) unless value.blank?
|
|
10
10
|
else
|
|
11
11
|
value
|
|
12
12
|
end
|
|
@@ -16,13 +16,13 @@ module Mongoid #:nodoc:
|
|
|
16
16
|
value
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
-
# If the document is using BSON::
|
|
19
|
+
# If the document is using BSON::ObjectIds the convert the argument to
|
|
20
20
|
# either an object id or an array of them if the supplied argument is an
|
|
21
21
|
# Array. Otherwise just return.
|
|
22
22
|
#
|
|
23
23
|
# Options:
|
|
24
|
-
# args: A +String+ or an +Array+ convert to +BSON::
|
|
25
|
-
# cast: A +Boolean+ define if we can or not cast to BSON::
|
|
24
|
+
# args: A +String+ or an +Array+ convert to +BSON::ObjectId+
|
|
25
|
+
# cast: A +Boolean+ define if we can or not cast to BSON::ObjectId.
|
|
26
26
|
# If false, we use the default type of args
|
|
27
27
|
#
|
|
28
28
|
# Example:
|
|
@@ -33,19 +33,19 @@ module Mongoid #:nodoc:
|
|
|
33
33
|
# Returns:
|
|
34
34
|
#
|
|
35
35
|
# If using object ids:
|
|
36
|
-
# An +Array+ of +BSON::
|
|
37
|
-
# A +BSON::
|
|
36
|
+
# An +Array+ of +BSON::ObjectId+ of each element if params is an +Array+
|
|
37
|
+
# A +BSON::ObjectId+ from params if params is +String+
|
|
38
38
|
# Otherwise:
|
|
39
39
|
# <tt>args</tt>
|
|
40
40
|
def cast!(klass, args, cast = true)
|
|
41
|
-
if !klass.using_object_ids? || args.is_a?(::BSON::
|
|
41
|
+
if !klass.using_object_ids? || args.is_a?(::BSON::ObjectId) || !cast
|
|
42
42
|
return args
|
|
43
43
|
end
|
|
44
44
|
if args.is_a?(::String)
|
|
45
|
-
::BSON::
|
|
45
|
+
::BSON::ObjectId(args)
|
|
46
46
|
elsif args.is_a?(::Array)
|
|
47
47
|
args.map{ |a|
|
|
48
|
-
a.is_a?(::BSON::
|
|
48
|
+
a.is_a?(::BSON::ObjectId) ? a : ::BSON::ObjectId(a)
|
|
49
49
|
}
|
|
50
50
|
else
|
|
51
51
|
args
|
|
@@ -9,11 +9,12 @@ module Mongoid #:nodoc:
|
|
|
9
9
|
|
|
10
10
|
def get(value)
|
|
11
11
|
return nil if value.blank?
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
value.
|
|
12
|
+
value = value.getlocal unless Mongoid::Config.instance.use_utc?
|
|
13
|
+
if Mongoid::Config.instance.use_activesupport_time_zone?
|
|
14
|
+
time_zone = Mongoid::Config.instance.use_utc? ? 'UTC' : Time.zone
|
|
15
|
+
value = value.in_time_zone(time_zone)
|
|
16
16
|
end
|
|
17
|
+
value
|
|
17
18
|
end
|
|
18
19
|
|
|
19
20
|
protected
|
|
@@ -23,13 +24,15 @@ module Mongoid #:nodoc:
|
|
|
23
24
|
end
|
|
24
25
|
|
|
25
26
|
def convert_to_time(value)
|
|
27
|
+
time = Mongoid::Config.instance.use_activesupport_time_zone? ? ::Time.zone : ::Time
|
|
26
28
|
case value
|
|
27
|
-
when ::String then
|
|
28
|
-
when ::DateTime then
|
|
29
|
-
when ::Date then
|
|
29
|
+
when ::String then time.parse(value)
|
|
30
|
+
when ::DateTime then time.local(value.year, value.month, value.day, value.hour, value.min, value.sec)
|
|
31
|
+
when ::Date then time.local(value.year, value.month, value.day)
|
|
32
|
+
when ::Array then time.local(*value)
|
|
30
33
|
else value
|
|
31
34
|
end
|
|
32
35
|
end
|
|
33
36
|
end
|
|
34
37
|
end
|
|
35
|
-
end
|
|
38
|
+
end
|
data/lib/mongoid/field.rb
CHANGED
|
@@ -48,7 +48,7 @@ module Mongoid #:nodoc:
|
|
|
48
48
|
type.set(object)
|
|
49
49
|
else
|
|
50
50
|
inverse = @options[:inverse_class_name].constantize
|
|
51
|
-
object.blank? ? type.set(object) : BSON::
|
|
51
|
+
object.blank? ? type.set(object) : BSON::ObjectId.cast!(inverse, object)
|
|
52
52
|
end
|
|
53
53
|
end
|
|
54
54
|
|
data/lib/mongoid/finders.rb
CHANGED
|
@@ -63,7 +63,7 @@ module Mongoid #:nodoc:
|
|
|
63
63
|
#
|
|
64
64
|
# <tt>Person.find(Mongo::ObjectID.new.to_s)</tt>
|
|
65
65
|
def find(*args)
|
|
66
|
-
raise Errors::InvalidOptions.new(
|
|
66
|
+
raise Errors::InvalidOptions.new(:calling_document_find_with_nil_is_invalid, {}) if args[0].nil?
|
|
67
67
|
type = args.delete_at(0) if args[0].is_a?(Symbol)
|
|
68
68
|
criteria = Criteria.translate(self, *args)
|
|
69
69
|
case type
|
data/lib/mongoid/identity.rb
CHANGED
data/lib/mongoid/keys.rb
CHANGED
|
@@ -4,7 +4,7 @@ module Mongoid #:nodoc:
|
|
|
4
4
|
extend ActiveSupport::Concern
|
|
5
5
|
included do
|
|
6
6
|
cattr_accessor :primary_key, :_identity
|
|
7
|
-
self._identity = { :type => BSON::
|
|
7
|
+
self._identity = { :type => BSON::ObjectId }
|
|
8
8
|
|
|
9
9
|
delegate \
|
|
10
10
|
:_id_type,
|
|
@@ -28,9 +28,9 @@ module Mongoid #:nodoc:
|
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
# Used for telling Mongoid on a per model basis whether to override the
|
|
31
|
-
# default +BSON::
|
|
31
|
+
# default +BSON::ObjectId+ and use a different type. This will be
|
|
32
32
|
# expanded in the future for requiring a PkFactory if the type is not a
|
|
33
|
-
# +BSON::
|
|
33
|
+
# +BSON::ObjectId+ or +String+.
|
|
34
34
|
#
|
|
35
35
|
# Example:
|
|
36
36
|
#
|
|
@@ -59,7 +59,7 @@ module Mongoid #:nodoc:
|
|
|
59
59
|
set_callback :save, :before, :identify
|
|
60
60
|
end
|
|
61
61
|
|
|
62
|
-
# Convenience method for determining if we are using +BSON::
|
|
62
|
+
# Convenience method for determining if we are using +BSON::ObjectIds+ as
|
|
63
63
|
# our id.
|
|
64
64
|
#
|
|
65
65
|
# Example:
|
|
@@ -68,9 +68,9 @@ module Mongoid #:nodoc:
|
|
|
68
68
|
#
|
|
69
69
|
# Returns:
|
|
70
70
|
#
|
|
71
|
-
# true if we are using BSON::
|
|
71
|
+
# true if we are using BSON::ObjectIds
|
|
72
72
|
def using_object_ids?
|
|
73
|
-
_id_type == BSON::
|
|
73
|
+
_id_type == BSON::ObjectId
|
|
74
74
|
end
|
|
75
75
|
end
|
|
76
76
|
end
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid #:nodoc:
|
|
3
|
+
module MultiParameterAttributes
|
|
4
|
+
module Errors
|
|
5
|
+
# Raised when an error occurred while doing a mass assignment to an attribute through the
|
|
6
|
+
# <tt>attributes=</tt> method. The exception has an +attribute+ property that is the name of the
|
|
7
|
+
# offending attribute.
|
|
8
|
+
class AttributeAssignmentError < Mongoid::Errors::MongoidError
|
|
9
|
+
attr_reader :exception, :attribute
|
|
10
|
+
def initialize(message, exception, attribute)
|
|
11
|
+
@exception = exception
|
|
12
|
+
@attribute = attribute
|
|
13
|
+
@message = message
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Raised when there are multiple errors while doing a mass assignment through the +attributes+
|
|
18
|
+
# method. The exception has an +errors+ property that contains an array of AttributeAssignmentError
|
|
19
|
+
# objects, each corresponding to the error while assigning to an attribute.
|
|
20
|
+
class MultiparameterAssignmentErrors < Mongoid::Errors::MongoidError
|
|
21
|
+
attr_reader :errors
|
|
22
|
+
def initialize(errors)
|
|
23
|
+
@errors = errors
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def process(attrs = nil)
|
|
29
|
+
if attrs
|
|
30
|
+
errors = []
|
|
31
|
+
attributes = {}
|
|
32
|
+
multi_parameter_attributes = {}
|
|
33
|
+
|
|
34
|
+
attrs.each_pair do |key, value|
|
|
35
|
+
if key =~ /^([^\(]+)\((\d+)([if])\)$/
|
|
36
|
+
key, index = $1, $2.to_i
|
|
37
|
+
(multi_parameter_attributes[key] ||= {})[index] = value.empty? ? nil : value.send("to_#{$3}")
|
|
38
|
+
else
|
|
39
|
+
attributes[key] = value
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
multi_parameter_attributes.each_pair do |key, values|
|
|
44
|
+
begin
|
|
45
|
+
values = (values.keys.min..values.keys.max).map { |i| values[i] }
|
|
46
|
+
klass = self.class.fields[key].try(:type)
|
|
47
|
+
attributes[key] = instantiate_object(klass, values)
|
|
48
|
+
rescue => e
|
|
49
|
+
errors << Errors::AttributeAssignmentError.new("error on assignment #{values.inspect} to #{key}", e, key)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
unless errors.empty?
|
|
54
|
+
raise Errors::MultiparameterAssignmentErrors.new(errors), "#{errors.size} error(s) on assignment of multiparameter attributes"
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
super attributes
|
|
58
|
+
else
|
|
59
|
+
super
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
protected
|
|
64
|
+
|
|
65
|
+
def instantiate_object(klass, values_with_empty_parameters)
|
|
66
|
+
return nil if values_with_empty_parameters.all? { |v| v.nil? }
|
|
67
|
+
|
|
68
|
+
values = values_with_empty_parameters.collect { |v| v.nil? ? 1 : v }
|
|
69
|
+
|
|
70
|
+
if klass == DateTime || klass == Date || klass == Time
|
|
71
|
+
klass.send(:convert_to_time, values)
|
|
72
|
+
elsif klass
|
|
73
|
+
klass.new *values
|
|
74
|
+
else
|
|
75
|
+
values
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
end
|
|
80
|
+
end
|
|
@@ -24,9 +24,9 @@ module Mongoid #:nodoc:
|
|
|
24
24
|
criteria = document._parent.send(document.association_name)
|
|
25
25
|
# If the parent document embeds_one, no need to validate uniqueness
|
|
26
26
|
return if criteria.is_a?(Mongoid::Document)
|
|
27
|
-
criteria = criteria.where(attribute => value, :_id => {'$ne' => document._id})
|
|
27
|
+
criteria = criteria.where(attribute => unique_search_value(value), :_id => {'$ne' => document._id})
|
|
28
28
|
else
|
|
29
|
-
criteria = @klass.where(attribute => value)
|
|
29
|
+
criteria = @klass.where(attribute => unique_search_value(value))
|
|
30
30
|
unless document.new_record?
|
|
31
31
|
criteria = criteria.where(:_id => {'$ne' => document._id})
|
|
32
32
|
end
|
|
@@ -50,6 +50,15 @@ module Mongoid #:nodoc:
|
|
|
50
50
|
return true if document.send("#{key}_changed?")
|
|
51
51
|
end; false
|
|
52
52
|
end
|
|
53
|
+
|
|
54
|
+
# ensure :case_sensitive is true by default
|
|
55
|
+
def unique_search_value(value)
|
|
56
|
+
if options[:case_sensitive] == false
|
|
57
|
+
value ? /^#{value}$/i : nil
|
|
58
|
+
else
|
|
59
|
+
value
|
|
60
|
+
end
|
|
61
|
+
end
|
|
53
62
|
end
|
|
54
63
|
end
|
|
55
64
|
end
|
data/lib/mongoid/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: mongoid
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
+
hash: 62196421
|
|
4
5
|
prerelease: true
|
|
5
6
|
segments:
|
|
6
7
|
- 2
|
|
7
8
|
- 0
|
|
8
9
|
- 0
|
|
9
10
|
- beta
|
|
10
|
-
-
|
|
11
|
-
version: 2.0.0.beta.
|
|
11
|
+
- 19
|
|
12
|
+
version: 2.0.0.beta.19
|
|
12
13
|
platform: ruby
|
|
13
14
|
authors:
|
|
14
15
|
- Durran Jordan
|
|
@@ -16,121 +17,111 @@ autorequire:
|
|
|
16
17
|
bindir: bin
|
|
17
18
|
cert_chain: []
|
|
18
19
|
|
|
19
|
-
date: 2010-09-
|
|
20
|
+
date: 2010-09-29 00:00:00 -07:00
|
|
20
21
|
default_executable:
|
|
21
22
|
dependencies:
|
|
22
23
|
- !ruby/object:Gem::Dependency
|
|
23
|
-
|
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
|
24
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
|
25
25
|
none: false
|
|
26
26
|
requirements:
|
|
27
27
|
- - ~>
|
|
28
28
|
- !ruby/object:Gem::Version
|
|
29
|
+
hash: 7
|
|
29
30
|
segments:
|
|
30
31
|
- 3
|
|
31
32
|
- 0
|
|
32
|
-
|
|
33
|
-
|
|
33
|
+
version: "3.0"
|
|
34
|
+
requirement: *id001
|
|
34
35
|
type: :runtime
|
|
36
|
+
name: activemodel
|
|
35
37
|
prerelease: false
|
|
36
|
-
version_requirements: *id001
|
|
37
38
|
- !ruby/object:Gem::Dependency
|
|
38
|
-
|
|
39
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
|
39
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
|
40
40
|
none: false
|
|
41
41
|
requirements:
|
|
42
42
|
- - ~>
|
|
43
43
|
- !ruby/object:Gem::Version
|
|
44
|
+
hash: 63
|
|
44
45
|
segments:
|
|
45
46
|
- 0
|
|
46
47
|
- 3
|
|
47
48
|
- 22
|
|
48
49
|
version: 0.3.22
|
|
50
|
+
requirement: *id002
|
|
49
51
|
type: :runtime
|
|
52
|
+
name: tzinfo
|
|
50
53
|
prerelease: false
|
|
51
|
-
version_requirements: *id002
|
|
52
54
|
- !ruby/object:Gem::Dependency
|
|
53
|
-
|
|
54
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
|
55
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
|
55
56
|
none: false
|
|
56
57
|
requirements:
|
|
57
58
|
- - ~>
|
|
58
59
|
- !ruby/object:Gem::Version
|
|
60
|
+
hash: 961915916
|
|
59
61
|
segments:
|
|
60
62
|
- 3
|
|
61
63
|
- 0
|
|
62
64
|
- pre
|
|
63
65
|
version: 3.0.pre
|
|
66
|
+
requirement: *id003
|
|
64
67
|
type: :runtime
|
|
68
|
+
name: will_paginate
|
|
65
69
|
prerelease: false
|
|
66
|
-
version_requirements: *id003
|
|
67
|
-
- !ruby/object:Gem::Dependency
|
|
68
|
-
name: mongo
|
|
69
|
-
requirement: &id004 !ruby/object:Gem::Requirement
|
|
70
|
-
none: false
|
|
71
|
-
requirements:
|
|
72
|
-
- - "="
|
|
73
|
-
- !ruby/object:Gem::Version
|
|
74
|
-
segments:
|
|
75
|
-
- 1
|
|
76
|
-
- 0
|
|
77
|
-
- 7
|
|
78
|
-
version: 1.0.7
|
|
79
|
-
type: :runtime
|
|
80
|
-
prerelease: false
|
|
81
|
-
version_requirements: *id004
|
|
82
70
|
- !ruby/object:Gem::Dependency
|
|
83
|
-
|
|
84
|
-
requirement: &id005 !ruby/object:Gem::Requirement
|
|
71
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
|
85
72
|
none: false
|
|
86
73
|
requirements:
|
|
87
74
|
- - "="
|
|
88
75
|
- !ruby/object:Gem::Version
|
|
76
|
+
hash: 5
|
|
89
77
|
segments:
|
|
90
78
|
- 1
|
|
91
79
|
- 0
|
|
92
|
-
-
|
|
93
|
-
version: 1.0.
|
|
80
|
+
- 9
|
|
81
|
+
version: 1.0.9
|
|
82
|
+
requirement: *id004
|
|
94
83
|
type: :runtime
|
|
84
|
+
name: mongo
|
|
95
85
|
prerelease: false
|
|
96
|
-
version_requirements: *id005
|
|
97
86
|
- !ruby/object:Gem::Dependency
|
|
98
|
-
|
|
99
|
-
requirement: &id006 !ruby/object:Gem::Requirement
|
|
87
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
|
100
88
|
none: false
|
|
101
89
|
requirements:
|
|
102
90
|
- - "="
|
|
103
91
|
- !ruby/object:Gem::Version
|
|
92
|
+
hash: 5
|
|
104
93
|
segments:
|
|
105
94
|
- 1
|
|
106
95
|
- 0
|
|
107
|
-
-
|
|
108
|
-
version: 1.0.
|
|
96
|
+
- 9
|
|
97
|
+
version: 1.0.9
|
|
98
|
+
requirement: *id005
|
|
109
99
|
type: :development
|
|
100
|
+
name: bson_ext
|
|
110
101
|
prerelease: false
|
|
111
|
-
version_requirements: *id006
|
|
112
102
|
- !ruby/object:Gem::Dependency
|
|
113
|
-
|
|
114
|
-
requirement: &id007 !ruby/object:Gem::Requirement
|
|
103
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
|
115
104
|
none: false
|
|
116
105
|
requirements:
|
|
117
106
|
- - "="
|
|
118
107
|
- !ruby/object:Gem::Version
|
|
108
|
+
hash: 43
|
|
119
109
|
segments:
|
|
120
110
|
- 0
|
|
121
111
|
- 9
|
|
122
112
|
- 8
|
|
123
113
|
version: 0.9.8
|
|
114
|
+
requirement: *id006
|
|
124
115
|
type: :development
|
|
116
|
+
name: mocha
|
|
125
117
|
prerelease: false
|
|
126
|
-
version_requirements: *id007
|
|
127
118
|
- !ruby/object:Gem::Dependency
|
|
128
|
-
|
|
129
|
-
requirement: &id008 !ruby/object:Gem::Requirement
|
|
119
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
|
130
120
|
none: false
|
|
131
121
|
requirements:
|
|
132
122
|
- - "="
|
|
133
123
|
- !ruby/object:Gem::Version
|
|
124
|
+
hash: 62196431
|
|
134
125
|
segments:
|
|
135
126
|
- 2
|
|
136
127
|
- 0
|
|
@@ -138,38 +129,41 @@ dependencies:
|
|
|
138
129
|
- beta
|
|
139
130
|
- 22
|
|
140
131
|
version: 2.0.0.beta.22
|
|
132
|
+
requirement: *id007
|
|
141
133
|
type: :development
|
|
134
|
+
name: rspec
|
|
142
135
|
prerelease: false
|
|
143
|
-
version_requirements: *id008
|
|
144
136
|
- !ruby/object:Gem::Dependency
|
|
145
|
-
|
|
146
|
-
requirement: &id009 !ruby/object:Gem::Requirement
|
|
137
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
|
147
138
|
none: false
|
|
148
139
|
requirements:
|
|
149
140
|
- - "="
|
|
150
141
|
- !ruby/object:Gem::Version
|
|
142
|
+
hash: 7
|
|
151
143
|
segments:
|
|
152
144
|
- 0
|
|
153
145
|
- 6
|
|
154
146
|
version: "0.6"
|
|
147
|
+
requirement: *id008
|
|
155
148
|
type: :development
|
|
149
|
+
name: watchr
|
|
156
150
|
prerelease: false
|
|
157
|
-
version_requirements: *id009
|
|
158
151
|
- !ruby/object:Gem::Dependency
|
|
159
|
-
|
|
160
|
-
requirement: &id010 !ruby/object:Gem::Requirement
|
|
152
|
+
version_requirements: &id009 !ruby/object:Gem::Requirement
|
|
161
153
|
none: false
|
|
162
154
|
requirements:
|
|
163
155
|
- - "="
|
|
164
156
|
- !ruby/object:Gem::Version
|
|
157
|
+
hash: 29
|
|
165
158
|
segments:
|
|
166
159
|
- 0
|
|
167
160
|
- 0
|
|
168
161
|
- 1
|
|
169
162
|
version: 0.0.1
|
|
163
|
+
requirement: *id009
|
|
170
164
|
type: :development
|
|
165
|
+
name: ruby-debug-wrapper
|
|
171
166
|
prerelease: false
|
|
172
|
-
version_requirements: *id010
|
|
173
167
|
description: Mongoid is an ODM (Object Document Mapper) Framework for MongoDB, written in Ruby.
|
|
174
168
|
email:
|
|
175
169
|
- durran@gmail.com
|
|
@@ -180,15 +174,20 @@ extensions: []
|
|
|
180
174
|
extra_rdoc_files: []
|
|
181
175
|
|
|
182
176
|
files:
|
|
177
|
+
- lib/config/locales/bg.yml
|
|
178
|
+
- lib/config/locales/de.yml
|
|
183
179
|
- lib/config/locales/en.yml
|
|
184
180
|
- lib/config/locales/es.yml
|
|
185
181
|
- lib/config/locales/fr.yml
|
|
182
|
+
- lib/config/locales/hu.yml
|
|
186
183
|
- lib/config/locales/it.yml
|
|
187
184
|
- lib/config/locales/kr.yml
|
|
188
185
|
- lib/config/locales/pl.yml
|
|
189
186
|
- lib/config/locales/pt-br.yml
|
|
190
187
|
- lib/config/locales/pt.yml
|
|
188
|
+
- lib/config/locales/ro.yml
|
|
191
189
|
- lib/config/locales/sv.yml
|
|
190
|
+
- lib/config/locales/zh-CN.yml
|
|
192
191
|
- lib/mongoid/associations/embedded_in.rb
|
|
193
192
|
- lib/mongoid/associations/embeds_many.rb
|
|
194
193
|
- lib/mongoid/associations/embeds_one.rb
|
|
@@ -258,7 +257,7 @@ files:
|
|
|
258
257
|
- lib/mongoid/extensions/integer/conversions.rb
|
|
259
258
|
- lib/mongoid/extensions/nil/assimilation.rb
|
|
260
259
|
- lib/mongoid/extensions/object/conversions.rb
|
|
261
|
-
- lib/mongoid/extensions/
|
|
260
|
+
- lib/mongoid/extensions/object_id/conversions.rb
|
|
262
261
|
- lib/mongoid/extensions/proc/scoping.rb
|
|
263
262
|
- lib/mongoid/extensions/set/conversions.rb
|
|
264
263
|
- lib/mongoid/extensions/string/conversions.rb
|
|
@@ -297,6 +296,7 @@ files:
|
|
|
297
296
|
- lib/mongoid/modifiers/command.rb
|
|
298
297
|
- lib/mongoid/modifiers/inc.rb
|
|
299
298
|
- lib/mongoid/modifiers.rb
|
|
299
|
+
- lib/mongoid/multi_parameter_attributes.rb
|
|
300
300
|
- lib/mongoid/named_scope.rb
|
|
301
301
|
- lib/mongoid/paranoia.rb
|
|
302
302
|
- lib/mongoid/paths.rb
|
|
@@ -344,7 +344,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
344
344
|
requirements:
|
|
345
345
|
- - ">="
|
|
346
346
|
- !ruby/object:Gem::Version
|
|
347
|
-
hash:
|
|
347
|
+
hash: 3
|
|
348
348
|
segments:
|
|
349
349
|
- 0
|
|
350
350
|
version: "0"
|
|
@@ -353,6 +353,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
353
353
|
requirements:
|
|
354
354
|
- - ">="
|
|
355
355
|
- !ruby/object:Gem::Version
|
|
356
|
+
hash: 23
|
|
356
357
|
segments:
|
|
357
358
|
- 1
|
|
358
359
|
- 3
|