mongoid 2.0.0.beta.18 → 2.0.0.beta.19
Sign up to get free protection for your applications and to get access to all the features.
- 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
|