mongoid 7.4.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 +0 -0
- data/README.md +3 -3
- data/lib/config/locales/en.yml +51 -28
- 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 +48 -8
- 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 +22 -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 -14
- 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/atomic/paths/embedded/many.rb +19 -0
- data/lib/mongoid/attributes/processing.rb +9 -2
- data/lib/mongoid/attributes.rb +30 -27
- 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/environment.rb +20 -4
- data/lib/mongoid/config.rb +25 -10
- 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 +176 -17
- data/lib/mongoid/contextual/mongo.rb +226 -206
- data/lib/mongoid/contextual/none.rb +66 -4
- 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 -13
- 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 -14
- 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/mergeable.rb +21 -0
- 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 +28 -34
- data/lib/mongoid/criteria/queryable/selector.rb +89 -4
- data/lib/mongoid/criteria/queryable/smash.rb +39 -6
- data/lib/mongoid/criteria/queryable.rb +11 -6
- data/lib/mongoid/criteria.rb +1 -26
- data/lib/mongoid/deprecable.rb +36 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +96 -32
- data/lib/mongoid/errors/document_not_found.rb +29 -8
- 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 +194 -28
- data/lib/mongoid/findable.rb +27 -7
- 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/persistable/upsertable.rb +1 -1
- data/lib/mongoid/persistence_context.rb +19 -2
- 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/selectable.rb +1 -2
- 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 +5 -1
- data/lib/mongoid/validatable/uniqueness.rb +2 -1
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/warnings.rb +28 -0
- data/lib/mongoid.rb +2 -0
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +11 -5
- data/spec/config/mongoid.yml +16 -0
- data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
- data/spec/integration/app_spec.rb +28 -26
- data/spec/integration/associations/belongs_to_spec.rb +18 -0
- data/spec/integration/associations/embedded_dirty_spec.rb +28 -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/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/lite_spec_helper.rb +1 -1
- 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 +219 -8
- data/spec/mongoid/association/embedded/embeds_many_models.rb +157 -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 +67 -4
- 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 +8 -8
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +82 -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/atomic_spec.rb +22 -0
- 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 +524 -27
- data/spec/mongoid/changeable_spec.rb +130 -13
- data/spec/mongoid/clients/factory_spec.rb +34 -42
- data/spec/mongoid/clients/options_spec.rb +1 -0
- data/spec/mongoid/clients/sessions_spec.rb +0 -38
- data/spec/mongoid/clients_spec.rb +32 -2
- data/spec/mongoid/config/environment_spec.rb +39 -1
- data/spec/mongoid/config_spec.rb +104 -13
- 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 +1337 -69
- data/spec/mongoid/contextual/mongo_spec.rb +1105 -172
- data/spec/mongoid/contextual/none_spec.rb +38 -0
- data/spec/mongoid/copyable_spec.rb +451 -1
- 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/date_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
- 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 +289 -124
- data/spec/mongoid/criteria/queryable/selector_spec.rb +14 -2
- data/spec/mongoid/criteria_spec.rb +474 -1198
- data/spec/mongoid/document_fields_spec.rb +173 -24
- data/spec/mongoid/document_spec.rb +32 -41
- data/spec/mongoid/errors/document_not_found_spec.rb +76 -0
- 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 +80 -15
- 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 +50 -1
- data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
- data/spec/mongoid/query_cache_spec.rb +0 -154
- data/spec/mongoid/reloadable_spec.rb +35 -2
- data/spec/mongoid/scopable_spec.rb +21 -1
- data/spec/mongoid/shardable_spec.rb +14 -0
- 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/rails/controller_extension/controller_runtime_spec.rb +2 -2
- data/spec/rails/mongoid_spec.rb +4 -16
- data/spec/shared/lib/mrss/constraints.rb +8 -16
- data/spec/shared/lib/mrss/docker_runner.rb +23 -3
- data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +32 -1
- data/spec/shared/share/Dockerfile.erb +34 -48
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/server.sh +32 -19
- data/spec/shared/shlib/set_env.sh +37 -0
- data/spec/support/constraints.rb +24 -0
- data/spec/support/macros.rb +39 -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/code.rb +2 -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/membership.rb +1 -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/spec/support/schema_maps/schema_map_aws.json +17 -0
- data/spec/support/schema_maps/schema_map_aws_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_azure.json +17 -0
- data/spec/support/schema_maps/schema_map_azure_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_gcp.json +17 -0
- data/spec/support/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_kmip.json +17 -0
- data/spec/support/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_local.json +18 -0
- data/spec/support/schema_maps/schema_map_local_key_alt_names.json +12 -0
- data/spec/support/spec_config.rb +4 -0
- data.tar.gz.sig +0 -0
- metadata +76 -13
- 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
@@ -142,107 +142,6 @@ describe Mongoid::Criteria::Queryable::Optional do
|
|
142
142
|
it_behaves_like "a cloning option"
|
143
143
|
end
|
144
144
|
end
|
145
|
-
|
146
|
-
context "when using the mongo-1.x driver syntax" do
|
147
|
-
|
148
|
-
let(:query) do
|
149
|
-
Mongoid::Query.new({}, {}, :mongo1x)
|
150
|
-
end
|
151
|
-
|
152
|
-
context "when provided symbols" do
|
153
|
-
|
154
|
-
let(:selection) do
|
155
|
-
query.send(method, :field_one, :field_two)
|
156
|
-
end
|
157
|
-
|
158
|
-
it "adds the sorting criteria" do
|
159
|
-
expect(selection.options).to eq(
|
160
|
-
{ sort: [[ :field_one, 1 ], [ :field_two, 1 ]]}
|
161
|
-
)
|
162
|
-
end
|
163
|
-
|
164
|
-
it_behaves_like "a cloning option"
|
165
|
-
end
|
166
|
-
|
167
|
-
context "when provided an array of symbols" do
|
168
|
-
|
169
|
-
let(:selection) do
|
170
|
-
query.send(method, [ :field_one, :field_two ])
|
171
|
-
end
|
172
|
-
|
173
|
-
it "adds the sorting criteria" do
|
174
|
-
expect(selection.options).to eq(
|
175
|
-
{ sort: [[ :field_one, 1 ], [ :field_two, 1 ]]}
|
176
|
-
)
|
177
|
-
end
|
178
|
-
|
179
|
-
it_behaves_like "a cloning option"
|
180
|
-
end
|
181
|
-
|
182
|
-
context "when provided strings" do
|
183
|
-
|
184
|
-
let(:selection) do
|
185
|
-
query.send(method, "field_one", "field_two")
|
186
|
-
end
|
187
|
-
|
188
|
-
it "adds the sorting criteria" do
|
189
|
-
expect(selection.options).to eq(
|
190
|
-
{ sort: [[ "field_one", 1 ], [ "field_two", 1 ]]}
|
191
|
-
)
|
192
|
-
end
|
193
|
-
|
194
|
-
it_behaves_like "a cloning option"
|
195
|
-
end
|
196
|
-
|
197
|
-
context "when provided an array of strings" do
|
198
|
-
|
199
|
-
let(:selection) do
|
200
|
-
query.send(method, [ "field_one", "field_two" ])
|
201
|
-
end
|
202
|
-
|
203
|
-
it "adds the sorting criteria" do
|
204
|
-
expect(selection.options).to eq(
|
205
|
-
{ sort: [[ "field_one", 1 ], [ "field_two", 1 ]]}
|
206
|
-
)
|
207
|
-
end
|
208
|
-
|
209
|
-
it_behaves_like "a cloning option"
|
210
|
-
end
|
211
|
-
|
212
|
-
context "when provided no options" do
|
213
|
-
|
214
|
-
let(:selection) do
|
215
|
-
query.send(method)
|
216
|
-
end
|
217
|
-
|
218
|
-
it "does not add any sorting criteria" do
|
219
|
-
expect(selection.options).to be_empty
|
220
|
-
end
|
221
|
-
|
222
|
-
it "returns the query" do
|
223
|
-
expect(selection).to eq(query)
|
224
|
-
end
|
225
|
-
|
226
|
-
it_behaves_like "a cloning option"
|
227
|
-
end
|
228
|
-
|
229
|
-
context "when provided nil" do
|
230
|
-
|
231
|
-
let(:selection) do
|
232
|
-
query.send(method, nil)
|
233
|
-
end
|
234
|
-
|
235
|
-
it "does not add any sorting criteria" do
|
236
|
-
expect(selection.options).to be_empty
|
237
|
-
end
|
238
|
-
|
239
|
-
it "returns the query" do
|
240
|
-
expect(selection).to eq(query)
|
241
|
-
end
|
242
|
-
|
243
|
-
it_behaves_like "a cloning option"
|
244
|
-
end
|
245
|
-
end
|
246
145
|
end
|
247
146
|
end
|
248
147
|
|
@@ -415,107 +314,6 @@ describe Mongoid::Criteria::Queryable::Optional do
|
|
415
314
|
it_behaves_like "a cloning option"
|
416
315
|
end
|
417
316
|
end
|
418
|
-
|
419
|
-
context "when using the mongo-1.x driver syntax" do
|
420
|
-
|
421
|
-
let(:query) do
|
422
|
-
Mongoid::Query.new({}, {}, :mongo1x)
|
423
|
-
end
|
424
|
-
|
425
|
-
context "when provided symbols" do
|
426
|
-
|
427
|
-
let(:selection) do
|
428
|
-
query.send(method, :field_one, :field_two)
|
429
|
-
end
|
430
|
-
|
431
|
-
it "adds the sorting criteria" do
|
432
|
-
expect(selection.options).to eq(
|
433
|
-
{ sort: [[ :field_one, -1 ], [ :field_two, -1 ]]}
|
434
|
-
)
|
435
|
-
end
|
436
|
-
|
437
|
-
it_behaves_like "a cloning option"
|
438
|
-
end
|
439
|
-
|
440
|
-
context "when provided an array of symbols" do
|
441
|
-
|
442
|
-
let(:selection) do
|
443
|
-
query.send(method, [ :field_one, :field_two ])
|
444
|
-
end
|
445
|
-
|
446
|
-
it "adds the sorting criteria" do
|
447
|
-
expect(selection.options).to eq(
|
448
|
-
{ sort: [[ :field_one, -1 ], [ :field_two, -1 ]]}
|
449
|
-
)
|
450
|
-
end
|
451
|
-
|
452
|
-
it_behaves_like "a cloning option"
|
453
|
-
end
|
454
|
-
|
455
|
-
context "when provided strings" do
|
456
|
-
|
457
|
-
let(:selection) do
|
458
|
-
query.send(method, "field_one", "field_two")
|
459
|
-
end
|
460
|
-
|
461
|
-
it "adds the sorting criteria" do
|
462
|
-
expect(selection.options).to eq(
|
463
|
-
{ sort: [[ "field_one", -1 ], [ "field_two", -1 ]]}
|
464
|
-
)
|
465
|
-
end
|
466
|
-
|
467
|
-
it_behaves_like "a cloning option"
|
468
|
-
end
|
469
|
-
|
470
|
-
context "when provided an array of strings" do
|
471
|
-
|
472
|
-
let(:selection) do
|
473
|
-
query.send(method, [ "field_one", "field_two" ])
|
474
|
-
end
|
475
|
-
|
476
|
-
it "adds the sorting criteria" do
|
477
|
-
expect(selection.options).to eq(
|
478
|
-
{ sort: [[ "field_one", -1 ], [ "field_two", -1 ]]}
|
479
|
-
)
|
480
|
-
end
|
481
|
-
|
482
|
-
it_behaves_like "a cloning option"
|
483
|
-
end
|
484
|
-
|
485
|
-
context "when provided no options" do
|
486
|
-
|
487
|
-
let(:selection) do
|
488
|
-
query.send(method)
|
489
|
-
end
|
490
|
-
|
491
|
-
it "does not add any sorting criteria" do
|
492
|
-
expect(selection.options).to be_empty
|
493
|
-
end
|
494
|
-
|
495
|
-
it "returns the query" do
|
496
|
-
expect(selection).to eq(query)
|
497
|
-
end
|
498
|
-
|
499
|
-
it_behaves_like "a cloning option"
|
500
|
-
end
|
501
|
-
|
502
|
-
context "when provided nil" do
|
503
|
-
|
504
|
-
let(:selection) do
|
505
|
-
query.send(method, nil)
|
506
|
-
end
|
507
|
-
|
508
|
-
it "does not add any sorting criteria" do
|
509
|
-
expect(selection.options).to be_empty
|
510
|
-
end
|
511
|
-
|
512
|
-
it "returns the query" do
|
513
|
-
expect(selection).to eq(query)
|
514
|
-
end
|
515
|
-
|
516
|
-
it_behaves_like "a cloning option"
|
517
|
-
end
|
518
|
-
end
|
519
317
|
end
|
520
318
|
end
|
521
319
|
|
@@ -1172,288 +970,6 @@ describe Mongoid::Criteria::Queryable::Optional do
|
|
1172
970
|
it_behaves_like "a cloning option"
|
1173
971
|
end
|
1174
972
|
end
|
1175
|
-
|
1176
|
-
context "when using the mongo-1.x driver syntax" do
|
1177
|
-
|
1178
|
-
let(:query) do
|
1179
|
-
Mongoid::Query.new({}, {}, :mongo1x)
|
1180
|
-
end
|
1181
|
-
|
1182
|
-
context "when provided a hash" do
|
1183
|
-
|
1184
|
-
context "when the hash has integer values" do
|
1185
|
-
|
1186
|
-
let(:selection) do
|
1187
|
-
query.send("#{method}", field_one: 1, field_two: -1)
|
1188
|
-
end
|
1189
|
-
|
1190
|
-
it "adds the sorting criteria" do
|
1191
|
-
expect(selection.options).to eq(
|
1192
|
-
{ sort: [[ :field_one, 1 ], [ :field_two, -1 ]]}
|
1193
|
-
)
|
1194
|
-
end
|
1195
|
-
|
1196
|
-
it_behaves_like "a cloning option"
|
1197
|
-
end
|
1198
|
-
|
1199
|
-
context "when the hash has symbol values" do
|
1200
|
-
|
1201
|
-
let(:selection) do
|
1202
|
-
query.send("#{method}", field_one: :asc, field_two: :desc)
|
1203
|
-
end
|
1204
|
-
|
1205
|
-
it "adds the sorting criteria" do
|
1206
|
-
expect(selection.options).to eq(
|
1207
|
-
{ sort: [[ :field_one, 1 ], [ :field_two, -1 ]]}
|
1208
|
-
)
|
1209
|
-
end
|
1210
|
-
|
1211
|
-
it_behaves_like "a cloning option"
|
1212
|
-
end
|
1213
|
-
|
1214
|
-
context "when the hash has string values" do
|
1215
|
-
|
1216
|
-
let(:selection) do
|
1217
|
-
query.send("#{method}", field_one: "asc", field_two: "desc")
|
1218
|
-
end
|
1219
|
-
|
1220
|
-
it "adds the sorting criteria" do
|
1221
|
-
expect(selection.options).to eq(
|
1222
|
-
{ sort: [[ :field_one, 1 ], [ :field_two, -1 ]]}
|
1223
|
-
)
|
1224
|
-
end
|
1225
|
-
|
1226
|
-
it_behaves_like "a cloning option"
|
1227
|
-
end
|
1228
|
-
end
|
1229
|
-
|
1230
|
-
context "when provided an array" do
|
1231
|
-
|
1232
|
-
context "when the array is multi-dimensional" do
|
1233
|
-
|
1234
|
-
context "when the arrays have integer values" do
|
1235
|
-
|
1236
|
-
let(:selection) do
|
1237
|
-
query.send("#{method}", [[ :field_one, 1 ],[ :field_two, -1 ]])
|
1238
|
-
end
|
1239
|
-
|
1240
|
-
it "adds the sorting criteria" do
|
1241
|
-
expect(selection.options).to eq(
|
1242
|
-
{ sort: [[ :field_one, 1 ], [ :field_two, -1 ]]}
|
1243
|
-
)
|
1244
|
-
end
|
1245
|
-
|
1246
|
-
it_behaves_like "a cloning option"
|
1247
|
-
end
|
1248
|
-
|
1249
|
-
context "when the arrays have symbol values" do
|
1250
|
-
|
1251
|
-
let(:selection) do
|
1252
|
-
query.send("#{method}", [[ :field_one, :asc ],[ :field_two, :desc ]])
|
1253
|
-
end
|
1254
|
-
|
1255
|
-
it "adds the sorting criteria" do
|
1256
|
-
expect(selection.options).to eq(
|
1257
|
-
{ sort: [[ :field_one, 1 ], [ :field_two, -1 ]]}
|
1258
|
-
)
|
1259
|
-
end
|
1260
|
-
|
1261
|
-
it_behaves_like "a cloning option"
|
1262
|
-
end
|
1263
|
-
|
1264
|
-
context "when the arrays have string values" do
|
1265
|
-
|
1266
|
-
let(:selection) do
|
1267
|
-
query.send("#{method}", [[ :field_one, "asc" ],[ :field_two, "desc" ]])
|
1268
|
-
end
|
1269
|
-
|
1270
|
-
it "adds the sorting criteria" do
|
1271
|
-
expect(selection.options).to eq(
|
1272
|
-
{ sort: [[ :field_one, 1 ], [ :field_two, -1 ]]}
|
1273
|
-
)
|
1274
|
-
end
|
1275
|
-
|
1276
|
-
it_behaves_like "a cloning option"
|
1277
|
-
end
|
1278
|
-
end
|
1279
|
-
|
1280
|
-
context "when the array is selectable keys" do
|
1281
|
-
|
1282
|
-
let(:selection) do
|
1283
|
-
query.send("#{method}", [ :field_one.asc, :field_two.desc ])
|
1284
|
-
end
|
1285
|
-
|
1286
|
-
it "adds the sorting criteria" do
|
1287
|
-
expect(selection.options).to eq(
|
1288
|
-
{ sort: [[ :field_one, 1 ], [ :field_two, -1 ]]}
|
1289
|
-
)
|
1290
|
-
end
|
1291
|
-
|
1292
|
-
it_behaves_like "a cloning option"
|
1293
|
-
end
|
1294
|
-
end
|
1295
|
-
|
1296
|
-
context "when provided values" do
|
1297
|
-
|
1298
|
-
context "when the values are arrays" do
|
1299
|
-
|
1300
|
-
context "when the values have integer directions" do
|
1301
|
-
|
1302
|
-
let(:selection) do
|
1303
|
-
query.send("#{method}", [ :field_one, 1 ],[ :field_two, -1 ])
|
1304
|
-
end
|
1305
|
-
|
1306
|
-
it "adds the sorting criteria" do
|
1307
|
-
expect(selection.options).to eq(
|
1308
|
-
{ sort: [[ :field_one, 1 ], [ :field_two, -1 ]]}
|
1309
|
-
)
|
1310
|
-
end
|
1311
|
-
|
1312
|
-
it_behaves_like "a cloning option"
|
1313
|
-
end
|
1314
|
-
|
1315
|
-
context "when the values have symbol directions" do
|
1316
|
-
|
1317
|
-
let(:selection) do
|
1318
|
-
query.send("#{method}", [ :field_one, :asc ],[ :field_two, :desc ])
|
1319
|
-
end
|
1320
|
-
|
1321
|
-
it "adds the sorting criteria" do
|
1322
|
-
expect(selection.options).to eq(
|
1323
|
-
{ sort: [[ :field_one, 1 ], [ :field_two, -1 ]]}
|
1324
|
-
)
|
1325
|
-
end
|
1326
|
-
|
1327
|
-
it_behaves_like "a cloning option"
|
1328
|
-
end
|
1329
|
-
|
1330
|
-
context "when the values have string directions" do
|
1331
|
-
|
1332
|
-
let(:selection) do
|
1333
|
-
query.send("#{method}", [ :field_one, "asc" ],[ :field_two, "desc" ])
|
1334
|
-
end
|
1335
|
-
|
1336
|
-
it "adds the sorting criteria" do
|
1337
|
-
expect(selection.options).to eq(
|
1338
|
-
{ sort: [[ :field_one, 1 ], [ :field_two, -1 ]]}
|
1339
|
-
)
|
1340
|
-
end
|
1341
|
-
|
1342
|
-
it_behaves_like "a cloning option"
|
1343
|
-
end
|
1344
|
-
end
|
1345
|
-
|
1346
|
-
context "when the values are selectable keys" do
|
1347
|
-
|
1348
|
-
let(:selection) do
|
1349
|
-
query.send("#{method}", :field_one.asc, :field_two.desc)
|
1350
|
-
end
|
1351
|
-
|
1352
|
-
it "adds the sorting criteria" do
|
1353
|
-
expect(selection.options).to eq(
|
1354
|
-
{ sort: [[ :field_one, 1 ], [ :field_two, -1 ]]}
|
1355
|
-
)
|
1356
|
-
end
|
1357
|
-
|
1358
|
-
it_behaves_like "a cloning option"
|
1359
|
-
end
|
1360
|
-
end
|
1361
|
-
|
1362
|
-
context "when provided a string" do
|
1363
|
-
|
1364
|
-
context "when the direction is lowercase" do
|
1365
|
-
|
1366
|
-
context "when abbreviated" do
|
1367
|
-
|
1368
|
-
let(:selection) do
|
1369
|
-
query.send("#{method}", "field_one asc, field_two desc")
|
1370
|
-
end
|
1371
|
-
|
1372
|
-
it "adds the sorting criteria" do
|
1373
|
-
expect(selection.options).to eq(
|
1374
|
-
{ sort: [[ :field_one, 1 ], [ :field_two, -1 ]]}
|
1375
|
-
)
|
1376
|
-
end
|
1377
|
-
|
1378
|
-
it_behaves_like "a cloning option"
|
1379
|
-
end
|
1380
|
-
|
1381
|
-
context "when spelled out" do
|
1382
|
-
|
1383
|
-
let(:selection) do
|
1384
|
-
query.send("#{method}", "field_one ascending, field_two descending")
|
1385
|
-
end
|
1386
|
-
|
1387
|
-
it "adds the sorting criteria" do
|
1388
|
-
expect(selection.options).to eq(
|
1389
|
-
{ sort: [[ :field_one, 1 ], [ :field_two, -1 ]]}
|
1390
|
-
)
|
1391
|
-
end
|
1392
|
-
|
1393
|
-
it_behaves_like "a cloning option"
|
1394
|
-
end
|
1395
|
-
end
|
1396
|
-
|
1397
|
-
context "when the direction is uppercase" do
|
1398
|
-
|
1399
|
-
context "when abbreviated" do
|
1400
|
-
|
1401
|
-
let(:selection) do
|
1402
|
-
query.send("#{method}", "field_one ASC, field_two DESC")
|
1403
|
-
end
|
1404
|
-
|
1405
|
-
it "adds the sorting criteria" do
|
1406
|
-
expect(selection.options).to eq(
|
1407
|
-
{ sort: [[ :field_one, 1 ], [ :field_two, -1 ]]}
|
1408
|
-
)
|
1409
|
-
end
|
1410
|
-
|
1411
|
-
it_behaves_like "a cloning option"
|
1412
|
-
end
|
1413
|
-
|
1414
|
-
context "when spelled out" do
|
1415
|
-
|
1416
|
-
let(:selection) do
|
1417
|
-
query.send("#{method}", "field_one ASCENDING, field_two DESCENDING")
|
1418
|
-
end
|
1419
|
-
|
1420
|
-
it "adds the sorting criteria" do
|
1421
|
-
expect(selection.options).to eq(
|
1422
|
-
{ sort: [[ :field_one, 1 ], [ :field_two, -1 ]]}
|
1423
|
-
)
|
1424
|
-
end
|
1425
|
-
|
1426
|
-
it_behaves_like "a cloning option"
|
1427
|
-
end
|
1428
|
-
end
|
1429
|
-
end
|
1430
|
-
|
1431
|
-
context "when provided no options" do
|
1432
|
-
|
1433
|
-
let(:selection) do
|
1434
|
-
query.order_by
|
1435
|
-
end
|
1436
|
-
|
1437
|
-
it "returns the query" do
|
1438
|
-
expect(selection).to eq(query)
|
1439
|
-
end
|
1440
|
-
|
1441
|
-
it_behaves_like "a cloning option"
|
1442
|
-
end
|
1443
|
-
|
1444
|
-
context "when provided nil" do
|
1445
|
-
|
1446
|
-
let(:selection) do
|
1447
|
-
query.send("#{method}", nil)
|
1448
|
-
end
|
1449
|
-
|
1450
|
-
it "returns the query" do
|
1451
|
-
expect(selection).to eq(query)
|
1452
|
-
end
|
1453
|
-
|
1454
|
-
it_behaves_like "a cloning option"
|
1455
|
-
end
|
1456
|
-
end
|
1457
973
|
end
|
1458
974
|
end
|
1459
975
|
|
@@ -1344,6 +1344,34 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
1344
1344
|
)
|
1345
1345
|
end
|
1346
1346
|
end
|
1347
|
+
|
1348
|
+
context 'when any_of has multiple arguments' do
|
1349
|
+
|
1350
|
+
let(:selection) do
|
1351
|
+
query.or(field: [ 1, 2 ]).where(foo: 'bar').any_of({a: 1}, {b: 2})
|
1352
|
+
end
|
1353
|
+
|
1354
|
+
it 'adds the new condition to top level' do
|
1355
|
+
expect(selection.selector).to eq(
|
1356
|
+
'$or' => [{'field' => [1, 2]}],
|
1357
|
+
'foo' => 'bar',
|
1358
|
+
'$and' => [{'$or' => [{'a' => 1}, {'b' => 2}]}],
|
1359
|
+
)
|
1360
|
+
end
|
1361
|
+
|
1362
|
+
context 'when query already has a top-level $and' do
|
1363
|
+
let(:selection) do
|
1364
|
+
query.or(field: [ 1, 2 ]).where('$and' => [foo: 'bar']).any_of({a: 1}, {b: 2})
|
1365
|
+
end
|
1366
|
+
|
1367
|
+
it 'adds the new condition to top level $and' do
|
1368
|
+
expect(selection.selector).to eq(
|
1369
|
+
'$or' => [{'field' => [1, 2]}],
|
1370
|
+
'$and' => [{'foo' => 'bar'}, {'$or' => [{'a' => 1}, {'b' => 2}]}],
|
1371
|
+
)
|
1372
|
+
end
|
1373
|
+
end
|
1374
|
+
end
|
1347
1375
|
end
|
1348
1376
|
|
1349
1377
|
context "when provided multiple criteria" do
|
@@ -2065,5 +2093,27 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
2065
2093
|
end
|
2066
2094
|
end
|
2067
2095
|
end
|
2096
|
+
|
2097
|
+
# This test confirms that MONGOID-5097 has been repaired.
|
2098
|
+
context "when using exists on a field of type Time" do
|
2099
|
+
let(:criteria) do
|
2100
|
+
Dictionary.any_of({:published.exists => true}, published: nil)
|
2101
|
+
end
|
2102
|
+
|
2103
|
+
it "doesn't raise an error" do
|
2104
|
+
expect do
|
2105
|
+
criteria
|
2106
|
+
end.to_not raise_error
|
2107
|
+
end
|
2108
|
+
|
2109
|
+
it "generates the correct selector" do
|
2110
|
+
expect(criteria.selector).to eq({
|
2111
|
+
"$or" => [ {
|
2112
|
+
"published" => { "$exists" => true }
|
2113
|
+
}, {
|
2114
|
+
"published" => nil
|
2115
|
+
} ] } )
|
2116
|
+
end
|
2117
|
+
end
|
2068
2118
|
end
|
2069
2119
|
end
|