mongoid 5.4.1 → 6.0.0.beta
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.
- checksums.yaml +5 -5
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/config/locales/en.yml +23 -16
- data/lib/mongoid.rb +4 -9
- data/lib/mongoid/atomic.rb +1 -1
- data/lib/mongoid/atomic/modifiers.rb +8 -12
- data/lib/mongoid/attributes.rb +9 -11
- data/lib/mongoid/attributes/dynamic.rb +5 -6
- data/lib/mongoid/attributes/nested.rb +1 -1
- data/lib/mongoid/attributes/processing.rb +4 -0
- data/lib/mongoid/attributes/readonly.rb +22 -0
- data/lib/mongoid/cacheable.rb +36 -0
- data/lib/mongoid/changeable.rb +37 -1
- data/lib/mongoid/clients.rb +0 -63
- data/lib/mongoid/clients/factory.rb +0 -2
- data/lib/mongoid/clients/options.rb +54 -249
- data/lib/mongoid/clients/storage_options.rb +1 -69
- data/lib/mongoid/composable.rb +26 -2
- data/lib/mongoid/config.rb +1 -1
- data/lib/mongoid/config/options.rb +1 -1
- data/lib/mongoid/contextual/aggregable/mongo.rb +1 -0
- data/lib/mongoid/contextual/atomic.rb +6 -9
- data/lib/mongoid/contextual/geo_near.rb +2 -3
- data/lib/mongoid/contextual/map_reduce.rb +97 -24
- data/lib/mongoid/contextual/memory.rb +7 -4
- data/lib/mongoid/contextual/mongo.rb +63 -54
- data/lib/mongoid/contextual/none.rb +2 -2
- data/lib/mongoid/copyable.rb +19 -19
- data/lib/mongoid/criteria.rb +5 -4
- data/lib/mongoid/criteria/findable.rb +2 -3
- data/lib/mongoid/criteria/includable.rb +63 -16
- data/lib/mongoid/criteria/marshalable.rb +2 -2
- data/lib/mongoid/criteria/modifiable.rb +17 -1
- data/lib/mongoid/criteria/options.rb +25 -0
- data/lib/mongoid/criteria/queryable.rb +86 -0
- data/lib/mongoid/criteria/queryable/aggregable.rb +120 -0
- data/lib/mongoid/criteria/queryable/extensions.rb +28 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +185 -0
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +37 -0
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +34 -0
- data/lib/mongoid/criteria/queryable/extensions/date.rb +63 -0
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +53 -0
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +200 -0
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +86 -0
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +90 -0
- data/lib/mongoid/criteria/queryable/extensions/object.rb +206 -0
- data/lib/mongoid/criteria/queryable/extensions/range.rb +70 -0
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +45 -0
- data/lib/mongoid/criteria/queryable/extensions/set.rb +34 -0
- data/lib/mongoid/criteria/queryable/extensions/string.rb +137 -0
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +79 -0
- data/lib/mongoid/criteria/queryable/extensions/time.rb +60 -0
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +54 -0
- data/lib/mongoid/criteria/queryable/forwardable.rb +65 -0
- data/lib/mongoid/criteria/queryable/key.rb +103 -0
- data/lib/mongoid/criteria/queryable/macroable.rb +27 -0
- data/lib/mongoid/criteria/queryable/mergeable.rb +271 -0
- data/lib/mongoid/criteria/queryable/optional.rb +411 -0
- data/lib/mongoid/criteria/queryable/options.rb +136 -0
- data/lib/mongoid/criteria/queryable/pipeline.rb +111 -0
- data/lib/mongoid/criteria/queryable/selectable.rb +662 -0
- data/lib/mongoid/criteria/queryable/selector.rb +196 -0
- data/lib/mongoid/criteria/queryable/smash.rb +103 -0
- data/lib/mongoid/document.rb +9 -23
- data/lib/mongoid/errors.rb +2 -1
- data/lib/mongoid/errors/ambiguous_relationship.rb +1 -1
- data/lib/mongoid/errors/delete_restriction.rb +2 -2
- data/lib/mongoid/errors/invalid_field.rb +2 -2
- data/lib/mongoid/errors/invalid_persistence_option.rb +29 -0
- data/lib/mongoid/errors/invalid_relation.rb +66 -0
- data/lib/mongoid/errors/inverse_not_found.rb +1 -1
- data/lib/mongoid/errors/mongoid_error.rb +1 -1
- data/lib/mongoid/evolvable.rb +1 -1
- data/lib/mongoid/extensions.rb +0 -5
- data/lib/mongoid/extensions/big_decimal.rb +17 -8
- data/lib/mongoid/extensions/date.rb +4 -1
- data/lib/mongoid/extensions/hash.rb +2 -3
- data/lib/mongoid/extensions/object.rb +2 -2
- data/lib/mongoid/extensions/string.rb +4 -3
- data/lib/mongoid/extensions/time.rb +5 -2
- data/lib/mongoid/factory.rb +1 -0
- data/lib/mongoid/fields/foreign_key.rb +2 -2
- data/lib/mongoid/fields/localized.rb +3 -8
- data/lib/mongoid/fields/validators/macro.rb +18 -0
- data/lib/mongoid/findable.rb +3 -3
- data/lib/mongoid/indexable.rb +17 -16
- data/lib/mongoid/indexable/specification.rb +1 -1
- data/lib/mongoid/indexable/validators/options.rb +1 -2
- data/lib/mongoid/interceptable.rb +6 -17
- data/lib/mongoid/loggable.rb +1 -1
- data/lib/mongoid/matchable.rb +3 -10
- data/lib/mongoid/matchable/gt.rb +2 -0
- data/lib/mongoid/matchable/gte.rb +2 -0
- data/lib/mongoid/matchable/lt.rb +2 -0
- data/lib/mongoid/matchable/lte.rb +2 -0
- data/lib/mongoid/persistable.rb +6 -5
- data/lib/mongoid/persistable/creatable.rb +2 -0
- data/lib/mongoid/persistable/deletable.rb +7 -3
- data/lib/mongoid/persistable/settable.rb +3 -16
- data/lib/mongoid/persistable/updatable.rb +10 -12
- data/lib/mongoid/persistence_context.rb +216 -0
- data/lib/mongoid/query_cache.rb +5 -30
- data/lib/mongoid/relations/accessors.rb +6 -2
- data/lib/mongoid/relations/auto_save.rb +12 -4
- data/lib/mongoid/relations/bindings/embedded/in.rb +4 -0
- data/lib/mongoid/relations/bindings/embedded/many.rb +8 -1
- data/lib/mongoid/relations/bindings/embedded/one.rb +10 -0
- data/lib/mongoid/relations/bindings/referenced/many.rb +4 -0
- data/lib/mongoid/relations/builders.rb +2 -2
- data/lib/mongoid/relations/builders/embedded/one.rb +1 -1
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +1 -1
- data/lib/mongoid/relations/conversions.rb +1 -1
- data/lib/mongoid/relations/counter_cache.rb +28 -18
- data/lib/mongoid/relations/eager.rb +19 -7
- data/lib/mongoid/relations/eager/base.rb +5 -5
- data/lib/mongoid/relations/embedded/batchable.rb +9 -33
- data/lib/mongoid/relations/embedded/in.rb +16 -2
- data/lib/mongoid/relations/embedded/many.rb +23 -8
- data/lib/mongoid/relations/embedded/one.rb +17 -2
- data/lib/mongoid/relations/macros.rb +9 -2
- data/lib/mongoid/relations/metadata.rb +3 -3
- data/lib/mongoid/relations/nested_builder.rb +1 -1
- data/lib/mongoid/relations/options.rb +2 -2
- data/lib/mongoid/relations/proxy.rb +2 -33
- data/lib/mongoid/relations/referenced/in.rb +23 -11
- data/lib/mongoid/relations/referenced/many.rb +24 -16
- data/lib/mongoid/relations/referenced/many_to_many.rb +20 -13
- data/lib/mongoid/relations/referenced/one.rb +17 -1
- data/lib/mongoid/relations/reflections.rb +3 -5
- data/lib/mongoid/relations/touchable.rb +1 -1
- data/lib/mongoid/reloadable.rb +1 -1
- data/lib/mongoid/scopable.rb +3 -3
- data/lib/mongoid/serializable.rb +2 -3
- data/lib/mongoid/tasks/database.rb +1 -2
- data/lib/mongoid/threaded.rb +4 -4
- data/lib/mongoid/traversable.rb +1 -1
- data/lib/mongoid/validatable.rb +1 -1
- data/lib/mongoid/validatable/macros.rb +2 -4
- data/lib/mongoid/validatable/uniqueness.rb +1 -2
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +4 -7
- data/spec/app/models/album.rb +5 -1
- data/spec/app/models/artist.rb +21 -0
- data/spec/app/models/band.rb +0 -1
- data/spec/app/models/church.rb +0 -2
- data/spec/app/models/ordered_post.rb +5 -0
- data/spec/app/models/oscar.rb +1 -2
- data/spec/app/models/person.rb +3 -1
- data/spec/app/models/post.rb +0 -1
- data/spec/app/models/princess.rb +2 -0
- data/spec/app/models/record.rb +1 -0
- data/spec/app/models/thing.rb +1 -1
- data/spec/config/mongoid.yml +1 -5
- data/spec/mongoid/atomic/modifiers_spec.rb +17 -17
- data/spec/mongoid/atomic_spec.rb +17 -17
- data/spec/mongoid/attributes/nested_spec.rb +14 -14
- data/spec/mongoid/attributes/readonly_spec.rb +87 -44
- data/spec/mongoid/attributes_spec.rb +63 -0
- data/spec/mongoid/cacheable_spec.rb +112 -0
- data/spec/mongoid/changeable_spec.rb +58 -0
- data/spec/mongoid/clients/factory_spec.rb +3 -11
- data/spec/mongoid/clients/options_spec.rb +378 -96
- data/spec/mongoid/clients_spec.rb +207 -170
- data/spec/mongoid/composable_spec.rb +7 -0
- data/spec/mongoid/config_spec.rb +41 -21
- data/spec/mongoid/contextual/atomic_spec.rb +77 -343
- data/spec/mongoid/contextual/map_reduce_spec.rb +119 -111
- data/spec/mongoid/contextual/memory_spec.rb +56 -316
- data/spec/mongoid/contextual/mongo_spec.rb +104 -378
- data/spec/mongoid/copyable_spec.rb +8 -15
- data/spec/mongoid/criteria/modifiable_spec.rb +239 -7
- data/spec/mongoid/criteria/options_spec.rb +29 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +370 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +523 -0
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +59 -0
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +58 -0
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +213 -0
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +330 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +405 -0
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +58 -0
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +65 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +327 -0
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +65 -0
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +77 -0
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +108 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +309 -0
- data/spec/mongoid/{extensions/origin/regexp_raw_spec.rb → criteria/queryable/extensions/regexp_spec.rb} +21 -20
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +39 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +302 -0
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +167 -0
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +376 -0
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +347 -0
- data/spec/mongoid/criteria/queryable/forwardable_spec.rb +87 -0
- data/spec/mongoid/criteria/queryable/key_spec.rb +52 -0
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +49 -0
- data/spec/mongoid/criteria/queryable/optional_spec.rb +1786 -0
- data/spec/mongoid/criteria/queryable/options_spec.rb +360 -0
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +200 -0
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +137 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +4159 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +778 -0
- data/spec/mongoid/criteria/queryable/smash_spec.rb +30 -0
- data/spec/mongoid/criteria_spec.rb +45 -63
- data/spec/mongoid/document_spec.rb +21 -88
- data/spec/mongoid/errors/invalid_relation_spec.rb +37 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +6 -3
- data/spec/mongoid/extensions/big_decimal_spec.rb +320 -18
- data/spec/mongoid/extensions/date_spec.rb +2 -6
- data/spec/mongoid/extensions/date_time_spec.rb +2 -6
- data/spec/mongoid/extensions/float_spec.rb +8 -1
- data/spec/mongoid/extensions/integer_spec.rb +8 -1
- data/spec/mongoid/extensions/object_spec.rb +11 -0
- data/spec/mongoid/extensions/string_spec.rb +21 -0
- data/spec/mongoid/extensions/time_spec.rb +4 -8
- data/spec/mongoid/extensions/time_with_zone_spec.rb +2 -6
- data/spec/mongoid/fields/localized_spec.rb +0 -91
- data/spec/mongoid/findable_spec.rb +46 -1
- data/spec/mongoid/indexable_spec.rb +6 -46
- data/spec/mongoid/interceptable_spec.rb +49 -10
- data/spec/mongoid/matchable/gt_spec.rb +11 -0
- data/spec/mongoid/matchable/gte_spec.rb +10 -0
- data/spec/mongoid/matchable/lt_spec.rb +11 -0
- data/spec/mongoid/matchable/lte_spec.rb +11 -0
- data/spec/mongoid/matchable_spec.rb +1 -51
- data/spec/mongoid/persistable/creatable_spec.rb +2 -2
- data/spec/mongoid/persistable/deletable_spec.rb +1 -1
- data/spec/mongoid/persistable/destroyable_spec.rb +6 -2
- data/spec/mongoid/persistable/savable_spec.rb +30 -30
- data/spec/mongoid/persistable/settable_spec.rb +0 -185
- data/spec/mongoid/persistable/updatable_spec.rb +166 -5
- data/spec/mongoid/persistence_context_spec.rb +654 -0
- data/spec/mongoid/positional_spec.rb +10 -10
- data/spec/mongoid/query_cache_spec.rb +89 -65
- data/spec/mongoid/relations/accessors_spec.rb +1 -1
- data/spec/mongoid/relations/auto_save_spec.rb +39 -6
- data/spec/mongoid/relations/builders_spec.rb +37 -10
- data/spec/mongoid/relations/counter_cache_spec.rb +64 -15
- data/spec/mongoid/relations/cyclic_spec.rb +0 -22
- data/spec/mongoid/relations/embedded/many_spec.rb +9 -41
- data/spec/mongoid/relations/embedded/one_spec.rb +2 -1
- data/spec/mongoid/relations/macros_spec.rb +395 -7
- data/spec/mongoid/relations/proxy_spec.rb +3 -1
- data/spec/mongoid/relations/referenced/in_spec.rb +41 -1
- data/spec/mongoid/relations/referenced/many_spec.rb +6 -29
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +6 -29
- data/spec/mongoid/relations/reflections_spec.rb +9 -9
- data/spec/mongoid/reloadable_spec.rb +51 -0
- data/spec/mongoid/scopable_spec.rb +0 -12
- data/spec/mongoid/serializable_spec.rb +0 -50
- data/spec/mongoid/validatable/presence_spec.rb +1 -1
- data/spec/mongoid/validatable/uniqueness_spec.rb +16 -9
- data/spec/mongoid/validatable_spec.rb +16 -0
- data/spec/spec_helper.rb +10 -10
- metadata +536 -479
- metadata.gz.sig +0 -0
- data/lib/mongoid/clients/thread_options.rb +0 -19
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +0 -20
- data/lib/mongoid/extensions/decimal128.rb +0 -39
- data/lib/mongoid/extensions/origin/regexp_raw.rb +0 -43
- data/lib/mongoid/matchable/regexp.rb +0 -27
- data/spec/app/models/post_genre.rb +0 -6
- data/spec/mongoid/extensions/decimal128_spec.rb +0 -44
- data/spec/mongoid/matchable/regexp_spec.rb +0 -59
@@ -12,7 +12,7 @@ module Mongoid
|
|
12
12
|
#
|
13
13
|
# @param [ Class ] base The base class.
|
14
14
|
# @param [ Symbol ] name The name of the relation.
|
15
|
-
# @param [ Class ]
|
15
|
+
# @param [ Class ] The child class.
|
16
16
|
# @param [ Symbol ] inverse The attempted inverse key.
|
17
17
|
#
|
18
18
|
# @since 3.0.0
|
@@ -19,7 +19,7 @@ module Mongoid
|
|
19
19
|
# @return [ String ] The composed message.
|
20
20
|
#
|
21
21
|
# @since 3.0.0
|
22
|
-
def compose_message(key, attributes
|
22
|
+
def compose_message(key, attributes)
|
23
23
|
@problem = translate_problem(key, attributes)
|
24
24
|
@summary = translate_summary(key, attributes)
|
25
25
|
@resolution = translate_resolution(key, attributes)
|
data/lib/mongoid/evolvable.rb
CHANGED
data/lib/mongoid/extensions.rb
CHANGED
@@ -3,9 +3,6 @@ class BSON::ObjectId
|
|
3
3
|
def as_json(options = nil)
|
4
4
|
{ "$oid" => to_s }
|
5
5
|
end
|
6
|
-
def to_xml(options = nil)
|
7
|
-
ActiveSupport::XmlMini.to_tag(options[:root], self.to_s, options)
|
8
|
-
end
|
9
6
|
end
|
10
7
|
|
11
8
|
class Symbol
|
@@ -30,7 +27,6 @@ require "mongoid/extensions/big_decimal"
|
|
30
27
|
require "mongoid/extensions/boolean"
|
31
28
|
require "mongoid/extensions/date"
|
32
29
|
require "mongoid/extensions/date_time"
|
33
|
-
require "mongoid/extensions/decimal128"
|
34
30
|
require "mongoid/extensions/false_class"
|
35
31
|
require "mongoid/extensions/float"
|
36
32
|
require "mongoid/extensions/hash"
|
@@ -39,7 +35,6 @@ require "mongoid/extensions/module"
|
|
39
35
|
require "mongoid/extensions/nil_class"
|
40
36
|
require "mongoid/extensions/object"
|
41
37
|
require "mongoid/extensions/object_id"
|
42
|
-
require "mongoid/extensions/origin/regexp_raw"
|
43
38
|
require "mongoid/extensions/range"
|
44
39
|
require "mongoid/extensions/regexp"
|
45
40
|
require "mongoid/extensions/set"
|
@@ -28,6 +28,18 @@ module Mongoid
|
|
28
28
|
to_s
|
29
29
|
end
|
30
30
|
|
31
|
+
# Is the BigDecimal a number?
|
32
|
+
#
|
33
|
+
# @example Is the object a number?.
|
34
|
+
# object.numeric?
|
35
|
+
#
|
36
|
+
# @return [ true ] Always true.
|
37
|
+
#
|
38
|
+
# @since 6.0.0
|
39
|
+
def numeric?
|
40
|
+
true
|
41
|
+
end
|
42
|
+
|
31
43
|
module ClassMethods
|
32
44
|
|
33
45
|
# Convert the object from its mongo friendly ruby type to this type.
|
@@ -37,28 +49,25 @@ module Mongoid
|
|
37
49
|
#
|
38
50
|
# @param [ Object ] object The object to demongoize.
|
39
51
|
#
|
40
|
-
# @return [
|
52
|
+
# @return [ BigDecimal, nil ] A BigDecimal derived from the object or nil.
|
41
53
|
#
|
42
54
|
# @since 3.0.0
|
43
55
|
def demongoize(object)
|
44
|
-
|
45
|
-
object.numeric? ? ::BigDecimal.new(object.to_s) : object
|
46
|
-
end
|
56
|
+
object && object.numeric? ? ::BigDecimal.new(object.to_s) : nil
|
47
57
|
end
|
48
58
|
|
49
|
-
# Mongoize an object of any type to how it's stored in the db as a
|
50
|
-
# decimal.
|
59
|
+
# Mongoize an object of any type to how it's stored in the db as a String.
|
51
60
|
#
|
52
61
|
# @example Mongoize the object.
|
53
62
|
# BigDecimal.mongoize(123)
|
54
63
|
#
|
55
64
|
# @param [ Object ] object The object to Mongoize
|
56
65
|
#
|
57
|
-
# @return [ String ]
|
66
|
+
# @return [ String, nil ] A String representing the object or nil.
|
58
67
|
#
|
59
68
|
# @since 3.0.7
|
60
69
|
def mongoize(object)
|
61
|
-
object ? object.to_s :
|
70
|
+
object && object.numeric? ? object.to_s : nil
|
62
71
|
end
|
63
72
|
end
|
64
73
|
end
|
@@ -4,6 +4,9 @@ module Mongoid
|
|
4
4
|
module Date
|
5
5
|
|
6
6
|
# Constant for epoch - used when passing invalid times.
|
7
|
+
#
|
8
|
+
# @deprecated No longer used as a return value from #mongoize passed
|
9
|
+
# an invalid date string.
|
7
10
|
EPOCH = ::Date.new(1970, 1, 1)
|
8
11
|
|
9
12
|
# Convert the date into a time.
|
@@ -64,7 +67,7 @@ module Mongoid
|
|
64
67
|
time = object.__mongoize_time__
|
65
68
|
::Time.utc(time.year, time.month, time.day)
|
66
69
|
rescue ArgumentError
|
67
|
-
|
70
|
+
nil
|
68
71
|
end
|
69
72
|
end
|
70
73
|
end
|
@@ -161,11 +161,10 @@ module Mongoid
|
|
161
161
|
# @api private
|
162
162
|
#
|
163
163
|
# @example Mongoize for the klass, field and value.
|
164
|
-
# {}.mongoize_for(
|
164
|
+
# {}.mongoize_for(Band, "name", "test")
|
165
165
|
#
|
166
|
-
# @param [ String ] operator The operator.
|
167
166
|
# @param [ Class ] klass The model class.
|
168
|
-
# @param [ String, Symbol ]
|
167
|
+
# @param [ String, Symbol ] The field key.
|
169
168
|
# @param [ Object ] value The value to mongoize.
|
170
169
|
#
|
171
170
|
# @return [ Object ] The mongoized value.
|
@@ -94,7 +94,7 @@ module Mongoid
|
|
94
94
|
# object.do_or_do_not(:use, "The Force")
|
95
95
|
#
|
96
96
|
# @param [ String, Symbol ] name The method name.
|
97
|
-
# @param [ Array ] args The arguments.
|
97
|
+
# @param [ Array ] *args The arguments.
|
98
98
|
#
|
99
99
|
# @return [ Object, nil ] The result of the method call or nil if the
|
100
100
|
# method does not exist.
|
@@ -209,7 +209,7 @@ module Mongoid
|
|
209
209
|
# object.you_must(:use, "The Force")
|
210
210
|
#
|
211
211
|
# @param [ String, Symbol ] name The method name.
|
212
|
-
# @param [ Array ] args The arguments.
|
212
|
+
# @param [ Array ] *args The arguments.
|
213
213
|
#
|
214
214
|
# @return [ Object, nil ] The result of the method call or nil if the
|
215
215
|
# method does not exist. Nil if the object is frozen.
|
@@ -72,7 +72,8 @@ module Mongoid
|
|
72
72
|
self =~ /\A(|_)id$/
|
73
73
|
end
|
74
74
|
|
75
|
-
# Is the string a number?
|
75
|
+
# Is the string a number? The literals "NaN", "Infinity", and "-Infinity"
|
76
|
+
# are counted as numbers.
|
76
77
|
#
|
77
78
|
# @example Is the string a number.
|
78
79
|
# "1234.23".numeric?
|
@@ -81,7 +82,7 @@ module Mongoid
|
|
81
82
|
#
|
82
83
|
# @since 3.0.0
|
83
84
|
def numeric?
|
84
|
-
true if Float(self) rescue (self
|
85
|
+
true if Float(self) rescue (self =~ /^NaN|\-?Infinity$/)
|
85
86
|
end
|
86
87
|
|
87
88
|
# Get the string as a getter string.
|
@@ -117,7 +118,7 @@ module Mongoid
|
|
117
118
|
#
|
118
119
|
# @since 3.0.15
|
119
120
|
def valid_method_name?
|
120
|
-
/[@$"]/ !~ self
|
121
|
+
/[@$"-]/ !~ self
|
121
122
|
end
|
122
123
|
|
123
124
|
# Does the string end with _before_type_cast?
|
@@ -4,6 +4,9 @@ module Mongoid
|
|
4
4
|
module Time
|
5
5
|
|
6
6
|
# Constant for epoch - used when passing invalid times.
|
7
|
+
#
|
8
|
+
# @deprecated No longer used as a return value from #mongoize passed
|
9
|
+
# an invalid time string.
|
7
10
|
EPOCH = ::Time.utc(1970, 1, 1, 0, 0, 0)
|
8
11
|
|
9
12
|
# Turn the object from the ruby type we deal with to a Mongo friendly
|
@@ -27,7 +30,7 @@ module Mongoid
|
|
27
30
|
# @example Get the configured time.
|
28
31
|
# ::Time.configured
|
29
32
|
#
|
30
|
-
# @
|
33
|
+
# @retun [ Time ] The configured time.
|
31
34
|
#
|
32
35
|
# @since 3.0.0
|
33
36
|
def configured
|
@@ -76,7 +79,7 @@ module Mongoid
|
|
76
79
|
::Time.at(time.to_i, time.usec).utc
|
77
80
|
end
|
78
81
|
rescue ArgumentError
|
79
|
-
|
82
|
+
nil
|
80
83
|
end
|
81
84
|
end
|
82
85
|
end
|
data/lib/mongoid/factory.rb
CHANGED
@@ -14,6 +14,7 @@ module Mongoid
|
|
14
14
|
#
|
15
15
|
# @param [ Class ] klass The class to instantiate from if _type is not present.
|
16
16
|
# @param [ Hash ] attributes The document attributes.
|
17
|
+
# @param [ Hash ] options The mass assignment scoping options.
|
17
18
|
#
|
18
19
|
# @return [ Document ] The instantiated document.
|
19
20
|
def build(klass, attributes = nil)
|
@@ -14,8 +14,8 @@ module Mongoid
|
|
14
14
|
# @param [ String ] name The name of the field.
|
15
15
|
# @param [ String ] key The atomic location of the field.
|
16
16
|
# @param [ Hash ] mods The current modifications.
|
17
|
-
# @param [ Array ]
|
18
|
-
# @param [ Array ]
|
17
|
+
# @param [ Array ] new The new elements to add.
|
18
|
+
# @param [ Array ] old The old elements getting removed.
|
19
19
|
#
|
20
20
|
# @since 2.4.0
|
21
21
|
def add_atomic_changes(document, name, key, mods, new_elements, old_elements)
|
@@ -77,14 +77,9 @@ module Mongoid
|
|
77
77
|
# @since 3.0.0
|
78
78
|
def lookup(object)
|
79
79
|
locale = ::I18n.locale
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
elsif object.key?(locale)
|
84
|
-
object[locale]
|
85
|
-
end
|
86
|
-
return value unless value.nil?
|
87
|
-
if fallbacks? && ::I18n.respond_to?(:fallbacks)
|
80
|
+
if value = object[locale.to_s]
|
81
|
+
value
|
82
|
+
elsif fallbacks? && ::I18n.respond_to?(:fallbacks)
|
88
83
|
object[::I18n.fallbacks[locale].map(&:to_s).find{ |loc| object.has_key?(loc) }]
|
89
84
|
end
|
90
85
|
end
|
@@ -36,6 +36,24 @@ module Mongoid
|
|
36
36
|
validate_options(klass, name, options)
|
37
37
|
end
|
38
38
|
|
39
|
+
# Validate the relation definition.
|
40
|
+
#
|
41
|
+
# @example Validate the relation definition.
|
42
|
+
# Macro.validate(Model, :name)
|
43
|
+
#
|
44
|
+
# @param [ Class ] klass The model class.
|
45
|
+
# @param [ Symbol ] name The field name.
|
46
|
+
# @param [ Hash ] options The provided options.
|
47
|
+
#
|
48
|
+
# @since 6.0.0
|
49
|
+
def validate_relation(klass, name, options = {})
|
50
|
+
[name, "#{name}?".to_sym, "#{name}=".to_sym].each do |n|
|
51
|
+
if Mongoid.destructive_fields.include?(n)
|
52
|
+
raise Errors::InvalidRelation.new(klass, n)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
39
57
|
private
|
40
58
|
|
41
59
|
# Determine if the field name is allowed, if not raise an error.
|
data/lib/mongoid/findable.rb
CHANGED
@@ -6,12 +6,12 @@ module Mongoid
|
|
6
6
|
#
|
7
7
|
# @since 4.0.0
|
8
8
|
module Findable
|
9
|
-
extend
|
9
|
+
extend Mongoid::Criteria::Queryable::Forwardable
|
10
10
|
|
11
11
|
select_with :with_default_scope
|
12
12
|
|
13
13
|
# These are methods defined on the criteria that should also be accessible
|
14
|
-
# directly from the
|
14
|
+
# directly from the class level.
|
15
15
|
delegate \
|
16
16
|
:aggregates,
|
17
17
|
:avg,
|
@@ -71,7 +71,7 @@ module Mongoid
|
|
71
71
|
# @example Do any documents exist for the conditions?
|
72
72
|
# Person.exists?
|
73
73
|
#
|
74
|
-
# @
|
74
|
+
# @param [ Array ] args The conditions.
|
75
75
|
def exists?
|
76
76
|
with_default_scope.exists?
|
77
77
|
end
|
data/lib/mongoid/indexable.rb
CHANGED
@@ -31,8 +31,9 @@ module Mongoid
|
|
31
31
|
index_specifications.each do |spec|
|
32
32
|
key, options = spec.key, spec.options
|
33
33
|
if database = options[:database]
|
34
|
-
with(database: database)
|
35
|
-
collection.indexes.create_one(key, options.except(:database))
|
34
|
+
with(database: database) do |klass|
|
35
|
+
klass.collection.indexes.create_one(key, options.except(:database))
|
36
|
+
end
|
36
37
|
else
|
37
38
|
collection.indexes.create_one(key, options)
|
38
39
|
end
|
@@ -50,18 +51,19 @@ module Mongoid
|
|
50
51
|
# @since 3.0.0
|
51
52
|
def remove_indexes
|
52
53
|
indexed_database_names.each do |database|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
54
|
+
with(database: database) do |klass|
|
55
|
+
begin
|
56
|
+
klass.collection.indexes.each do |spec|
|
57
|
+
unless spec["name"] == "_id_"
|
58
|
+
klass.collection.indexes.drop_one(spec["key"])
|
59
|
+
logger.info(
|
60
|
+
"MONGOID: Removed index '#{spec["name"]}' on collection " +
|
61
|
+
"'#{klass.collection.name}' in database '#{database}'."
|
62
|
+
)
|
63
|
+
end
|
62
64
|
end
|
63
|
-
end
|
64
|
-
|
65
|
+
rescue Mongo::Error::OperationFailure; end
|
66
|
+
end
|
65
67
|
end and true
|
66
68
|
end
|
67
69
|
|
@@ -90,7 +92,7 @@ module Mongoid
|
|
90
92
|
# index({ name: 1 }, { background: true })
|
91
93
|
# end
|
92
94
|
#
|
93
|
-
# @param [ Symbol ]
|
95
|
+
# @param [ Symbol ] name The name of the field.
|
94
96
|
# @param [ Hash ] options The index options.
|
95
97
|
#
|
96
98
|
# @return [ Hash ] The index options.
|
@@ -108,8 +110,7 @@ module Mongoid
|
|
108
110
|
# @example Get the index specification.
|
109
111
|
# Model.index_specification(name: 1)
|
110
112
|
#
|
111
|
-
# @param [ Hash ]
|
112
|
-
# @param [ String ] index_name The index name.
|
113
|
+
# @param [ Hash ] key The index key/direction pair.
|
113
114
|
#
|
114
115
|
# @return [ Specification ] The found specification.
|
115
116
|
#
|
@@ -99,7 +99,7 @@ module Mongoid
|
|
99
99
|
# @example Normalize the index options.
|
100
100
|
# specification.normalize_options(drop_dups: true)
|
101
101
|
#
|
102
|
-
# @param [ Hash ]
|
102
|
+
# @param [ Hash ] options The index options.
|
103
103
|
#
|
104
104
|
# @return [ Hash ] The normalized options.
|
105
105
|
#
|
@@ -46,7 +46,7 @@ module Mongoid
|
|
46
46
|
# @example Is the callback executable?
|
47
47
|
# document.callback_executable?(:save)
|
48
48
|
#
|
49
|
-
# @param [ Symbol ]
|
49
|
+
# @param [ Symbol ] kin The type of callback.
|
50
50
|
#
|
51
51
|
# @return [ true, false ] If the callback can be executed.
|
52
52
|
#
|
@@ -118,7 +118,7 @@ module Mongoid
|
|
118
118
|
# end
|
119
119
|
#
|
120
120
|
# @param [ Symbol ] kind The type of callback to execute.
|
121
|
-
# @param [ Array ] args Any options.
|
121
|
+
# @param [ Array ] *args Any options.
|
122
122
|
#
|
123
123
|
# @return [ Document ] The document
|
124
124
|
#
|
@@ -259,22 +259,11 @@ module Mongoid
|
|
259
259
|
send("_#{kind}_callbacks").each do |callback|
|
260
260
|
chain.append(callback) if callback.kind == place
|
261
261
|
end
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
runner = ActiveSupport::Callbacks::Filters::Environment.new(self, false, nil)
|
266
|
-
chain.compile.call(runner).value
|
267
|
-
end
|
268
|
-
self.class.send :protected, name
|
269
|
-
else
|
270
|
-
class_eval <<-EOM
|
271
|
-
def #{name}()
|
272
|
-
#{chain.compile}
|
273
|
-
end
|
274
|
-
protected :#{name}
|
275
|
-
EOM
|
262
|
+
self.class.send :define_method, name do
|
263
|
+
runner = ActiveSupport::Callbacks::Filters::Environment.new(self, false, nil)
|
264
|
+
chain.compile.call(runner).value
|
276
265
|
end
|
277
|
-
|
266
|
+
self.class.send :protected, name
|
278
267
|
end
|
279
268
|
send(name)
|
280
269
|
end
|
data/lib/mongoid/loggable.rb
CHANGED
data/lib/mongoid/matchable.rb
CHANGED
@@ -12,7 +12,6 @@ require "mongoid/matchable/ne"
|
|
12
12
|
require "mongoid/matchable/nin"
|
13
13
|
require "mongoid/matchable/or"
|
14
14
|
require "mongoid/matchable/size"
|
15
|
-
require "mongoid/matchable/regexp"
|
16
15
|
|
17
16
|
module Mongoid
|
18
17
|
|
@@ -82,7 +81,7 @@ module Mongoid
|
|
82
81
|
#
|
83
82
|
# @param [ Document ] document The document to check.
|
84
83
|
# @param [ Symbol, String ] key The field name.
|
85
|
-
# @param [ Object, Hash ]
|
84
|
+
# @param [ Object, Hash ] The value or selector.
|
86
85
|
#
|
87
86
|
# @return [ Matcher ] The matcher.
|
88
87
|
#
|
@@ -103,7 +102,7 @@ module Mongoid
|
|
103
102
|
#
|
104
103
|
# @param [ Document ] document The document to check.
|
105
104
|
# @param [ Symbol, String ] key The field name.
|
106
|
-
# @param [ Object, Hash ]
|
105
|
+
# @param [ Object, Hash ] The value or selector.
|
107
106
|
#
|
108
107
|
# @return [ Matcher ] The matcher.
|
109
108
|
#
|
@@ -116,8 +115,6 @@ module Mongoid
|
|
116
115
|
else
|
117
116
|
Default.new(extract_attribute(document, key))
|
118
117
|
end
|
119
|
-
elsif value.regexp?
|
120
|
-
Regexp.new(extract_attribute(document, key))
|
121
118
|
else
|
122
119
|
case key.to_s
|
123
120
|
when "$or" then Or.new(value, document)
|
@@ -146,11 +143,7 @@ module Mongoid
|
|
146
143
|
if (key_string = key.to_s) =~ /.+\..+/
|
147
144
|
key_string.split('.').inject(document.as_document) do |_attribs, _key|
|
148
145
|
if _attribs.is_a?(::Array)
|
149
|
-
|
150
|
-
_attribs.try(:[], _key.to_i)
|
151
|
-
else
|
152
|
-
_attribs.map { |doc| doc.try(:[], _key) }
|
153
|
-
end
|
146
|
+
_attribs.map { |doc| doc.try(:[], _key) }
|
154
147
|
else
|
155
148
|
_attribs.try(:[], _key)
|
156
149
|
end
|