mongoid 7.6.0 → 8.0.1
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 +4 -4
- checksums.yaml.gz.sig +2 -0
- data/README.md +3 -3
- data/Rakefile +21 -85
- data/lib/config/locales/en.yml +46 -30
- data/lib/mongoid/association/accessors.rb +32 -3
- data/lib/mongoid/association/bindable.rb +48 -0
- data/lib/mongoid/association/builders.rb +4 -2
- data/lib/mongoid/association/eager_loadable.rb +29 -7
- data/lib/mongoid/association/embedded/batchable.rb +28 -5
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
- data/lib/mongoid/association/embedded/embedded_in.rb +2 -1
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +1 -1
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +40 -18
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +18 -4
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +21 -2
- data/lib/mongoid/association/macros.rb +2 -1
- data/lib/mongoid/association/many.rb +5 -0
- data/lib/mongoid/association/nested/many.rb +2 -1
- data/lib/mongoid/association/proxy.rb +12 -0
- data/lib/mongoid/association/referenced/auto_save.rb +3 -2
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/belongs_to.rb +1 -1
- data/lib/mongoid/association/referenced/counter_cache.rb +8 -8
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +64 -11
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +4 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +10 -18
- data/lib/mongoid/association/referenced/has_many/proxy.rb +12 -9
- data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/has_one/proxy.rb +8 -11
- data/lib/mongoid/association/referenced/syncable.rb +2 -2
- data/lib/mongoid/association/relatable.rb +38 -4
- data/lib/mongoid/attributes/processing.rb +9 -2
- data/lib/mongoid/attributes.rb +30 -27
- data/lib/mongoid/cacheable.rb +2 -2
- data/lib/mongoid/changeable.rb +37 -2
- data/lib/mongoid/clients/options.rb +4 -0
- data/lib/mongoid/clients/sessions.rb +2 -14
- data/lib/mongoid/config.rb +15 -11
- data/lib/mongoid/contextual/aggregable/memory.rb +23 -15
- data/lib/mongoid/contextual/aggregable/mongo.rb +1 -1
- data/lib/mongoid/contextual/map_reduce.rb +2 -2
- data/lib/mongoid/contextual/memory.rb +55 -28
- data/lib/mongoid/contextual/mongo.rb +173 -287
- data/lib/mongoid/contextual/none.rb +33 -15
- data/lib/mongoid/copyable.rb +32 -8
- data/lib/mongoid/criteria/includable.rb +24 -20
- data/lib/mongoid/criteria/marshalable.rb +10 -2
- data/lib/mongoid/criteria/queryable/extensions/array.rb +2 -15
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +0 -16
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
- data/lib/mongoid/criteria/queryable/optional.rb +3 -9
- data/lib/mongoid/criteria/queryable/options.rb +1 -1
- data/lib/mongoid/criteria/queryable/selectable.rb +2 -24
- data/lib/mongoid/criteria/queryable/selector.rb +90 -5
- data/lib/mongoid/criteria/queryable/smash.rb +39 -6
- data/lib/mongoid/criteria/queryable/storable.rb +1 -1
- data/lib/mongoid/criteria/queryable.rb +11 -6
- data/lib/mongoid/criteria.rb +1 -28
- data/lib/mongoid/deprecable.rb +36 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +88 -33
- data/lib/mongoid/equality.rb +4 -4
- data/lib/mongoid/errors/document_not_found.rb +6 -2
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
- data/lib/mongoid/errors/invalid_field.rb +5 -1
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
- data/lib/mongoid/errors.rb +2 -2
- data/lib/mongoid/extensions/array.rb +8 -6
- data/lib/mongoid/extensions/big_decimal.rb +29 -10
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +8 -2
- data/lib/mongoid/extensions/date.rb +26 -20
- data/lib/mongoid/extensions/date_time.rb +1 -1
- data/lib/mongoid/extensions/float.rb +4 -5
- data/lib/mongoid/extensions/hash.rb +12 -5
- data/lib/mongoid/extensions/integer.rb +4 -5
- data/lib/mongoid/extensions/object.rb +2 -0
- data/lib/mongoid/extensions/range.rb +41 -10
- data/lib/mongoid/extensions/regexp.rb +11 -4
- data/lib/mongoid/extensions/set.rb +11 -4
- data/lib/mongoid/extensions/string.rb +2 -13
- data/lib/mongoid/extensions/symbol.rb +3 -14
- data/lib/mongoid/extensions/time.rb +27 -16
- data/lib/mongoid/extensions/time_with_zone.rb +1 -2
- data/lib/mongoid/extensions.rb +1 -0
- data/lib/mongoid/factory.rb +42 -7
- data/lib/mongoid/fields/foreign_key.rb +7 -0
- data/lib/mongoid/fields/validators/macro.rb +3 -9
- data/lib/mongoid/fields.rb +49 -7
- data/lib/mongoid/findable.rb +21 -16
- data/lib/mongoid/indexable/specification.rb +1 -1
- data/lib/mongoid/indexable/validators/options.rb +4 -1
- data/lib/mongoid/interceptable.rb +69 -9
- data/lib/mongoid/persistable/creatable.rb +14 -5
- data/lib/mongoid/persistable/updatable.rb +12 -5
- data/lib/mongoid/persistence_context.rb +8 -42
- data/lib/mongoid/query_cache.rb +6 -258
- data/lib/mongoid/railties/controller_runtime.rb +1 -1
- data/lib/mongoid/reloadable.rb +7 -3
- data/lib/mongoid/scopable.rb +9 -11
- data/lib/mongoid/selectable.rb +1 -2
- data/lib/mongoid/shardable.rb +11 -35
- data/lib/mongoid/stateful.rb +27 -1
- data/lib/mongoid/timestamps/created.rb +1 -1
- data/lib/mongoid/timestamps/updated.rb +1 -1
- data/lib/mongoid/touchable.rb +2 -3
- data/lib/mongoid/traversable.rb +1 -0
- data/lib/mongoid/validatable/uniqueness.rb +2 -1
- data/lib/mongoid/version.rb +1 -5
- data/lib/mongoid/warnings.rb +3 -4
- data/lib/mongoid.rb +1 -0
- data/spec/config/mongoid.yml +16 -0
- data/spec/integration/app_spec.rb +8 -12
- data/spec/integration/associations/belongs_to_spec.rb +18 -0
- data/spec/integration/associations/embedded_spec.rb +15 -0
- data/spec/integration/associations/embeds_many_spec.rb +15 -2
- data/spec/integration/associations/embeds_one_spec.rb +18 -0
- data/spec/integration/associations/foreign_key_spec.rb +9 -0
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
- data/spec/integration/associations/has_one_spec.rb +97 -1
- data/spec/integration/associations/scope_option_spec.rb +1 -1
- data/spec/integration/callbacks_models.rb +95 -1
- data/spec/integration/callbacks_spec.rb +226 -4
- data/spec/integration/criteria/range_spec.rb +95 -1
- data/spec/integration/discriminator_key_spec.rb +115 -76
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +1 -15
- data/spec/integration/matcher_examples_spec.rb +20 -13
- data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
- data/spec/integration/matcher_operator_spec.rb +3 -5
- data/spec/integration/persistence/range_field_spec.rb +350 -0
- data/spec/mongoid/association/counter_cache_spec.rb +1 -1
- data/spec/mongoid/association/depending_spec.rb +9 -9
- data/spec/mongoid/association/eager_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +69 -9
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +198 -8
- data/spec/mongoid/association/embedded/embeds_many_models.rb +36 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +12 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +15 -0
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +38 -5
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2 -56
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +62 -13
- data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
- data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
- data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
- data/spec/mongoid/association/syncable_spec.rb +14 -0
- data/spec/mongoid/atomic/paths_spec.rb +0 -14
- data/spec/mongoid/attributes/nested_spec.rb +80 -11
- data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
- data/spec/mongoid/attributes/projector_spec.rb +1 -5
- data/spec/mongoid/attributes_spec.rb +480 -27
- data/spec/mongoid/cacheable_spec.rb +3 -3
- data/spec/mongoid/changeable_spec.rb +130 -13
- data/spec/mongoid/clients/factory_spec.rb +23 -30
- data/spec/mongoid/clients/sessions_spec.rb +0 -38
- data/spec/mongoid/clients_spec.rb +2 -2
- data/spec/mongoid/config_spec.rb +52 -15
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +396 -158
- data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
- data/spec/mongoid/contextual/map_reduce_spec.rb +2 -16
- data/spec/mongoid/contextual/memory_spec.rb +521 -14
- data/spec/mongoid/contextual/mongo_spec.rb +566 -426
- data/spec/mongoid/contextual/none_spec.rb +11 -19
- data/spec/mongoid/copyable_spec.rb +451 -2
- data/spec/mongoid/criteria/findable_spec.rb +86 -210
- data/spec/mongoid/criteria/includable_spec.rb +1492 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/optional_spec.rb +0 -484
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +50 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +77 -85
- data/spec/mongoid/criteria/queryable/selector_spec.rb +16 -77
- data/spec/mongoid/criteria/queryable/storable_spec.rb +0 -72
- data/spec/mongoid/criteria_spec.rb +469 -1201
- data/spec/mongoid/document_fields_spec.rb +173 -24
- data/spec/mongoid/document_spec.rb +32 -41
- data/spec/mongoid/equality_spec.rb +12 -12
- data/spec/mongoid/errors/document_not_found_spec.rb +29 -2
- data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
- data/spec/mongoid/errors/no_environment_spec.rb +3 -3
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
- data/spec/mongoid/extensions/array_spec.rb +16 -2
- data/spec/mongoid/extensions/big_decimal_spec.rb +697 -212
- data/spec/mongoid/extensions/binary_spec.rb +44 -9
- data/spec/mongoid/extensions/boolean_spec.rb +68 -82
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
- data/spec/mongoid/extensions/date_spec.rb +71 -1
- data/spec/mongoid/extensions/date_time_spec.rb +15 -9
- data/spec/mongoid/extensions/float_spec.rb +48 -76
- data/spec/mongoid/extensions/hash_spec.rb +30 -0
- data/spec/mongoid/extensions/integer_spec.rb +45 -66
- data/spec/mongoid/extensions/range_spec.rb +255 -54
- data/spec/mongoid/extensions/regexp_spec.rb +58 -33
- data/spec/mongoid/extensions/set_spec.rb +106 -0
- data/spec/mongoid/extensions/string_spec.rb +53 -25
- data/spec/mongoid/extensions/symbol_spec.rb +18 -25
- data/spec/mongoid/extensions/time_spec.rb +634 -66
- data/spec/mongoid/extensions/time_with_zone_spec.rb +17 -31
- data/spec/mongoid/factory_spec.rb +61 -1
- data/spec/mongoid/fields_spec.rb +321 -50
- data/spec/mongoid/findable_spec.rb +64 -29
- data/spec/mongoid/indexable/specification_spec.rb +2 -2
- data/spec/mongoid/indexable_spec.rb +16 -19
- data/spec/mongoid/interceptable_spec.rb +584 -5
- data/spec/mongoid/interceptable_spec_models.rb +235 -4
- data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
- data/spec/mongoid/mongoizable_spec.rb +285 -0
- data/spec/mongoid/persistable/creatable_spec.rb +2 -2
- data/spec/mongoid/persistable/deletable_spec.rb +2 -2
- data/spec/mongoid/persistable/destroyable_spec.rb +2 -2
- data/spec/mongoid/persistable/upsertable_spec.rb +14 -0
- data/spec/mongoid/persistence_context_spec.rb +24 -0
- data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
- data/spec/mongoid/query_cache_spec.rb +1 -156
- data/spec/mongoid/reloadable_spec.rb +35 -2
- data/spec/mongoid/scopable_spec.rb +36 -34
- data/spec/mongoid/serializable_spec.rb +14 -7
- data/spec/mongoid/shardable_models.rb +0 -14
- data/spec/mongoid/shardable_spec.rb +61 -153
- data/spec/mongoid/stateful_spec.rb +28 -0
- data/spec/mongoid/timestamps_spec.rb +390 -0
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +116 -0
- data/spec/mongoid/touchable_spec_models.rb +12 -8
- data/spec/mongoid/traversable_spec.rb +4 -11
- data/spec/mongoid/validatable/presence_spec.rb +1 -1
- data/spec/mongoid/validatable/uniqueness_spec.rb +60 -31
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +1 -7
- data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
- data/spec/rails/mongoid_spec.rb +4 -16
- data/spec/shared/lib/mrss/docker_runner.rb +1 -8
- data/spec/shared/lib/mrss/event_subscriber.rb +5 -15
- data/spec/shared/lib/mrss/lite_constraints.rb +2 -10
- data/spec/shared/lib/mrss/server_version_registry.rb +24 -17
- data/spec/shared/lib/mrss/spec_organizer.rb +3 -32
- data/spec/shared/lib/mrss/utils.rb +6 -28
- data/spec/shared/share/Dockerfile.erb +107 -33
- data/spec/shared/shlib/distro.sh +0 -10
- data/spec/shared/shlib/server.sh +33 -64
- data/spec/shared/shlib/set_env.sh +71 -12
- data/spec/support/constraints.rb +24 -0
- data/spec/support/expectations.rb +17 -20
- data/spec/support/macros.rb +30 -0
- data/spec/support/models/augmentation.rb +12 -0
- data/spec/support/models/band.rb +3 -0
- data/spec/support/models/catalog.rb +24 -0
- data/spec/support/models/circus.rb +3 -0
- data/spec/support/models/fanatic.rb +8 -0
- data/spec/support/models/implant.rb +9 -0
- data/spec/support/models/label.rb +2 -0
- data/spec/support/models/passport.rb +9 -0
- data/spec/support/models/person.rb +1 -0
- data/spec/support/models/player.rb +2 -0
- data/spec/support/models/powerup.rb +12 -0
- data/spec/support/models/registry.rb +1 -0
- data/spec/support/models/school.rb +14 -0
- data/spec/support/models/shield.rb +18 -0
- data/spec/support/models/student.rb +14 -0
- data/spec/support/models/weapon.rb +12 -0
- data.tar.gz.sig +0 -0
- metadata +695 -641
- metadata.gz.sig +0 -0
- data/lib/mongoid/errors/eager_load.rb +0 -23
- data/lib/mongoid/errors/invalid_value.rb +0 -17
- data/spec/mongoid/errors/eager_load_spec.rb +0 -31
- data/spec/shared/CANDIDATE.md +0 -28
- data/spec/shared/lib/mrss/release/candidate.rb +0 -281
- data/spec/shared/lib/mrss/release/product_data.rb +0 -144
- data/spec/shared/lib/tasks/candidate.rake +0 -64
|
@@ -50,7 +50,7 @@ module Mongoid
|
|
|
50
50
|
# @example Get the distinct values in null context.
|
|
51
51
|
# context.distinct(:name)
|
|
52
52
|
#
|
|
53
|
-
# @param [ String
|
|
53
|
+
# @param [ String | Symbol ] _field The name of the field.
|
|
54
54
|
#
|
|
55
55
|
# @return [ Array ] An empty Array.
|
|
56
56
|
def distinct(_field)
|
|
@@ -88,13 +88,37 @@ module Mongoid
|
|
|
88
88
|
# @example Get the values for null context.
|
|
89
89
|
# context.pluck(:name)
|
|
90
90
|
#
|
|
91
|
-
# @param [ String
|
|
91
|
+
# @param [ String | Symbol ] *_fields Field or fields to pluck.
|
|
92
92
|
#
|
|
93
93
|
# @return [ Array ] An empty Array.
|
|
94
|
-
def pluck(*
|
|
94
|
+
def pluck(*_fields)
|
|
95
95
|
[]
|
|
96
96
|
end
|
|
97
97
|
|
|
98
|
+
# Pick the field values in null context.
|
|
99
|
+
#
|
|
100
|
+
# @example Get the value for null context.
|
|
101
|
+
# context.pick(:name)
|
|
102
|
+
#
|
|
103
|
+
# @param [ String | Symbol ] *_fields Field or fields to pick.
|
|
104
|
+
#
|
|
105
|
+
# @return [ nil ] Always reeturn nil.
|
|
106
|
+
def pick(*_fields)
|
|
107
|
+
nil
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# Tally the field values in null context.
|
|
111
|
+
#
|
|
112
|
+
# @example Get the values for null context.
|
|
113
|
+
# context.tally(:name)
|
|
114
|
+
#
|
|
115
|
+
# @param [ String | Symbol ] _field Field to tally.
|
|
116
|
+
#
|
|
117
|
+
# @return [ Hash ] An empty Hash.
|
|
118
|
+
def tally(_field)
|
|
119
|
+
{}
|
|
120
|
+
end
|
|
121
|
+
|
|
98
122
|
# Create the new null context.
|
|
99
123
|
#
|
|
100
124
|
# @example Create the new context.
|
|
@@ -110,14 +134,11 @@ module Mongoid
|
|
|
110
134
|
# @example Get the first document in null context.
|
|
111
135
|
# context.first
|
|
112
136
|
#
|
|
113
|
-
# @param [ Integer
|
|
114
|
-
# return, or a hash of options.
|
|
137
|
+
# @param [ Integer ] limit The number of documents to return.
|
|
115
138
|
#
|
|
116
139
|
# @return [ nil ] Always nil.
|
|
117
|
-
def first(
|
|
118
|
-
|
|
119
|
-
[]
|
|
120
|
-
end
|
|
140
|
+
def first(limit = nil)
|
|
141
|
+
[] unless limit.nil?
|
|
121
142
|
end
|
|
122
143
|
|
|
123
144
|
# Always returns nil.
|
|
@@ -125,14 +146,11 @@ module Mongoid
|
|
|
125
146
|
# @example Get the last document in null context.
|
|
126
147
|
# context.last
|
|
127
148
|
#
|
|
128
|
-
# @param [ Integer
|
|
129
|
-
# return, or a hash of options.
|
|
149
|
+
# @param [ Integer ] limit The number of documents to return.
|
|
130
150
|
#
|
|
131
151
|
# @return [ nil ] Always nil.
|
|
132
|
-
def last(
|
|
133
|
-
|
|
134
|
-
[]
|
|
135
|
-
end
|
|
152
|
+
def last(limit = nil)
|
|
153
|
+
[] unless limit.nil?
|
|
136
154
|
end
|
|
137
155
|
|
|
138
156
|
# Returns nil or empty array.
|
data/lib/mongoid/copyable.rb
CHANGED
|
@@ -10,7 +10,11 @@ module Mongoid
|
|
|
10
10
|
# the exception of the document's id, and will reset all the
|
|
11
11
|
# instance variables.
|
|
12
12
|
#
|
|
13
|
-
# This clone also includes embedded documents.
|
|
13
|
+
# This clone also includes embedded documents. If there is an _id field in
|
|
14
|
+
# the embedded document, it will be maintained, unlike the root's _id.
|
|
15
|
+
#
|
|
16
|
+
# If cloning an embedded child, the embedded parent is not cloned and the
|
|
17
|
+
# embedded_in association is not set.
|
|
14
18
|
#
|
|
15
19
|
# @example Clone the document.
|
|
16
20
|
# document.clone
|
|
@@ -19,19 +23,42 @@ module Mongoid
|
|
|
19
23
|
def clone
|
|
20
24
|
# @note This next line is here to address #2704, even though having an
|
|
21
25
|
# _id and id field in the document would cause problems with Mongoid
|
|
22
|
-
# elsewhere.
|
|
26
|
+
# elsewhere. Note this is only done on the root document as we want
|
|
27
|
+
# to maintain the same _id on the embedded documents.
|
|
23
28
|
attrs = clone_document.except(*self.class.id_fields)
|
|
29
|
+
Copyable.clone_with_hash(self.class, attrs)
|
|
30
|
+
end
|
|
31
|
+
alias :dup :clone
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
# Create clone of a document of the given klass with the given attributes
|
|
36
|
+
# hash. This is used recursively so that embedded associations are cloned
|
|
37
|
+
# safely.
|
|
38
|
+
#
|
|
39
|
+
# @param klass [ Class ] The class of the document to create.
|
|
40
|
+
# @param attrs [ Hash ] The hash of the attributes.
|
|
41
|
+
#
|
|
42
|
+
# @return [ Document ] The new document.
|
|
43
|
+
def self.clone_with_hash(klass, attrs)
|
|
24
44
|
dynamic_attrs = {}
|
|
25
|
-
_attribute_names =
|
|
45
|
+
_attribute_names = klass.attribute_names
|
|
26
46
|
attrs.reject! do |attr_name, value|
|
|
27
47
|
unless _attribute_names.include?(attr_name)
|
|
28
48
|
dynamic_attrs[attr_name] = value
|
|
29
49
|
true
|
|
30
50
|
end
|
|
31
51
|
end
|
|
32
|
-
|
|
52
|
+
|
|
53
|
+
Factory.build(klass, attrs).tap do |object|
|
|
33
54
|
dynamic_attrs.each do |attr_name, value|
|
|
34
|
-
|
|
55
|
+
assoc = object.embedded_relations[attr_name]
|
|
56
|
+
if assoc&.one? && Hash === value
|
|
57
|
+
object.send("#{attr_name}=", clone_with_hash(assoc.klass, value))
|
|
58
|
+
elsif assoc&.many? && Array === value
|
|
59
|
+
docs = value.map { |h| clone_with_hash(assoc.klass, h) }
|
|
60
|
+
object.send("#{attr_name}=", docs)
|
|
61
|
+
elsif object.respond_to?("#{attr_name}=")
|
|
35
62
|
object.send("#{attr_name}=", value)
|
|
36
63
|
else
|
|
37
64
|
object.attributes[attr_name] = value
|
|
@@ -39,9 +66,6 @@ module Mongoid
|
|
|
39
66
|
end
|
|
40
67
|
end
|
|
41
68
|
end
|
|
42
|
-
alias :dup :clone
|
|
43
|
-
|
|
44
|
-
private
|
|
45
69
|
|
|
46
70
|
# Clone the document attributes
|
|
47
71
|
#
|
|
@@ -26,15 +26,12 @@ module Mongoid
|
|
|
26
26
|
#
|
|
27
27
|
# @return [ Criteria ] The cloned criteria.
|
|
28
28
|
def includes(*relations)
|
|
29
|
-
extract_includes_list(klass, relations)
|
|
29
|
+
extract_includes_list(klass, nil, relations)
|
|
30
30
|
clone
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
# Get a list of criteria that are to be executed for eager loading.
|
|
34
34
|
#
|
|
35
|
-
# @example Get the eager loading inclusions.
|
|
36
|
-
# Person.includes(:game).inclusions
|
|
37
|
-
#
|
|
38
35
|
# @return [ Array<Association> ] The inclusions.
|
|
39
36
|
def inclusions
|
|
40
37
|
@inclusions ||= []
|
|
@@ -42,9 +39,6 @@ module Mongoid
|
|
|
42
39
|
|
|
43
40
|
# Set the inclusions for the criteria.
|
|
44
41
|
#
|
|
45
|
-
# @example Set the inclusions.
|
|
46
|
-
# criteria.inclusions = [ association ]
|
|
47
|
-
#
|
|
48
42
|
# @param [ Array<Association> ] value The inclusions.
|
|
49
43
|
#
|
|
50
44
|
# @return [ Array<Association> ] The new inclusions.
|
|
@@ -56,30 +50,40 @@ module Mongoid
|
|
|
56
50
|
|
|
57
51
|
# Add an inclusion definition to the list of inclusions for the criteria.
|
|
58
52
|
#
|
|
59
|
-
# @
|
|
60
|
-
#
|
|
61
|
-
#
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
53
|
+
# @param [ Association ] association The association.
|
|
54
|
+
# @param [ String ] parent The name of the association above this one in
|
|
55
|
+
# the inclusion tree, if it is a nested inclusion.
|
|
56
|
+
def add_inclusion(association, parent = nil)
|
|
57
|
+
if assoc = inclusions.detect { |a| a == association }
|
|
58
|
+
assoc.parent_inclusions.push(parent) if parent
|
|
59
|
+
else
|
|
60
|
+
assoc = association.dup
|
|
61
|
+
assoc.parent_inclusions = []
|
|
62
|
+
assoc.parent_inclusions.push(parent) if parent
|
|
63
|
+
inclusions.push(assoc)
|
|
64
|
+
end
|
|
68
65
|
end
|
|
69
66
|
|
|
70
|
-
|
|
67
|
+
# Iterate through the list of relations and create the inclusions list.
|
|
68
|
+
#
|
|
69
|
+
# @param [ Class, String, Symbol ] _parent_class The class from which the
|
|
70
|
+
# association originates.
|
|
71
|
+
# @param [ String ] parent The name of the association above this one in
|
|
72
|
+
# the inclusion tree, if it is a nested inclusion.
|
|
73
|
+
# @param relations_list The names of the associations to eager load.
|
|
74
|
+
def extract_includes_list(_parent_class, parent, *relations_list)
|
|
71
75
|
relations_list.flatten.each do |relation_object|
|
|
72
76
|
if relation_object.is_a?(Hash)
|
|
73
77
|
relation_object.each do |relation, _includes|
|
|
74
78
|
association = _parent_class.reflect_on_association(relation)
|
|
75
79
|
raise Errors::InvalidIncludes.new(_klass, [ relation ]) unless association
|
|
76
|
-
add_inclusion(
|
|
77
|
-
extract_includes_list(association.klass, _includes)
|
|
80
|
+
add_inclusion(association, parent)
|
|
81
|
+
extract_includes_list(association.klass, association.name, _includes)
|
|
78
82
|
end
|
|
79
83
|
else
|
|
80
84
|
association = _parent_class.reflect_on_association(relation_object)
|
|
81
85
|
raise Errors::InvalidIncludes.new(_parent_class, [ relation_object ]) unless association
|
|
82
|
-
add_inclusion(
|
|
86
|
+
add_inclusion(association, parent)
|
|
83
87
|
end
|
|
84
88
|
end
|
|
85
89
|
end
|
|
@@ -9,9 +9,12 @@ module Mongoid
|
|
|
9
9
|
# @example Dump the criteria.
|
|
10
10
|
# Marshal.dump(criteria)
|
|
11
11
|
#
|
|
12
|
+
# Note :mongo is written here for backwards compatibility with Mongoid 7
|
|
13
|
+
# and earlier.
|
|
14
|
+
#
|
|
12
15
|
# @return [ Array<Object> ] The dumped data.
|
|
13
16
|
def marshal_dump
|
|
14
|
-
data = [ klass,
|
|
17
|
+
data = [ klass, :mongo, inclusions, documents, strategy, negating ]
|
|
15
18
|
data.push(scoping_options).push(dump_hash(:selector)).push(dump_hash(:options))
|
|
16
19
|
end
|
|
17
20
|
|
|
@@ -23,7 +26,12 @@ module Mongoid
|
|
|
23
26
|
# @param [ Array ] data The raw data.
|
|
24
27
|
def marshal_load(data)
|
|
25
28
|
@scoping_options, raw_selector, raw_options = data.pop(3)
|
|
26
|
-
@klass,
|
|
29
|
+
@klass, driver, @inclusions, @documents, @strategy, @negating = data
|
|
30
|
+
|
|
31
|
+
if driver == :mongo1x
|
|
32
|
+
raise NotImplementedError, "Mongoid no longer supports marshalling with driver version 1.x."
|
|
33
|
+
end
|
|
34
|
+
|
|
27
35
|
@selector = load_hash(Queryable::Selector, raw_selector)
|
|
28
36
|
@options = load_hash(Queryable::Options, raw_options)
|
|
29
37
|
end
|
|
@@ -108,20 +108,6 @@ module Mongoid
|
|
|
108
108
|
{ first => last.to_direction }
|
|
109
109
|
end
|
|
110
110
|
|
|
111
|
-
# Update all the values in the hash with the provided block.
|
|
112
|
-
#
|
|
113
|
-
# @example Update the values in place.
|
|
114
|
-
# [ 1, 2, 3 ].update_values(&:to_s)
|
|
115
|
-
#
|
|
116
|
-
# @param [ Proc ] block The block to execute on each value.
|
|
117
|
-
#
|
|
118
|
-
# @return [ Array ] the array.
|
|
119
|
-
#
|
|
120
|
-
# @deprecated
|
|
121
|
-
def update_values(&block)
|
|
122
|
-
replace(map(&block))
|
|
123
|
-
end
|
|
124
|
-
|
|
125
111
|
private
|
|
126
112
|
|
|
127
113
|
# Converts the array to a multi-dimensional array.
|
|
@@ -147,7 +133,8 @@ module Mongoid
|
|
|
147
133
|
#
|
|
148
134
|
# @return [ Object ] The evolved object.
|
|
149
135
|
def evolve(object)
|
|
150
|
-
|
|
136
|
+
case object
|
|
137
|
+
when ::Array, ::Set
|
|
151
138
|
object.map { |obj| obj.class.evolve(obj) }
|
|
152
139
|
else
|
|
153
140
|
object
|
|
@@ -12,18 +12,39 @@ module Mongoid
|
|
|
12
12
|
module BigDecimal
|
|
13
13
|
module ClassMethods
|
|
14
14
|
|
|
15
|
-
# Evolves the big decimal into a MongoDB friendly value
|
|
16
|
-
# a string.
|
|
15
|
+
# Evolves the big decimal into a MongoDB friendly value.
|
|
17
16
|
#
|
|
18
17
|
# @example Evolve the big decimal
|
|
19
18
|
# BigDecimal.evolve(decimal)
|
|
20
19
|
#
|
|
21
20
|
# @param [ BigDecimal ] object The object to convert.
|
|
22
21
|
#
|
|
23
|
-
# @return [
|
|
22
|
+
# @return [ Object ] The big decimal as a string, a Decimal128,
|
|
23
|
+
# or the inputted object if it is uncastable.
|
|
24
24
|
def evolve(object)
|
|
25
25
|
__evolve__(object) do |obj|
|
|
26
|
-
|
|
26
|
+
return if obj.nil?
|
|
27
|
+
case obj
|
|
28
|
+
when ::BigDecimal
|
|
29
|
+
if Mongoid.map_big_decimal_to_decimal128
|
|
30
|
+
BSON::Decimal128.new(obj)
|
|
31
|
+
else
|
|
32
|
+
obj.to_s
|
|
33
|
+
end
|
|
34
|
+
# Always return on string for backwards compatibility with querying
|
|
35
|
+
# string-backed BigDecimal fields.
|
|
36
|
+
when BSON::Decimal128, String then obj
|
|
37
|
+
else
|
|
38
|
+
if obj.numeric?
|
|
39
|
+
if Mongoid.map_big_decimal_to_decimal128
|
|
40
|
+
BSON::Decimal128.new(object.to_s)
|
|
41
|
+
else
|
|
42
|
+
obj.to_s
|
|
43
|
+
end
|
|
44
|
+
else
|
|
45
|
+
obj
|
|
46
|
+
end
|
|
47
|
+
end
|
|
27
48
|
end
|
|
28
49
|
end
|
|
29
50
|
end
|
|
@@ -134,22 +134,6 @@ module Mongoid
|
|
|
134
134
|
replacement
|
|
135
135
|
end
|
|
136
136
|
|
|
137
|
-
# Update all the values in the hash with the provided block.
|
|
138
|
-
#
|
|
139
|
-
# @example Update the values in place.
|
|
140
|
-
# { field: "1" }.update_values(&:to_i)
|
|
141
|
-
#
|
|
142
|
-
# @param [ Proc ] block The block to execute on each value.
|
|
143
|
-
#
|
|
144
|
-
# @return [ Hash ] the hash.
|
|
145
|
-
#
|
|
146
|
-
# @deprecated
|
|
147
|
-
def update_values(&block)
|
|
148
|
-
each_pair do |key, value|
|
|
149
|
-
store(key, block[value])
|
|
150
|
-
end
|
|
151
|
-
end
|
|
152
|
-
|
|
153
137
|
private
|
|
154
138
|
|
|
155
139
|
# Apply the provided strategy for the hash with the given object.
|
|
@@ -51,7 +51,7 @@ module Mongoid
|
|
|
51
51
|
#
|
|
52
52
|
# @return [ Object ] The converted number.
|
|
53
53
|
def __numeric__(object)
|
|
54
|
-
object.to_s
|
|
54
|
+
object.to_s.match?(/\A[-+]?[0-9]*[0-9.]0*\z/) ? object.to_i : Float(object)
|
|
55
55
|
end
|
|
56
56
|
|
|
57
57
|
# Evolve the object to an integer.
|
|
@@ -43,13 +43,21 @@ module Mongoid
|
|
|
43
43
|
# @example Evolve the range.
|
|
44
44
|
# (11231312..213123131).__evolve_range__
|
|
45
45
|
#
|
|
46
|
+
# @param [ Object ] serializer The optional serializer for the field.
|
|
47
|
+
#
|
|
46
48
|
# @return [ Hash ] The $gte/$lte range query.
|
|
47
|
-
|
|
49
|
+
#
|
|
50
|
+
# @api private
|
|
51
|
+
def __evolve_range__(serializer: nil)
|
|
48
52
|
__evolve_range_naive__.transform_values! do |value|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
+
if serializer
|
|
54
|
+
serializer.evolve(value)
|
|
55
|
+
else
|
|
56
|
+
case value
|
|
57
|
+
when Time, DateTime then value.__evolve_time__
|
|
58
|
+
when Date then value.__evolve_date__
|
|
59
|
+
else value
|
|
60
|
+
end
|
|
53
61
|
end
|
|
54
62
|
end
|
|
55
63
|
end
|
|
@@ -318,15 +318,9 @@ module Mongoid
|
|
|
318
318
|
#
|
|
319
319
|
# @return [ Optional ] The cloned optional.
|
|
320
320
|
def add_sort_option(options, field, direction)
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
options.store(:sort, sorting)
|
|
325
|
-
else
|
|
326
|
-
sorting = (options[:sort] || {}).dup
|
|
327
|
-
sorting[field] = direction
|
|
328
|
-
options.store(:sort, sorting)
|
|
329
|
-
end
|
|
321
|
+
sorting = (options[:sort] || {}).dup
|
|
322
|
+
sorting[field] = direction
|
|
323
|
+
options.store(:sort, sorting)
|
|
330
324
|
end
|
|
331
325
|
|
|
332
326
|
# Take the provided criterion and store it as an option in the query
|
|
@@ -84,7 +84,7 @@ module Mongoid
|
|
|
84
84
|
#
|
|
85
85
|
# @return [ Options ] The copied options.
|
|
86
86
|
def __deep_copy__
|
|
87
|
-
self.class.new(aliases, serializers) do |copy|
|
|
87
|
+
self.class.new(aliases, serializers, associations, aliased_associations) do |copy|
|
|
88
88
|
each_pair do |key, value|
|
|
89
89
|
copy.merge!(key => value.__deep_copy__)
|
|
90
90
|
end
|
|
@@ -227,19 +227,6 @@ module Mongoid
|
|
|
227
227
|
__merge__(criterion)
|
|
228
228
|
end
|
|
229
229
|
|
|
230
|
-
# Alias for +geo_spatial+.
|
|
231
|
-
#
|
|
232
|
-
# @deprecated
|
|
233
|
-
def geo_spacial(criterion)
|
|
234
|
-
# Duplicate method body so that we can raise this exception with
|
|
235
|
-
# geo_spacial as the indicated operator rather than geo_spatial.
|
|
236
|
-
if criterion.nil?
|
|
237
|
-
raise Errors::CriteriaArgumentRequired, :geo_spacial
|
|
238
|
-
end
|
|
239
|
-
|
|
240
|
-
__merge__(criterion)
|
|
241
|
-
end
|
|
242
|
-
|
|
243
230
|
key :intersects_line, :override, "$geoIntersects", "$geometry" do |value|
|
|
244
231
|
{ "type" => LINE_STRING, "coordinates" => value }
|
|
245
232
|
end
|
|
@@ -679,16 +666,7 @@ module Mongoid
|
|
|
679
666
|
end]
|
|
680
667
|
end
|
|
681
668
|
end
|
|
682
|
-
|
|
683
|
-
#where('$or' => exprs)
|
|
684
|
-
# But since that is broken do instead:
|
|
685
|
-
clone.tap do |query|
|
|
686
|
-
if query.selector['$or']
|
|
687
|
-
query.selector.store('$or', query.selector['$or'] + exprs)
|
|
688
|
-
else
|
|
689
|
-
query.selector.store('$or', exprs)
|
|
690
|
-
end
|
|
691
|
-
end
|
|
669
|
+
self.and('$or' => exprs)
|
|
692
670
|
end
|
|
693
671
|
end
|
|
694
672
|
|
|
@@ -874,7 +852,7 @@ module Mongoid
|
|
|
874
852
|
# @param [ Hash ] criterion The criterion.
|
|
875
853
|
def typed_override(criterion, operator)
|
|
876
854
|
if criterion
|
|
877
|
-
criterion.
|
|
855
|
+
criterion.transform_values! do |value|
|
|
878
856
|
yield(value)
|
|
879
857
|
end
|
|
880
858
|
end
|