mongoid 5.4.1 → 7.4.0
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/CHANGELOG.md +30 -30
- data/LICENSE +1 -0
- data/README.md +33 -19
- data/Rakefile +75 -5
- data/lib/config/locales/en.yml +180 -64
- data/lib/mongoid/association/accessors.rb +402 -0
- data/lib/mongoid/association/bindable.rb +179 -0
- data/lib/mongoid/association/builders.rb +84 -0
- data/lib/mongoid/association/constrainable.rb +43 -0
- data/lib/mongoid/association/depending.rb +128 -0
- data/lib/mongoid/association/eager_loadable.rb +35 -0
- data/lib/mongoid/association/embedded/batchable.rb +358 -0
- data/lib/mongoid/association/embedded/cyclic.rb +102 -0
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +52 -0
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +38 -0
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +111 -0
- data/lib/mongoid/association/embedded/embedded_in.rb +134 -0
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +41 -0
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +45 -0
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +549 -0
- data/lib/mongoid/association/embedded/embeds_many.rb +183 -0
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +43 -0
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +39 -0
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +145 -0
- data/lib/mongoid/association/embedded/embeds_one.rb +150 -0
- data/lib/mongoid/association/embedded.rb +6 -0
- data/lib/mongoid/association/macros.rb +207 -0
- data/lib/mongoid/association/many.rb +198 -0
- data/lib/mongoid/association/marshalable.rb +31 -0
- data/lib/mongoid/association/nested/many.rb +191 -0
- data/lib/mongoid/association/nested/nested_buildable.rb +66 -0
- data/lib/mongoid/association/nested/one.rb +116 -0
- data/lib/mongoid/association/nested.rb +15 -0
- data/lib/mongoid/association/one.rb +53 -0
- data/lib/mongoid/association/options.rb +122 -0
- data/lib/mongoid/association/proxy.rb +189 -0
- data/lib/mongoid/association/referenced/auto_save.rb +73 -0
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +82 -0
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +48 -0
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +73 -0
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +125 -0
- data/lib/mongoid/association/referenced/belongs_to.rb +226 -0
- data/lib/mongoid/association/referenced/counter_cache.rb +152 -0
- data/lib/mongoid/association/referenced/eager.rb +163 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +72 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +40 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +53 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +292 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +270 -0
- data/lib/mongoid/association/referenced/has_many/binding.rb +36 -0
- data/lib/mongoid/association/referenced/has_many/buildable.rb +38 -0
- data/lib/mongoid/association/referenced/has_many/eager.rb +44 -0
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +498 -0
- data/lib/mongoid/association/referenced/has_many/proxy.rb +545 -0
- data/lib/mongoid/association/referenced/has_many.rb +251 -0
- data/lib/mongoid/association/referenced/has_one/binding.rb +42 -0
- data/lib/mongoid/association/referenced/has_one/buildable.rb +74 -0
- data/lib/mongoid/association/referenced/has_one/eager.rb +36 -0
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +113 -0
- data/lib/mongoid/association/referenced/has_one/proxy.rb +111 -0
- data/lib/mongoid/association/referenced/has_one.rb +184 -0
- data/lib/mongoid/association/referenced/syncable.rb +155 -0
- data/lib/mongoid/association/referenced.rb +9 -0
- data/lib/mongoid/association/reflections.rb +69 -0
- data/lib/mongoid/association/relatable.rb +455 -0
- data/lib/mongoid/association.rb +135 -0
- data/lib/mongoid/atomic/modifiers.rb +29 -53
- data/lib/mongoid/atomic/paths/embedded/many.rb +5 -8
- data/lib/mongoid/atomic/paths/embedded/one.rb +5 -8
- data/lib/mongoid/atomic/paths/embedded.rb +3 -4
- data/lib/mongoid/atomic/paths/root.rb +4 -7
- data/lib/mongoid/atomic/paths.rb +2 -1
- data/lib/mongoid/atomic.rb +47 -52
- data/lib/mongoid/attributes/dynamic.rb +19 -33
- data/lib/mongoid/attributes/nested.rb +29 -21
- data/lib/mongoid/attributes/processing.rb +11 -26
- data/lib/mongoid/attributes/projector.rb +119 -0
- data/lib/mongoid/attributes/readonly.rb +24 -7
- data/lib/mongoid/attributes.rb +110 -106
- data/lib/mongoid/cacheable.rb +33 -0
- data/lib/mongoid/changeable.rb +39 -57
- data/lib/mongoid/clients/factory.rb +42 -17
- data/lib/mongoid/clients/options.rb +62 -258
- data/lib/mongoid/clients/sessions.rb +125 -0
- data/lib/mongoid/clients/storage_options.rb +9 -81
- data/lib/mongoid/clients/validators/storage.rb +2 -9
- data/lib/mongoid/clients/validators.rb +2 -1
- data/lib/mongoid/clients.rb +13 -73
- data/lib/mongoid/composable.rb +33 -10
- data/lib/mongoid/config/environment.rb +36 -14
- data/lib/mongoid/config/options.rb +20 -23
- data/lib/mongoid/config/validators/client.rb +2 -17
- data/lib/mongoid/config/validators/option.rb +2 -3
- data/lib/mongoid/config/validators.rb +2 -1
- data/lib/mongoid/config.rb +112 -39
- data/lib/mongoid/contextual/aggregable/memory.rb +17 -12
- data/lib/mongoid/contextual/aggregable/mongo.rb +26 -27
- data/lib/mongoid/contextual/aggregable/none.rb +65 -0
- data/lib/mongoid/contextual/aggregable.rb +17 -0
- data/lib/mongoid/contextual/atomic.rb +31 -33
- data/lib/mongoid/contextual/command.rb +2 -5
- data/lib/mongoid/contextual/geo_near.rb +7 -38
- data/lib/mongoid/contextual/map_reduce.rb +12 -36
- data/lib/mongoid/contextual/memory.rb +34 -64
- data/lib/mongoid/contextual/mongo.rb +228 -113
- data/lib/mongoid/contextual/none.rb +51 -23
- data/lib/mongoid/contextual/queryable.rb +2 -3
- data/lib/mongoid/contextual.rb +7 -9
- data/lib/mongoid/copyable.rb +32 -19
- data/lib/mongoid/criteria/findable.rb +12 -15
- data/lib/mongoid/criteria/includable.rb +21 -28
- data/lib/mongoid/criteria/inspectable.rb +2 -3
- data/lib/mongoid/criteria/marshalable.rb +4 -7
- data/lib/mongoid/criteria/modifiable.rb +38 -24
- data/lib/mongoid/criteria/options.rb +24 -0
- data/lib/mongoid/criteria/permission.rb +2 -1
- data/lib/mongoid/criteria/queryable/aggregable.rb +109 -0
- data/lib/mongoid/criteria/queryable/expandable.rb +68 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +162 -0
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +36 -0
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +33 -0
- data/lib/mongoid/criteria/queryable/extensions/date.rb +58 -0
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +47 -0
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +177 -0
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +75 -0
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +81 -0
- data/lib/mongoid/criteria/queryable/extensions/object.rb +181 -0
- data/lib/mongoid/criteria/queryable/extensions/range.rb +94 -0
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +72 -0
- data/lib/mongoid/criteria/queryable/extensions/set.rb +33 -0
- data/lib/mongoid/criteria/queryable/extensions/string.rb +122 -0
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +72 -0
- data/lib/mongoid/criteria/queryable/extensions/time.rb +55 -0
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +61 -0
- data/lib/mongoid/criteria/queryable/extensions.rb +25 -0
- data/lib/mongoid/criteria/queryable/key.rb +177 -0
- data/lib/mongoid/criteria/queryable/macroable.rb +26 -0
- data/lib/mongoid/criteria/queryable/mergeable.rb +413 -0
- data/lib/mongoid/criteria/queryable/optional.rb +386 -0
- data/lib/mongoid/criteria/queryable/options.rb +136 -0
- data/lib/mongoid/criteria/queryable/pipeline.rb +106 -0
- data/lib/mongoid/criteria/queryable/selectable.rb +943 -0
- data/lib/mongoid/criteria/queryable/selector.rb +202 -0
- data/lib/mongoid/criteria/queryable/smash.rb +95 -0
- data/lib/mongoid/criteria/queryable/storable.rb +237 -0
- data/lib/mongoid/criteria/queryable.rb +85 -0
- data/lib/mongoid/criteria/scopable.rb +27 -19
- data/lib/mongoid/criteria.rb +93 -76
- data/lib/mongoid/document.rb +62 -109
- data/lib/mongoid/equality.rb +29 -12
- data/lib/mongoid/errors/ambiguous_relationship.rb +5 -6
- data/lib/mongoid/errors/callback.rb +2 -3
- data/lib/mongoid/errors/criteria_argument_required.rb +18 -0
- data/lib/mongoid/errors/delete_restriction.rb +10 -13
- data/lib/mongoid/errors/document_not_destroyed.rb +4 -7
- data/lib/mongoid/errors/document_not_found.rb +2 -9
- data/lib/mongoid/errors/eager_load.rb +6 -5
- data/lib/mongoid/errors/empty_config_file.rb +25 -0
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +2 -3
- data/lib/mongoid/errors/invalid_collection.rb +2 -1
- data/lib/mongoid/errors/invalid_config_file.rb +25 -0
- data/lib/mongoid/errors/invalid_config_option.rb +2 -3
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +31 -0
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +24 -0
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +25 -0
- data/lib/mongoid/errors/invalid_expression_operator.rb +27 -0
- data/lib/mongoid/errors/invalid_field.rb +4 -7
- data/lib/mongoid/errors/invalid_field_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_field_option.rb +2 -3
- data/lib/mongoid/errors/invalid_find.rb +2 -3
- data/lib/mongoid/errors/invalid_includes.rb +2 -3
- data/lib/mongoid/errors/invalid_index.rb +2 -3
- data/lib/mongoid/errors/invalid_options.rb +4 -5
- data/lib/mongoid/errors/invalid_path.rb +2 -3
- data/lib/mongoid/errors/invalid_persistence_option.rb +26 -0
- data/lib/mongoid/errors/invalid_query.rb +40 -0
- data/lib/mongoid/errors/invalid_relation.rb +61 -0
- data/lib/mongoid/errors/invalid_relation_option.rb +28 -0
- data/lib/mongoid/errors/invalid_scope.rb +2 -3
- data/lib/mongoid/errors/invalid_session_use.rb +21 -0
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +6 -5
- data/lib/mongoid/errors/invalid_storage_options.rb +2 -3
- data/lib/mongoid/errors/invalid_storage_parent.rb +2 -3
- data/lib/mongoid/errors/invalid_time.rb +2 -3
- data/lib/mongoid/errors/invalid_value.rb +2 -1
- data/lib/mongoid/errors/inverse_not_found.rb +3 -4
- data/lib/mongoid/errors/mixed_client_configuration.rb +2 -3
- data/lib/mongoid/errors/mixed_relations.rb +2 -3
- data/lib/mongoid/errors/mongoid_error.rb +3 -10
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +3 -4
- data/lib/mongoid/errors/no_client_config.rb +4 -5
- data/lib/mongoid/errors/no_client_database.rb +2 -3
- data/lib/mongoid/errors/no_client_hosts.rb +2 -3
- data/lib/mongoid/errors/no_clients_config.rb +2 -3
- data/lib/mongoid/errors/no_default_client.rb +3 -4
- data/lib/mongoid/errors/no_environment.rb +2 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +2 -3
- data/lib/mongoid/errors/no_metadata.rb +2 -3
- data/lib/mongoid/errors/no_parent.rb +2 -3
- data/lib/mongoid/errors/readonly_attribute.rb +2 -3
- data/lib/mongoid/errors/readonly_document.rb +3 -6
- data/lib/mongoid/errors/scope_overwrite.rb +2 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +2 -0
- data/lib/mongoid/errors/unknown_attribute.rb +2 -3
- data/lib/mongoid/errors/unknown_model.rb +24 -0
- data/lib/mongoid/errors/unsaved_document.rb +3 -2
- data/lib/mongoid/errors/unsupported_javascript.rb +2 -3
- data/lib/mongoid/errors/validations.rb +2 -1
- data/lib/mongoid/errors.rb +18 -1
- data/lib/mongoid/evolvable.rb +4 -5
- data/lib/mongoid/extensions/array.rb +33 -42
- data/lib/mongoid/extensions/big_decimal.rb +17 -17
- data/lib/mongoid/extensions/boolean.rb +3 -5
- data/lib/mongoid/extensions/date.rb +17 -13
- data/lib/mongoid/extensions/date_time.rb +4 -12
- data/lib/mongoid/extensions/decimal128.rb +3 -6
- data/lib/mongoid/extensions/false_class.rb +4 -7
- data/lib/mongoid/extensions/float.rb +5 -10
- data/lib/mongoid/extensions/hash.rb +57 -38
- data/lib/mongoid/extensions/integer.rb +5 -12
- data/lib/mongoid/extensions/module.rb +2 -3
- data/lib/mongoid/extensions/nil_class.rb +2 -5
- data/lib/mongoid/extensions/object.rb +21 -48
- data/lib/mongoid/extensions/object_id.rb +2 -7
- data/lib/mongoid/extensions/range.rb +3 -11
- data/lib/mongoid/extensions/regexp.rb +4 -4
- data/lib/mongoid/extensions/set.rb +2 -7
- data/lib/mongoid/extensions/string.rb +27 -44
- data/lib/mongoid/extensions/symbol.rb +2 -7
- data/lib/mongoid/extensions/time.rb +16 -10
- data/lib/mongoid/extensions/time_with_zone.rb +25 -7
- data/lib/mongoid/extensions/true_class.rb +4 -7
- data/lib/mongoid/extensions.rb +18 -11
- data/lib/mongoid/factory.rb +60 -10
- data/lib/mongoid/fields/foreign_key.rb +8 -27
- data/lib/mongoid/fields/localized.rb +2 -11
- data/lib/mongoid/fields/standard.rb +8 -50
- data/lib/mongoid/fields/validators/macro.rb +50 -14
- data/lib/mongoid/fields/validators.rb +2 -1
- data/lib/mongoid/fields.rb +118 -67
- data/lib/mongoid/findable.rb +60 -24
- data/lib/mongoid/indexable/specification.rb +3 -16
- data/lib/mongoid/indexable/validators/options.rb +2 -7
- data/lib/mongoid/indexable.rb +26 -36
- data/lib/mongoid/inspectable.rb +4 -11
- data/lib/mongoid/interceptable.rb +27 -57
- data/lib/mongoid/loggable.rb +13 -16
- data/lib/mongoid/matchable.rb +5 -146
- data/lib/mongoid/matcher/all.rb +22 -0
- data/lib/mongoid/matcher/and.rb +21 -0
- data/lib/mongoid/matcher/bits.rb +41 -0
- data/lib/mongoid/matcher/bits_all_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_all_set.rb +20 -0
- data/lib/mongoid/matcher/bits_any_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_any_set.rb +20 -0
- data/lib/mongoid/matcher/elem_match.rb +36 -0
- data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
- data/lib/mongoid/matcher/eq.rb +11 -0
- data/lib/mongoid/matcher/eq_impl.rb +67 -0
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +26 -0
- data/lib/mongoid/matcher/exists.rb +15 -0
- data/lib/mongoid/matcher/expression.rb +35 -0
- data/lib/mongoid/matcher/expression_operator.rb +19 -0
- data/lib/mongoid/matcher/field_expression.rb +62 -0
- data/lib/mongoid/matcher/field_operator.rb +54 -0
- data/lib/mongoid/matcher/gt.rb +17 -0
- data/lib/mongoid/matcher/gte.rb +17 -0
- data/lib/mongoid/matcher/in.rb +25 -0
- data/lib/mongoid/matcher/lt.rb +17 -0
- data/lib/mongoid/matcher/lte.rb +17 -0
- data/lib/mongoid/matcher/mod.rb +17 -0
- data/lib/mongoid/matcher/ne.rb +16 -0
- data/lib/mongoid/matcher/nin.rb +11 -0
- data/lib/mongoid/matcher/nor.rb +25 -0
- data/lib/mongoid/matcher/not.rb +29 -0
- data/lib/mongoid/matcher/or.rb +21 -0
- data/lib/mongoid/matcher/regex.rb +41 -0
- data/lib/mongoid/matcher/size.rb +26 -0
- data/lib/mongoid/matcher/type.rb +99 -0
- data/lib/mongoid/matcher.rb +110 -0
- data/lib/mongoid/persistable/creatable.rb +9 -24
- data/lib/mongoid/persistable/deletable.rb +16 -29
- data/lib/mongoid/persistable/destroyable.rb +12 -15
- data/lib/mongoid/persistable/incrementable.rb +7 -8
- data/lib/mongoid/persistable/logical.rb +5 -7
- data/lib/mongoid/persistable/poppable.rb +3 -6
- data/lib/mongoid/persistable/pullable.rb +3 -8
- data/lib/mongoid/persistable/pushable.rb +14 -10
- data/lib/mongoid/persistable/renamable.rb +10 -8
- data/lib/mongoid/persistable/savable.rb +3 -8
- data/lib/mongoid/persistable/settable.rb +61 -19
- data/lib/mongoid/persistable/unsettable.rb +8 -8
- data/lib/mongoid/persistable/updatable.rb +38 -33
- data/lib/mongoid/persistable/upsertable.rb +5 -9
- data/lib/mongoid/persistable.rb +137 -45
- data/lib/mongoid/persistence_context.rb +222 -0
- data/lib/mongoid/positional.rb +3 -6
- data/lib/mongoid/query_cache.rb +141 -110
- data/lib/mongoid/railtie.rb +20 -17
- data/lib/mongoid/railties/controller_runtime.rb +88 -0
- data/lib/mongoid/railties/database.rake +9 -0
- data/lib/mongoid/reloadable.rb +14 -19
- data/lib/mongoid/scopable.rb +11 -38
- data/lib/mongoid/selectable.rb +8 -17
- data/lib/mongoid/serializable.rb +29 -34
- data/lib/mongoid/shardable.rb +80 -17
- data/lib/mongoid/stateful.rb +4 -10
- data/lib/mongoid/stringified_symbol.rb +52 -0
- data/lib/mongoid/tasks/database.rake +12 -5
- data/lib/mongoid/tasks/database.rb +88 -7
- data/lib/mongoid/threaded/lifecycle.rb +2 -21
- data/lib/mongoid/threaded.rb +70 -49
- data/lib/mongoid/timestamps/created/short.rb +2 -1
- data/lib/mongoid/timestamps/created.rb +3 -2
- data/lib/mongoid/timestamps/short.rb +2 -1
- data/lib/mongoid/timestamps/timeless.rb +6 -9
- data/lib/mongoid/timestamps/updated/short.rb +2 -1
- data/lib/mongoid/timestamps/updated.rb +3 -4
- data/lib/mongoid/timestamps.rb +3 -2
- data/lib/mongoid/touchable.rb +132 -0
- data/lib/mongoid/traversable.rb +181 -61
- data/lib/mongoid/validatable/associated.rb +5 -6
- data/lib/mongoid/validatable/format.rb +2 -1
- data/lib/mongoid/validatable/length.rb +2 -1
- data/lib/mongoid/validatable/localizable.rb +2 -3
- data/lib/mongoid/validatable/macros.rb +3 -8
- data/lib/mongoid/validatable/presence.rb +10 -15
- data/lib/mongoid/validatable/queryable.rb +2 -3
- data/lib/mongoid/validatable/uniqueness.rb +26 -40
- data/lib/mongoid/validatable.rb +16 -35
- data/lib/mongoid/version.rb +3 -2
- data/lib/mongoid.rb +35 -17
- data/lib/rails/generators/mongoid/config/config_generator.rb +10 -2
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +54 -21
- data/lib/rails/generators/mongoid/model/model_generator.rb +3 -2
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -1
- data/lib/rails/generators/mongoid_generator.rb +2 -1
- data/lib/rails/mongoid.rb +4 -5
- data/spec/README.md +33 -0
- data/spec/config/mongoid.yml +28 -2
- data/spec/integration/app_spec.rb +343 -0
- data/spec/integration/associations/belongs_to_spec.rb +15 -0
- data/spec/integration/associations/embedded_dirty_spec.rb +29 -0
- data/spec/integration/associations/embedded_spec.rb +268 -0
- data/spec/integration/associations/embeds_many_spec.rb +206 -0
- data/spec/integration/associations/embeds_one_spec.rb +23 -0
- data/spec/integration/associations/foreign_key_spec.rb +98 -0
- data/spec/integration/associations/foreign_key_spec_models.rb +64 -0
- data/spec/integration/associations/has_many_spec.rb +128 -0
- data/spec/integration/associations/has_one_spec.rb +176 -0
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +115 -0
- data/spec/integration/associations/reverse_population_spec.rb +34 -0
- data/spec/integration/associations/reverse_population_spec_models.rb +36 -0
- data/spec/integration/associations/scope_option_spec.rb +101 -0
- data/spec/integration/atomic/modifiers_spec.rb +116 -0
- data/spec/integration/bson_regexp_raw_spec.rb +19 -0
- data/spec/integration/callbacks_models.rb +61 -0
- data/spec/integration/callbacks_spec.rb +228 -0
- data/spec/integration/contextual/empty_spec.rb +141 -0
- data/spec/integration/criteria/alias_query_spec.rb +161 -0
- data/spec/integration/criteria/date_field_spec.rb +40 -0
- data/spec/integration/criteria/default_scope_spec.rb +72 -0
- data/spec/integration/criteria/logical_spec.rb +124 -0
- data/spec/integration/criteria/range_spec.rb +265 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +142 -0
- data/spec/integration/discriminator_key_spec.rb +353 -0
- data/spec/integration/discriminator_value_spec.rb +206 -0
- data/spec/integration/document_spec.rb +51 -0
- data/spec/integration/i18n_fallbacks_spec.rb +89 -0
- data/spec/integration/matcher_examples_spec.rb +758 -0
- data/spec/integration/matcher_operator_data/all.yml +140 -0
- data/spec/integration/matcher_operator_data/and.yml +93 -0
- data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
- data/spec/integration/matcher_operator_data/comment.yml +22 -0
- data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
- data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
- data/spec/integration/matcher_operator_data/eq.yml +191 -0
- data/spec/integration/matcher_operator_data/exists.yml +213 -0
- data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
- data/spec/integration/matcher_operator_data/gt.yml +132 -0
- data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
- data/spec/integration/matcher_operator_data/gte.yml +132 -0
- data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/implicit.yml +331 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
- data/spec/integration/matcher_operator_data/in.yml +210 -0
- data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
- data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
- data/spec/integration/matcher_operator_data/lt.yml +132 -0
- data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
- data/spec/integration/matcher_operator_data/lte.yml +132 -0
- data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/mod.yml +55 -0
- data/spec/integration/matcher_operator_data/multiple.yml +29 -0
- data/spec/integration/matcher_operator_data/ne.yml +150 -0
- data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
- data/spec/integration/matcher_operator_data/nin.yml +114 -0
- data/spec/integration/matcher_operator_data/nor.yml +126 -0
- data/spec/integration/matcher_operator_data/not.yml +196 -0
- data/spec/integration/matcher_operator_data/or.yml +137 -0
- data/spec/integration/matcher_operator_data/regex.yml +174 -0
- data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
- data/spec/integration/matcher_operator_data/size.yml +174 -0
- data/spec/integration/matcher_operator_data/type.yml +70 -0
- data/spec/integration/matcher_operator_data/type_array.yml +16 -0
- data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
- data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
- data/spec/integration/matcher_operator_data/type_code.yml +26 -0
- data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
- data/spec/integration/matcher_operator_data/type_date.yml +39 -0
- data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
- data/spec/integration/matcher_operator_data/type_decimal.yml +40 -0
- data/spec/integration/matcher_operator_data/type_double.yml +15 -0
- data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
- data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
- data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_null.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
- data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
- data/spec/integration/matcher_operator_data/type_string.yml +15 -0
- data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
- data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
- data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
- data/spec/integration/matcher_operator_spec.rb +124 -0
- data/spec/integration/matcher_spec.rb +283 -0
- data/spec/integration/server_query_spec.rb +141 -0
- data/spec/integration/shardable_spec.rb +148 -0
- data/spec/integration/stringified_symbol_field_spec.rb +203 -0
- data/spec/lite_spec_helper.rb +83 -0
- data/spec/mongoid/association/accessors_spec.rb +1067 -0
- data/spec/mongoid/association/auto_save_spec.rb +403 -0
- data/spec/mongoid/association/builders_spec.rb +255 -0
- data/spec/mongoid/association/constrainable_spec.rb +117 -0
- data/spec/mongoid/association/counter_cache_spec.rb +452 -0
- data/spec/mongoid/association/depending_spec.rb +959 -0
- data/spec/mongoid/association/eager_spec.rb +281 -0
- data/spec/mongoid/association/embedded/cyclic_spec.rb +180 -0
- data/spec/mongoid/association/embedded/dirty_spec.rb +67 -0
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +173 -0
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +36 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +559 -0
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +903 -0
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +56 -0
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +106 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +4652 -0
- data/spec/mongoid/association/embedded/embeds_many_models.rb +69 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +51 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +864 -0
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +79 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +81 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +1025 -0
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +8 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +54 -0
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +28 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +956 -0
- data/spec/mongoid/association/macros_spec.rb +1116 -0
- data/spec/mongoid/association/nested/many_spec.rb +232 -0
- data/spec/mongoid/association/nested/one_spec.rb +253 -0
- data/spec/mongoid/association/options_spec.rb +1323 -0
- data/spec/mongoid/association/polymorphic_spec.rb +162 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +243 -0
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +238 -0
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +412 -0
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +1373 -0
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +57 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +2046 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +180 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +148 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +196 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +76 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +3773 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +67 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +39 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +1071 -0
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +155 -0
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +142 -0
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +290 -0
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2232 -0
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +23 -0
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +4092 -0
- data/spec/mongoid/association/referenced/has_many_models.rb +95 -0
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +1248 -0
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +133 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +159 -0
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +193 -0
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +1142 -0
- data/spec/mongoid/association/referenced/has_one_models.rb +97 -0
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +1383 -0
- data/spec/mongoid/association/reflections_spec.rb +92 -0
- data/spec/mongoid/association/syncable_spec.rb +499 -0
- data/spec/mongoid/association_spec.rb +191 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +52 -3
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +2 -0
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +2 -0
- data/spec/mongoid/atomic/paths/root_spec.rb +2 -0
- data/spec/mongoid/atomic/paths_spec.rb +107 -12
- data/spec/mongoid/atomic_spec.rb +36 -11
- data/spec/mongoid/attributes/dynamic_spec.rb +152 -0
- data/spec/mongoid/attributes/nested_spec.rb +115 -91
- data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
- data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
- data/spec/mongoid/attributes/projector_spec.rb +44 -0
- data/spec/mongoid/attributes/readonly_spec.rb +111 -111
- data/spec/mongoid/attributes_spec.rb +501 -33
- data/spec/mongoid/cacheable_spec.rb +114 -0
- data/spec/mongoid/changeable_spec.rb +118 -35
- data/spec/mongoid/clients/factory_spec.rb +176 -34
- data/spec/mongoid/clients/options_spec.rb +431 -98
- data/spec/mongoid/clients/sessions_spec.rb +335 -0
- data/spec/mongoid/clients/transactions_spec.rb +415 -0
- data/spec/mongoid/clients_spec.rb +318 -114
- data/spec/mongoid/composable_spec.rb +9 -0
- data/spec/mongoid/config/environment_spec.rb +88 -8
- data/spec/mongoid/config/options_spec.rb +22 -3
- data/spec/mongoid/config_spec.rb +371 -13
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +53 -11
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +122 -20
- data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
- data/spec/mongoid/contextual/atomic_spec.rb +245 -84
- data/spec/mongoid/contextual/geo_near_spec.rb +31 -19
- data/spec/mongoid/contextual/map_reduce_spec.rb +24 -7
- data/spec/mongoid/contextual/memory_spec.rb +44 -23
- data/spec/mongoid/contextual/mongo_spec.rb +780 -155
- data/spec/mongoid/contextual/none_spec.rb +14 -71
- data/spec/mongoid/copyable_spec.rb +297 -23
- data/spec/mongoid/copyable_spec_models.rb +47 -0
- data/spec/mongoid/criteria/findable_spec.rb +77 -20
- data/spec/mongoid/criteria/inspectable_spec.rb +2 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +2 -0
- data/spec/mongoid/criteria/modifiable_spec.rb +506 -50
- data/spec/mongoid/criteria/options_spec.rb +31 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +372 -0
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +61 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +525 -0
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +61 -0
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +60 -0
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +215 -0
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +332 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +423 -0
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +60 -0
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +67 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +329 -0
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +67 -0
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +79 -0
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +53 -0
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +110 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +370 -0
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +91 -0
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +92 -0
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +41 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +347 -0
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +169 -0
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +395 -0
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +376 -0
- data/spec/mongoid/criteria/queryable/key_spec.rb +96 -0
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +182 -0
- data/spec/mongoid/criteria/queryable/optional_spec.rb +1801 -0
- data/spec/mongoid/criteria/queryable/options_spec.rb +362 -0
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +214 -0
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +139 -0
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +2069 -0
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +2297 -0
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +883 -0
- data/spec/mongoid/criteria/queryable/smash_spec.rb +32 -0
- data/spec/mongoid/criteria/queryable/storable_spec.rb +226 -0
- data/spec/mongoid/criteria/scopable_spec.rb +210 -0
- data/spec/mongoid/criteria_projection_spec.rb +410 -0
- data/spec/mongoid/criteria_spec.rb +876 -402
- data/spec/mongoid/document_fields_spec.rb +113 -0
- data/spec/mongoid/document_persistence_context_spec.rb +32 -0
- data/spec/mongoid/document_query_spec.rb +89 -0
- data/spec/mongoid/document_spec.rb +214 -104
- data/spec/mongoid/equality_spec.rb +144 -41
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +5 -3
- data/spec/mongoid/errors/callback_spec.rb +2 -0
- data/spec/mongoid/errors/delete_restriction_spec.rb +4 -2
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +2 -0
- data/spec/mongoid/errors/document_not_found_spec.rb +2 -0
- data/spec/mongoid/errors/eager_load_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_collection_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_config_file_spec.rb +31 -0
- data/spec/mongoid/errors/invalid_config_option_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_field_option_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_field_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_includes_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_index_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_options_spec.rb +4 -2
- data/spec/mongoid/errors/invalid_path_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_relation_spec.rb +39 -0
- data/spec/mongoid/errors/invalid_scope_spec.rb +3 -1
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_time_spec.rb +2 -0
- data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +2 -0
- data/spec/mongoid/errors/mixed_relations_spec.rb +2 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +28 -11
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_config_spec.rb +4 -2
- data/spec/mongoid/errors/no_client_database_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_hosts_spec.rb +5 -3
- data/spec/mongoid/errors/no_clients_config_spec.rb +2 -0
- data/spec/mongoid/errors/no_environment_spec.rb +2 -0
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +2 -0
- data/spec/mongoid/errors/no_metadata_spec.rb +4 -2
- data/spec/mongoid/errors/no_parent_spec.rb +3 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +2 -0
- data/spec/mongoid/errors/readonly_document_spec.rb +2 -0
- data/spec/mongoid/errors/scope_overwrite_spec.rb +2 -0
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +2 -0
- data/spec/mongoid/errors/unknown_attribute_spec.rb +4 -2
- data/spec/mongoid/errors/unsaved_document_spec.rb +3 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +2 -0
- data/spec/mongoid/errors/validations_spec.rb +2 -0
- data/spec/mongoid/extensions/array_spec.rb +36 -58
- data/spec/mongoid/extensions/big_decimal_spec.rb +323 -19
- data/spec/mongoid/extensions/binary_spec.rb +2 -0
- data/spec/mongoid/extensions/boolean_spec.rb +16 -0
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +335 -0
- data/spec/mongoid/extensions/date_spec.rb +8 -164
- data/spec/mongoid/extensions/date_time_spec.rb +19 -66
- data/spec/mongoid/extensions/decimal128_spec.rb +3 -1
- data/spec/mongoid/extensions/false_class_spec.rb +3 -1
- data/spec/mongoid/extensions/float_spec.rb +25 -4
- data/spec/mongoid/extensions/hash_spec.rb +138 -1
- data/spec/mongoid/extensions/integer_spec.rb +22 -3
- data/spec/mongoid/extensions/module_spec.rb +2 -0
- data/spec/mongoid/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/extensions/object_id_spec.rb +2 -0
- data/spec/mongoid/extensions/object_spec.rb +27 -31
- data/spec/mongoid/extensions/range_spec.rb +9 -0
- data/spec/mongoid/extensions/regexp_spec.rb +25 -0
- data/spec/mongoid/extensions/set_spec.rb +2 -0
- data/spec/mongoid/extensions/string_spec.rb +113 -31
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
- data/spec/mongoid/extensions/symbol_spec.rb +2 -0
- data/spec/mongoid/extensions/time_spec.rb +31 -6
- data/spec/mongoid/extensions/time_with_zone_spec.rb +35 -6
- data/spec/mongoid/extensions/true_class_spec.rb +3 -1
- data/spec/mongoid/extensions_spec.rb +16 -2
- data/spec/mongoid/factory_spec.rb +304 -15
- data/spec/mongoid/fields/foreign_key_spec.rb +26 -32
- data/spec/mongoid/fields/localized_spec.rb +6 -4
- data/spec/mongoid/fields/standard_spec.rb +2 -0
- data/spec/mongoid/fields_spec.rb +420 -38
- data/spec/mongoid/findable_spec.rb +98 -19
- data/spec/mongoid/indexable/specification_spec.rb +2 -0
- data/spec/mongoid/indexable_spec.rb +69 -17
- data/spec/mongoid/inspectable_spec.rb +39 -2
- data/spec/mongoid/interceptable_spec.rb +273 -114
- data/spec/mongoid/interceptable_spec_models.rb +76 -0
- data/spec/mongoid/loggable_spec.rb +2 -0
- data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
- data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +239 -0
- data/spec/mongoid/matcher/extract_attribute_spec.rb +40 -0
- data/spec/mongoid/persistable/creatable_spec.rb +119 -29
- data/spec/mongoid/persistable/deletable_spec.rb +307 -11
- data/spec/mongoid/persistable/destroyable_spec.rb +225 -12
- data/spec/mongoid/persistable/incrementable_spec.rb +29 -13
- data/spec/mongoid/persistable/logical_spec.rb +19 -3
- data/spec/mongoid/persistable/poppable_spec.rb +19 -3
- data/spec/mongoid/persistable/pullable_spec.rb +36 -6
- data/spec/mongoid/persistable/pushable_spec.rb +91 -7
- data/spec/mongoid/persistable/renamable_spec.rb +18 -2
- data/spec/mongoid/persistable/savable_spec.rb +218 -50
- data/spec/mongoid/persistable/settable_spec.rb +213 -32
- data/spec/mongoid/persistable/unsettable_spec.rb +19 -3
- data/spec/mongoid/persistable/updatable_spec.rb +222 -21
- data/spec/mongoid/persistable/upsertable_spec.rb +4 -2
- data/spec/mongoid/persistable_spec.rb +116 -25
- data/spec/mongoid/persistence_context_spec.rb +696 -0
- data/spec/mongoid/positional_spec.rb +3 -1
- data/spec/mongoid/query_cache_middleware_spec.rb +68 -0
- data/spec/mongoid/query_cache_spec.rb +647 -45
- data/spec/mongoid/relations/proxy_spec.rb +126 -98
- data/spec/mongoid/reloadable_spec.rb +346 -17
- data/spec/mongoid/scopable_spec.rb +82 -22
- data/spec/mongoid/selectable_spec.rb +8 -6
- data/spec/mongoid/serializable_spec.rb +160 -79
- data/spec/mongoid/shardable_models.rb +61 -0
- data/spec/mongoid/shardable_spec.rb +145 -26
- data/spec/mongoid/stateful_spec.rb +3 -1
- data/spec/mongoid/tasks/database_rake_spec.rb +15 -13
- data/spec/mongoid/tasks/database_spec.rb +3 -1
- data/spec/mongoid/threaded_spec.rb +72 -2
- data/spec/mongoid/timestamps/created/short_spec.rb +3 -1
- data/spec/mongoid/timestamps/created_spec.rb +3 -1
- data/spec/mongoid/timestamps/timeless_spec.rb +4 -2
- data/spec/mongoid/timestamps/updated/short_spec.rb +5 -3
- data/spec/mongoid/timestamps/updated_spec.rb +5 -3
- data/spec/mongoid/timestamps_spec.rb +8 -6
- data/spec/mongoid/touchable_spec.rb +588 -0
- data/spec/mongoid/touchable_spec_models.rb +53 -0
- data/spec/mongoid/traversable_spec.rb +1167 -1
- data/spec/mongoid/validatable/associated_spec.rb +3 -1
- data/spec/mongoid/validatable/format_spec.rb +2 -0
- data/spec/mongoid/validatable/length_spec.rb +2 -0
- data/spec/mongoid/validatable/numericality_spec.rb +2 -0
- data/spec/mongoid/validatable/presence_spec.rb +33 -26
- data/spec/mongoid/validatable/uniqueness_spec.rb +119 -81
- data/spec/mongoid/validatable_spec.rb +21 -3
- data/spec/mongoid_spec.rb +2 -0
- data/spec/rails/controller_extension/controller_runtime_spec.rb +112 -0
- data/spec/rails/mongoid_spec.rb +4 -2
- data/spec/shared/LICENSE +20 -0
- data/spec/shared/bin/get-mongodb-download-url +17 -0
- data/spec/shared/bin/s3-copy +45 -0
- data/spec/shared/bin/s3-upload +69 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/cluster_config.rb +231 -0
- data/spec/shared/lib/mrss/constraints.rb +386 -0
- data/spec/shared/lib/mrss/docker_runner.rb +271 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +200 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +199 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +120 -0
- data/spec/shared/lib/mrss/session_registry.rb +69 -0
- data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
- data/spec/shared/lib/mrss/utils.rb +15 -0
- data/spec/shared/share/Dockerfile.erb +339 -0
- data/spec/shared/share/haproxy-1.conf +16 -0
- data/spec/shared/share/haproxy-2.conf +17 -0
- data/spec/shared/shlib/distro.sh +74 -0
- data/spec/shared/shlib/server.sh +379 -0
- data/spec/shared/shlib/set_env.sh +132 -0
- data/spec/spec_helper.rb +133 -53
- data/spec/support/authorization.rb +2 -0
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +53 -0
- data/spec/support/expectations.rb +21 -3
- data/spec/support/helpers.rb +11 -0
- data/spec/support/macros.rb +42 -0
- data/spec/support/models/account.rb +38 -0
- data/spec/support/models/acolyte.rb +19 -0
- data/spec/support/models/actor.rb +20 -0
- data/spec/support/models/actress.rb +4 -0
- data/spec/support/models/address.rb +85 -0
- data/spec/support/models/address_component.rb +7 -0
- data/spec/support/models/address_number.rb +8 -0
- data/spec/support/models/agency.rb +7 -0
- data/spec/support/models/agent.rb +18 -0
- data/spec/support/models/album.rb +20 -0
- data/spec/support/models/alert.rb +9 -0
- data/spec/support/models/animal.rb +28 -0
- data/spec/support/models/answer.rb +8 -0
- data/spec/support/models/appointment.rb +9 -0
- data/spec/support/models/armrest.rb +9 -0
- data/spec/support/models/array_field.rb +7 -0
- data/spec/support/models/article.rb +14 -0
- data/spec/support/models/artist.rb +91 -0
- data/spec/support/models/artwork.rb +6 -0
- data/spec/support/models/audible_sound.rb +3 -0
- data/spec/support/models/audio.rb +7 -0
- data/spec/support/models/augmentation.rb +13 -0
- data/spec/support/models/author.rb +8 -0
- data/spec/support/models/baby.rb +6 -0
- data/spec/support/models/band.rb +37 -0
- data/spec/support/models/bar.rb +12 -0
- data/spec/support/models/basic.rb +8 -0
- data/spec/support/models/bed.rb +3 -0
- data/spec/support/models/big_palette.rb +4 -0
- data/spec/support/models/birthday.rb +15 -0
- data/spec/support/models/bolt.rb +7 -0
- data/spec/support/models/bomb.rb +6 -0
- data/spec/support/models/book.rb +18 -0
- data/spec/support/models/breed.rb +6 -0
- data/spec/support/models/browser.rb +8 -0
- data/spec/support/models/building.rb +8 -0
- data/spec/support/models/building_address.rb +9 -0
- data/spec/support/models/bus.rb +9 -0
- data/spec/support/models/business.rb +7 -0
- data/spec/support/models/callback_test.rb +11 -0
- data/spec/support/models/canvas.rb +27 -0
- data/spec/support/models/car.rb +3 -0
- data/spec/support/models/cat.rb +10 -0
- data/spec/support/models/category.rb +10 -0
- data/spec/support/models/child.rb +6 -0
- data/spec/support/models/child_doc.rb +24 -0
- data/spec/support/models/church.rb +8 -0
- data/spec/support/models/circle.rb +5 -0
- data/spec/support/models/circuit.rb +6 -0
- data/spec/support/models/circus.rb +9 -0
- data/spec/support/models/code.rb +13 -0
- data/spec/support/models/coding/pull_request.rb +11 -0
- data/spec/support/models/coding.rb +3 -0
- data/spec/support/models/comment.rb +18 -0
- data/spec/support/models/company.rb +7 -0
- data/spec/support/models/consumption_period.rb +9 -0
- data/spec/support/models/contextable_item.rb +7 -0
- data/spec/support/models/contractor.rb +7 -0
- data/spec/support/models/cookie.rb +8 -0
- data/spec/support/models/country_code.rb +12 -0
- data/spec/support/models/courier_job.rb +6 -0
- data/spec/support/models/crate.rb +12 -0
- data/spec/support/models/customer.rb +10 -0
- data/spec/support/models/customer_address.rb +11 -0
- data/spec/support/models/deed.rb +7 -0
- data/spec/support/models/definition.rb +11 -0
- data/spec/support/models/delegating_patient.rb +15 -0
- data/spec/support/models/description.rb +13 -0
- data/spec/support/models/dictionary.rb +18 -0
- data/spec/support/models/division.rb +12 -0
- data/spec/support/models/doctor.rb +14 -0
- data/spec/support/models/dog.rb +9 -0
- data/spec/support/models/dokument.rb +8 -0
- data/spec/support/models/draft.rb +11 -0
- data/spec/support/models/dragon.rb +6 -0
- data/spec/support/models/driver.rb +9 -0
- data/spec/support/models/drug.rb +8 -0
- data/spec/support/models/dungeon.rb +6 -0
- data/spec/support/models/edit.rb +7 -0
- data/spec/support/models/email.rb +8 -0
- data/spec/support/models/employer.rb +7 -0
- data/spec/support/models/entry.rb +8 -0
- data/spec/support/models/eraser.rb +3 -0
- data/spec/support/models/even.rb +9 -0
- data/spec/support/models/event.rb +24 -0
- data/spec/support/models/exhibition.rb +6 -0
- data/spec/support/models/exhibitor.rb +8 -0
- data/spec/support/models/explosion.rb +6 -0
- data/spec/support/models/eye.rb +11 -0
- data/spec/support/models/eye_bowl.rb +11 -0
- data/spec/support/models/face.rb +10 -0
- data/spec/support/models/favorite.rb +8 -0
- data/spec/support/models/filesystem.rb +7 -0
- data/spec/support/models/fire_hydrant.rb +8 -0
- data/spec/support/models/firefox.rb +6 -0
- data/spec/support/models/fish.rb +9 -0
- data/spec/support/models/folder.rb +9 -0
- data/spec/support/models/folder_item.rb +11 -0
- data/spec/support/models/fruits.rb +36 -0
- data/spec/support/models/game.rb +21 -0
- data/spec/support/models/ghost.rb +9 -0
- data/spec/support/models/guitar.rb +4 -0
- data/spec/support/models/hole.rb +12 -0
- data/spec/support/models/home.rb +6 -0
- data/spec/support/models/house.rb +8 -0
- data/spec/support/models/html_writer.rb +5 -0
- data/spec/support/models/id_key.rb +8 -0
- data/spec/support/models/idnodef.rb +7 -0
- data/spec/support/models/image.rb +24 -0
- data/spec/support/models/implant.rb +18 -0
- data/spec/support/models/instrument.rb +8 -0
- data/spec/support/models/item.rb +10 -0
- data/spec/support/models/jar.rb +9 -0
- data/spec/support/models/kaleidoscope.rb +8 -0
- data/spec/support/models/kangaroo.rb +6 -0
- data/spec/support/models/label.rb +50 -0
- data/spec/support/models/language.rb +7 -0
- data/spec/support/models/lat_lng.rb +17 -0
- data/spec/support/models/league.rb +13 -0
- data/spec/support/models/learner.rb +4 -0
- data/spec/support/models/line_item.rb +8 -0
- data/spec/support/models/location.rb +10 -0
- data/spec/support/models/login.rb +10 -0
- data/spec/support/models/manufacturer.rb +9 -0
- data/spec/support/models/meat.rb +6 -0
- data/spec/support/models/membership.rb +6 -0
- data/spec/support/models/message.rb +13 -0
- data/spec/support/models/minim.rb +6 -0
- data/spec/support/models/mixed_drink.rb +6 -0
- data/spec/support/models/mop.rb +24 -0
- data/spec/support/models/movie.rb +15 -0
- data/spec/support/models/my_hash.rb +4 -0
- data/spec/support/models/name.rb +26 -0
- data/spec/support/models/name_only.rb +8 -0
- data/spec/support/models/node.rb +7 -0
- data/spec/support/models/note.rb +19 -0
- data/spec/support/models/nut.rb +7 -0
- data/spec/support/models/odd.rb +9 -0
- data/spec/support/models/order.rb +12 -0
- data/spec/support/models/ordered_post.rb +13 -0
- data/spec/support/models/ordered_preference.rb +8 -0
- data/spec/support/models/oscar.rb +16 -0
- data/spec/support/models/other_owner_object.rb +4 -0
- data/spec/support/models/override.rb +18 -0
- data/spec/support/models/ownable.rb +8 -0
- data/spec/support/models/owner.rb +10 -0
- data/spec/support/models/pack.rb +5 -0
- data/spec/support/models/page.rb +18 -0
- data/spec/support/models/page_question.rb +6 -0
- data/spec/support/models/palette.rb +9 -0
- data/spec/support/models/parent.rb +7 -0
- data/spec/support/models/parent_doc.rb +8 -0
- data/spec/support/models/passport.rb +13 -0
- data/spec/support/models/patient.rb +11 -0
- data/spec/support/models/pdf_writer.rb +5 -0
- data/spec/support/models/pencil.rb +3 -0
- data/spec/support/models/person.rb +230 -0
- data/spec/support/models/pet.rb +25 -0
- data/spec/support/models/pet_owner.rb +8 -0
- data/spec/support/models/phone.rb +13 -0
- data/spec/support/models/piano.rb +4 -0
- data/spec/support/models/pizza.rb +9 -0
- data/spec/support/models/player.rb +37 -0
- data/spec/support/models/post.rb +52 -0
- data/spec/support/models/post_genre.rb +8 -0
- data/spec/support/models/powerup.rb +13 -0
- data/spec/support/models/preference.rb +11 -0
- data/spec/support/models/princess.rb +12 -0
- data/spec/support/models/product.rb +19 -0
- data/spec/support/models/profile.rb +17 -0
- data/spec/support/models/pronunciation.rb +7 -0
- data/spec/support/models/pub.rb +8 -0
- data/spec/support/models/publication/encyclopedia.rb +11 -0
- data/spec/support/models/publication/review.rb +13 -0
- data/spec/support/models/publication.rb +4 -0
- data/spec/support/models/purchase.rb +6 -0
- data/spec/support/models/purchased_item.rb +10 -0
- data/spec/support/models/question.rb +10 -0
- data/spec/support/models/quiz.rb +9 -0
- data/spec/support/models/rating.rb +10 -0
- data/spec/support/models/record.rb +54 -0
- data/spec/support/models/registry.rb +6 -0
- data/spec/support/models/role.rb +9 -0
- data/spec/support/models/root_category.rb +6 -0
- data/spec/support/models/sandwich.rb +11 -0
- data/spec/support/models/scheduler.rb +9 -0
- data/spec/support/models/scribe.rb +7 -0
- data/spec/support/models/sealer.rb +7 -0
- data/spec/support/models/seat.rb +24 -0
- data/spec/support/models/seo.rb +9 -0
- data/spec/support/models/series.rb +7 -0
- data/spec/support/models/server.rb +15 -0
- data/spec/support/models/service.rb +24 -0
- data/spec/support/models/shape.rb +14 -0
- data/spec/support/models/shelf.rb +7 -0
- data/spec/support/models/shipment_address.rb +5 -0
- data/spec/support/models/shipping_container.rb +7 -0
- data/spec/support/models/shipping_pack.rb +5 -0
- data/spec/support/models/shirt.rb +11 -0
- data/spec/support/models/shop.rb +8 -0
- data/spec/support/models/short_agent.rb +6 -0
- data/spec/support/models/short_quiz.rb +7 -0
- data/spec/support/models/simple.rb +7 -0
- data/spec/support/models/slave.rb +8 -0
- data/spec/support/models/song.rb +10 -0
- data/spec/support/models/sound.rb +7 -0
- data/spec/support/models/spacer.rb +7 -0
- data/spec/support/models/square.rb +6 -0
- data/spec/support/models/staff.rb +9 -0
- data/spec/support/models/store_as_dup_test1.rb +7 -0
- data/spec/support/models/store_as_dup_test2.rb +7 -0
- data/spec/support/models/store_as_dup_test3.rb +7 -0
- data/spec/support/models/store_as_dup_test4.rb +7 -0
- data/spec/support/models/strategy.rb +5 -0
- data/spec/support/models/sub_item.rb +5 -0
- data/spec/support/models/subscription.rb +7 -0
- data/spec/support/models/survey.rb +7 -0
- data/spec/support/models/symptom.rb +8 -0
- data/spec/support/models/system_role.rb +7 -0
- data/spec/support/models/tag.rb +10 -0
- data/spec/support/models/target.rb +7 -0
- data/spec/support/models/template.rb +7 -0
- data/spec/support/models/thing.rb +11 -0
- data/spec/support/models/threadlocker.rb +7 -0
- data/spec/support/models/title.rb +5 -0
- data/spec/support/models/tool.rb +10 -0
- data/spec/support/models/topping.rb +7 -0
- data/spec/support/models/toy.rb +9 -0
- data/spec/support/models/track.rb +40 -0
- data/spec/support/models/translation.rb +7 -0
- data/spec/support/models/tree.rb +11 -0
- data/spec/support/models/truck.rb +7 -0
- data/spec/support/models/updatable.rb +7 -0
- data/spec/support/models/user.rb +23 -0
- data/spec/support/models/user_account.rb +12 -0
- data/spec/support/models/validation_callback.rb +12 -0
- data/spec/support/models/vehicle.rb +18 -0
- data/spec/support/models/version.rb +7 -0
- data/spec/support/models/vertex.rb +8 -0
- data/spec/support/models/vet_visit.rb +7 -0
- data/spec/support/models/video.rb +15 -0
- data/spec/support/models/video_game.rb +3 -0
- data/spec/support/models/washer.rb +7 -0
- data/spec/support/models/weapon.rb +13 -0
- data/spec/support/models/wiki_page.rb +17 -0
- data/spec/support/models/word.rb +17 -0
- data/spec/support/models/word_origin.rb +13 -0
- data/spec/support/models/writer.rb +13 -0
- data/spec/support/shared/time.rb +53 -0
- data/spec/support/spec_config.rb +60 -0
- data.tar.gz.sig +0 -0
- metadata +1347 -813
- metadata.gz.sig +0 -0
- data/lib/mongoid/clients/thread_options.rb +0 -19
- data/lib/mongoid/extensions/origin/regexp_raw.rb +0 -43
- data/lib/mongoid/matchable/all.rb +0 -27
- data/lib/mongoid/matchable/and.rb +0 -30
- data/lib/mongoid/matchable/default.rb +0 -72
- data/lib/mongoid/matchable/exists.rb +0 -23
- data/lib/mongoid/matchable/gt.rb +0 -21
- data/lib/mongoid/matchable/gte.rb +0 -21
- data/lib/mongoid/matchable/in.rb +0 -24
- data/lib/mongoid/matchable/lt.rb +0 -21
- data/lib/mongoid/matchable/lte.rb +0 -21
- data/lib/mongoid/matchable/ne.rb +0 -21
- data/lib/mongoid/matchable/nin.rb +0 -22
- data/lib/mongoid/matchable/or.rb +0 -33
- data/lib/mongoid/matchable/regexp.rb +0 -27
- data/lib/mongoid/matchable/size.rb +0 -21
- data/lib/mongoid/railties/document.rb +0 -12
- data/lib/mongoid/relations/accessors.rb +0 -264
- data/lib/mongoid/relations/auto_save.rb +0 -86
- data/lib/mongoid/relations/binding.rb +0 -218
- data/lib/mongoid/relations/bindings/embedded/in.rb +0 -59
- data/lib/mongoid/relations/bindings/embedded/many.rb +0 -43
- data/lib/mongoid/relations/bindings/embedded/one.rb +0 -45
- data/lib/mongoid/relations/bindings/referenced/in.rb +0 -65
- data/lib/mongoid/relations/bindings/referenced/many.rb +0 -38
- data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +0 -70
- data/lib/mongoid/relations/bindings/referenced/one.rb +0 -44
- data/lib/mongoid/relations/bindings.rb +0 -9
- data/lib/mongoid/relations/builder.rb +0 -57
- data/lib/mongoid/relations/builders/embedded/in.rb +0 -29
- data/lib/mongoid/relations/builders/embedded/many.rb +0 -36
- data/lib/mongoid/relations/builders/embedded/one.rb +0 -30
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +0 -199
- data/lib/mongoid/relations/builders/nested_attributes/one.rb +0 -126
- data/lib/mongoid/relations/builders/referenced/in.rb +0 -26
- data/lib/mongoid/relations/builders/referenced/many.rb +0 -26
- data/lib/mongoid/relations/builders/referenced/many_to_many.rb +0 -39
- data/lib/mongoid/relations/builders/referenced/one.rb +0 -26
- data/lib/mongoid/relations/builders.rb +0 -106
- data/lib/mongoid/relations/cascading/delete.rb +0 -44
- data/lib/mongoid/relations/cascading/destroy.rb +0 -43
- data/lib/mongoid/relations/cascading/nullify.rb +0 -35
- data/lib/mongoid/relations/cascading/restrict.rb +0 -39
- data/lib/mongoid/relations/cascading.rb +0 -56
- data/lib/mongoid/relations/constraint.rb +0 -55
- data/lib/mongoid/relations/conversions.rb +0 -34
- data/lib/mongoid/relations/counter_cache.rb +0 -150
- data/lib/mongoid/relations/cyclic.rb +0 -107
- data/lib/mongoid/relations/eager/base.rb +0 -153
- data/lib/mongoid/relations/eager/belongs_to.rb +0 -31
- data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +0 -47
- data/lib/mongoid/relations/eager/has_many.rb +0 -38
- data/lib/mongoid/relations/eager/has_one.rb +0 -30
- data/lib/mongoid/relations/eager.rb +0 -41
- data/lib/mongoid/relations/embedded/batchable.rb +0 -382
- data/lib/mongoid/relations/embedded/in.rb +0 -229
- data/lib/mongoid/relations/embedded/many.rb +0 -642
- data/lib/mongoid/relations/embedded/one.rb +0 -222
- data/lib/mongoid/relations/macros.rb +0 -359
- data/lib/mongoid/relations/many.rb +0 -238
- data/lib/mongoid/relations/marshalable.rb +0 -32
- data/lib/mongoid/relations/metadata.rb +0 -1179
- data/lib/mongoid/relations/nested_builder.rb +0 -74
- data/lib/mongoid/relations/one.rb +0 -60
- data/lib/mongoid/relations/options.rb +0 -49
- data/lib/mongoid/relations/polymorphic.rb +0 -39
- data/lib/mongoid/relations/proxy.rb +0 -245
- data/lib/mongoid/relations/referenced/in.rb +0 -295
- data/lib/mongoid/relations/referenced/many.rb +0 -808
- data/lib/mongoid/relations/referenced/many_to_many.rb +0 -472
- data/lib/mongoid/relations/referenced/one.rb +0 -276
- data/lib/mongoid/relations/reflections.rb +0 -64
- data/lib/mongoid/relations/synchronization.rb +0 -169
- data/lib/mongoid/relations/targets/enumerable.rb +0 -473
- data/lib/mongoid/relations/targets.rb +0 -2
- data/lib/mongoid/relations/touchable.rb +0 -94
- data/lib/mongoid/relations.rb +0 -148
- data/lib/support/ruby_version.rb +0 -26
- data/spec/app/models/account.rb +0 -36
- data/spec/app/models/acolyte.rb +0 -17
- data/spec/app/models/actor.rb +0 -18
- data/spec/app/models/actress.rb +0 -2
- data/spec/app/models/address.rb +0 -79
- data/spec/app/models/address_component.rb +0 -5
- data/spec/app/models/address_number.rb +0 -6
- data/spec/app/models/agency.rb +0 -5
- data/spec/app/models/agent.rb +0 -14
- data/spec/app/models/album.rb +0 -14
- data/spec/app/models/alert.rb +0 -7
- data/spec/app/models/animal.rb +0 -25
- data/spec/app/models/answer.rb +0 -6
- data/spec/app/models/appointment.rb +0 -7
- data/spec/app/models/article.rb +0 -12
- data/spec/app/models/artist.rb +0 -66
- data/spec/app/models/artwork.rb +0 -4
- data/spec/app/models/audio.rb +0 -5
- data/spec/app/models/augmentation.rb +0 -11
- data/spec/app/models/author.rb +0 -6
- data/spec/app/models/baby.rb +0 -4
- data/spec/app/models/band.rb +0 -28
- data/spec/app/models/bar.rb +0 -10
- data/spec/app/models/basic.rb +0 -6
- data/spec/app/models/bed.rb +0 -1
- data/spec/app/models/big_palette.rb +0 -2
- data/spec/app/models/birthday.rb +0 -13
- data/spec/app/models/bomb.rb +0 -4
- data/spec/app/models/book.rb +0 -15
- data/spec/app/models/breed.rb +0 -4
- data/spec/app/models/browser.rb +0 -6
- data/spec/app/models/building.rb +0 -6
- data/spec/app/models/building_address.rb +0 -7
- data/spec/app/models/bus.rb +0 -7
- data/spec/app/models/business.rb +0 -5
- data/spec/app/models/callback_test.rb +0 -9
- data/spec/app/models/canvas.rb +0 -25
- data/spec/app/models/car.rb +0 -1
- data/spec/app/models/cat.rb +0 -8
- data/spec/app/models/category.rb +0 -8
- data/spec/app/models/child.rb +0 -4
- data/spec/app/models/child_doc.rb +0 -22
- data/spec/app/models/church.rb +0 -6
- data/spec/app/models/circle.rb +0 -3
- data/spec/app/models/circuit.rb +0 -4
- data/spec/app/models/circus.rb +0 -7
- data/spec/app/models/code.rb +0 -11
- data/spec/app/models/comment.rb +0 -16
- data/spec/app/models/company.rb +0 -5
- data/spec/app/models/consumption_period.rb +0 -7
- data/spec/app/models/contextable_item.rb +0 -5
- data/spec/app/models/contractor.rb +0 -5
- data/spec/app/models/cookie.rb +0 -6
- data/spec/app/models/country_code.rb +0 -8
- data/spec/app/models/courier_job.rb +0 -4
- data/spec/app/models/definition.rb +0 -9
- data/spec/app/models/description.rb +0 -11
- data/spec/app/models/dictionary.rb +0 -10
- data/spec/app/models/division.rb +0 -10
- data/spec/app/models/doctor.rb +0 -12
- data/spec/app/models/dog.rb +0 -7
- data/spec/app/models/dokument.rb +0 -5
- data/spec/app/models/draft.rb +0 -9
- data/spec/app/models/dragon.rb +0 -4
- data/spec/app/models/driver.rb +0 -7
- data/spec/app/models/drug.rb +0 -6
- data/spec/app/models/dungeon.rb +0 -4
- data/spec/app/models/edit.rb +0 -5
- data/spec/app/models/email.rb +0 -6
- data/spec/app/models/employer.rb +0 -5
- data/spec/app/models/entry.rb +0 -6
- data/spec/app/models/eraser.rb +0 -1
- data/spec/app/models/even.rb +0 -7
- data/spec/app/models/event.rb +0 -22
- data/spec/app/models/exhibition.rb +0 -4
- data/spec/app/models/exhibitor.rb +0 -6
- data/spec/app/models/explosion.rb +0 -4
- data/spec/app/models/eye.rb +0 -9
- data/spec/app/models/eye_bowl.rb +0 -9
- data/spec/app/models/face.rb +0 -8
- data/spec/app/models/favorite.rb +0 -6
- data/spec/app/models/filesystem.rb +0 -5
- data/spec/app/models/fire_hydrant.rb +0 -6
- data/spec/app/models/firefox.rb +0 -4
- data/spec/app/models/fish.rb +0 -7
- data/spec/app/models/folder.rb +0 -7
- data/spec/app/models/folder_item.rb +0 -9
- data/spec/app/models/fruits.rb +0 -34
- data/spec/app/models/game.rb +0 -19
- data/spec/app/models/ghost.rb +0 -7
- data/spec/app/models/home.rb +0 -4
- data/spec/app/models/house.rb +0 -6
- data/spec/app/models/html_writer.rb +0 -3
- data/spec/app/models/id_key.rb +0 -6
- data/spec/app/models/image.rb +0 -22
- data/spec/app/models/implant.rb +0 -16
- data/spec/app/models/item.rb +0 -8
- data/spec/app/models/jar.rb +0 -7
- data/spec/app/models/kaleidoscope.rb +0 -6
- data/spec/app/models/kangaroo.rb +0 -4
- data/spec/app/models/label.rb +0 -47
- data/spec/app/models/language.rb +0 -5
- data/spec/app/models/lat_lng.rb +0 -15
- data/spec/app/models/league.rb +0 -11
- data/spec/app/models/learner.rb +0 -2
- data/spec/app/models/line_item.rb +0 -6
- data/spec/app/models/location.rb +0 -8
- data/spec/app/models/login.rb +0 -8
- data/spec/app/models/manufacturer.rb +0 -7
- data/spec/app/models/meat.rb +0 -4
- data/spec/app/models/membership.rb +0 -4
- data/spec/app/models/message.rb +0 -11
- data/spec/app/models/mixed_drink.rb +0 -4
- data/spec/app/models/movie.rb +0 -13
- data/spec/app/models/my_hash.rb +0 -2
- data/spec/app/models/name.rb +0 -24
- data/spec/app/models/node.rb +0 -5
- data/spec/app/models/note.rb +0 -17
- data/spec/app/models/odd.rb +0 -7
- data/spec/app/models/ordered_post.rb +0 -6
- data/spec/app/models/ordered_preference.rb +0 -6
- data/spec/app/models/oscar.rb +0 -15
- data/spec/app/models/override.rb +0 -16
- data/spec/app/models/ownable.rb +0 -6
- data/spec/app/models/owner.rb +0 -6
- data/spec/app/models/pack.rb +0 -3
- data/spec/app/models/page.rb +0 -16
- data/spec/app/models/page_question.rb +0 -4
- data/spec/app/models/palette.rb +0 -7
- data/spec/app/models/parent.rb +0 -5
- data/spec/app/models/parent_doc.rb +0 -6
- data/spec/app/models/passport.rb +0 -5
- data/spec/app/models/patient.rb +0 -9
- data/spec/app/models/pdf_writer.rb +0 -3
- data/spec/app/models/pencil.rb +0 -1
- data/spec/app/models/person.rb +0 -207
- data/spec/app/models/pet.rb +0 -23
- data/spec/app/models/pet_owner.rb +0 -6
- data/spec/app/models/phone.rb +0 -9
- data/spec/app/models/pizza.rb +0 -7
- data/spec/app/models/player.rb +0 -35
- data/spec/app/models/post.rb +0 -50
- data/spec/app/models/post_genre.rb +0 -6
- data/spec/app/models/powerup.rb +0 -11
- data/spec/app/models/preference.rb +0 -9
- data/spec/app/models/princess.rb +0 -8
- data/spec/app/models/product.rb +0 -17
- data/spec/app/models/profile.rb +0 -5
- data/spec/app/models/pronunciation.rb +0 -5
- data/spec/app/models/pub.rb +0 -6
- data/spec/app/models/purchase.rb +0 -4
- data/spec/app/models/question.rb +0 -8
- data/spec/app/models/quiz.rb +0 -7
- data/spec/app/models/rating.rb +0 -8
- data/spec/app/models/record.rb +0 -51
- data/spec/app/models/registry.rb +0 -4
- data/spec/app/models/role.rb +0 -7
- data/spec/app/models/root_category.rb +0 -4
- data/spec/app/models/sandwich.rb +0 -9
- data/spec/app/models/scheduler.rb +0 -7
- data/spec/app/models/seo.rb +0 -7
- data/spec/app/models/series.rb +0 -4
- data/spec/app/models/server.rb +0 -13
- data/spec/app/models/service.rb +0 -22
- data/spec/app/models/shape.rb +0 -12
- data/spec/app/models/shelf.rb +0 -5
- data/spec/app/models/shipment_address.rb +0 -2
- data/spec/app/models/shipping_container.rb +0 -5
- data/spec/app/models/shipping_pack.rb +0 -3
- data/spec/app/models/shop.rb +0 -6
- data/spec/app/models/short_agent.rb +0 -4
- data/spec/app/models/short_quiz.rb +0 -5
- data/spec/app/models/simple.rb +0 -5
- data/spec/app/models/slave.rb +0 -6
- data/spec/app/models/song.rb +0 -8
- data/spec/app/models/sound.rb +0 -5
- data/spec/app/models/square.rb +0 -4
- data/spec/app/models/staff.rb +0 -7
- data/spec/app/models/store_as_dup_test1.rb +0 -5
- data/spec/app/models/store_as_dup_test2.rb +0 -5
- data/spec/app/models/strategy.rb +0 -3
- data/spec/app/models/sub_item.rb +0 -3
- data/spec/app/models/subscription.rb +0 -4
- data/spec/app/models/survey.rb +0 -5
- data/spec/app/models/symptom.rb +0 -6
- data/spec/app/models/tag.rb +0 -8
- data/spec/app/models/target.rb +0 -5
- data/spec/app/models/template.rb +0 -5
- data/spec/app/models/thing.rb +0 -9
- data/spec/app/models/title.rb +0 -3
- data/spec/app/models/tool.rb +0 -8
- data/spec/app/models/topping.rb +0 -5
- data/spec/app/models/track.rb +0 -38
- data/spec/app/models/translation.rb +0 -5
- data/spec/app/models/tree.rb +0 -9
- data/spec/app/models/truck.rb +0 -3
- data/spec/app/models/user.rb +0 -21
- data/spec/app/models/user_account.rb +0 -10
- data/spec/app/models/validation_callback.rb +0 -10
- data/spec/app/models/vehicle.rb +0 -11
- data/spec/app/models/version.rb +0 -5
- data/spec/app/models/vet_visit.rb +0 -5
- data/spec/app/models/video.rb +0 -13
- data/spec/app/models/video_game.rb +0 -1
- data/spec/app/models/weapon.rb +0 -11
- data/spec/app/models/wiki_page.rb +0 -14
- data/spec/app/models/word.rb +0 -15
- data/spec/app/models/word_origin.rb +0 -11
- data/spec/app/models/writer.rb +0 -11
- data/spec/mongoid/extensions/origin/regexp_raw_spec.rb +0 -89
- data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +0 -184
- data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +0 -201
- data/spec/mongoid/matchable/all_spec.rb +0 -31
- data/spec/mongoid/matchable/and_spec.rb +0 -187
- data/spec/mongoid/matchable/default_spec.rb +0 -130
- data/spec/mongoid/matchable/exists_spec.rb +0 -57
- data/spec/mongoid/matchable/gt_spec.rb +0 -75
- data/spec/mongoid/matchable/gte_spec.rb +0 -74
- data/spec/mongoid/matchable/in_spec.rb +0 -49
- data/spec/mongoid/matchable/lt_spec.rb +0 -74
- data/spec/mongoid/matchable/lte_spec.rb +0 -74
- data/spec/mongoid/matchable/ne_spec.rb +0 -46
- data/spec/mongoid/matchable/nin_spec.rb +0 -48
- data/spec/mongoid/matchable/or_spec.rb +0 -131
- data/spec/mongoid/matchable/regexp_spec.rb +0 -59
- data/spec/mongoid/matchable/size_spec.rb +0 -25
- data/spec/mongoid/matchable_spec.rb +0 -708
- data/spec/mongoid/railties/document_spec.rb +0 -24
- data/spec/mongoid/relations/accessors_spec.rb +0 -821
- data/spec/mongoid/relations/auto_save_spec.rb +0 -281
- data/spec/mongoid/relations/bindings/embedded/in_spec.rb +0 -171
- data/spec/mongoid/relations/bindings/embedded/many_spec.rb +0 -54
- data/spec/mongoid/relations/bindings/embedded/one_spec.rb +0 -77
- data/spec/mongoid/relations/bindings/referenced/in_spec.rb +0 -241
- data/spec/mongoid/relations/bindings/referenced/many_spec.rb +0 -153
- data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +0 -178
- data/spec/mongoid/relations/bindings/referenced/one_spec.rb +0 -131
- data/spec/mongoid/relations/builders/embedded/in_spec.rb +0 -34
- data/spec/mongoid/relations/builders/embedded/many_spec.rb +0 -132
- data/spec/mongoid/relations/builders/embedded/one_spec.rb +0 -99
- data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +0 -233
- data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +0 -250
- data/spec/mongoid/relations/builders/referenced/in_spec.rb +0 -230
- data/spec/mongoid/relations/builders/referenced/many_spec.rb +0 -137
- data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +0 -178
- data/spec/mongoid/relations/builders/referenced/one_spec.rb +0 -111
- data/spec/mongoid/relations/builders_spec.rb +0 -226
- data/spec/mongoid/relations/cascading/delete_spec.rb +0 -101
- data/spec/mongoid/relations/cascading/destroy_spec.rb +0 -47
- data/spec/mongoid/relations/cascading/nullify_spec.rb +0 -32
- data/spec/mongoid/relations/cascading/restrict_spec.rb +0 -68
- data/spec/mongoid/relations/cascading_spec.rb +0 -355
- data/spec/mongoid/relations/constraint_spec.rb +0 -75
- data/spec/mongoid/relations/conversions_spec.rb +0 -128
- data/spec/mongoid/relations/counter_cache_spec.rb +0 -389
- data/spec/mongoid/relations/cyclic_spec.rb +0 -178
- data/spec/mongoid/relations/eager/belongs_to_spec.rb +0 -163
- data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +0 -117
- data/spec/mongoid/relations/eager/has_many_spec.rb +0 -244
- data/spec/mongoid/relations/eager/has_one_spec.rb +0 -163
- data/spec/mongoid/relations/eager_spec.rb +0 -239
- data/spec/mongoid/relations/embedded/dirty_spec.rb +0 -65
- data/spec/mongoid/relations/embedded/in_spec.rb +0 -579
- data/spec/mongoid/relations/embedded/many_spec.rb +0 -4166
- data/spec/mongoid/relations/embedded/one_spec.rb +0 -1067
- data/spec/mongoid/relations/macros_spec.rb +0 -631
- data/spec/mongoid/relations/metadata_spec.rb +0 -1971
- data/spec/mongoid/relations/options_spec.rb +0 -35
- data/spec/mongoid/relations/polymorphic_spec.rb +0 -128
- data/spec/mongoid/relations/referenced/in_spec.rb +0 -1326
- data/spec/mongoid/relations/referenced/many_spec.rb +0 -3806
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +0 -3589
- data/spec/mongoid/relations/referenced/one_spec.rb +0 -1240
- data/spec/mongoid/relations/reflections_spec.rb +0 -101
- data/spec/mongoid/relations/synchronization_spec.rb +0 -449
- data/spec/mongoid/relations/targets/enumerable_spec.rb +0 -1717
- data/spec/mongoid/relations/touchable_spec.rb +0 -362
- data/spec/mongoid/relations_spec.rb +0 -189
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require "spec_helper"
|
|
2
4
|
|
|
3
5
|
describe Mongoid::Contextual::Mongo do
|
|
@@ -7,7 +9,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
7
9
|
describe "##{method}" do
|
|
8
10
|
|
|
9
11
|
before do
|
|
10
|
-
Band.create(name: "Depeche Mode")
|
|
12
|
+
Band.create!(name: "Depeche Mode")
|
|
11
13
|
end
|
|
12
14
|
|
|
13
15
|
context "when the count is zero" do
|
|
@@ -78,11 +80,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
78
80
|
describe "#count" do
|
|
79
81
|
|
|
80
82
|
let!(:depeche) do
|
|
81
|
-
Band.create(name: "Depeche Mode")
|
|
83
|
+
Band.create!(name: "Depeche Mode")
|
|
82
84
|
end
|
|
83
85
|
|
|
84
86
|
let!(:new_order) do
|
|
85
|
-
Band.create(name: "New Order")
|
|
87
|
+
Band.create!(name: "New Order")
|
|
86
88
|
end
|
|
87
89
|
|
|
88
90
|
let(:criteria) do
|
|
@@ -106,11 +108,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
106
108
|
described_class.new(criteria.cache)
|
|
107
109
|
end
|
|
108
110
|
|
|
109
|
-
before do
|
|
110
|
-
expect(context.view).to receive(:count).once.and_return(1)
|
|
111
|
-
end
|
|
112
|
-
|
|
113
111
|
it "returns the count cached value after first call" do
|
|
112
|
+
expect(context.view).to receive(:count_documents).once.and_return(1)
|
|
114
113
|
2.times { expect(context.count).to eq(1) }
|
|
115
114
|
end
|
|
116
115
|
end
|
|
@@ -134,7 +133,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
134
133
|
context "and a limit true" do
|
|
135
134
|
|
|
136
135
|
before do
|
|
137
|
-
2.times { Band.create(name: "Depeche Mode", likes: 1) }
|
|
136
|
+
2.times { Band.create!(name: "Depeche Mode", likes: 1) }
|
|
138
137
|
end
|
|
139
138
|
|
|
140
139
|
let(:count) do
|
|
@@ -152,7 +151,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
152
151
|
context "when provided limit" do
|
|
153
152
|
|
|
154
153
|
before do
|
|
155
|
-
2.times { Band.create(name: "Depeche Mode") }
|
|
154
|
+
2.times { Band.create!(name: "Depeche Mode") }
|
|
156
155
|
end
|
|
157
156
|
|
|
158
157
|
let(:context) do
|
|
@@ -168,7 +167,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
168
167
|
end
|
|
169
168
|
end
|
|
170
169
|
|
|
171
|
-
context 'when a collation is specified'
|
|
170
|
+
context 'when a collation is specified' do
|
|
171
|
+
min_server_version '3.4'
|
|
172
172
|
|
|
173
173
|
let(:context) do
|
|
174
174
|
described_class.new(criteria)
|
|
@@ -191,16 +191,81 @@ describe Mongoid::Contextual::Mongo do
|
|
|
191
191
|
end
|
|
192
192
|
end
|
|
193
193
|
|
|
194
|
+
describe "#estimated_count" do
|
|
195
|
+
|
|
196
|
+
let!(:depeche) do
|
|
197
|
+
Band.create!(name: "Depeche Mode")
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
let!(:new_order) do
|
|
201
|
+
Band.create!(name: "New Order")
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
let(:criteria) do
|
|
205
|
+
Band.where
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
context "when not providing options" do
|
|
209
|
+
it 'returns the correct count' do
|
|
210
|
+
expect(criteria.estimated_count).to eq(2)
|
|
211
|
+
end
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
context "when providing options" do
|
|
215
|
+
it 'returns the correct count' do
|
|
216
|
+
expect(criteria.estimated_count(maxTimeMS: 1000)).to eq(2)
|
|
217
|
+
end
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
context "when context is cached" do
|
|
221
|
+
|
|
222
|
+
let(:context) do
|
|
223
|
+
described_class.new(criteria.cache)
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
it "returns the count cached value after first call" do
|
|
227
|
+
expect(context.view).to receive(:estimated_document_count).once.and_return(1)
|
|
228
|
+
2.times do
|
|
229
|
+
context.estimated_count
|
|
230
|
+
end
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
context "when the criteria contains a selector", :focus do
|
|
235
|
+
let(:criteria) do
|
|
236
|
+
Band.where(name: "New Order")
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
context "when not providing options" do
|
|
240
|
+
it 'raises an error' do
|
|
241
|
+
expect do
|
|
242
|
+
criteria.estimated_count
|
|
243
|
+
end.to raise_error(Mongoid::Errors::InvalidEstimatedCountCriteria)
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
context "when providing options" do
|
|
248
|
+
it 'raises an error' do
|
|
249
|
+
expect do
|
|
250
|
+
criteria.estimated_count(maxTimeMS: 1000)
|
|
251
|
+
end.to raise_error(Mongoid::Errors::InvalidEstimatedCountCriteria)
|
|
252
|
+
end
|
|
253
|
+
end
|
|
254
|
+
end
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
|
|
194
259
|
[ :delete, :delete_all ].each do |method|
|
|
195
260
|
|
|
196
261
|
describe "##{method}" do
|
|
197
262
|
|
|
198
263
|
let!(:depeche_mode) do
|
|
199
|
-
Band.create(name: "Depeche Mode")
|
|
264
|
+
Band.create!(name: "Depeche Mode")
|
|
200
265
|
end
|
|
201
266
|
|
|
202
267
|
let!(:new_order) do
|
|
203
|
-
Band.create(name: "New Order")
|
|
268
|
+
Band.create!(name: "New Order")
|
|
204
269
|
end
|
|
205
270
|
|
|
206
271
|
context "when the selector is contraining" do
|
|
@@ -228,36 +293,37 @@ describe Mongoid::Contextual::Mongo do
|
|
|
228
293
|
it "returns the number of documents deleted" do
|
|
229
294
|
expect(deleted).to eq(1)
|
|
230
295
|
end
|
|
231
|
-
end
|
|
232
296
|
|
|
233
|
-
|
|
297
|
+
context 'when the criteria has a collation' do
|
|
298
|
+
min_server_version '3.4'
|
|
234
299
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
300
|
+
let(:criteria) do
|
|
301
|
+
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
302
|
+
end
|
|
238
303
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
304
|
+
let(:context) do
|
|
305
|
+
described_class.new(criteria)
|
|
306
|
+
end
|
|
242
307
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
308
|
+
let!(:deleted) do
|
|
309
|
+
context.send(method)
|
|
310
|
+
end
|
|
246
311
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
312
|
+
it "deletes the matching documents" do
|
|
313
|
+
expect(Band.find(new_order.id)).to eq(new_order)
|
|
314
|
+
end
|
|
250
315
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
316
|
+
it "deletes the correct number of documents" do
|
|
317
|
+
expect(Band.count).to eq(1)
|
|
318
|
+
end
|
|
254
319
|
|
|
255
|
-
|
|
256
|
-
|
|
320
|
+
it "returns the number of documents deleted" do
|
|
321
|
+
expect(deleted).to eq(1)
|
|
322
|
+
end
|
|
257
323
|
end
|
|
258
324
|
end
|
|
259
325
|
|
|
260
|
-
context "when the selector is not
|
|
326
|
+
context "when the selector is not contraining" do
|
|
261
327
|
|
|
262
328
|
let(:criteria) do
|
|
263
329
|
Band.all
|
|
@@ -275,6 +341,23 @@ describe Mongoid::Contextual::Mongo do
|
|
|
275
341
|
expect(Band.count).to eq(0)
|
|
276
342
|
end
|
|
277
343
|
end
|
|
344
|
+
|
|
345
|
+
context 'when the write concern is unacknowledged' do
|
|
346
|
+
|
|
347
|
+
let(:criteria) do
|
|
348
|
+
Band.all
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
let!(:deleted) do
|
|
352
|
+
criteria.with(write: { w: 0 }) do |crit|
|
|
353
|
+
crit.send(method)
|
|
354
|
+
end
|
|
355
|
+
end
|
|
356
|
+
|
|
357
|
+
it 'returns 0' do
|
|
358
|
+
expect(deleted).to eq(0)
|
|
359
|
+
end
|
|
360
|
+
end
|
|
278
361
|
end
|
|
279
362
|
end
|
|
280
363
|
|
|
@@ -283,11 +366,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
283
366
|
describe "##{method}" do
|
|
284
367
|
|
|
285
368
|
let!(:depeche_mode) do
|
|
286
|
-
Band.create(name: "Depeche Mode")
|
|
369
|
+
Band.create!(name: "Depeche Mode")
|
|
287
370
|
end
|
|
288
371
|
|
|
289
372
|
let!(:new_order) do
|
|
290
|
-
Band.create(name: "New Order")
|
|
373
|
+
Band.create!(name: "New Order")
|
|
291
374
|
end
|
|
292
375
|
|
|
293
376
|
context "when the selector is contraining" do
|
|
@@ -316,7 +399,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
316
399
|
expect(destroyed).to eq(1)
|
|
317
400
|
end
|
|
318
401
|
|
|
319
|
-
context 'when the criteria has a collation'
|
|
402
|
+
context 'when the criteria has a collation' do
|
|
403
|
+
min_server_version '3.4'
|
|
320
404
|
|
|
321
405
|
let(:criteria) do
|
|
322
406
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
@@ -363,32 +447,109 @@ describe Mongoid::Contextual::Mongo do
|
|
|
363
447
|
end
|
|
364
448
|
end
|
|
365
449
|
end
|
|
450
|
+
|
|
451
|
+
context 'when the write concern is unacknowledged' do
|
|
452
|
+
|
|
453
|
+
before do
|
|
454
|
+
2.times { Band.create! }
|
|
455
|
+
end
|
|
456
|
+
|
|
457
|
+
let(:criteria) do
|
|
458
|
+
Band.all
|
|
459
|
+
end
|
|
460
|
+
|
|
461
|
+
let!(:deleted) do
|
|
462
|
+
criteria.with(write: { w: 0 }) do |crit|
|
|
463
|
+
crit.send(method)
|
|
464
|
+
end
|
|
465
|
+
end
|
|
466
|
+
|
|
467
|
+
it 'returns 0' do
|
|
468
|
+
expect(deleted).to eq(0)
|
|
469
|
+
end
|
|
470
|
+
end
|
|
366
471
|
end
|
|
367
472
|
|
|
368
473
|
describe "#distinct" do
|
|
369
474
|
|
|
370
475
|
before do
|
|
371
|
-
Band.create(name: "Depeche Mode", years: 30)
|
|
372
|
-
Band.create(name: "New Order", years: 25)
|
|
476
|
+
Band.create!(name: "Depeche Mode", years: 30, sales: "1E2")
|
|
477
|
+
Band.create!(name: "New Order", years: 25, sales: "2E3")
|
|
478
|
+
Band.create!(name: "10,000 Maniacs", years: 20, sales: "1E2")
|
|
373
479
|
end
|
|
374
480
|
|
|
375
|
-
|
|
481
|
+
with_config_values :legacy_pluck_distinct, true, false do
|
|
482
|
+
context "when limiting the result set" do
|
|
376
483
|
|
|
377
|
-
|
|
378
|
-
|
|
484
|
+
let(:criteria) do
|
|
485
|
+
Band.where(name: "Depeche Mode")
|
|
486
|
+
end
|
|
487
|
+
|
|
488
|
+
let(:context) do
|
|
489
|
+
described_class.new(criteria)
|
|
490
|
+
end
|
|
491
|
+
|
|
492
|
+
it "returns the distinct matching fields" do
|
|
493
|
+
expect(context.distinct(:name)).to eq([ "Depeche Mode" ])
|
|
494
|
+
end
|
|
379
495
|
end
|
|
380
496
|
|
|
381
|
-
|
|
382
|
-
|
|
497
|
+
context "when not limiting the result set" do
|
|
498
|
+
|
|
499
|
+
let(:criteria) do
|
|
500
|
+
Band.criteria
|
|
501
|
+
end
|
|
502
|
+
|
|
503
|
+
let(:context) do
|
|
504
|
+
described_class.new(criteria)
|
|
505
|
+
end
|
|
506
|
+
|
|
507
|
+
it "returns the distinct field values" do
|
|
508
|
+
expect(context.distinct(:name).sort).to eq([ "10,000 Maniacs", "Depeche Mode", "New Order" ].sort)
|
|
509
|
+
end
|
|
383
510
|
end
|
|
384
511
|
|
|
385
|
-
|
|
386
|
-
|
|
512
|
+
context "when providing an aliased field" do
|
|
513
|
+
|
|
514
|
+
let(:criteria) do
|
|
515
|
+
Band.criteria
|
|
516
|
+
end
|
|
517
|
+
|
|
518
|
+
let(:context) do
|
|
519
|
+
described_class.new(criteria)
|
|
520
|
+
end
|
|
521
|
+
|
|
522
|
+
it "returns the distinct field values" do
|
|
523
|
+
expect(context.distinct(:years).sort).to eq([ 20, 25, 30 ])
|
|
524
|
+
end
|
|
387
525
|
end
|
|
388
|
-
end
|
|
389
526
|
|
|
390
|
-
|
|
527
|
+
context 'when a collation is specified' do
|
|
528
|
+
min_server_version '3.4'
|
|
391
529
|
|
|
530
|
+
before do
|
|
531
|
+
Band.create!(name: 'DEPECHE MODE')
|
|
532
|
+
end
|
|
533
|
+
|
|
534
|
+
let(:context) do
|
|
535
|
+
described_class.new(criteria)
|
|
536
|
+
end
|
|
537
|
+
|
|
538
|
+
let(:expected_results) do
|
|
539
|
+
["10,000 Maniacs", "Depeche Mode", "New Order"]
|
|
540
|
+
end
|
|
541
|
+
|
|
542
|
+
let(:criteria) do
|
|
543
|
+
Band.where({}).collation(locale: 'en_US', strength: 2)
|
|
544
|
+
end
|
|
545
|
+
|
|
546
|
+
it 'applies the collation' do
|
|
547
|
+
expect(context.distinct(:name).sort).to eq(expected_results.sort)
|
|
548
|
+
end
|
|
549
|
+
end
|
|
550
|
+
end
|
|
551
|
+
|
|
552
|
+
context "when providing a demongoizable field" do
|
|
392
553
|
let(:criteria) do
|
|
393
554
|
Band.criteria
|
|
394
555
|
end
|
|
@@ -397,46 +558,241 @@ describe Mongoid::Contextual::Mongo do
|
|
|
397
558
|
described_class.new(criteria)
|
|
398
559
|
end
|
|
399
560
|
|
|
400
|
-
|
|
401
|
-
|
|
561
|
+
context "when legacy_pluck_distinct is set" do
|
|
562
|
+
config_override :legacy_pluck_distinct, true
|
|
563
|
+
|
|
564
|
+
it "returns the non-demongoized distinct field values" do
|
|
565
|
+
expect(context.distinct(:sales).sort).to eq([ "1E2", "2E3" ])
|
|
566
|
+
end
|
|
567
|
+
end
|
|
568
|
+
|
|
569
|
+
context "when legacy_pluck_distinct is not set" do
|
|
570
|
+
config_override :legacy_pluck_distinct, false
|
|
571
|
+
|
|
572
|
+
it "returns the non-demongoized distinct field values" do
|
|
573
|
+
expect(context.distinct(:sales).sort).to eq([ BigDecimal("1E2"), BigDecimal("2E3") ])
|
|
574
|
+
end
|
|
402
575
|
end
|
|
403
576
|
end
|
|
404
577
|
|
|
405
|
-
context "when
|
|
578
|
+
context "when getting a localized field" do
|
|
579
|
+
before do
|
|
580
|
+
I18n.locale = :en
|
|
581
|
+
d = Dictionary.create!(description: 'english-text')
|
|
582
|
+
I18n.locale = :de
|
|
583
|
+
d.description = 'deutsch-text'
|
|
584
|
+
d.save!
|
|
585
|
+
end
|
|
406
586
|
|
|
407
587
|
let(:criteria) do
|
|
408
|
-
|
|
588
|
+
Dictionary.criteria
|
|
409
589
|
end
|
|
410
590
|
|
|
411
591
|
let(:context) do
|
|
412
592
|
described_class.new(criteria)
|
|
413
593
|
end
|
|
414
594
|
|
|
415
|
-
|
|
416
|
-
|
|
595
|
+
context "when getting the field without _translations" do
|
|
596
|
+
context "when legacy_pluck_distinct is set" do
|
|
597
|
+
config_override :legacy_pluck_distinct, true
|
|
598
|
+
|
|
599
|
+
it "gets the full hash" do
|
|
600
|
+
expect(context.distinct(:description)).to eq([{ "de" => "deutsch-text", "en" => "english-text" }])
|
|
601
|
+
end
|
|
602
|
+
end
|
|
603
|
+
|
|
604
|
+
context "when legacy_pluck_distinct is not set" do
|
|
605
|
+
config_override :legacy_pluck_distinct, false
|
|
606
|
+
|
|
607
|
+
it "gets the demongoized localized field" do
|
|
608
|
+
expect(context.distinct(:description)).to eq([ 'deutsch-text' ])
|
|
609
|
+
end
|
|
610
|
+
end
|
|
611
|
+
end
|
|
612
|
+
|
|
613
|
+
context "when getting the field with _translations" do
|
|
614
|
+
context "when legacy_pluck_distinct is set" do
|
|
615
|
+
config_override :legacy_pluck_distinct, true
|
|
616
|
+
|
|
617
|
+
it "gets an empty list" do
|
|
618
|
+
expect(context.distinct(:description_translations)).to eq([])
|
|
619
|
+
end
|
|
620
|
+
end
|
|
621
|
+
|
|
622
|
+
context "when legacy_pluck_distinct is not set" do
|
|
623
|
+
config_override :legacy_pluck_distinct, false
|
|
624
|
+
|
|
625
|
+
it "gets the full hash" do
|
|
626
|
+
expect(context.distinct(:description_translations)).to eq([ { "de" => "deutsch-text", "en" => "english-text" } ])
|
|
627
|
+
end
|
|
628
|
+
end
|
|
417
629
|
end
|
|
418
|
-
end
|
|
419
630
|
|
|
420
|
-
|
|
631
|
+
context 'when plucking a specific locale' do
|
|
421
632
|
|
|
422
|
-
|
|
423
|
-
|
|
633
|
+
let(:distinct) do
|
|
634
|
+
context.distinct(:'description.de')
|
|
635
|
+
end
|
|
636
|
+
|
|
637
|
+
context "when legacy_pluck_distinct is set" do
|
|
638
|
+
config_override :legacy_pluck_distinct, true
|
|
639
|
+
|
|
640
|
+
it 'returns the specific translation' do
|
|
641
|
+
expect(distinct).to eq([ 'deutsch-text' ])
|
|
642
|
+
end
|
|
643
|
+
end
|
|
644
|
+
|
|
645
|
+
context "when legacy_pluck_distinct is not set" do
|
|
646
|
+
config_override :legacy_pluck_distinct, false
|
|
647
|
+
|
|
648
|
+
it 'returns the specific translation' do
|
|
649
|
+
expect(distinct).to eq([ "deutsch-text" ])
|
|
650
|
+
end
|
|
651
|
+
end
|
|
424
652
|
end
|
|
425
653
|
|
|
426
|
-
|
|
427
|
-
|
|
654
|
+
context 'when plucking a specific locale from _translations field' do
|
|
655
|
+
|
|
656
|
+
let(:distinct) do
|
|
657
|
+
context.distinct(:'description_translations.de')
|
|
658
|
+
end
|
|
659
|
+
|
|
660
|
+
context "when legacy_pluck_distinct is set" do
|
|
661
|
+
config_override :legacy_pluck_distinct, true
|
|
662
|
+
|
|
663
|
+
it 'returns the empty list' do
|
|
664
|
+
expect(distinct).to eq([])
|
|
665
|
+
end
|
|
666
|
+
end
|
|
667
|
+
|
|
668
|
+
context "when legacy_pluck_distinct is not set" do
|
|
669
|
+
config_override :legacy_pluck_distinct, false
|
|
670
|
+
|
|
671
|
+
it 'returns the specific translations' do
|
|
672
|
+
expect(distinct).to eq(['deutsch-text'])
|
|
673
|
+
end
|
|
674
|
+
end
|
|
428
675
|
end
|
|
429
676
|
|
|
430
|
-
|
|
431
|
-
|
|
677
|
+
context 'when fallbacks are enabled with a locale list' do
|
|
678
|
+
require_fallbacks
|
|
679
|
+
|
|
680
|
+
around(:all) do |example|
|
|
681
|
+
prev_fallbacks = I18n.fallbacks.dup
|
|
682
|
+
I18n.fallbacks[:he] = [ :en ]
|
|
683
|
+
example.run
|
|
684
|
+
I18n.fallbacks = prev_fallbacks
|
|
685
|
+
end
|
|
686
|
+
|
|
687
|
+
let(:distinct) do
|
|
688
|
+
context.distinct(:description).first
|
|
689
|
+
end
|
|
690
|
+
|
|
691
|
+
context "when legacy_pluck_distinct is set" do
|
|
692
|
+
config_override :legacy_pluck_distinct, true
|
|
693
|
+
|
|
694
|
+
it "does not correctly use the fallback" do
|
|
695
|
+
distinct.should == {"de"=>"deutsch-text", "en"=>"english-text"}
|
|
696
|
+
end
|
|
697
|
+
end
|
|
698
|
+
|
|
699
|
+
context "when legacy_pluck_distinct is not set" do
|
|
700
|
+
config_override :legacy_pluck_distinct, false
|
|
701
|
+
|
|
702
|
+
it "correctly uses the fallback" do
|
|
703
|
+
I18n.locale = :en
|
|
704
|
+
d = Dictionary.create!(description: 'english-text')
|
|
705
|
+
I18n.locale = :he
|
|
706
|
+
distinct.should == "english-text"
|
|
707
|
+
end
|
|
708
|
+
end
|
|
432
709
|
end
|
|
433
710
|
|
|
434
|
-
|
|
435
|
-
|
|
711
|
+
context "when the localized field is embedded" do
|
|
712
|
+
before do
|
|
713
|
+
p = Passport.new
|
|
714
|
+
I18n.locale = :en
|
|
715
|
+
p.name = "Neil"
|
|
716
|
+
I18n.locale = :he
|
|
717
|
+
p.name = "Nissim"
|
|
718
|
+
|
|
719
|
+
Person.create!(passport: p, employer_id: 12345)
|
|
720
|
+
end
|
|
721
|
+
|
|
722
|
+
let(:criteria) do
|
|
723
|
+
Person.where(employer_id: 12345)
|
|
724
|
+
end
|
|
725
|
+
|
|
726
|
+
let(:context) do
|
|
727
|
+
described_class.new(criteria)
|
|
728
|
+
end
|
|
729
|
+
|
|
730
|
+
let(:distinct) do
|
|
731
|
+
context.distinct("pass.name").first
|
|
732
|
+
end
|
|
733
|
+
|
|
734
|
+
let(:distinct_translations) do
|
|
735
|
+
context.distinct("pass.name_translations").first
|
|
736
|
+
end
|
|
737
|
+
|
|
738
|
+
let(:distinct_translations_field) do
|
|
739
|
+
context.distinct("pass.name_translations.en").first
|
|
740
|
+
end
|
|
741
|
+
|
|
742
|
+
context "when legacy_pluck_distinct is set" do
|
|
743
|
+
config_override :legacy_pluck_distinct, true
|
|
744
|
+
|
|
745
|
+
it "returns the full hash" do
|
|
746
|
+
expect(distinct).to eq({ "en" => "Neil", "he" => "Nissim" })
|
|
747
|
+
end
|
|
748
|
+
|
|
749
|
+
it "returns the empty hash" do
|
|
750
|
+
expect(distinct_translations).to eq(nil)
|
|
751
|
+
end
|
|
752
|
+
|
|
753
|
+
it "returns the empty hash" do
|
|
754
|
+
expect(distinct_translations_field).to eq(nil)
|
|
755
|
+
end
|
|
756
|
+
end
|
|
757
|
+
|
|
758
|
+
context "when legacy_pluck_distinct is not set" do
|
|
759
|
+
config_override :legacy_pluck_distinct, false
|
|
760
|
+
|
|
761
|
+
it "returns the translation for the current locale" do
|
|
762
|
+
expect(distinct).to eq("Nissim")
|
|
763
|
+
end
|
|
764
|
+
|
|
765
|
+
it "returns the full _translation hash" do
|
|
766
|
+
expect(distinct_translations).to eq({ "en" => "Neil", "he" => "Nissim" })
|
|
767
|
+
end
|
|
768
|
+
|
|
769
|
+
it "returns the translation for the requested locale" do
|
|
770
|
+
expect(distinct_translations_field).to eq("Neil")
|
|
771
|
+
end
|
|
772
|
+
end
|
|
773
|
+
end
|
|
774
|
+
end
|
|
775
|
+
|
|
776
|
+
context "when getting an embedded field" do
|
|
777
|
+
|
|
778
|
+
let(:label) { Label.new(sales: "1E2") }
|
|
779
|
+
let!(:band) { Band.create!(label: label) }
|
|
780
|
+
let(:criteria) { Band.where(_id: band.id) }
|
|
781
|
+
let(:context) { described_class.new(criteria) }
|
|
782
|
+
|
|
783
|
+
context "when legacy_pluck_distinct is set" do
|
|
784
|
+
config_override :legacy_pluck_distinct, true
|
|
785
|
+
|
|
786
|
+
it "returns the distinct matching fields" do
|
|
787
|
+
expect(context.distinct("label.sales")).to eq([ "1E2" ])
|
|
788
|
+
end
|
|
436
789
|
end
|
|
437
790
|
|
|
438
|
-
|
|
439
|
-
|
|
791
|
+
context "when legacy_pluck_distinct is not set" do
|
|
792
|
+
config_override :legacy_pluck_distinct, false
|
|
793
|
+
it "returns the distinct matching fields" do
|
|
794
|
+
expect(context.distinct("label.sales")).to eq([ BigDecimal("1E2") ])
|
|
795
|
+
end
|
|
440
796
|
end
|
|
441
797
|
end
|
|
442
798
|
end
|
|
@@ -444,7 +800,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
444
800
|
describe "#each" do
|
|
445
801
|
|
|
446
802
|
before do
|
|
447
|
-
Band.create(name: "Depeche Mode")
|
|
803
|
+
Band.create!(name: "Depeche Mode")
|
|
448
804
|
end
|
|
449
805
|
|
|
450
806
|
let(:criteria) do
|
|
@@ -455,7 +811,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
455
811
|
described_class.new(criteria)
|
|
456
812
|
end
|
|
457
813
|
|
|
458
|
-
context 'when the criteria has a collation'
|
|
814
|
+
context 'when the criteria has a collation' do
|
|
815
|
+
min_server_version '3.4'
|
|
459
816
|
|
|
460
817
|
let(:criteria) do
|
|
461
818
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
@@ -521,7 +878,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
521
878
|
context "when iterating with next" do
|
|
522
879
|
|
|
523
880
|
before do
|
|
524
|
-
10.times { |i| Band.create(name: "Test #{i}") }
|
|
881
|
+
10.times { |i| Band.create!(name: "Test #{i}") }
|
|
525
882
|
end
|
|
526
883
|
|
|
527
884
|
let(:criteria) do
|
|
@@ -533,12 +890,50 @@ describe Mongoid::Contextual::Mongo do
|
|
|
533
890
|
end
|
|
534
891
|
|
|
535
892
|
it "does not load all documents" do
|
|
536
|
-
|
|
893
|
+
subscriber = Mrss::EventSubscriber.new
|
|
894
|
+
context.view.client.subscribe(Mongo::Monitoring::COMMAND, subscriber)
|
|
895
|
+
|
|
537
896
|
enum.next
|
|
897
|
+
|
|
898
|
+
find_events = subscriber.all_events.select do |evt|
|
|
899
|
+
evt.command_name == 'find'
|
|
900
|
+
end
|
|
901
|
+
expect(find_events.length).to be(2)
|
|
902
|
+
get_more_events = subscriber.all_events.select do |evt|
|
|
903
|
+
evt.command_name == 'getMore'
|
|
904
|
+
end
|
|
905
|
+
expect(get_more_events.length).to be(0)
|
|
906
|
+
ensure
|
|
907
|
+
context.view.client.unsubscribe(Mongo::Monitoring::COMMAND, subscriber)
|
|
538
908
|
end
|
|
539
909
|
end
|
|
540
910
|
end
|
|
541
911
|
end
|
|
912
|
+
|
|
913
|
+
context 'when the criteria has a parent document' do
|
|
914
|
+
|
|
915
|
+
before do
|
|
916
|
+
Post.create!(person: person)
|
|
917
|
+
Post.create!(person: person)
|
|
918
|
+
Post.create!(person: person)
|
|
919
|
+
end
|
|
920
|
+
|
|
921
|
+
let(:person) do
|
|
922
|
+
Person.new
|
|
923
|
+
end
|
|
924
|
+
|
|
925
|
+
let(:criteria) do
|
|
926
|
+
person.posts.all
|
|
927
|
+
end
|
|
928
|
+
|
|
929
|
+
let(:persons) do
|
|
930
|
+
criteria.collect(&:person)
|
|
931
|
+
end
|
|
932
|
+
|
|
933
|
+
it 'sets the same parent object on each related object' do
|
|
934
|
+
expect(persons.uniq.size).to eq(1)
|
|
935
|
+
end
|
|
936
|
+
end
|
|
542
937
|
end
|
|
543
938
|
|
|
544
939
|
describe "#eager_load" do
|
|
@@ -553,12 +948,12 @@ describe Mongoid::Contextual::Mongo do
|
|
|
553
948
|
|
|
554
949
|
context "when no documents are returned" do
|
|
555
950
|
|
|
556
|
-
let(:
|
|
951
|
+
let(:game_association) do
|
|
557
952
|
Person.reflect_on_association(:game)
|
|
558
953
|
end
|
|
559
954
|
|
|
560
955
|
it "does not make any additional database queries" do
|
|
561
|
-
expect(
|
|
956
|
+
expect(game_association).to receive(:eager_load).never
|
|
562
957
|
context.send(:eager_load, [])
|
|
563
958
|
end
|
|
564
959
|
end
|
|
@@ -567,7 +962,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
567
962
|
describe "#exists?" do
|
|
568
963
|
|
|
569
964
|
before do
|
|
570
|
-
Band.create(name: "Depeche Mode")
|
|
965
|
+
Band.create!(name: "Depeche Mode")
|
|
571
966
|
end
|
|
572
967
|
|
|
573
968
|
context "when the count is zero" do
|
|
@@ -680,11 +1075,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
680
1075
|
describe "#find_one_and_replace" do
|
|
681
1076
|
|
|
682
1077
|
let!(:depeche) do
|
|
683
|
-
Band.create(name: "Depeche Mode")
|
|
1078
|
+
Band.create!(name: "Depeche Mode")
|
|
684
1079
|
end
|
|
685
1080
|
|
|
686
1081
|
let!(:tool) do
|
|
687
|
-
Band.create(name: "Tool")
|
|
1082
|
+
Band.create!(name: "Tool")
|
|
688
1083
|
end
|
|
689
1084
|
|
|
690
1085
|
context "when the selector matches" do
|
|
@@ -787,7 +1182,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
787
1182
|
end
|
|
788
1183
|
end
|
|
789
1184
|
|
|
790
|
-
context 'when a collation is specified on the criteria'
|
|
1185
|
+
context 'when a collation is specified on the criteria' do
|
|
1186
|
+
min_server_version '3.4'
|
|
791
1187
|
|
|
792
1188
|
let(:criteria) do
|
|
793
1189
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
@@ -835,11 +1231,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
835
1231
|
describe "#find_one_and_update" do
|
|
836
1232
|
|
|
837
1233
|
let!(:depeche) do
|
|
838
|
-
Band.create(name: "Depeche Mode")
|
|
1234
|
+
Band.create!(name: "Depeche Mode")
|
|
839
1235
|
end
|
|
840
1236
|
|
|
841
1237
|
let!(:tool) do
|
|
842
|
-
Band.create(name: "Tool")
|
|
1238
|
+
Band.create!(name: "Tool")
|
|
843
1239
|
end
|
|
844
1240
|
|
|
845
1241
|
context "when the selector matches" do
|
|
@@ -940,7 +1336,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
940
1336
|
end
|
|
941
1337
|
end
|
|
942
1338
|
|
|
943
|
-
context 'when a collation is specified on the criteria'
|
|
1339
|
+
context 'when a collation is specified on the criteria' do
|
|
1340
|
+
min_server_version '3.4'
|
|
944
1341
|
|
|
945
1342
|
let(:criteria) do
|
|
946
1343
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
@@ -987,7 +1384,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
987
1384
|
describe "#find_one_and_delete" do
|
|
988
1385
|
|
|
989
1386
|
let!(:depeche) do
|
|
990
|
-
Band.create(name: "Depeche Mode")
|
|
1387
|
+
Band.create!(name: "Depeche Mode")
|
|
991
1388
|
end
|
|
992
1389
|
|
|
993
1390
|
let(:criteria) do
|
|
@@ -1014,7 +1411,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1014
1411
|
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
1015
1412
|
end
|
|
1016
1413
|
|
|
1017
|
-
context 'when a collation is specified on the criteria'
|
|
1414
|
+
context 'when a collation is specified on the criteria' do
|
|
1415
|
+
min_server_version '3.4'
|
|
1018
1416
|
|
|
1019
1417
|
let(:criteria) do
|
|
1020
1418
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
@@ -1065,11 +1463,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1065
1463
|
describe "##{method}" do
|
|
1066
1464
|
|
|
1067
1465
|
let!(:depeche_mode) do
|
|
1068
|
-
Band.create(name: "Depeche Mode")
|
|
1466
|
+
Band.create!(name: "Depeche Mode")
|
|
1069
1467
|
end
|
|
1070
1468
|
|
|
1071
1469
|
let!(:new_order) do
|
|
1072
|
-
Band.create(name: "New Order")
|
|
1470
|
+
Band.create!(name: "New Order")
|
|
1073
1471
|
end
|
|
1074
1472
|
|
|
1075
1473
|
context "when the context is not cached" do
|
|
@@ -1086,7 +1484,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1086
1484
|
expect(context.send(method)).to eq(depeche_mode)
|
|
1087
1485
|
end
|
|
1088
1486
|
|
|
1089
|
-
context 'when the criteria has a collation'
|
|
1487
|
+
context 'when the criteria has a collation' do
|
|
1488
|
+
min_server_version '3.4'
|
|
1090
1489
|
|
|
1091
1490
|
let(:criteria) do
|
|
1092
1491
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
@@ -1124,6 +1523,92 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1124
1523
|
end
|
|
1125
1524
|
end
|
|
1126
1525
|
|
|
1526
|
+
context 'when the criteria has no sort' do
|
|
1527
|
+
|
|
1528
|
+
let(:criteria) do
|
|
1529
|
+
Band.all
|
|
1530
|
+
end
|
|
1531
|
+
|
|
1532
|
+
let(:context) do
|
|
1533
|
+
described_class.new(criteria)
|
|
1534
|
+
end
|
|
1535
|
+
|
|
1536
|
+
|
|
1537
|
+
it 'applies a sort on _id' do
|
|
1538
|
+
expect(context.send(method)).to eq(depeche_mode)
|
|
1539
|
+
end
|
|
1540
|
+
|
|
1541
|
+
context 'when calling #last' do
|
|
1542
|
+
|
|
1543
|
+
it 'returns the last document, sorted by _id' do
|
|
1544
|
+
expect(context.send(method)).to eq(depeche_mode)
|
|
1545
|
+
expect(context.last).to eq(new_order)
|
|
1546
|
+
end
|
|
1547
|
+
end
|
|
1548
|
+
|
|
1549
|
+
context 'with option { sort: :none }' do
|
|
1550
|
+
|
|
1551
|
+
let(:opts) do
|
|
1552
|
+
{ id_sort: :none }
|
|
1553
|
+
end
|
|
1554
|
+
|
|
1555
|
+
it 'does not apply the sort on _id' do
|
|
1556
|
+
expect(context.send(method, opts)).to eq(depeche_mode)
|
|
1557
|
+
end
|
|
1558
|
+
|
|
1559
|
+
context 'when calling #last' do
|
|
1560
|
+
|
|
1561
|
+
it 'does not apply a sort on _id' do
|
|
1562
|
+
expect(context.send(method, opts)).to eq(depeche_mode)
|
|
1563
|
+
expect(context.last(opts)).to eq(depeche_mode)
|
|
1564
|
+
end
|
|
1565
|
+
end
|
|
1566
|
+
end
|
|
1567
|
+
end
|
|
1568
|
+
|
|
1569
|
+
context 'when the criteria has a sort' do
|
|
1570
|
+
|
|
1571
|
+
let(:criteria) do
|
|
1572
|
+
Band.desc(:name)
|
|
1573
|
+
end
|
|
1574
|
+
|
|
1575
|
+
let(:context) do
|
|
1576
|
+
described_class.new(criteria)
|
|
1577
|
+
end
|
|
1578
|
+
|
|
1579
|
+
|
|
1580
|
+
it 'applies the criteria sort' do
|
|
1581
|
+
expect(context.send(method)).to eq(new_order)
|
|
1582
|
+
end
|
|
1583
|
+
|
|
1584
|
+
context 'when calling #last' do
|
|
1585
|
+
|
|
1586
|
+
it 'applies the criteria sort' do
|
|
1587
|
+
expect(context.send(method)).to eq(new_order)
|
|
1588
|
+
expect(context.last).to eq(depeche_mode)
|
|
1589
|
+
end
|
|
1590
|
+
end
|
|
1591
|
+
|
|
1592
|
+
context 'with option { sort: :none }' do
|
|
1593
|
+
|
|
1594
|
+
let(:opts) do
|
|
1595
|
+
{ id_sort: :none }
|
|
1596
|
+
end
|
|
1597
|
+
|
|
1598
|
+
it 'applies the criteria sort' do
|
|
1599
|
+
expect(context.send(method, opts)).to eq(new_order)
|
|
1600
|
+
end
|
|
1601
|
+
|
|
1602
|
+
context 'when calling #last' do
|
|
1603
|
+
|
|
1604
|
+
it 'applies the criteria sort' do
|
|
1605
|
+
expect(context.send(method, opts)).to eq(new_order)
|
|
1606
|
+
expect(context.last(opts)).to eq(depeche_mode)
|
|
1607
|
+
end
|
|
1608
|
+
end
|
|
1609
|
+
end
|
|
1610
|
+
end
|
|
1611
|
+
|
|
1127
1612
|
context "when using .sort" do
|
|
1128
1613
|
|
|
1129
1614
|
let(:criteria) do
|
|
@@ -1219,8 +1704,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1219
1704
|
describe "##{method}" do
|
|
1220
1705
|
|
|
1221
1706
|
before do
|
|
1222
|
-
Band.create(name: "Depeche Mode")
|
|
1223
|
-
Band.create(name: "New Order")
|
|
1707
|
+
Band.create!(name: "Depeche Mode")
|
|
1708
|
+
Band.create!(name: "New Order")
|
|
1224
1709
|
end
|
|
1225
1710
|
|
|
1226
1711
|
context "when the criteria has a limit" do
|
|
@@ -1238,12 +1723,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1238
1723
|
end
|
|
1239
1724
|
|
|
1240
1725
|
context "when calling more than once" do
|
|
1241
|
-
|
|
1242
|
-
before do
|
|
1243
|
-
expect(context.view).to receive(:count).once.and_return(2)
|
|
1244
|
-
end
|
|
1245
|
-
|
|
1246
1726
|
it "returns the cached value for subsequent calls" do
|
|
1727
|
+
expect(context.view).to receive(:count_documents).once.and_return(2)
|
|
1247
1728
|
2.times { expect(context.send(method)).to eq(2) }
|
|
1248
1729
|
end
|
|
1249
1730
|
end
|
|
@@ -1252,10 +1733,10 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1252
1733
|
|
|
1253
1734
|
before do
|
|
1254
1735
|
context.entries
|
|
1255
|
-
expect(context.view).to receive(:count).once.and_return(2)
|
|
1256
1736
|
end
|
|
1257
1737
|
|
|
1258
1738
|
it "returns the cached value for all calls" do
|
|
1739
|
+
expect(context.view).to receive(:count_documents).once.and_return(2)
|
|
1259
1740
|
expect(context.send(method)).to eq(2)
|
|
1260
1741
|
end
|
|
1261
1742
|
|
|
@@ -1287,12 +1768,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1287
1768
|
end
|
|
1288
1769
|
|
|
1289
1770
|
context "when calling more than once" do
|
|
1290
|
-
|
|
1291
|
-
before do
|
|
1292
|
-
expect(context.view).to receive(:count).once.and_return(1)
|
|
1293
|
-
end
|
|
1294
|
-
|
|
1295
1771
|
it "returns the cached value for subsequent calls" do
|
|
1772
|
+
expect(context.view).to receive(:count_documents).once.and_return(1)
|
|
1296
1773
|
2.times { expect(context.send(method)).to eq(1) }
|
|
1297
1774
|
end
|
|
1298
1775
|
end
|
|
@@ -1301,10 +1778,10 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1301
1778
|
|
|
1302
1779
|
before do
|
|
1303
1780
|
context.entries
|
|
1304
|
-
expect(context.view).to receive(:count).once.and_return(1)
|
|
1305
1781
|
end
|
|
1306
1782
|
|
|
1307
1783
|
it "returns the cached value for all calls" do
|
|
1784
|
+
expect(context.view).to receive(:count_documents).once.and_return(1)
|
|
1308
1785
|
expect(context.send(method)).to eq(1)
|
|
1309
1786
|
end
|
|
1310
1787
|
|
|
@@ -1326,11 +1803,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1326
1803
|
describe "#limit" do
|
|
1327
1804
|
|
|
1328
1805
|
let!(:depeche_mode) do
|
|
1329
|
-
Band.create(name: "Depeche Mode")
|
|
1806
|
+
Band.create!(name: "Depeche Mode")
|
|
1330
1807
|
end
|
|
1331
1808
|
|
|
1332
1809
|
let!(:new_order) do
|
|
1333
|
-
Band.create(name: "New Order")
|
|
1810
|
+
Band.create!(name: "New Order")
|
|
1334
1811
|
end
|
|
1335
1812
|
|
|
1336
1813
|
let(:criteria) do
|
|
@@ -1349,8 +1826,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1349
1826
|
describe "#map" do
|
|
1350
1827
|
|
|
1351
1828
|
before do
|
|
1352
|
-
Band.create(name: "Depeche Mode")
|
|
1353
|
-
Band.create(name: "New Order")
|
|
1829
|
+
Band.create!(name: "Depeche Mode")
|
|
1830
|
+
Band.create!(name: "New Order")
|
|
1354
1831
|
end
|
|
1355
1832
|
|
|
1356
1833
|
let(:criteria) do
|
|
@@ -1379,11 +1856,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1379
1856
|
describe "#map_reduce" do
|
|
1380
1857
|
|
|
1381
1858
|
let!(:depeche_mode) do
|
|
1382
|
-
Band.create(name: "Depeche Mode", likes: 200)
|
|
1859
|
+
Band.create!(name: "Depeche Mode", likes: 200)
|
|
1383
1860
|
end
|
|
1384
1861
|
|
|
1385
1862
|
let!(:tool) do
|
|
1386
|
-
Band.create(name: "Tool", likes: 100)
|
|
1863
|
+
Band.create!(name: "Tool", likes: 100)
|
|
1387
1864
|
end
|
|
1388
1865
|
|
|
1389
1866
|
let(:map) do
|
|
@@ -1404,6 +1881,10 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1404
1881
|
}}
|
|
1405
1882
|
end
|
|
1406
1883
|
|
|
1884
|
+
let(:ordered_results) do
|
|
1885
|
+
results['results'].sort_by { |doc| doc['_id'] }
|
|
1886
|
+
end
|
|
1887
|
+
|
|
1407
1888
|
context "when no selection is provided" do
|
|
1408
1889
|
|
|
1409
1890
|
let(:criteria) do
|
|
@@ -1435,36 +1916,40 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1435
1916
|
end
|
|
1436
1917
|
|
|
1437
1918
|
it "contains the entire raw results" do
|
|
1438
|
-
expect(
|
|
1919
|
+
expect(ordered_results).to eq([
|
|
1439
1920
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }},
|
|
1440
1921
|
{ "_id" => "Tool", "value" => { "likes" => 100 }}
|
|
1441
1922
|
])
|
|
1442
1923
|
end
|
|
1443
1924
|
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
end
|
|
1925
|
+
context 'when statistics are available' do
|
|
1926
|
+
max_server_version '4.2'
|
|
1447
1927
|
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
})
|
|
1452
|
-
end
|
|
1928
|
+
it "contains the execution time" do
|
|
1929
|
+
expect(results.time).to_not be_nil
|
|
1930
|
+
end
|
|
1453
1931
|
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1932
|
+
it "contains the count statistics" do
|
|
1933
|
+
expect(results["counts"]).to eq({
|
|
1934
|
+
"input" => 2, "emit" => 2, "reduce" => 0, "output" => 2
|
|
1935
|
+
})
|
|
1936
|
+
end
|
|
1457
1937
|
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1938
|
+
it "contains the input count" do
|
|
1939
|
+
expect(results.input).to eq(2)
|
|
1940
|
+
end
|
|
1461
1941
|
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1942
|
+
it "contains the emitted count" do
|
|
1943
|
+
expect(results.emitted).to eq(2)
|
|
1944
|
+
end
|
|
1945
|
+
|
|
1946
|
+
it "contains the reduced count" do
|
|
1947
|
+
expect(results.reduced).to eq(0)
|
|
1948
|
+
end
|
|
1465
1949
|
|
|
1466
|
-
|
|
1467
|
-
|
|
1950
|
+
it "contains the output count" do
|
|
1951
|
+
expect(results.output).to eq(2)
|
|
1952
|
+
end
|
|
1468
1953
|
end
|
|
1469
1954
|
end
|
|
1470
1955
|
|
|
@@ -1493,35 +1978,39 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1493
1978
|
end
|
|
1494
1979
|
|
|
1495
1980
|
it "contains the entire raw results" do
|
|
1496
|
-
expect(
|
|
1981
|
+
expect(ordered_results).to eq([
|
|
1497
1982
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }}
|
|
1498
1983
|
])
|
|
1499
1984
|
end
|
|
1500
1985
|
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
end
|
|
1986
|
+
context 'when statistics are available' do
|
|
1987
|
+
max_server_version '4.2'
|
|
1504
1988
|
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
})
|
|
1509
|
-
end
|
|
1989
|
+
it "contains the execution time" do
|
|
1990
|
+
expect(results.time).to_not be_nil
|
|
1991
|
+
end
|
|
1510
1992
|
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1993
|
+
it "contains the count statistics" do
|
|
1994
|
+
expect(results["counts"]).to eq({
|
|
1995
|
+
"input" => 1, "emit" => 1, "reduce" => 0, "output" => 1
|
|
1996
|
+
})
|
|
1997
|
+
end
|
|
1514
1998
|
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1999
|
+
it "contains the input count" do
|
|
2000
|
+
expect(results.input).to eq(1)
|
|
2001
|
+
end
|
|
1518
2002
|
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
2003
|
+
it "contains the emitted count" do
|
|
2004
|
+
expect(results.emitted).to eq(1)
|
|
2005
|
+
end
|
|
1522
2006
|
|
|
1523
|
-
|
|
1524
|
-
|
|
2007
|
+
it "contains the reduced count" do
|
|
2008
|
+
expect(results.reduced).to eq(0)
|
|
2009
|
+
end
|
|
2010
|
+
|
|
2011
|
+
it "contains the output count" do
|
|
2012
|
+
expect(results.output).to eq(1)
|
|
2013
|
+
end
|
|
1525
2014
|
end
|
|
1526
2015
|
end
|
|
1527
2016
|
|
|
@@ -1561,7 +2050,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1561
2050
|
end
|
|
1562
2051
|
|
|
1563
2052
|
it "contains the entire raw results" do
|
|
1564
|
-
expect(
|
|
2053
|
+
expect(ordered_results).to eq([
|
|
1565
2054
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }},
|
|
1566
2055
|
{ "_id" => "Tool", "value" => { "likes" => 100 }}
|
|
1567
2056
|
])
|
|
@@ -1569,6 +2058,9 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1569
2058
|
end
|
|
1570
2059
|
|
|
1571
2060
|
context "when limiting is provided" do
|
|
2061
|
+
# map/reduce with limit is not supported on sharded clusters:
|
|
2062
|
+
# https://jira.mongodb.org/browse/SERVER-2099
|
|
2063
|
+
require_topology :single, :replica_set
|
|
1572
2064
|
|
|
1573
2065
|
let(:criteria) do
|
|
1574
2066
|
Band.limit(1)
|
|
@@ -1674,6 +2166,67 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1674
2166
|
end
|
|
1675
2167
|
end
|
|
1676
2168
|
|
|
2169
|
+
context "when the output specifies a different db" do
|
|
2170
|
+
# Limit is not supported in sharded clusters
|
|
2171
|
+
require_topology :single, :replica_set
|
|
2172
|
+
|
|
2173
|
+
let(:criteria) do
|
|
2174
|
+
Band.limit(1)
|
|
2175
|
+
end
|
|
2176
|
+
|
|
2177
|
+
let(:context) do
|
|
2178
|
+
described_class.new(criteria)
|
|
2179
|
+
end
|
|
2180
|
+
|
|
2181
|
+
after do
|
|
2182
|
+
Band.with(database: 'another-db') do |b|
|
|
2183
|
+
b.all.delete
|
|
2184
|
+
end
|
|
2185
|
+
end
|
|
2186
|
+
|
|
2187
|
+
context 'when db is a string' do
|
|
2188
|
+
|
|
2189
|
+
let(:results) do
|
|
2190
|
+
context.map_reduce(map, reduce).out(merge: :mr_output, db: 'another-db')
|
|
2191
|
+
end
|
|
2192
|
+
|
|
2193
|
+
it "returns the correct number of documents" do
|
|
2194
|
+
expect(results.count).to eq(1)
|
|
2195
|
+
end
|
|
2196
|
+
|
|
2197
|
+
it "contains the entire results" do
|
|
2198
|
+
expect(results).to eq([
|
|
2199
|
+
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }}
|
|
2200
|
+
])
|
|
2201
|
+
end
|
|
2202
|
+
|
|
2203
|
+
it 'writes to the specified db' do
|
|
2204
|
+
expect(Band.mongo_client.with(database: 'another-db')[:mr_output].find.count).to eq(1)
|
|
2205
|
+
end
|
|
2206
|
+
end
|
|
2207
|
+
|
|
2208
|
+
context 'when db is a symbol' do
|
|
2209
|
+
|
|
2210
|
+
let(:results) do
|
|
2211
|
+
context.map_reduce(map, reduce).out(merge: :mr_output, 'db' => 'another-db')
|
|
2212
|
+
end
|
|
2213
|
+
|
|
2214
|
+
it "returns the correct number of documents" do
|
|
2215
|
+
expect(results.count).to eq(1)
|
|
2216
|
+
end
|
|
2217
|
+
|
|
2218
|
+
it "contains the entire results" do
|
|
2219
|
+
expect(results).to eq([
|
|
2220
|
+
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }}
|
|
2221
|
+
])
|
|
2222
|
+
end
|
|
2223
|
+
|
|
2224
|
+
it 'writes to the specified db' do
|
|
2225
|
+
expect(Band.mongo_client.with(database: 'another-db')[:mr_output].find.count).to eq(1)
|
|
2226
|
+
end
|
|
2227
|
+
end
|
|
2228
|
+
end
|
|
2229
|
+
|
|
1677
2230
|
context "when providing no output" do
|
|
1678
2231
|
|
|
1679
2232
|
let(:criteria) do
|
|
@@ -1732,11 +2285,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1732
2285
|
describe "#skip" do
|
|
1733
2286
|
|
|
1734
2287
|
let!(:depeche_mode) do
|
|
1735
|
-
Band.create(name: "Depeche Mode")
|
|
2288
|
+
Band.create!(name: "Depeche Mode")
|
|
1736
2289
|
end
|
|
1737
2290
|
|
|
1738
2291
|
let!(:new_order) do
|
|
1739
|
-
Band.create(name: "New Order")
|
|
2292
|
+
Band.create!(name: "New Order")
|
|
1740
2293
|
end
|
|
1741
2294
|
|
|
1742
2295
|
let(:criteria) do
|
|
@@ -1755,11 +2308,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1755
2308
|
describe "#sort" do
|
|
1756
2309
|
|
|
1757
2310
|
let!(:depeche_mode) do
|
|
1758
|
-
Band.create(name: "Depeche Mode")
|
|
2311
|
+
Band.create!(name: "Depeche Mode")
|
|
1759
2312
|
end
|
|
1760
2313
|
|
|
1761
2314
|
let!(:new_order) do
|
|
1762
|
-
Band.create(name: "New Order")
|
|
2315
|
+
Band.create!(name: "New Order")
|
|
1763
2316
|
end
|
|
1764
2317
|
|
|
1765
2318
|
let(:criteria) do
|
|
@@ -1798,11 +2351,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1798
2351
|
describe "#update" do
|
|
1799
2352
|
|
|
1800
2353
|
let!(:depeche_mode) do
|
|
1801
|
-
Band.create(name: "Depeche Mode")
|
|
2354
|
+
Band.create!(name: "Depeche Mode")
|
|
1802
2355
|
end
|
|
1803
2356
|
|
|
1804
2357
|
let!(:new_order) do
|
|
1805
|
-
Band.create(name: "New Order")
|
|
2358
|
+
Band.create!(name: "New Order")
|
|
1806
2359
|
end
|
|
1807
2360
|
|
|
1808
2361
|
let(:criteria) do
|
|
@@ -1816,11 +2369,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1816
2369
|
context "when adding an element to a HABTM set" do
|
|
1817
2370
|
|
|
1818
2371
|
let(:person) do
|
|
1819
|
-
Person.create
|
|
2372
|
+
Person.create!
|
|
1820
2373
|
end
|
|
1821
2374
|
|
|
1822
2375
|
let(:preference) do
|
|
1823
|
-
Preference.create
|
|
2376
|
+
Preference.create!
|
|
1824
2377
|
end
|
|
1825
2378
|
|
|
1826
2379
|
before do
|
|
@@ -1949,16 +2502,52 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1949
2502
|
expect(context.update).to be false
|
|
1950
2503
|
end
|
|
1951
2504
|
end
|
|
2505
|
+
|
|
2506
|
+
context 'when provided array filters' do
|
|
2507
|
+
min_server_version '3.6'
|
|
2508
|
+
|
|
2509
|
+
before do
|
|
2510
|
+
Band.delete_all
|
|
2511
|
+
b = Band.new(name: 'Depeche Mode')
|
|
2512
|
+
b.labels << Label.new(name: 'Warner')
|
|
2513
|
+
b.labels << Label.new(name: 'Sony')
|
|
2514
|
+
b.labels << Label.new(name: 'Cbs')
|
|
2515
|
+
b.save!
|
|
2516
|
+
|
|
2517
|
+
b = Band.new(name: 'FKA Twigs')
|
|
2518
|
+
b.labels << Label.new(name: 'Warner')
|
|
2519
|
+
b.labels << Label.new(name: 'Cbs')
|
|
2520
|
+
b.save!
|
|
2521
|
+
end
|
|
2522
|
+
|
|
2523
|
+
|
|
2524
|
+
let(:criteria) do
|
|
2525
|
+
Band.where(name: 'Depeche Mode')
|
|
2526
|
+
end
|
|
2527
|
+
|
|
2528
|
+
let!(:update) do
|
|
2529
|
+
context.update({ '$set' => { 'labels.$[i].name' => 'Sony' } },
|
|
2530
|
+
array_filters: [{ 'i.name' => 'Cbs' }])
|
|
2531
|
+
end
|
|
2532
|
+
|
|
2533
|
+
it 'applies the array filters' do
|
|
2534
|
+
expect(Band.where(name: 'Depeche Mode').first.labels.collect(&:name)).to match_array(['Warner', 'Sony', 'Sony'])
|
|
2535
|
+
end
|
|
2536
|
+
|
|
2537
|
+
it 'does not affect other documents' do
|
|
2538
|
+
expect(Band.where(name: 'FKA Twigs').first.labels.collect(&:name)).to match_array(['Warner', 'Cbs'])
|
|
2539
|
+
end
|
|
2540
|
+
end
|
|
1952
2541
|
end
|
|
1953
2542
|
|
|
1954
2543
|
describe "#update_all" do
|
|
1955
2544
|
|
|
1956
2545
|
let!(:depeche_mode) do
|
|
1957
|
-
Band.create(name: "Depeche Mode", origin: "Essex")
|
|
2546
|
+
Band.create!(name: "Depeche Mode", origin: "Essex")
|
|
1958
2547
|
end
|
|
1959
2548
|
|
|
1960
2549
|
let!(:new_order) do
|
|
1961
|
-
Band.create(name: "New Order")
|
|
2550
|
+
Band.create!(name: "New Order")
|
|
1962
2551
|
end
|
|
1963
2552
|
|
|
1964
2553
|
let(:criteria) do
|
|
@@ -2086,11 +2675,47 @@ describe Mongoid::Contextual::Mongo do
|
|
|
2086
2675
|
expect(context.update_all).to be false
|
|
2087
2676
|
end
|
|
2088
2677
|
end
|
|
2678
|
+
|
|
2679
|
+
context 'when provided array filters' do
|
|
2680
|
+
min_server_version '3.6'
|
|
2681
|
+
|
|
2682
|
+
before do
|
|
2683
|
+
Band.delete_all
|
|
2684
|
+
b = Band.new(name: 'Depeche Mode')
|
|
2685
|
+
b.labels << Label.new(name: 'Warner')
|
|
2686
|
+
b.labels << Label.new(name: 'Sony')
|
|
2687
|
+
b.labels << Label.new(name: 'Cbs')
|
|
2688
|
+
b.save!
|
|
2689
|
+
|
|
2690
|
+
b = Band.new(name: 'FKA Twigs')
|
|
2691
|
+
b.labels << Label.new(name: 'Warner')
|
|
2692
|
+
b.labels << Label.new(name: 'Cbs')
|
|
2693
|
+
b.save!
|
|
2694
|
+
end
|
|
2695
|
+
|
|
2696
|
+
|
|
2697
|
+
let(:criteria) do
|
|
2698
|
+
Band.all
|
|
2699
|
+
end
|
|
2700
|
+
|
|
2701
|
+
let!(:update) do
|
|
2702
|
+
context.update_all({ '$set' => { 'labels.$[i].name' => 'Sony' } },
|
|
2703
|
+
array_filters: [{ 'i.name' => 'Cbs' }])
|
|
2704
|
+
end
|
|
2705
|
+
|
|
2706
|
+
it 'applies the array filters' do
|
|
2707
|
+
expect(Band.where(name: 'Depeche Mode').first.labels.collect(&:name)).to match_array(['Warner', 'Sony', 'Sony'])
|
|
2708
|
+
end
|
|
2709
|
+
|
|
2710
|
+
it 'updates all documents' do
|
|
2711
|
+
expect(Band.where(name: 'FKA Twigs').first.labels.collect(&:name)).to match_array(['Warner', 'Sony'])
|
|
2712
|
+
end
|
|
2713
|
+
end
|
|
2089
2714
|
end
|
|
2090
2715
|
|
|
2091
2716
|
describe '#pipeline' do
|
|
2092
2717
|
|
|
2093
|
-
context 'when the criteria has a selector'
|
|
2718
|
+
context 'when the criteria has a selector' do
|
|
2094
2719
|
|
|
2095
2720
|
before do
|
|
2096
2721
|
Artist.index(name: "text")
|
|
@@ -2110,7 +2735,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
2110
2735
|
end
|
|
2111
2736
|
|
|
2112
2737
|
it 'creates a pipeline with the selector as one of the $match criteria' do
|
|
2113
|
-
expect(pipeline_match).to include({
|
|
2738
|
+
expect(pipeline_match).to include({ '$text' => { '$search' => "New Order" } })
|
|
2114
2739
|
end
|
|
2115
2740
|
|
|
2116
2741
|
it 'creates a pipeline with the $exists operator as one of the $match criteria' do
|