mongoid 7.0.0 → 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 +34 -20
- data/Rakefile +75 -5
- data/lib/config/locales/en.yml +129 -70
- data/lib/mongoid/association/accessors.rb +143 -80
- data/lib/mongoid/association/bindable.rb +7 -26
- data/lib/mongoid/association/builders.rb +4 -12
- data/lib/mongoid/association/constrainable.rb +5 -6
- data/lib/mongoid/association/depending.rb +31 -19
- data/lib/mongoid/association/eager_loadable.rb +2 -3
- data/lib/mongoid/association/embedded/batchable.rb +19 -45
- data/lib/mongoid/association/embedded/cyclic.rb +10 -17
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +3 -7
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +7 -4
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +14 -24
- data/lib/mongoid/association/embedded/embedded_in.rb +6 -26
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +4 -8
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +8 -5
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +113 -93
- data/lib/mongoid/association/embedded/embeds_many.rb +8 -35
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +4 -8
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +9 -6
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +45 -30
- data/lib/mongoid/association/embedded/embeds_one.rb +8 -31
- data/lib/mongoid/association/embedded.rb +2 -0
- data/lib/mongoid/association/macros.rb +44 -41
- data/lib/mongoid/association/many.rb +18 -32
- data/lib/mongoid/association/marshalable.rb +3 -6
- data/lib/mongoid/association/nested/many.rb +18 -27
- data/lib/mongoid/association/nested/nested_buildable.rb +5 -11
- data/lib/mongoid/association/nested/one.rb +16 -27
- data/lib/mongoid/association/nested.rb +3 -3
- data/lib/mongoid/association/one.rb +4 -11
- data/lib/mongoid/association/options.rb +8 -38
- data/lib/mongoid/association/proxy.rb +37 -36
- data/lib/mongoid/association/referenced/auto_save.rb +5 -11
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +4 -9
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +11 -9
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +40 -3
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +16 -27
- data/lib/mongoid/association/referenced/belongs_to.rb +14 -36
- data/lib/mongoid/association/referenced/counter_cache.rb +4 -15
- data/lib/mongoid/association/referenced/eager.rb +40 -36
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +12 -11
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +38 -56
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +23 -43
- data/lib/mongoid/association/referenced/has_many/binding.rb +3 -6
- data/lib/mongoid/association/referenced/has_many/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +444 -456
- data/lib/mongoid/association/referenced/has_many/proxy.rb +78 -111
- data/lib/mongoid/association/referenced/has_many.rb +18 -42
- data/lib/mongoid/association/referenced/has_one/binding.rb +4 -9
- data/lib/mongoid/association/referenced/has_one/buildable.rb +20 -6
- data/lib/mongoid/association/referenced/has_one/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +13 -26
- data/lib/mongoid/association/referenced/has_one/proxy.rb +23 -25
- data/lib/mongoid/association/referenced/has_one.rb +13 -33
- data/lib/mongoid/association/referenced/syncable.rb +7 -22
- data/lib/mongoid/association/referenced.rb +2 -0
- data/lib/mongoid/association/reflections.rb +7 -6
- data/lib/mongoid/association/relatable.rb +118 -78
- data/lib/mongoid/association.rb +8 -23
- data/lib/mongoid/atomic/modifiers.rb +27 -51
- data/lib/mongoid/atomic/paths/embedded/many.rb +4 -7
- data/lib/mongoid/atomic/paths/embedded/one.rb +4 -7
- 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 +42 -47
- data/lib/mongoid/attributes/dynamic.rb +18 -32
- data/lib/mongoid/attributes/nested.rb +21 -13
- data/lib/mongoid/attributes/processing.rb +9 -24
- data/lib/mongoid/attributes/projector.rb +119 -0
- data/lib/mongoid/attributes/readonly.rb +3 -6
- data/lib/mongoid/attributes.rb +75 -81
- data/lib/mongoid/cacheable.rb +6 -9
- data/lib/mongoid/changeable.rb +6 -60
- data/lib/mongoid/clients/factory.rb +42 -17
- data/lib/mongoid/clients/options.rb +16 -17
- data/lib/mongoid/clients/sessions.rb +24 -12
- data/lib/mongoid/clients/storage_options.rb +7 -12
- data/lib/mongoid/clients/validators/storage.rb +2 -9
- data/lib/mongoid/clients/validators.rb +2 -1
- data/lib/mongoid/clients.rb +3 -10
- data/lib/mongoid/composable.rb +5 -9
- 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 -41
- 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 +29 -31
- data/lib/mongoid/contextual/command.rb +2 -5
- data/lib/mongoid/contextual/geo_near.rb +6 -37
- data/lib/mongoid/contextual/map_reduce.rb +9 -37
- data/lib/mongoid/contextual/memory.rb +12 -65
- data/lib/mongoid/contextual/mongo.rb +163 -85
- data/lib/mongoid/contextual/none.rb +44 -28
- data/lib/mongoid/contextual/queryable.rb +2 -3
- data/lib/mongoid/contextual.rb +7 -9
- data/lib/mongoid/copyable.rb +16 -10
- data/lib/mongoid/criteria/findable.rb +12 -15
- data/lib/mongoid/criteria/includable.rb +8 -15
- data/lib/mongoid/criteria/inspectable.rb +2 -3
- data/lib/mongoid/criteria/marshalable.rb +2 -5
- data/lib/mongoid/criteria/modifiable.rb +15 -21
- data/lib/mongoid/criteria/options.rb +4 -5
- data/lib/mongoid/criteria/permission.rb +2 -1
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -13
- data/lib/mongoid/criteria/queryable/expandable.rb +68 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +4 -27
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -4
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +3 -4
- data/lib/mongoid/criteria/queryable/extensions/date.rb +3 -8
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +5 -11
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +3 -26
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +3 -14
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +4 -13
- data/lib/mongoid/criteria/queryable/extensions/object.rb +4 -29
- data/lib/mongoid/criteria/queryable/extensions/range.rb +41 -17
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +9 -16
- data/lib/mongoid/criteria/queryable/extensions/set.rb +3 -4
- data/lib/mongoid/criteria/queryable/extensions/string.rb +3 -18
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -10
- data/lib/mongoid/criteria/queryable/extensions/time.rb +4 -9
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +13 -6
- data/lib/mongoid/criteria/queryable/extensions.rb +1 -4
- data/lib/mongoid/criteria/queryable/key.rb +101 -27
- data/lib/mongoid/criteria/queryable/macroable.rb +3 -4
- data/lib/mongoid/criteria/queryable/mergeable.rb +184 -44
- data/lib/mongoid/criteria/queryable/optional.rb +5 -48
- data/lib/mongoid/criteria/queryable/options.rb +2 -19
- data/lib/mongoid/criteria/queryable/pipeline.rb +5 -15
- data/lib/mongoid/criteria/queryable/selectable.rb +436 -158
- data/lib/mongoid/criteria/queryable/selector.rb +45 -55
- data/lib/mongoid/criteria/queryable/smash.rb +2 -11
- data/lib/mongoid/criteria/queryable/storable.rb +237 -0
- data/lib/mongoid/criteria/queryable.rb +7 -9
- data/lib/mongoid/criteria/scopable.rb +27 -19
- data/lib/mongoid/criteria.rb +86 -73
- data/lib/mongoid/document.rb +37 -77
- data/lib/mongoid/equality.rb +29 -12
- data/lib/mongoid/errors/ambiguous_relationship.rb +4 -5
- 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 +2 -3
- 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 +2 -5
- 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 +2 -5
- data/lib/mongoid/errors/invalid_query.rb +40 -0
- data/lib/mongoid/errors/invalid_relation.rb +4 -9
- data/lib/mongoid/errors/invalid_relation_option.rb +4 -5
- data/lib/mongoid/errors/invalid_scope.rb +2 -3
- data/lib/mongoid/errors/invalid_session_use.rb +3 -6
- 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 +2 -3
- 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 +12 -1
- data/lib/mongoid/evolvable.rb +4 -5
- data/lib/mongoid/extensions/array.rb +28 -37
- data/lib/mongoid/extensions/big_decimal.rb +3 -12
- data/lib/mongoid/extensions/boolean.rb +3 -5
- data/lib/mongoid/extensions/date.rb +13 -12
- data/lib/mongoid/extensions/date_time.rb +4 -12
- data/lib/mongoid/extensions/decimal128.rb +2 -5
- data/lib/mongoid/extensions/false_class.rb +4 -7
- data/lib/mongoid/extensions/float.rb +5 -10
- data/lib/mongoid/extensions/hash.rb +51 -36
- 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 +17 -44
- data/lib/mongoid/extensions/object_id.rb +2 -7
- data/lib/mongoid/extensions/range.rb +2 -11
- data/lib/mongoid/extensions/regexp.rb +4 -4
- data/lib/mongoid/extensions/set.rb +2 -7
- data/lib/mongoid/extensions/string.rb +24 -42
- data/lib/mongoid/extensions/symbol.rb +2 -7
- data/lib/mongoid/extensions/time.rb +12 -9
- 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 -3
- data/lib/mongoid/factory.rb +52 -13
- data/lib/mongoid/fields/foreign_key.rb +3 -22
- data/lib/mongoid/fields/localized.rb +2 -11
- data/lib/mongoid/fields/standard.rb +6 -36
- data/lib/mongoid/fields/validators/macro.rb +36 -18
- data/lib/mongoid/fields/validators.rb +2 -1
- data/lib/mongoid/fields.rb +115 -64
- data/lib/mongoid/findable.rb +59 -23
- data/lib/mongoid/indexable/specification.rb +3 -16
- data/lib/mongoid/indexable/validators/options.rb +2 -7
- data/lib/mongoid/indexable.rb +10 -25
- data/lib/mongoid/inspectable.rb +4 -11
- data/lib/mongoid/interceptable.rb +13 -30
- data/lib/mongoid/loggable.rb +13 -16
- data/lib/mongoid/matchable.rb +3 -150
- 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 +6 -23
- data/lib/mongoid/persistable/deletable.rb +7 -23
- data/lib/mongoid/persistable/destroyable.rb +11 -10
- data/lib/mongoid/persistable/incrementable.rb +6 -7
- data/lib/mongoid/persistable/logical.rb +4 -6
- 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 +33 -21
- data/lib/mongoid/persistable/upsertable.rb +4 -9
- data/lib/mongoid/persistable.rb +134 -39
- data/lib/mongoid/persistence_context.rb +51 -45
- data/lib/mongoid/positional.rb +3 -6
- data/lib/mongoid/query_cache.rb +138 -106
- data/lib/mongoid/railtie.rb +20 -16
- 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 +24 -29
- data/lib/mongoid/shardable.rb +80 -17
- data/lib/mongoid/stateful.rb +3 -10
- data/lib/mongoid/stringified_symbol.rb +52 -0
- data/lib/mongoid/tasks/database.rake +12 -5
- data/lib/mongoid/tasks/database.rb +87 -7
- data/lib/mongoid/threaded/lifecycle.rb +2 -21
- data/lib/mongoid/threaded.rb +38 -55
- 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 +177 -57
- 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 +8 -13
- data/lib/mongoid/validatable/queryable.rb +2 -3
- data/lib/mongoid/validatable/uniqueness.rb +21 -34
- data/lib/mongoid/validatable.rb +8 -27
- data/lib/mongoid/version.rb +3 -2
- data/lib/mongoid.rb +33 -15
- data/lib/rails/generators/mongoid/config/config_generator.rb +10 -2
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +45 -30
- 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 +13 -3
- 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 +323 -77
- data/spec/mongoid/association/auto_save_spec.rb +74 -33
- data/spec/mongoid/association/builders_spec.rb +3 -1
- data/spec/mongoid/association/constrainable_spec.rb +2 -0
- data/spec/mongoid/association/counter_cache_spec.rb +34 -32
- data/spec/mongoid/association/depending_spec.rb +678 -332
- data/spec/mongoid/association/eager_spec.rb +6 -4
- data/spec/mongoid/association/embedded/cyclic_spec.rb +4 -2
- data/spec/mongoid/association/embedded/dirty_spec.rb +4 -2
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +65 -13
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +61 -1
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +672 -144
- 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 +13 -1
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +23 -21
- 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 +49 -1
- data/spec/mongoid/association/macros_spec.rb +11 -9
- data/spec/mongoid/association/nested/many_spec.rb +2 -0
- data/spec/mongoid/association/nested/one_spec.rb +18 -12
- data/spec/mongoid/association/options_spec.rb +2 -0
- data/spec/mongoid/association/polymorphic_spec.rb +61 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -0
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +57 -16
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +266 -17
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +99 -58
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +57 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +95 -12
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +3 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +28 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +67 -4
- 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 +351 -164
- 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 +49 -5
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +3 -1
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +23 -0
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +40 -9
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +407 -121
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +23 -0
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +681 -340
- 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 +26 -3
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +2 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +53 -7
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +34 -4
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +28 -26
- 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 +144 -5
- data/spec/mongoid/association/reflections_spec.rb +2 -0
- data/spec/mongoid/association/syncable_spec.rb +33 -31
- data/spec/mongoid/association_spec.rb +2 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +49 -0
- 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 +31 -6
- data/spec/mongoid/attributes/dynamic_spec.rb +152 -0
- data/spec/mongoid/attributes/nested_spec.rb +87 -69
- 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 +24 -22
- data/spec/mongoid/attributes_spec.rb +382 -35
- data/spec/mongoid/cacheable_spec.rb +3 -1
- data/spec/mongoid/changeable_spec.rb +60 -35
- data/spec/mongoid/clients/factory_spec.rb +148 -34
- data/spec/mongoid/clients/options_spec.rb +102 -66
- data/spec/mongoid/clients/sessions_spec.rb +39 -29
- data/spec/mongoid/clients/transactions_spec.rb +415 -0
- data/spec/mongoid/clients_spec.rb +78 -16
- data/spec/mongoid/composable_spec.rb +2 -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 +280 -2
- 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 +242 -81
- 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 +25 -23
- data/spec/mongoid/contextual/mongo_spec.rb +491 -144
- data/spec/mongoid/contextual/none_spec.rb +9 -81
- data/spec/mongoid/copyable_spec.rb +261 -30
- 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 +100 -48
- data/spec/mongoid/criteria/options_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +61 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +5 -3
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +35 -17
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +53 -0
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +239 -178
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +9 -7
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +42 -23
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +30 -1
- data/spec/mongoid/criteria/queryable/key_spec.rb +50 -6
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +145 -12
- data/spec/mongoid/criteria/queryable/optional_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/options_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +3 -1
- 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 +994 -2900
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +41 -2
- data/spec/mongoid/criteria/queryable/smash_spec.rb +2 -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 +807 -464
- 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 +182 -28
- 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 +4 -2
- 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 +22 -8
- 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 +25 -43
- data/spec/mongoid/extensions/big_decimal_spec.rb +11 -9
- data/spec/mongoid/extensions/binary_spec.rb +2 -0
- data/spec/mongoid/extensions/boolean_spec.rb +2 -0
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +335 -0
- data/spec/mongoid/extensions/date_spec.rb +8 -160
- data/spec/mongoid/extensions/date_time_spec.rb +17 -60
- data/spec/mongoid/extensions/decimal128_spec.rb +2 -0
- data/spec/mongoid/extensions/false_class_spec.rb +3 -1
- data/spec/mongoid/extensions/float_spec.rb +17 -3
- data/spec/mongoid/extensions/hash_spec.rb +105 -0
- data/spec/mongoid/extensions/integer_spec.rb +14 -2
- 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 +13 -24
- data/spec/mongoid/extensions/range_spec.rb +2 -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 +95 -34
- 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 +29 -0
- data/spec/mongoid/extensions/time_with_zone_spec.rb +33 -0
- data/spec/mongoid/extensions/true_class_spec.rb +3 -1
- data/spec/mongoid/extensions_spec.rb +16 -2
- data/spec/mongoid/factory_spec.rb +287 -27
- data/spec/mongoid/fields/foreign_key_spec.rb +2 -0
- data/spec/mongoid/fields/localized_spec.rb +6 -4
- data/spec/mongoid/fields/standard_spec.rb +2 -0
- data/spec/mongoid/fields_spec.rb +419 -37
- data/spec/mongoid/findable_spec.rb +54 -20
- data/spec/mongoid/indexable/specification_spec.rb +2 -0
- data/spec/mongoid/indexable_spec.rb +36 -6
- data/spec/mongoid/inspectable_spec.rb +39 -2
- data/spec/mongoid/interceptable_spec.rb +168 -96
- 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 +112 -27
- data/spec/mongoid/persistable/deletable_spec.rb +273 -11
- data/spec/mongoid/persistable/destroyable_spec.rb +201 -11
- 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 +188 -25
- data/spec/mongoid/persistable/settable_spec.rb +182 -17
- data/spec/mongoid/persistable/unsettable_spec.rb +19 -3
- data/spec/mongoid/persistable/updatable_spec.rb +45 -23
- data/spec/mongoid/persistable/upsertable_spec.rb +4 -2
- data/spec/mongoid/persistable_spec.rb +85 -9
- data/spec/mongoid/persistence_context_spec.rb +3 -1
- data/spec/mongoid/positional_spec.rb +2 -0
- data/spec/mongoid/query_cache_middleware_spec.rb +68 -0
- data/spec/mongoid/query_cache_spec.rb +575 -48
- data/spec/mongoid/relations/proxy_spec.rb +9 -7
- data/spec/mongoid/reloadable_spec.rb +298 -20
- data/spec/mongoid/scopable_spec.rb +82 -22
- data/spec/mongoid/selectable_spec.rb +8 -6
- data/spec/mongoid/serializable_spec.rb +160 -29
- data/spec/mongoid/shardable_models.rb +61 -0
- data/spec/mongoid/shardable_spec.rb +116 -17
- 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/{association/touchable_spec.rb → touchable_spec.rb} +206 -38
- data/spec/mongoid/touchable_spec_models.rb +53 -0
- data/spec/mongoid/traversable_spec.rb +1167 -1
- data/spec/mongoid/validatable/associated_spec.rb +2 -0
- 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 +28 -22
- data/spec/mongoid/validatable/uniqueness_spec.rb +102 -73
- data/spec/mongoid/validatable_spec.rb +5 -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 +69 -80
- 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/{app → support}/models/account.rb +3 -1
- data/spec/{app → support}/models/acolyte.rb +2 -0
- data/spec/{app → support}/models/actor.rb +3 -1
- data/spec/support/models/actress.rb +4 -0
- data/spec/{app → support}/models/address.rb +6 -0
- data/spec/{app → support}/models/address_component.rb +2 -0
- data/spec/{app → support}/models/address_number.rb +2 -0
- data/spec/{app → support}/models/agency.rb +2 -0
- data/spec/{app → support}/models/agent.rb +2 -0
- data/spec/{app → support}/models/album.rb +2 -0
- data/spec/{app → support}/models/alert.rb +2 -0
- data/spec/{app → support}/models/animal.rb +2 -0
- data/spec/{app → support}/models/answer.rb +2 -0
- data/spec/{app → support}/models/appointment.rb +2 -0
- data/spec/support/models/armrest.rb +9 -0
- data/spec/support/models/array_field.rb +7 -0
- data/spec/{app → support}/models/article.rb +2 -0
- data/spec/{app → support}/models/artist.rb +4 -0
- data/spec/{app → support}/models/artwork.rb +2 -0
- data/spec/support/models/audible_sound.rb +3 -0
- data/spec/{app → support}/models/audio.rb +2 -0
- data/spec/{app → support}/models/augmentation.rb +2 -0
- data/spec/{app → support}/models/author.rb +2 -0
- data/spec/{app → support}/models/baby.rb +2 -0
- data/spec/{app → support}/models/band.rb +6 -0
- data/spec/{app → support}/models/bar.rb +2 -0
- data/spec/{app → support}/models/basic.rb +2 -0
- data/spec/support/models/bed.rb +3 -0
- data/spec/{app → support}/models/big_palette.rb +2 -0
- data/spec/{app → support}/models/birthday.rb +2 -0
- data/spec/support/models/bolt.rb +7 -0
- data/spec/{app → support}/models/bomb.rb +2 -0
- data/spec/{app → support}/models/book.rb +2 -0
- data/spec/{app → support}/models/breed.rb +2 -0
- data/spec/{app → support}/models/browser.rb +3 -1
- data/spec/{app → support}/models/building.rb +2 -0
- data/spec/{app → support}/models/building_address.rb +2 -0
- data/spec/{app → support}/models/bus.rb +2 -0
- data/spec/{app → support}/models/business.rb +2 -0
- data/spec/{app → support}/models/callback_test.rb +2 -0
- data/spec/{app → support}/models/canvas.rb +3 -1
- data/spec/support/models/car.rb +3 -0
- data/spec/{app → support}/models/cat.rb +2 -0
- data/spec/{app → support}/models/category.rb +2 -0
- data/spec/{app → support}/models/child.rb +2 -0
- data/spec/{app → support}/models/child_doc.rb +5 -3
- data/spec/{app → support}/models/church.rb +2 -0
- data/spec/{app → support}/models/circle.rb +2 -0
- data/spec/{app → support}/models/circuit.rb +2 -0
- data/spec/{app → support}/models/circus.rb +2 -0
- data/spec/{app → support}/models/code.rb +2 -0
- data/spec/support/models/coding/pull_request.rb +11 -0
- data/spec/support/models/coding.rb +3 -0
- data/spec/{app → support}/models/comment.rb +2 -0
- data/spec/{app → support}/models/company.rb +2 -0
- data/spec/{app → support}/models/consumption_period.rb +2 -0
- data/spec/{app → support}/models/contextable_item.rb +2 -0
- data/spec/{app → support}/models/contractor.rb +2 -0
- data/spec/{app → support}/models/cookie.rb +2 -0
- data/spec/{app → support}/models/country_code.rb +4 -0
- data/spec/{app → support}/models/courier_job.rb +2 -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/{app → support}/models/definition.rb +2 -0
- data/spec/support/models/delegating_patient.rb +15 -0
- data/spec/{app → support}/models/description.rb +2 -0
- data/spec/{app → support}/models/dictionary.rb +8 -0
- data/spec/{app → support}/models/division.rb +2 -0
- data/spec/{app → support}/models/doctor.rb +2 -0
- data/spec/{app → support}/models/dog.rb +2 -0
- data/spec/{app → support}/models/dokument.rb +2 -0
- data/spec/{app → support}/models/draft.rb +2 -0
- data/spec/{app → support}/models/dragon.rb +2 -0
- data/spec/{app → support}/models/driver.rb +3 -1
- data/spec/{app → support}/models/drug.rb +2 -0
- data/spec/{app → support}/models/dungeon.rb +2 -0
- data/spec/{app → support}/models/edit.rb +2 -0
- data/spec/{app → support}/models/email.rb +2 -0
- data/spec/{app → support}/models/employer.rb +2 -0
- data/spec/{app → support}/models/entry.rb +2 -0
- data/spec/support/models/eraser.rb +3 -0
- data/spec/{app → support}/models/even.rb +2 -0
- data/spec/{app → support}/models/event.rb +2 -0
- data/spec/{app → support}/models/exhibition.rb +2 -0
- data/spec/{app → support}/models/exhibitor.rb +2 -0
- data/spec/{app → support}/models/explosion.rb +2 -0
- data/spec/{app → support}/models/eye.rb +2 -0
- data/spec/{app → support}/models/eye_bowl.rb +2 -0
- data/spec/{app → support}/models/face.rb +2 -0
- data/spec/{app → support}/models/favorite.rb +2 -0
- data/spec/{app → support}/models/filesystem.rb +2 -0
- data/spec/{app → support}/models/fire_hydrant.rb +2 -0
- data/spec/{app → support}/models/firefox.rb +2 -0
- data/spec/{app → support}/models/fish.rb +2 -0
- data/spec/{app → support}/models/folder.rb +2 -0
- data/spec/{app → support}/models/folder_item.rb +2 -0
- data/spec/{app → support}/models/fruits.rb +2 -0
- data/spec/{app → support}/models/game.rb +2 -0
- data/spec/{app → support}/models/ghost.rb +2 -0
- data/spec/support/models/guitar.rb +4 -0
- data/spec/support/models/hole.rb +12 -0
- data/spec/{app → support}/models/home.rb +2 -0
- data/spec/{app → support}/models/house.rb +2 -0
- data/spec/{app → support}/models/html_writer.rb +2 -0
- data/spec/{app → support}/models/id_key.rb +2 -0
- data/spec/support/models/idnodef.rb +7 -0
- data/spec/{app → support}/models/image.rb +2 -0
- data/spec/{app → support}/models/implant.rb +2 -0
- data/spec/support/models/instrument.rb +8 -0
- data/spec/{app → support}/models/item.rb +3 -1
- data/spec/{app → support}/models/jar.rb +2 -0
- data/spec/{app → support}/models/kaleidoscope.rb +2 -0
- data/spec/{app → support}/models/kangaroo.rb +3 -1
- data/spec/{app → support}/models/label.rb +4 -1
- data/spec/{app → support}/models/language.rb +2 -0
- data/spec/{app → support}/models/lat_lng.rb +2 -0
- data/spec/{app → support}/models/league.rb +2 -0
- data/spec/support/models/learner.rb +4 -0
- data/spec/{app → support}/models/line_item.rb +2 -0
- data/spec/{app → support}/models/location.rb +2 -0
- data/spec/{app → support}/models/login.rb +2 -0
- data/spec/{app → support}/models/manufacturer.rb +2 -0
- data/spec/{app → support}/models/meat.rb +2 -0
- data/spec/{app → support}/models/membership.rb +2 -0
- data/spec/{app → support}/models/message.rb +2 -0
- data/spec/support/models/minim.rb +6 -0
- data/spec/{app → support}/models/mixed_drink.rb +2 -0
- data/spec/support/models/mop.rb +24 -0
- data/spec/{app → support}/models/movie.rb +2 -0
- data/spec/support/models/my_hash.rb +4 -0
- data/spec/{app → support}/models/name.rb +2 -0
- data/spec/support/models/name_only.rb +8 -0
- data/spec/{app → support}/models/node.rb +2 -0
- data/spec/{app → support}/models/note.rb +2 -0
- data/spec/support/models/nut.rb +7 -0
- data/spec/{app → support}/models/odd.rb +2 -0
- data/spec/support/models/order.rb +12 -0
- data/spec/{app → support}/models/ordered_post.rb +3 -1
- data/spec/{app → support}/models/ordered_preference.rb +2 -0
- data/spec/{app → support}/models/oscar.rb +2 -0
- data/spec/support/models/other_owner_object.rb +4 -0
- data/spec/{app → support}/models/override.rb +2 -0
- data/spec/{app → support}/models/ownable.rb +2 -0
- data/spec/{app → support}/models/owner.rb +4 -0
- data/spec/{app → support}/models/pack.rb +2 -0
- data/spec/{app → support}/models/page.rb +2 -0
- data/spec/{app → support}/models/page_question.rb +2 -0
- data/spec/{app → support}/models/palette.rb +3 -1
- data/spec/{app → support}/models/parent.rb +2 -0
- data/spec/{app → support}/models/parent_doc.rb +2 -0
- data/spec/support/models/passport.rb +13 -0
- data/spec/{app → support}/models/patient.rb +2 -0
- data/spec/{app → support}/models/pdf_writer.rb +2 -0
- data/spec/support/models/pencil.rb +3 -0
- data/spec/{app → support}/models/person.rb +21 -1
- data/spec/{app → support}/models/pet.rb +2 -0
- data/spec/{app → support}/models/pet_owner.rb +2 -0
- data/spec/{app → support}/models/phone.rb +5 -1
- data/spec/support/models/piano.rb +4 -0
- data/spec/{app → support}/models/pizza.rb +2 -0
- data/spec/{app → support}/models/player.rb +2 -0
- data/spec/{app → support}/models/post.rb +2 -0
- data/spec/{app → support}/models/post_genre.rb +2 -0
- data/spec/{app → support}/models/powerup.rb +2 -0
- data/spec/{app → support}/models/preference.rb +2 -0
- data/spec/{app → support}/models/princess.rb +2 -0
- data/spec/{app → support}/models/product.rb +2 -0
- data/spec/support/models/profile.rb +17 -0
- data/spec/{app → support}/models/pronunciation.rb +2 -0
- data/spec/{app → support}/models/pub.rb +2 -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/{app → support}/models/purchase.rb +2 -0
- data/spec/support/models/purchased_item.rb +10 -0
- data/spec/{app → support}/models/question.rb +2 -0
- data/spec/{app → support}/models/quiz.rb +2 -0
- data/spec/{app → support}/models/rating.rb +2 -0
- data/spec/{app → support}/models/record.rb +2 -0
- data/spec/{app → support}/models/registry.rb +2 -0
- data/spec/{app → support}/models/role.rb +2 -0
- data/spec/{app → support}/models/root_category.rb +2 -0
- data/spec/{app → support}/models/sandwich.rb +2 -0
- data/spec/{app → support}/models/scheduler.rb +2 -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/{app → support}/models/seo.rb +2 -0
- data/spec/support/models/series.rb +7 -0
- data/spec/{app → support}/models/server.rb +2 -0
- data/spec/{app → support}/models/service.rb +2 -0
- data/spec/{app → support}/models/shape.rb +4 -2
- data/spec/{app → support}/models/shelf.rb +2 -0
- data/spec/{app → support}/models/shipment_address.rb +2 -0
- data/spec/{app → support}/models/shipping_container.rb +2 -0
- data/spec/{app → support}/models/shipping_pack.rb +2 -0
- data/spec/support/models/shirt.rb +11 -0
- data/spec/{app → support}/models/shop.rb +2 -0
- data/spec/{app → support}/models/short_agent.rb +2 -0
- data/spec/{app → support}/models/short_quiz.rb +2 -0
- data/spec/{app → support}/models/simple.rb +2 -0
- data/spec/{app → support}/models/slave.rb +2 -0
- data/spec/{app → support}/models/song.rb +2 -0
- data/spec/{app → support}/models/sound.rb +2 -0
- data/spec/support/models/spacer.rb +7 -0
- data/spec/{app → support}/models/square.rb +2 -0
- data/spec/{app → support}/models/staff.rb +2 -0
- data/spec/{app → support}/models/store_as_dup_test1.rb +2 -0
- data/spec/{app → support}/models/store_as_dup_test2.rb +2 -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/{app → support}/models/strategy.rb +2 -0
- data/spec/{app → support}/models/sub_item.rb +2 -0
- data/spec/{app → support}/models/subscription.rb +2 -0
- data/spec/{app → support}/models/survey.rb +2 -0
- data/spec/{app → support}/models/symptom.rb +2 -0
- data/spec/support/models/system_role.rb +7 -0
- data/spec/{app → support}/models/tag.rb +2 -0
- data/spec/{app → support}/models/target.rb +2 -0
- data/spec/{app → support}/models/template.rb +2 -0
- data/spec/{app → support}/models/thing.rb +2 -0
- data/spec/support/models/threadlocker.rb +7 -0
- data/spec/{app → support}/models/title.rb +2 -0
- data/spec/{app → support}/models/tool.rb +4 -2
- data/spec/{app → support}/models/topping.rb +2 -0
- data/spec/support/models/toy.rb +9 -0
- data/spec/{app → support}/models/track.rb +2 -0
- data/spec/{app → support}/models/translation.rb +2 -0
- data/spec/{app → support}/models/tree.rb +2 -0
- data/spec/support/models/truck.rb +7 -0
- data/spec/support/models/updatable.rb +7 -0
- data/spec/{app → support}/models/user.rb +2 -0
- data/spec/{app → support}/models/user_account.rb +2 -0
- data/spec/{app → support}/models/validation_callback.rb +2 -0
- data/spec/support/models/vehicle.rb +18 -0
- data/spec/{app → support}/models/version.rb +2 -0
- data/spec/{app → support}/models/vertex.rb +3 -1
- data/spec/{app → support}/models/vet_visit.rb +2 -0
- data/spec/{app → support}/models/video.rb +2 -0
- data/spec/support/models/video_game.rb +3 -0
- data/spec/support/models/washer.rb +7 -0
- data/spec/{app → support}/models/weapon.rb +2 -0
- data/spec/{app → support}/models/wiki_page.rb +3 -0
- data/spec/{app → support}/models/word.rb +2 -0
- data/spec/{app → support}/models/word_origin.rb +2 -0
- data/spec/{app → support}/models/writer.rb +4 -2
- data/spec/support/shared/time.rb +53 -0
- data/spec/support/spec_config.rb +60 -0
- data.tar.gz.sig +0 -0
- metadata +1131 -686
- metadata.gz.sig +0 -0
- data/lib/mongoid/association/touchable.rb +0 -97
- data/lib/mongoid/criteria/queryable/forwardable.rb +0 -65
- 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/elem_match.rb +0 -34
- data/lib/mongoid/matchable/exists.rb +0 -23
- data/lib/mongoid/matchable/gt.rb +0 -23
- data/lib/mongoid/matchable/gte.rb +0 -23
- data/lib/mongoid/matchable/in.rb +0 -24
- data/lib/mongoid/matchable/lt.rb +0 -23
- data/lib/mongoid/matchable/lte.rb +0 -23
- 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/support/ruby_version.rb +0 -26
- data/spec/app/models/actress.rb +0 -2
- data/spec/app/models/bed.rb +0 -1
- data/spec/app/models/car.rb +0 -1
- data/spec/app/models/eraser.rb +0 -1
- data/spec/app/models/learner.rb +0 -2
- data/spec/app/models/my_hash.rb +0 -2
- data/spec/app/models/passport.rb +0 -5
- data/spec/app/models/pencil.rb +0 -1
- data/spec/app/models/profile.rb +0 -5
- data/spec/app/models/series.rb +0 -4
- data/spec/app/models/truck.rb +0 -3
- data/spec/app/models/vehicle.rb +0 -11
- data/spec/app/models/video_game.rb +0 -1
- data/spec/mongoid/criteria/queryable/forwardable_spec.rb +0 -87
- 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/elem_match_spec.rb +0 -106
- data/spec/mongoid/matchable/exists_spec.rb +0 -57
- data/spec/mongoid/matchable/gt_spec.rb +0 -86
- data/spec/mongoid/matchable/gte_spec.rb +0 -84
- data/spec/mongoid/matchable/in_spec.rb +0 -49
- data/spec/mongoid/matchable/lt_spec.rb +0 -85
- data/spec/mongoid/matchable/lte_spec.rb +0 -85
- 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 -828
|
@@ -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
|
|
@@ -229,7 +294,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
229
294
|
expect(deleted).to eq(1)
|
|
230
295
|
end
|
|
231
296
|
|
|
232
|
-
context 'when the criteria has a collation'
|
|
297
|
+
context 'when the criteria has a collation' do
|
|
298
|
+
min_server_version '3.4'
|
|
233
299
|
|
|
234
300
|
let(:criteria) do
|
|
235
301
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
@@ -300,11 +366,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
300
366
|
describe "##{method}" do
|
|
301
367
|
|
|
302
368
|
let!(:depeche_mode) do
|
|
303
|
-
Band.create(name: "Depeche Mode")
|
|
369
|
+
Band.create!(name: "Depeche Mode")
|
|
304
370
|
end
|
|
305
371
|
|
|
306
372
|
let!(:new_order) do
|
|
307
|
-
Band.create(name: "New Order")
|
|
373
|
+
Band.create!(name: "New Order")
|
|
308
374
|
end
|
|
309
375
|
|
|
310
376
|
context "when the selector is contraining" do
|
|
@@ -333,7 +399,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
333
399
|
expect(destroyed).to eq(1)
|
|
334
400
|
end
|
|
335
401
|
|
|
336
|
-
context 'when the criteria has a collation'
|
|
402
|
+
context 'when the criteria has a collation' do
|
|
403
|
+
min_server_version '3.4'
|
|
337
404
|
|
|
338
405
|
let(:criteria) do
|
|
339
406
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
@@ -384,7 +451,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
384
451
|
context 'when the write concern is unacknowledged' do
|
|
385
452
|
|
|
386
453
|
before do
|
|
387
|
-
2.times { Band.create }
|
|
454
|
+
2.times { Band.create! }
|
|
388
455
|
end
|
|
389
456
|
|
|
390
457
|
let(:criteria) do
|
|
@@ -406,27 +473,83 @@ describe Mongoid::Contextual::Mongo do
|
|
|
406
473
|
describe "#distinct" do
|
|
407
474
|
|
|
408
475
|
before do
|
|
409
|
-
Band.create(name: "Depeche Mode", years: 30)
|
|
410
|
-
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")
|
|
411
479
|
end
|
|
412
480
|
|
|
413
|
-
|
|
481
|
+
with_config_values :legacy_pluck_distinct, true, false do
|
|
482
|
+
context "when limiting the result set" do
|
|
414
483
|
|
|
415
|
-
|
|
416
|
-
|
|
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
|
|
417
495
|
end
|
|
418
496
|
|
|
419
|
-
|
|
420
|
-
|
|
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
|
|
421
510
|
end
|
|
422
511
|
|
|
423
|
-
|
|
424
|
-
|
|
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
|
|
425
525
|
end
|
|
426
|
-
end
|
|
427
526
|
|
|
428
|
-
|
|
527
|
+
context 'when a collation is specified' do
|
|
528
|
+
min_server_version '3.4'
|
|
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
|
|
429
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
|
|
430
553
|
let(:criteria) do
|
|
431
554
|
Band.criteria
|
|
432
555
|
end
|
|
@@ -435,46 +558,241 @@ describe Mongoid::Contextual::Mongo do
|
|
|
435
558
|
described_class.new(criteria)
|
|
436
559
|
end
|
|
437
560
|
|
|
438
|
-
|
|
439
|
-
|
|
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
|
|
440
575
|
end
|
|
441
576
|
end
|
|
442
577
|
|
|
443
|
-
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
|
|
444
586
|
|
|
445
587
|
let(:criteria) do
|
|
446
|
-
|
|
588
|
+
Dictionary.criteria
|
|
447
589
|
end
|
|
448
590
|
|
|
449
591
|
let(:context) do
|
|
450
592
|
described_class.new(criteria)
|
|
451
593
|
end
|
|
452
594
|
|
|
453
|
-
|
|
454
|
-
|
|
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
|
|
455
611
|
end
|
|
456
|
-
end
|
|
457
612
|
|
|
458
|
-
|
|
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
|
|
459
616
|
|
|
460
|
-
|
|
461
|
-
|
|
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
|
|
462
629
|
end
|
|
463
630
|
|
|
464
|
-
|
|
465
|
-
|
|
631
|
+
context 'when plucking a specific locale' do
|
|
632
|
+
|
|
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
|
|
466
652
|
end
|
|
467
653
|
|
|
468
|
-
|
|
469
|
-
|
|
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
|
|
470
675
|
end
|
|
471
676
|
|
|
472
|
-
|
|
473
|
-
|
|
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
|
|
709
|
+
end
|
|
710
|
+
|
|
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
|
|
474
789
|
end
|
|
475
790
|
|
|
476
|
-
|
|
477
|
-
|
|
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
|
|
478
796
|
end
|
|
479
797
|
end
|
|
480
798
|
end
|
|
@@ -482,7 +800,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
482
800
|
describe "#each" do
|
|
483
801
|
|
|
484
802
|
before do
|
|
485
|
-
Band.create(name: "Depeche Mode")
|
|
803
|
+
Band.create!(name: "Depeche Mode")
|
|
486
804
|
end
|
|
487
805
|
|
|
488
806
|
let(:criteria) do
|
|
@@ -493,7 +811,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
493
811
|
described_class.new(criteria)
|
|
494
812
|
end
|
|
495
813
|
|
|
496
|
-
context 'when the criteria has a collation'
|
|
814
|
+
context 'when the criteria has a collation' do
|
|
815
|
+
min_server_version '3.4'
|
|
497
816
|
|
|
498
817
|
let(:criteria) do
|
|
499
818
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
@@ -559,7 +878,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
559
878
|
context "when iterating with next" do
|
|
560
879
|
|
|
561
880
|
before do
|
|
562
|
-
10.times { |i| Band.create(name: "Test #{i}") }
|
|
881
|
+
10.times { |i| Band.create!(name: "Test #{i}") }
|
|
563
882
|
end
|
|
564
883
|
|
|
565
884
|
let(:criteria) do
|
|
@@ -571,8 +890,21 @@ describe Mongoid::Contextual::Mongo do
|
|
|
571
890
|
end
|
|
572
891
|
|
|
573
892
|
it "does not load all documents" do
|
|
574
|
-
|
|
893
|
+
subscriber = Mrss::EventSubscriber.new
|
|
894
|
+
context.view.client.subscribe(Mongo::Monitoring::COMMAND, subscriber)
|
|
895
|
+
|
|
575
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)
|
|
576
908
|
end
|
|
577
909
|
end
|
|
578
910
|
end
|
|
@@ -581,9 +913,9 @@ describe Mongoid::Contextual::Mongo do
|
|
|
581
913
|
context 'when the criteria has a parent document' do
|
|
582
914
|
|
|
583
915
|
before do
|
|
584
|
-
Post.create(person: person)
|
|
585
|
-
Post.create(person: person)
|
|
586
|
-
Post.create(person: person)
|
|
916
|
+
Post.create!(person: person)
|
|
917
|
+
Post.create!(person: person)
|
|
918
|
+
Post.create!(person: person)
|
|
587
919
|
end
|
|
588
920
|
|
|
589
921
|
let(:person) do
|
|
@@ -630,7 +962,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
630
962
|
describe "#exists?" do
|
|
631
963
|
|
|
632
964
|
before do
|
|
633
|
-
Band.create(name: "Depeche Mode")
|
|
965
|
+
Band.create!(name: "Depeche Mode")
|
|
634
966
|
end
|
|
635
967
|
|
|
636
968
|
context "when the count is zero" do
|
|
@@ -743,11 +1075,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
743
1075
|
describe "#find_one_and_replace" do
|
|
744
1076
|
|
|
745
1077
|
let!(:depeche) do
|
|
746
|
-
Band.create(name: "Depeche Mode")
|
|
1078
|
+
Band.create!(name: "Depeche Mode")
|
|
747
1079
|
end
|
|
748
1080
|
|
|
749
1081
|
let!(:tool) do
|
|
750
|
-
Band.create(name: "Tool")
|
|
1082
|
+
Band.create!(name: "Tool")
|
|
751
1083
|
end
|
|
752
1084
|
|
|
753
1085
|
context "when the selector matches" do
|
|
@@ -850,7 +1182,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
850
1182
|
end
|
|
851
1183
|
end
|
|
852
1184
|
|
|
853
|
-
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'
|
|
854
1187
|
|
|
855
1188
|
let(:criteria) do
|
|
856
1189
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
@@ -898,11 +1231,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
898
1231
|
describe "#find_one_and_update" do
|
|
899
1232
|
|
|
900
1233
|
let!(:depeche) do
|
|
901
|
-
Band.create(name: "Depeche Mode")
|
|
1234
|
+
Band.create!(name: "Depeche Mode")
|
|
902
1235
|
end
|
|
903
1236
|
|
|
904
1237
|
let!(:tool) do
|
|
905
|
-
Band.create(name: "Tool")
|
|
1238
|
+
Band.create!(name: "Tool")
|
|
906
1239
|
end
|
|
907
1240
|
|
|
908
1241
|
context "when the selector matches" do
|
|
@@ -1003,7 +1336,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1003
1336
|
end
|
|
1004
1337
|
end
|
|
1005
1338
|
|
|
1006
|
-
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'
|
|
1007
1341
|
|
|
1008
1342
|
let(:criteria) do
|
|
1009
1343
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
@@ -1050,7 +1384,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1050
1384
|
describe "#find_one_and_delete" do
|
|
1051
1385
|
|
|
1052
1386
|
let!(:depeche) do
|
|
1053
|
-
Band.create(name: "Depeche Mode")
|
|
1387
|
+
Band.create!(name: "Depeche Mode")
|
|
1054
1388
|
end
|
|
1055
1389
|
|
|
1056
1390
|
let(:criteria) do
|
|
@@ -1077,7 +1411,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1077
1411
|
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
1078
1412
|
end
|
|
1079
1413
|
|
|
1080
|
-
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'
|
|
1081
1416
|
|
|
1082
1417
|
let(:criteria) do
|
|
1083
1418
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
@@ -1128,11 +1463,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1128
1463
|
describe "##{method}" do
|
|
1129
1464
|
|
|
1130
1465
|
let!(:depeche_mode) do
|
|
1131
|
-
Band.create(name: "Depeche Mode")
|
|
1466
|
+
Band.create!(name: "Depeche Mode")
|
|
1132
1467
|
end
|
|
1133
1468
|
|
|
1134
1469
|
let!(:new_order) do
|
|
1135
|
-
Band.create(name: "New Order")
|
|
1470
|
+
Band.create!(name: "New Order")
|
|
1136
1471
|
end
|
|
1137
1472
|
|
|
1138
1473
|
context "when the context is not cached" do
|
|
@@ -1149,7 +1484,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1149
1484
|
expect(context.send(method)).to eq(depeche_mode)
|
|
1150
1485
|
end
|
|
1151
1486
|
|
|
1152
|
-
context 'when the criteria has a collation'
|
|
1487
|
+
context 'when the criteria has a collation' do
|
|
1488
|
+
min_server_version '3.4'
|
|
1153
1489
|
|
|
1154
1490
|
let(:criteria) do
|
|
1155
1491
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
@@ -1368,8 +1704,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1368
1704
|
describe "##{method}" do
|
|
1369
1705
|
|
|
1370
1706
|
before do
|
|
1371
|
-
Band.create(name: "Depeche Mode")
|
|
1372
|
-
Band.create(name: "New Order")
|
|
1707
|
+
Band.create!(name: "Depeche Mode")
|
|
1708
|
+
Band.create!(name: "New Order")
|
|
1373
1709
|
end
|
|
1374
1710
|
|
|
1375
1711
|
context "when the criteria has a limit" do
|
|
@@ -1387,12 +1723,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1387
1723
|
end
|
|
1388
1724
|
|
|
1389
1725
|
context "when calling more than once" do
|
|
1390
|
-
|
|
1391
|
-
before do
|
|
1392
|
-
expect(context.view).to receive(:count).once.and_return(2)
|
|
1393
|
-
end
|
|
1394
|
-
|
|
1395
1726
|
it "returns the cached value for subsequent calls" do
|
|
1727
|
+
expect(context.view).to receive(:count_documents).once.and_return(2)
|
|
1396
1728
|
2.times { expect(context.send(method)).to eq(2) }
|
|
1397
1729
|
end
|
|
1398
1730
|
end
|
|
@@ -1401,10 +1733,10 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1401
1733
|
|
|
1402
1734
|
before do
|
|
1403
1735
|
context.entries
|
|
1404
|
-
expect(context.view).to receive(:count).once.and_return(2)
|
|
1405
1736
|
end
|
|
1406
1737
|
|
|
1407
1738
|
it "returns the cached value for all calls" do
|
|
1739
|
+
expect(context.view).to receive(:count_documents).once.and_return(2)
|
|
1408
1740
|
expect(context.send(method)).to eq(2)
|
|
1409
1741
|
end
|
|
1410
1742
|
|
|
@@ -1436,12 +1768,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1436
1768
|
end
|
|
1437
1769
|
|
|
1438
1770
|
context "when calling more than once" do
|
|
1439
|
-
|
|
1440
|
-
before do
|
|
1441
|
-
expect(context.view).to receive(:count).once.and_return(1)
|
|
1442
|
-
end
|
|
1443
|
-
|
|
1444
1771
|
it "returns the cached value for subsequent calls" do
|
|
1772
|
+
expect(context.view).to receive(:count_documents).once.and_return(1)
|
|
1445
1773
|
2.times { expect(context.send(method)).to eq(1) }
|
|
1446
1774
|
end
|
|
1447
1775
|
end
|
|
@@ -1450,10 +1778,10 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1450
1778
|
|
|
1451
1779
|
before do
|
|
1452
1780
|
context.entries
|
|
1453
|
-
expect(context.view).to receive(:count).once.and_return(1)
|
|
1454
1781
|
end
|
|
1455
1782
|
|
|
1456
1783
|
it "returns the cached value for all calls" do
|
|
1784
|
+
expect(context.view).to receive(:count_documents).once.and_return(1)
|
|
1457
1785
|
expect(context.send(method)).to eq(1)
|
|
1458
1786
|
end
|
|
1459
1787
|
|
|
@@ -1475,11 +1803,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1475
1803
|
describe "#limit" do
|
|
1476
1804
|
|
|
1477
1805
|
let!(:depeche_mode) do
|
|
1478
|
-
Band.create(name: "Depeche Mode")
|
|
1806
|
+
Band.create!(name: "Depeche Mode")
|
|
1479
1807
|
end
|
|
1480
1808
|
|
|
1481
1809
|
let!(:new_order) do
|
|
1482
|
-
Band.create(name: "New Order")
|
|
1810
|
+
Band.create!(name: "New Order")
|
|
1483
1811
|
end
|
|
1484
1812
|
|
|
1485
1813
|
let(:criteria) do
|
|
@@ -1498,8 +1826,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1498
1826
|
describe "#map" do
|
|
1499
1827
|
|
|
1500
1828
|
before do
|
|
1501
|
-
Band.create(name: "Depeche Mode")
|
|
1502
|
-
Band.create(name: "New Order")
|
|
1829
|
+
Band.create!(name: "Depeche Mode")
|
|
1830
|
+
Band.create!(name: "New Order")
|
|
1503
1831
|
end
|
|
1504
1832
|
|
|
1505
1833
|
let(:criteria) do
|
|
@@ -1528,11 +1856,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1528
1856
|
describe "#map_reduce" do
|
|
1529
1857
|
|
|
1530
1858
|
let!(:depeche_mode) do
|
|
1531
|
-
Band.create(name: "Depeche Mode", likes: 200)
|
|
1859
|
+
Band.create!(name: "Depeche Mode", likes: 200)
|
|
1532
1860
|
end
|
|
1533
1861
|
|
|
1534
1862
|
let!(:tool) do
|
|
1535
|
-
Band.create(name: "Tool", likes: 100)
|
|
1863
|
+
Band.create!(name: "Tool", likes: 100)
|
|
1536
1864
|
end
|
|
1537
1865
|
|
|
1538
1866
|
let(:map) do
|
|
@@ -1553,6 +1881,10 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1553
1881
|
}}
|
|
1554
1882
|
end
|
|
1555
1883
|
|
|
1884
|
+
let(:ordered_results) do
|
|
1885
|
+
results['results'].sort_by { |doc| doc['_id'] }
|
|
1886
|
+
end
|
|
1887
|
+
|
|
1556
1888
|
context "when no selection is provided" do
|
|
1557
1889
|
|
|
1558
1890
|
let(:criteria) do
|
|
@@ -1584,36 +1916,40 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1584
1916
|
end
|
|
1585
1917
|
|
|
1586
1918
|
it "contains the entire raw results" do
|
|
1587
|
-
expect(
|
|
1919
|
+
expect(ordered_results).to eq([
|
|
1588
1920
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }},
|
|
1589
1921
|
{ "_id" => "Tool", "value" => { "likes" => 100 }}
|
|
1590
1922
|
])
|
|
1591
1923
|
end
|
|
1592
1924
|
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
end
|
|
1925
|
+
context 'when statistics are available' do
|
|
1926
|
+
max_server_version '4.2'
|
|
1596
1927
|
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
})
|
|
1601
|
-
end
|
|
1928
|
+
it "contains the execution time" do
|
|
1929
|
+
expect(results.time).to_not be_nil
|
|
1930
|
+
end
|
|
1602
1931
|
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
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
|
|
1606
1937
|
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1938
|
+
it "contains the input count" do
|
|
1939
|
+
expect(results.input).to eq(2)
|
|
1940
|
+
end
|
|
1610
1941
|
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1942
|
+
it "contains the emitted count" do
|
|
1943
|
+
expect(results.emitted).to eq(2)
|
|
1944
|
+
end
|
|
1614
1945
|
|
|
1615
|
-
|
|
1616
|
-
|
|
1946
|
+
it "contains the reduced count" do
|
|
1947
|
+
expect(results.reduced).to eq(0)
|
|
1948
|
+
end
|
|
1949
|
+
|
|
1950
|
+
it "contains the output count" do
|
|
1951
|
+
expect(results.output).to eq(2)
|
|
1952
|
+
end
|
|
1617
1953
|
end
|
|
1618
1954
|
end
|
|
1619
1955
|
|
|
@@ -1642,35 +1978,39 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1642
1978
|
end
|
|
1643
1979
|
|
|
1644
1980
|
it "contains the entire raw results" do
|
|
1645
|
-
expect(
|
|
1981
|
+
expect(ordered_results).to eq([
|
|
1646
1982
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }}
|
|
1647
1983
|
])
|
|
1648
1984
|
end
|
|
1649
1985
|
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
end
|
|
1986
|
+
context 'when statistics are available' do
|
|
1987
|
+
max_server_version '4.2'
|
|
1653
1988
|
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
})
|
|
1658
|
-
end
|
|
1989
|
+
it "contains the execution time" do
|
|
1990
|
+
expect(results.time).to_not be_nil
|
|
1991
|
+
end
|
|
1659
1992
|
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
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
|
|
1663
1998
|
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1999
|
+
it "contains the input count" do
|
|
2000
|
+
expect(results.input).to eq(1)
|
|
2001
|
+
end
|
|
1667
2002
|
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
|
|
2003
|
+
it "contains the emitted count" do
|
|
2004
|
+
expect(results.emitted).to eq(1)
|
|
2005
|
+
end
|
|
1671
2006
|
|
|
1672
|
-
|
|
1673
|
-
|
|
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
|
|
1674
2014
|
end
|
|
1675
2015
|
end
|
|
1676
2016
|
|
|
@@ -1710,7 +2050,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1710
2050
|
end
|
|
1711
2051
|
|
|
1712
2052
|
it "contains the entire raw results" do
|
|
1713
|
-
expect(
|
|
2053
|
+
expect(ordered_results).to eq([
|
|
1714
2054
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }},
|
|
1715
2055
|
{ "_id" => "Tool", "value" => { "likes" => 100 }}
|
|
1716
2056
|
])
|
|
@@ -1718,6 +2058,9 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1718
2058
|
end
|
|
1719
2059
|
|
|
1720
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
|
|
1721
2064
|
|
|
1722
2065
|
let(:criteria) do
|
|
1723
2066
|
Band.limit(1)
|
|
@@ -1824,6 +2167,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1824
2167
|
end
|
|
1825
2168
|
|
|
1826
2169
|
context "when the output specifies a different db" do
|
|
2170
|
+
# Limit is not supported in sharded clusters
|
|
2171
|
+
require_topology :single, :replica_set
|
|
1827
2172
|
|
|
1828
2173
|
let(:criteria) do
|
|
1829
2174
|
Band.limit(1)
|
|
@@ -1940,11 +2285,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1940
2285
|
describe "#skip" do
|
|
1941
2286
|
|
|
1942
2287
|
let!(:depeche_mode) do
|
|
1943
|
-
Band.create(name: "Depeche Mode")
|
|
2288
|
+
Band.create!(name: "Depeche Mode")
|
|
1944
2289
|
end
|
|
1945
2290
|
|
|
1946
2291
|
let!(:new_order) do
|
|
1947
|
-
Band.create(name: "New Order")
|
|
2292
|
+
Band.create!(name: "New Order")
|
|
1948
2293
|
end
|
|
1949
2294
|
|
|
1950
2295
|
let(:criteria) do
|
|
@@ -1963,11 +2308,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1963
2308
|
describe "#sort" do
|
|
1964
2309
|
|
|
1965
2310
|
let!(:depeche_mode) do
|
|
1966
|
-
Band.create(name: "Depeche Mode")
|
|
2311
|
+
Band.create!(name: "Depeche Mode")
|
|
1967
2312
|
end
|
|
1968
2313
|
|
|
1969
2314
|
let!(:new_order) do
|
|
1970
|
-
Band.create(name: "New Order")
|
|
2315
|
+
Band.create!(name: "New Order")
|
|
1971
2316
|
end
|
|
1972
2317
|
|
|
1973
2318
|
let(:criteria) do
|
|
@@ -2006,11 +2351,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
2006
2351
|
describe "#update" do
|
|
2007
2352
|
|
|
2008
2353
|
let!(:depeche_mode) do
|
|
2009
|
-
Band.create(name: "Depeche Mode")
|
|
2354
|
+
Band.create!(name: "Depeche Mode")
|
|
2010
2355
|
end
|
|
2011
2356
|
|
|
2012
2357
|
let!(:new_order) do
|
|
2013
|
-
Band.create(name: "New Order")
|
|
2358
|
+
Band.create!(name: "New Order")
|
|
2014
2359
|
end
|
|
2015
2360
|
|
|
2016
2361
|
let(:criteria) do
|
|
@@ -2024,11 +2369,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
2024
2369
|
context "when adding an element to a HABTM set" do
|
|
2025
2370
|
|
|
2026
2371
|
let(:person) do
|
|
2027
|
-
Person.create
|
|
2372
|
+
Person.create!
|
|
2028
2373
|
end
|
|
2029
2374
|
|
|
2030
2375
|
let(:preference) do
|
|
2031
|
-
Preference.create
|
|
2376
|
+
Preference.create!
|
|
2032
2377
|
end
|
|
2033
2378
|
|
|
2034
2379
|
before do
|
|
@@ -2158,7 +2503,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
2158
2503
|
end
|
|
2159
2504
|
end
|
|
2160
2505
|
|
|
2161
|
-
context 'when provided array filters'
|
|
2506
|
+
context 'when provided array filters' do
|
|
2507
|
+
min_server_version '3.6'
|
|
2162
2508
|
|
|
2163
2509
|
before do
|
|
2164
2510
|
Band.delete_all
|
|
@@ -2166,12 +2512,12 @@ describe Mongoid::Contextual::Mongo do
|
|
|
2166
2512
|
b.labels << Label.new(name: 'Warner')
|
|
2167
2513
|
b.labels << Label.new(name: 'Sony')
|
|
2168
2514
|
b.labels << Label.new(name: 'Cbs')
|
|
2169
|
-
b.save
|
|
2515
|
+
b.save!
|
|
2170
2516
|
|
|
2171
2517
|
b = Band.new(name: 'FKA Twigs')
|
|
2172
2518
|
b.labels << Label.new(name: 'Warner')
|
|
2173
2519
|
b.labels << Label.new(name: 'Cbs')
|
|
2174
|
-
b.save
|
|
2520
|
+
b.save!
|
|
2175
2521
|
end
|
|
2176
2522
|
|
|
2177
2523
|
|
|
@@ -2197,11 +2543,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
2197
2543
|
describe "#update_all" do
|
|
2198
2544
|
|
|
2199
2545
|
let!(:depeche_mode) do
|
|
2200
|
-
Band.create(name: "Depeche Mode", origin: "Essex")
|
|
2546
|
+
Band.create!(name: "Depeche Mode", origin: "Essex")
|
|
2201
2547
|
end
|
|
2202
2548
|
|
|
2203
2549
|
let!(:new_order) do
|
|
2204
|
-
Band.create(name: "New Order")
|
|
2550
|
+
Band.create!(name: "New Order")
|
|
2205
2551
|
end
|
|
2206
2552
|
|
|
2207
2553
|
let(:criteria) do
|
|
@@ -2330,7 +2676,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
2330
2676
|
end
|
|
2331
2677
|
end
|
|
2332
2678
|
|
|
2333
|
-
context 'when provided array filters'
|
|
2679
|
+
context 'when provided array filters' do
|
|
2680
|
+
min_server_version '3.6'
|
|
2334
2681
|
|
|
2335
2682
|
before do
|
|
2336
2683
|
Band.delete_all
|
|
@@ -2338,12 +2685,12 @@ describe Mongoid::Contextual::Mongo do
|
|
|
2338
2685
|
b.labels << Label.new(name: 'Warner')
|
|
2339
2686
|
b.labels << Label.new(name: 'Sony')
|
|
2340
2687
|
b.labels << Label.new(name: 'Cbs')
|
|
2341
|
-
b.save
|
|
2688
|
+
b.save!
|
|
2342
2689
|
|
|
2343
2690
|
b = Band.new(name: 'FKA Twigs')
|
|
2344
2691
|
b.labels << Label.new(name: 'Warner')
|
|
2345
2692
|
b.labels << Label.new(name: 'Cbs')
|
|
2346
|
-
b.save
|
|
2693
|
+
b.save!
|
|
2347
2694
|
end
|
|
2348
2695
|
|
|
2349
2696
|
|
|
@@ -2368,7 +2715,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
2368
2715
|
|
|
2369
2716
|
describe '#pipeline' do
|
|
2370
2717
|
|
|
2371
|
-
context 'when the criteria has a selector'
|
|
2718
|
+
context 'when the criteria has a selector' do
|
|
2372
2719
|
|
|
2373
2720
|
before do
|
|
2374
2721
|
Artist.index(name: "text")
|
|
@@ -2388,7 +2735,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
2388
2735
|
end
|
|
2389
2736
|
|
|
2390
2737
|
it 'creates a pipeline with the selector as one of the $match criteria' do
|
|
2391
|
-
expect(pipeline_match).to include({
|
|
2738
|
+
expect(pipeline_match).to include({ '$text' => { '$search' => "New Order" } })
|
|
2392
2739
|
end
|
|
2393
2740
|
|
|
2394
2741
|
it 'creates a pipeline with the $exists operator as one of the $match criteria' do
|