mongoid 3.0.1 → 3.0.2
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 +47 -0
- data/lib/config/locales/en.yml +9 -0
- data/lib/mongoid/contextual/command.rb +5 -13
- data/lib/mongoid/contextual/find_and_modify.rb +4 -3
- data/lib/mongoid/contextual/map_reduce.rb +4 -4
- data/lib/mongoid/contextual/mongo.rb +8 -23
- data/lib/mongoid/criteria.rb +2 -1
- data/lib/mongoid/errors.rb +1 -0
- data/lib/mongoid/errors/invalid_includes.rb +32 -0
- data/lib/mongoid/errors/validations.rb +5 -0
- data/lib/mongoid/extensions/hash.rb +12 -0
- data/lib/mongoid/fields/foreign_key.rb +12 -0
- data/lib/mongoid/persistence/atomic.rb +1 -1
- data/lib/mongoid/persistence/atomic/inc.rb +2 -1
- data/lib/mongoid/persistence/insertion.rb +1 -0
- data/lib/mongoid/persistence/modification.rb +1 -0
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +1 -0
- data/lib/mongoid/relations/builders/nested_attributes/one.rb +1 -0
- data/lib/mongoid/relations/embedded/one.rb +4 -1
- data/lib/mongoid/sessions.rb +1 -1
- data/lib/mongoid/validations.rb +29 -2
- data/lib/mongoid/validations/queryable.rb +30 -0
- data/lib/mongoid/validations/uniqueness.rb +10 -6
- data/lib/mongoid/version.rb +1 -1
- metadata +7 -5
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,53 @@
|
|
3
3
|
For instructions on upgrading to newer versions, visit
|
4
4
|
[mongoid.org](http://mongoid.org/docs/upgrading.html).
|
5
5
|
|
6
|
+
## 3.0.2 (branch: 3.0.0-stable)
|
7
|
+
|
8
|
+
### Resolved Issues
|
9
|
+
|
10
|
+
* \#2244 Get rid of id mass assignment warnings in nested attributes.
|
11
|
+
|
12
|
+
* \#2242 Fix eager loading not to load all documents when calling first or
|
13
|
+
last.
|
14
|
+
|
15
|
+
* \#2241 Map/reduce operations now always use strong consistency since they
|
16
|
+
have the potential to write to collections, most of the time.
|
17
|
+
|
18
|
+
* \#2238 Ensure n-n foreign key fields are flagged as resizable to prevent
|
19
|
+
`nil` -> `[]` changes when using `#only` and updating.
|
20
|
+
|
21
|
+
* \#2236 Keep the instance of the document in the validations exception
|
22
|
+
accessible via `document` or `record`.
|
23
|
+
|
24
|
+
* \#2234 Ensure validations when document is getting persisted with custom
|
25
|
+
options work properly with custom options, and do not clear them out if
|
26
|
+
validation passes.
|
27
|
+
|
28
|
+
* \#2224 `Model#inc` now accepts `BigDecimal` values.
|
29
|
+
|
30
|
+
* \#2216 Fixed assignment of metadata on embeds one relations when setting
|
31
|
+
multiple times in a row.
|
32
|
+
|
33
|
+
* \#2212 Ensure errors are cleared after a save with `validate: false` in all
|
34
|
+
situations.
|
35
|
+
|
36
|
+
* \#2207 When eager loading ids the query must be duped to avoid multiple
|
37
|
+
iteration problems not getting the required fields.
|
38
|
+
|
39
|
+
* \#2204 Raise an `InvalidIncludes` error when passing arguments to
|
40
|
+
`Criteria.includes` that are invalid (not relations, or more than 1 level.)
|
41
|
+
|
42
|
+
* \#2203 Map/Reduce now works properly in conjunction with `Model#with`.
|
43
|
+
|
44
|
+
Band.
|
45
|
+
with(session: "secondary").
|
46
|
+
where(:likes.gt => 100).
|
47
|
+
map_reduce(map, reduce).
|
48
|
+
out(inline: 1)
|
49
|
+
|
50
|
+
* \#2199 Autosave false is now respected when automatically adding
|
51
|
+
presence validation. (John Nishinaga)
|
52
|
+
|
6
53
|
## 3.0.1
|
7
54
|
|
8
55
|
### Resolved Issues
|
data/lib/config/locales/en.yml
CHANGED
@@ -132,6 +132,15 @@ en:
|
|
132
132
|
\_\_\_\_include Mongoid::Document\n
|
133
133
|
\_\_\_\_field :%{name}, %{option}: true\n
|
134
134
|
\_\_end\n\n"
|
135
|
+
invalid_includes:
|
136
|
+
message: "Invalid includes directive: %{klass}.includes(%{args})"
|
137
|
+
summary: "Eager loading in Mongoid only supports providing arguments
|
138
|
+
to %{klass}.includes that are the names of relations on the %{klass}
|
139
|
+
model, and only supports one level of eager loading. (ie, eager loading
|
140
|
+
associations not on the %{klass} but one step away via another relation
|
141
|
+
is not allowed."
|
142
|
+
resolution: "Ensure that each parameter passed to %{klass}.includes is
|
143
|
+
a valid name of a relation on the %{klass} model. These are: %{relations}."
|
135
144
|
invalid_index:
|
136
145
|
message: "Invalid index specification on %{klass}: %{spec}, %{options}"
|
137
146
|
summary: "Indexes in Mongoid are defined as a hash of field name and
|
@@ -3,6 +3,10 @@ module Mongoid
|
|
3
3
|
module Contextual
|
4
4
|
module Command
|
5
5
|
|
6
|
+
# @attribute [r] collection The collection to query against.
|
7
|
+
# @attribute [r] criteria The criteria for the context.
|
8
|
+
attr_reader :collection, :criteria
|
9
|
+
|
6
10
|
# The database command that is being built to send to the db.
|
7
11
|
#
|
8
12
|
# @example Get the command.
|
@@ -15,18 +19,6 @@ module Mongoid
|
|
15
19
|
@command ||= {}
|
16
20
|
end
|
17
21
|
|
18
|
-
# Get the criteria for the command.
|
19
|
-
#
|
20
|
-
# @example Get the criteria.
|
21
|
-
# command.criteria
|
22
|
-
#
|
23
|
-
# @return [ Criteria ] The criteria.
|
24
|
-
#
|
25
|
-
# @since 3.0.0
|
26
|
-
def criteria
|
27
|
-
@criteria
|
28
|
-
end
|
29
|
-
|
30
22
|
# Get the database session.
|
31
23
|
#
|
32
24
|
# @example Get the session.
|
@@ -36,7 +28,7 @@ module Mongoid
|
|
36
28
|
#
|
37
29
|
# @since 3.0.0
|
38
30
|
def session
|
39
|
-
|
31
|
+
collection.database.session
|
40
32
|
end
|
41
33
|
end
|
42
34
|
end
|
@@ -25,9 +25,10 @@ module Mongoid
|
|
25
25
|
# @option options [ true, false ] :upsert Create the document if it doesn't exist.
|
26
26
|
#
|
27
27
|
# @since 3.0.0
|
28
|
-
def initialize(criteria, update, options = {})
|
29
|
-
@criteria, @options, @update =
|
30
|
-
|
28
|
+
def initialize(collection, criteria, update, options = {})
|
29
|
+
@collection, @criteria, @options, @update =
|
30
|
+
collection, criteria, options, update
|
31
|
+
@query = collection.find(criteria.selector)
|
31
32
|
apply_criteria_options
|
32
33
|
end
|
33
34
|
|
@@ -78,9 +78,9 @@ module Mongoid
|
|
78
78
|
# @param [ String ] reduce The reduce js function.
|
79
79
|
#
|
80
80
|
# @since 3.0.0
|
81
|
-
def initialize(criteria, map, reduce)
|
82
|
-
@criteria = criteria
|
83
|
-
command[:mapreduce] =
|
81
|
+
def initialize(collection, criteria, map, reduce)
|
82
|
+
@collection, @criteria = collection, criteria
|
83
|
+
command[:mapreduce] = collection.name.to_s
|
84
84
|
command[:map], command[:reduce] = map, reduce
|
85
85
|
apply_criteria_options
|
86
86
|
end
|
@@ -266,7 +266,7 @@ module Mongoid
|
|
266
266
|
# @since 3.0.0
|
267
267
|
def results
|
268
268
|
raise Errors::NoMapReduceOutput.new(command) unless command[:out]
|
269
|
-
@results ||= session.command(command)
|
269
|
+
@results ||= session.with(consistency: :strong).command(command)
|
270
270
|
end
|
271
271
|
end
|
272
272
|
end
|
@@ -12,10 +12,11 @@ module Mongoid
|
|
12
12
|
include Aggregable::Mongo
|
13
13
|
include Atomic
|
14
14
|
|
15
|
+
# @attribute [r] collection The collection to query against.
|
15
16
|
# @attribute [r] criteria The criteria for the context.
|
16
17
|
# @attribute [r] klass The klass for the criteria.
|
17
18
|
# @attribute [r] query The Moped query.
|
18
|
-
attr_reader :criteria, :klass, :query
|
19
|
+
attr_reader :collection, :criteria, :klass, :query
|
19
20
|
|
20
21
|
# @attribute [rw] eager_loaded Has the context been eager loaded?
|
21
22
|
attr_accessor :eager_loaded
|
@@ -66,7 +67,7 @@ module Mongoid
|
|
66
67
|
def count(document = nil, &block)
|
67
68
|
return super(&block) if block_given?
|
68
69
|
return query.count unless document
|
69
|
-
|
70
|
+
collection.find(criteria.and(_id: document.id).selector).count
|
70
71
|
end
|
71
72
|
|
72
73
|
# Delete all documents in the database that match the selector.
|
@@ -182,7 +183,7 @@ module Mongoid
|
|
182
183
|
#
|
183
184
|
# @since 3.0.0
|
184
185
|
def find_and_modify(update, options = {})
|
185
|
-
if doc = FindAndModify.new(criteria, update, options).result
|
186
|
+
if doc = FindAndModify.new(collection, criteria, update, options).result
|
186
187
|
Factory.from_db(klass, doc)
|
187
188
|
end
|
188
189
|
end
|
@@ -212,8 +213,9 @@ module Mongoid
|
|
212
213
|
# @since 3.0.0
|
213
214
|
def initialize(criteria)
|
214
215
|
@criteria, @klass, @cache = criteria, criteria.klass, criteria.options[:cache]
|
216
|
+
@collection = klass.collection
|
215
217
|
add_type_selection
|
216
|
-
@query =
|
218
|
+
@query = collection.find(criteria.selector)
|
217
219
|
apply_options
|
218
220
|
end
|
219
221
|
|
@@ -269,7 +271,7 @@ module Mongoid
|
|
269
271
|
#
|
270
272
|
# @since 3.0.0
|
271
273
|
def map_reduce(map, reduce)
|
272
|
-
MapReduce.new(criteria, map, reduce)
|
274
|
+
MapReduce.new(collection, criteria, map, reduce)
|
273
275
|
end
|
274
276
|
|
275
277
|
# Skips the provided number of documents.
|
@@ -536,7 +538,7 @@ module Mongoid
|
|
536
538
|
# @since 3.0.0
|
537
539
|
def eager_loaded_ids(docs, metadata)
|
538
540
|
if metadata.stores_foreign_key?
|
539
|
-
|
541
|
+
docs.flat_map{ |doc| doc.send(metadata.foreign_key) }
|
540
542
|
else
|
541
543
|
docs.map(&:id)
|
542
544
|
end
|
@@ -582,23 +584,6 @@ module Mongoid
|
|
582
584
|
@length = 0
|
583
585
|
end
|
584
586
|
|
585
|
-
# Loads an array of ids only for the current criteria. Used by eager
|
586
|
-
# loading to determine the documents to load.
|
587
|
-
#
|
588
|
-
# @example Load the related ids.
|
589
|
-
# criteria.load_ids("person_id")
|
590
|
-
#
|
591
|
-
# @param [ String ] key The id or foriegn key string.
|
592
|
-
#
|
593
|
-
# @return [ Array<String, Moped::BSON::ObjectId> ] The ids to load.
|
594
|
-
#
|
595
|
-
# @since 3.0.0
|
596
|
-
def load_ids(key)
|
597
|
-
query.select(key => 1).map do |doc|
|
598
|
-
doc[key]
|
599
|
-
end
|
600
|
-
end
|
601
|
-
|
602
587
|
# Apply all the optional criterion.
|
603
588
|
#
|
604
589
|
# @example Apply the options.
|
data/lib/mongoid/criteria.rb
CHANGED
@@ -360,8 +360,9 @@ module Mongoid
|
|
360
360
|
#
|
361
361
|
# @since 2.2.0
|
362
362
|
def includes(*relations)
|
363
|
-
relations.each do |name|
|
363
|
+
relations.flatten.each do |name|
|
364
364
|
metadata = klass.reflect_on_association(name)
|
365
|
+
raise Errors::InvalidIncludes.new(klass, relations) unless metadata
|
365
366
|
inclusions.push(metadata) unless inclusions.include?(metadata)
|
366
367
|
end
|
367
368
|
clone
|
data/lib/mongoid/errors.rb
CHANGED
@@ -10,6 +10,7 @@ require "mongoid/errors/invalid_database"
|
|
10
10
|
require "mongoid/errors/invalid_field"
|
11
11
|
require "mongoid/errors/invalid_field_option"
|
12
12
|
require "mongoid/errors/invalid_find"
|
13
|
+
require "mongoid/errors/invalid_includes"
|
13
14
|
require "mongoid/errors/invalid_index"
|
14
15
|
require "mongoid/errors/invalid_options"
|
15
16
|
require "mongoid/errors/invalid_scope"
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
module Errors
|
4
|
+
|
5
|
+
# This error is raised when an invalid value is passed to an eager
|
6
|
+
# loading query.
|
7
|
+
class InvalidIncludes < MongoidError
|
8
|
+
|
9
|
+
# Initialize the error.
|
10
|
+
#
|
11
|
+
# @example Initialize the error.
|
12
|
+
# InvalidIncludes.new(Band, [ :members ])
|
13
|
+
#
|
14
|
+
# @param [ Class ] klass The model class.
|
15
|
+
# @param [ Array<Object> ] args The arguments passed to the includes.
|
16
|
+
#
|
17
|
+
# @since 3.0.2
|
18
|
+
def initialize(klass, args)
|
19
|
+
super(
|
20
|
+
compose_message(
|
21
|
+
"invalid_includes",
|
22
|
+
{
|
23
|
+
klass: klass.name,
|
24
|
+
args: args.map(&:inspect).join(", "),
|
25
|
+
relations: klass.relations.keys.map(&:inspect).join(", ")
|
26
|
+
}
|
27
|
+
)
|
28
|
+
)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -8,7 +8,12 @@ module Mongoid
|
|
8
8
|
# @example Create the error.
|
9
9
|
# Validations.new(person.errors)
|
10
10
|
class Validations < MongoidError
|
11
|
+
attr_reader :document
|
12
|
+
alias :record :document
|
13
|
+
|
11
14
|
def initialize(document)
|
15
|
+
@document = document
|
16
|
+
|
12
17
|
super(
|
13
18
|
compose_message(
|
14
19
|
"validations",
|
@@ -47,6 +47,18 @@ module Mongoid
|
|
47
47
|
consolidated
|
48
48
|
end
|
49
49
|
|
50
|
+
# Deletes an id value from the hash.
|
51
|
+
#
|
52
|
+
# @example Delete an id value.
|
53
|
+
# {}.delete_id
|
54
|
+
#
|
55
|
+
# @return [ Object ] The deleted value, or nil.
|
56
|
+
#
|
57
|
+
# @since 3.0.2
|
58
|
+
def delete_id
|
59
|
+
delete("_id") || delete("id") || delete(:id) || delete(:_id)
|
60
|
+
end
|
61
|
+
|
50
62
|
# Get the id attribute from this hash, whether it's prefixed with an
|
51
63
|
# underscore or is a symbol.
|
52
64
|
#
|
@@ -100,6 +100,18 @@ module Mongoid
|
|
100
100
|
metadata.polymorphic? ? true : metadata.klass.using_object_ids?
|
101
101
|
end
|
102
102
|
|
103
|
+
# Returns true if an array, false if not.
|
104
|
+
#
|
105
|
+
# @example Is the field resizable?
|
106
|
+
# field.resizable?
|
107
|
+
#
|
108
|
+
# @return [ true, false ] If the field is resizable.
|
109
|
+
#
|
110
|
+
# @since 3.0.2
|
111
|
+
def resizable?
|
112
|
+
type.resizable?
|
113
|
+
end
|
114
|
+
|
103
115
|
private
|
104
116
|
|
105
117
|
# Evaluate the default proc. In some cases we need to instance exec,
|
@@ -72,7 +72,7 @@ module Mongoid
|
|
72
72
|
# person.inc(:score, 2)
|
73
73
|
#
|
74
74
|
# @param [ Symbol ] field The name of the field.
|
75
|
-
# @param [
|
75
|
+
# @param [ Numeric ] value The value to increment.
|
76
76
|
# @param [ Hash ] options The mongo persistence options.
|
77
77
|
#
|
78
78
|
# @return [ Array<Object> ] The new value of the field.
|
@@ -12,11 +12,12 @@ module Mongoid
|
|
12
12
|
# @example Persist the new values.
|
13
13
|
# inc.persist
|
14
14
|
#
|
15
|
-
# @return [ Object ] The new
|
15
|
+
# @return [ Object ] The new numeric value.
|
16
16
|
#
|
17
17
|
# @since 2.0.0
|
18
18
|
def persist
|
19
19
|
prepare do
|
20
|
+
self.value = value.to_f
|
20
21
|
current = document[field] || 0
|
21
22
|
document[field] = current + value
|
22
23
|
execute("$inc")
|
@@ -25,6 +25,7 @@ module Mongoid
|
|
25
25
|
return if reject?(parent, attributes)
|
26
26
|
@existing = parent.send(metadata.name)
|
27
27
|
if update?
|
28
|
+
attributes.delete_id
|
28
29
|
existing.attributes = attributes
|
29
30
|
elsif replace?
|
30
31
|
parent.send(metadata.setter, Factory.build(metadata.klass, attributes))
|
@@ -19,6 +19,7 @@ module Mongoid
|
|
19
19
|
init(base, target, metadata) do
|
20
20
|
characterize_one(target)
|
21
21
|
bind_one
|
22
|
+
characterize_one(target)
|
22
23
|
target.save if persistable?
|
23
24
|
end
|
24
25
|
end
|
@@ -38,12 +39,14 @@ module Mongoid
|
|
38
39
|
if _assigning?
|
39
40
|
base.add_atomic_unset(target)
|
40
41
|
else
|
41
|
-
destroy if persistable?
|
42
|
+
target.destroy if persistable?
|
42
43
|
end
|
43
44
|
unbind_one
|
44
45
|
return nil unless replacement
|
45
46
|
self.target = replacement
|
46
47
|
bind_one
|
48
|
+
characterize_one(target)
|
49
|
+
target.save if persistable? && !_assigning?
|
47
50
|
self
|
48
51
|
end
|
49
52
|
|
data/lib/mongoid/sessions.rb
CHANGED
@@ -151,7 +151,7 @@ module Mongoid
|
|
151
151
|
def collection
|
152
152
|
if opts = persistence_options
|
153
153
|
coll = mongo_session.with(opts)[opts[:collection] || collection_name]
|
154
|
-
clear_persistence_options
|
154
|
+
clear_persistence_options unless validating_with_query?
|
155
155
|
coll
|
156
156
|
else
|
157
157
|
mongo_session[collection_name]
|
data/lib/mongoid/validations.rb
CHANGED
@@ -3,6 +3,7 @@ require "mongoid/validations/localizable"
|
|
3
3
|
require "mongoid/validations/associated"
|
4
4
|
require "mongoid/validations/format"
|
5
5
|
require "mongoid/validations/length"
|
6
|
+
require "mongoid/validations/queryable"
|
6
7
|
require "mongoid/validations/presence"
|
7
8
|
require "mongoid/validations/uniqueness"
|
8
9
|
|
@@ -89,6 +90,18 @@ module Mongoid
|
|
89
90
|
Threaded.validated?(self)
|
90
91
|
end
|
91
92
|
|
93
|
+
# Are we currently performing a validation that has a query?
|
94
|
+
#
|
95
|
+
# @example Are we validating with a query?
|
96
|
+
# document.validating_with_query?
|
97
|
+
#
|
98
|
+
# @return [ true, false ] If we are validating with a query.
|
99
|
+
#
|
100
|
+
# @since 3.0.2
|
101
|
+
def validating_with_query?
|
102
|
+
self.class.validating_with_query?
|
103
|
+
end
|
104
|
+
|
92
105
|
module ClassMethods
|
93
106
|
|
94
107
|
# Validates whether or not an association is valid or not. Will correctly
|
@@ -194,13 +207,15 @@ module Mongoid
|
|
194
207
|
if args.first == PresenceValidator
|
195
208
|
args.last[:attributes].each do |name|
|
196
209
|
metadata = relations[name.to_s]
|
197
|
-
|
210
|
+
if metadata && metadata[:autosave] != false
|
211
|
+
autosave(metadata.merge!(autosave: true))
|
212
|
+
end
|
198
213
|
end
|
199
214
|
end
|
200
215
|
super
|
201
216
|
end
|
202
217
|
|
203
|
-
|
218
|
+
private
|
204
219
|
|
205
220
|
# Adds an associated validator for the relation if the validate option
|
206
221
|
# was not provided or set to true.
|
@@ -216,6 +231,18 @@ module Mongoid
|
|
216
231
|
validates_associated(metadata.name)
|
217
232
|
end
|
218
233
|
end
|
234
|
+
|
235
|
+
# Are we currently performing a validation that has a query?
|
236
|
+
#
|
237
|
+
# @example Are we validating with a query?
|
238
|
+
# Model.validating_with_query?
|
239
|
+
#
|
240
|
+
# @return [ true, false ] If we are validating with a query.
|
241
|
+
#
|
242
|
+
# @since 3.0.2
|
243
|
+
def validating_with_query?
|
244
|
+
Threaded.executing?("#{name}-validate-with-query")
|
245
|
+
end
|
219
246
|
end
|
220
247
|
end
|
221
248
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
module Validations
|
4
|
+
module Queryable
|
5
|
+
|
6
|
+
# Wrap the validation inside the an execution block that alert's the
|
7
|
+
# session not to clear it's persistence options.
|
8
|
+
#
|
9
|
+
# @example Execute the validation with a query.
|
10
|
+
# with_query(document) do
|
11
|
+
# #...
|
12
|
+
# end
|
13
|
+
#
|
14
|
+
# @param [ Document ] document The document being validated.
|
15
|
+
#
|
16
|
+
# @return [ Object ] The result of the yield.
|
17
|
+
#
|
18
|
+
# @since 3.0.2
|
19
|
+
def with_query(document)
|
20
|
+
begin
|
21
|
+
Threaded.begin("#{klass.name}-validate-with-query")
|
22
|
+
yield
|
23
|
+
ensure
|
24
|
+
klass.clear_persistence_options unless document.errors.empty?
|
25
|
+
Threaded.exit("#{klass.name}-validate-with-query")
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -14,6 +14,8 @@ module Mongoid
|
|
14
14
|
# validates_uniqueness_of :title
|
15
15
|
# end
|
16
16
|
class UniquenessValidator < ActiveModel::EachValidator
|
17
|
+
include Queryable
|
18
|
+
|
17
19
|
attr_reader :klass
|
18
20
|
|
19
21
|
# Unfortunately, we have to tie Uniqueness validators to a class.
|
@@ -41,12 +43,14 @@ module Mongoid
|
|
41
43
|
#
|
42
44
|
# @since 1.0.0
|
43
45
|
def validate_each(document, attribute, value)
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
46
|
+
with_query(document) do
|
47
|
+
attrib, val = to_validate(document, attribute, value)
|
48
|
+
return unless validation_required?(document, attrib)
|
49
|
+
if document.embedded?
|
50
|
+
validate_embedded(document, attrib, val)
|
51
|
+
else
|
52
|
+
validate_root(document, attrib, val)
|
53
|
+
end
|
50
54
|
end
|
51
55
|
end
|
52
56
|
|
data/lib/mongoid/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-07-
|
12
|
+
date: 2012-07-26 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.1.
|
53
|
+
version: 1.1.3
|
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.1.
|
61
|
+
version: 1.1.3
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
63
|
name: origin
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -129,6 +129,7 @@ files:
|
|
129
129
|
- lib/mongoid/errors/invalid_field.rb
|
130
130
|
- lib/mongoid/errors/invalid_field_option.rb
|
131
131
|
- lib/mongoid/errors/invalid_find.rb
|
132
|
+
- lib/mongoid/errors/invalid_includes.rb
|
132
133
|
- lib/mongoid/errors/invalid_index.rb
|
133
134
|
- lib/mongoid/errors/invalid_options.rb
|
134
135
|
- lib/mongoid/errors/invalid_scope.rb
|
@@ -319,6 +320,7 @@ files:
|
|
319
320
|
- lib/mongoid/validations/length.rb
|
320
321
|
- lib/mongoid/validations/localizable.rb
|
321
322
|
- lib/mongoid/validations/presence.rb
|
323
|
+
- lib/mongoid/validations/queryable.rb
|
322
324
|
- lib/mongoid/validations/uniqueness.rb
|
323
325
|
- lib/mongoid/validations.rb
|
324
326
|
- lib/mongoid/version.rb
|
@@ -352,7 +354,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
352
354
|
version: '0'
|
353
355
|
segments:
|
354
356
|
- 0
|
355
|
-
hash:
|
357
|
+
hash: -2401816609188543871
|
356
358
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
357
359
|
none: false
|
358
360
|
requirements:
|