mongoid 3.1.5 → 8.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +636 -33
- data/LICENSE +2 -1
- data/README.md +32 -24
- data/Rakefile +75 -5
- data/lib/config/locales/en.yml +301 -132
- data/lib/mongoid/association/accessors.rb +431 -0
- data/lib/mongoid/association/bindable.rb +227 -0
- data/lib/mongoid/association/builders.rb +86 -0
- data/lib/mongoid/association/constrainable.rb +42 -0
- data/lib/mongoid/association/depending.rb +128 -0
- data/lib/mongoid/association/eager_loadable.rb +57 -0
- data/lib/mongoid/association/embedded/batchable.rb +398 -0
- data/lib/mongoid/association/embedded/cyclic.rb +102 -0
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +74 -0
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +38 -0
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +111 -0
- data/lib/mongoid/association/embedded/embedded_in.rb +135 -0
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +42 -0
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +45 -0
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +571 -0
- data/lib/mongoid/association/embedded/embeds_many.rb +183 -0
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +43 -0
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +53 -0
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +164 -0
- data/lib/mongoid/association/embedded/embeds_one.rb +150 -0
- data/lib/mongoid/association/embedded.rb +6 -0
- data/lib/mongoid/association/macros.rb +228 -0
- data/lib/mongoid/association/many.rb +202 -0
- data/lib/mongoid/association/marshalable.rb +31 -0
- data/lib/mongoid/association/nested/many.rb +192 -0
- data/lib/mongoid/association/nested/nested_buildable.rb +66 -0
- data/lib/mongoid/association/nested/one.rb +116 -0
- data/lib/mongoid/association/nested.rb +15 -0
- data/lib/mongoid/association/one.rb +53 -0
- data/lib/mongoid/association/options.rb +122 -0
- data/lib/mongoid/association/proxy.rb +200 -0
- data/lib/mongoid/association/referenced/auto_save.rb +74 -0
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +83 -0
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +48 -0
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +73 -0
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +124 -0
- data/lib/mongoid/association/referenced/belongs_to.rb +226 -0
- data/lib/mongoid/association/referenced/counter_cache.rb +152 -0
- data/lib/mongoid/association/referenced/eager.rb +163 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +72 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +40 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +53 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +345 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +273 -0
- data/lib/mongoid/association/referenced/has_many/binding.rb +36 -0
- data/lib/mongoid/association/referenced/has_many/buildable.rb +38 -0
- data/lib/mongoid/association/referenced/has_many/eager.rb +44 -0
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +494 -0
- data/lib/mongoid/association/referenced/has_many/proxy.rb +551 -0
- data/lib/mongoid/association/referenced/has_many.rb +251 -0
- data/lib/mongoid/association/referenced/has_one/binding.rb +42 -0
- data/lib/mongoid/association/referenced/has_one/buildable.rb +74 -0
- data/lib/mongoid/association/referenced/has_one/eager.rb +36 -0
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +113 -0
- data/lib/mongoid/association/referenced/has_one/proxy.rb +108 -0
- data/lib/mongoid/association/referenced/has_one.rb +184 -0
- data/lib/mongoid/association/referenced/syncable.rb +155 -0
- data/lib/mongoid/association/referenced.rb +9 -0
- data/lib/mongoid/association/reflections.rb +69 -0
- data/lib/mongoid/association/relatable.rb +489 -0
- data/lib/mongoid/association.rb +135 -0
- data/lib/mongoid/atomic/modifiers.rb +41 -61
- data/lib/mongoid/atomic/paths/embedded/many.rb +24 -8
- data/lib/mongoid/atomic/paths/embedded/one.rb +5 -8
- data/lib/mongoid/atomic/paths/embedded.rb +3 -34
- data/lib/mongoid/atomic/paths/root.rb +4 -20
- data/lib/mongoid/atomic/paths.rb +2 -1
- data/lib/mongoid/atomic.rb +52 -69
- data/lib/mongoid/attributes/dynamic.rb +141 -0
- data/lib/mongoid/attributes/nested.rb +93 -0
- data/lib/mongoid/attributes/processing.rb +35 -97
- data/lib/mongoid/attributes/projector.rb +119 -0
- data/lib/mongoid/attributes/readonly.rb +27 -10
- data/lib/mongoid/attributes.rb +159 -181
- data/lib/mongoid/cacheable.rb +33 -0
- data/lib/mongoid/changeable.rb +420 -0
- data/lib/mongoid/clients/factory.rb +105 -0
- data/lib/mongoid/clients/options.rb +111 -0
- data/lib/mongoid/clients/sessions.rb +113 -0
- data/lib/mongoid/clients/storage_options.rb +79 -0
- data/lib/mongoid/clients/validators/storage.rb +58 -0
- data/lib/mongoid/clients/validators.rb +3 -0
- data/lib/mongoid/clients.rb +79 -0
- data/lib/mongoid/composable.rb +128 -0
- data/lib/mongoid/config/environment.rb +51 -13
- data/lib/mongoid/config/options.rb +30 -18
- data/lib/mongoid/config/validators/client.rb +128 -0
- data/lib/mongoid/config/validators/option.rb +3 -4
- data/lib/mongoid/config/validators.rb +3 -2
- data/lib/mongoid/config.rb +170 -89
- data/lib/mongoid/contextual/aggregable/memory.rb +40 -27
- data/lib/mongoid/contextual/aggregable/mongo.rb +33 -36
- data/lib/mongoid/contextual/aggregable/none.rb +65 -0
- data/lib/mongoid/contextual/aggregable.rb +17 -0
- data/lib/mongoid/contextual/atomic.rb +80 -79
- data/lib/mongoid/contextual/command.rb +8 -11
- data/lib/mongoid/contextual/geo_near.rb +42 -44
- data/lib/mongoid/contextual/map_reduce.rb +33 -127
- data/lib/mongoid/contextual/memory.rb +226 -88
- data/lib/mongoid/contextual/mongo.rb +466 -293
- data/lib/mongoid/contextual/none.rb +193 -0
- data/lib/mongoid/contextual/queryable.rb +3 -4
- data/lib/mongoid/contextual.rb +11 -11
- data/lib/mongoid/copyable.rb +68 -20
- data/lib/mongoid/criteria/findable.rb +143 -0
- data/lib/mongoid/criteria/includable.rb +92 -0
- data/lib/mongoid/criteria/inspectable.rb +24 -0
- data/lib/mongoid/criteria/marshalable.rb +55 -0
- data/lib/mongoid/criteria/modifiable.rb +235 -0
- data/lib/mongoid/criteria/options.rb +24 -0
- data/lib/mongoid/criteria/permission.rb +71 -0
- data/lib/mongoid/criteria/queryable/aggregable.rb +109 -0
- data/lib/mongoid/criteria/queryable/expandable.rb +68 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +151 -0
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +57 -0
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +33 -0
- data/lib/mongoid/criteria/queryable/extensions/date.rb +63 -0
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +52 -0
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +163 -0
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +75 -0
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +81 -0
- data/lib/mongoid/criteria/queryable/extensions/object.rb +182 -0
- data/lib/mongoid/criteria/queryable/extensions/range.rb +102 -0
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +72 -0
- data/lib/mongoid/criteria/queryable/extensions/set.rb +33 -0
- data/lib/mongoid/criteria/queryable/extensions/string.rb +122 -0
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +74 -0
- data/lib/mongoid/criteria/queryable/extensions/time.rb +60 -0
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +66 -0
- data/lib/mongoid/criteria/queryable/extensions.rb +25 -0
- data/lib/mongoid/criteria/queryable/key.rb +177 -0
- data/lib/mongoid/criteria/queryable/macroable.rb +26 -0
- data/lib/mongoid/criteria/queryable/mergeable.rb +434 -0
- data/lib/mongoid/criteria/queryable/optional.rb +380 -0
- data/lib/mongoid/criteria/queryable/options.rb +136 -0
- data/lib/mongoid/criteria/queryable/pipeline.rb +106 -0
- data/lib/mongoid/criteria/queryable/selectable.rb +937 -0
- data/lib/mongoid/criteria/queryable/selector.rb +287 -0
- data/lib/mongoid/criteria/queryable/smash.rb +128 -0
- data/lib/mongoid/criteria/queryable/storable.rb +237 -0
- data/lib/mongoid/criteria/queryable.rb +90 -0
- data/lib/mongoid/criteria/scopable.rb +166 -0
- data/lib/mongoid/criteria.rb +177 -189
- data/lib/mongoid/deprecable.rb +36 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +193 -139
- data/lib/mongoid/equality.rb +35 -18
- data/lib/mongoid/errors/ambiguous_relationship.rb +5 -6
- data/lib/mongoid/errors/callback.rb +2 -3
- data/lib/mongoid/errors/criteria_argument_required.rb +18 -0
- data/lib/mongoid/errors/delete_restriction.rb +10 -13
- data/lib/mongoid/errors/document_not_destroyed.rb +22 -0
- data/lib/mongoid/errors/document_not_found.rb +36 -21
- data/lib/mongoid/errors/empty_config_file.rb +25 -0
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +19 -0
- 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 +3 -4
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +31 -0
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +24 -0
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -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 +10 -9
- 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_field_type.rb +26 -0
- data/lib/mongoid/errors/invalid_find.rb +2 -3
- data/lib/mongoid/errors/invalid_includes.rb +2 -3
- data/lib/mongoid/errors/invalid_index.rb +2 -3
- data/lib/mongoid/errors/invalid_options.rb +4 -5
- data/lib/mongoid/errors/invalid_path.rb +2 -3
- data/lib/mongoid/errors/invalid_persistence_option.rb +26 -0
- data/lib/mongoid/errors/invalid_query.rb +40 -0
- data/lib/mongoid/errors/invalid_relation.rb +61 -0
- data/lib/mongoid/errors/invalid_relation_option.rb +28 -0
- data/lib/mongoid/errors/invalid_scope.rb +2 -3
- data/lib/mongoid/errors/invalid_session_use.rb +21 -0
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +6 -5
- data/lib/mongoid/errors/invalid_storage_options.rb +4 -5
- data/lib/mongoid/errors/invalid_storage_parent.rb +25 -0
- data/lib/mongoid/errors/invalid_time.rb +2 -3
- data/lib/mongoid/errors/inverse_not_found.rb +4 -5
- data/lib/mongoid/errors/mixed_client_configuration.rb +27 -0
- data/lib/mongoid/errors/mixed_relations.rb +2 -3
- data/lib/mongoid/errors/mongoid_error.rb +22 -23
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +3 -4
- data/lib/mongoid/errors/no_client_config.rb +21 -0
- data/lib/mongoid/errors/no_client_database.rb +26 -0
- data/lib/mongoid/errors/no_client_hosts.rb +26 -0
- data/lib/mongoid/errors/no_clients_config.rb +19 -0
- data/lib/mongoid/errors/no_default_client.rb +22 -0
- 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 +3 -4
- data/lib/mongoid/errors/readonly_document.rb +21 -0
- data/lib/mongoid/errors/scope_overwrite.rb +2 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +3 -1
- data/lib/mongoid/errors/unknown_attribute.rb +3 -4
- data/lib/mongoid/errors/unknown_model.rb +24 -0
- data/lib/mongoid/errors/unsaved_document.rb +3 -2
- data/lib/mongoid/errors/unsupported_javascript.rb +2 -3
- data/lib/mongoid/errors/validations.rb +2 -1
- data/lib/mongoid/errors.rb +30 -9
- data/lib/mongoid/evolvable.rb +4 -5
- data/lib/mongoid/extensions/array.rb +45 -52
- data/lib/mongoid/extensions/big_decimal.rb +41 -22
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +19 -17
- data/lib/mongoid/extensions/date.rb +33 -23
- data/lib/mongoid/extensions/date_time.rb +5 -13
- data/lib/mongoid/extensions/decimal128.rb +36 -0
- data/lib/mongoid/extensions/false_class.rb +5 -8
- data/lib/mongoid/extensions/float.rb +11 -16
- data/lib/mongoid/extensions/hash.rb +88 -49
- data/lib/mongoid/extensions/integer.rb +10 -18
- data/lib/mongoid/extensions/module.rb +3 -4
- data/lib/mongoid/extensions/nil_class.rb +2 -5
- data/lib/mongoid/extensions/object.rb +38 -62
- data/lib/mongoid/extensions/object_id.rb +7 -12
- data/lib/mongoid/extensions/range.rb +46 -17
- data/lib/mongoid/extensions/regexp.rb +15 -8
- data/lib/mongoid/extensions/set.rb +17 -15
- data/lib/mongoid/extensions/string.rb +40 -80
- data/lib/mongoid/extensions/symbol.rb +7 -23
- data/lib/mongoid/extensions/time.rb +42 -25
- data/lib/mongoid/extensions/time_with_zone.rb +27 -10
- data/lib/mongoid/extensions/true_class.rb +5 -8
- data/lib/mongoid/extensions.rb +31 -13
- data/lib/mongoid/factory.rb +99 -11
- data/lib/mongoid/fields/foreign_key.rb +26 -34
- data/lib/mongoid/fields/localized.rb +24 -13
- data/lib/mongoid/fields/standard.rb +19 -73
- data/lib/mongoid/fields/validators/macro.rb +56 -15
- data/lib/mongoid/fields/validators.rb +2 -1
- data/lib/mongoid/fields.rb +342 -87
- data/lib/mongoid/findable.rb +219 -0
- data/lib/mongoid/indexable/specification.rb +103 -0
- data/lib/mongoid/indexable/validators/options.rb +110 -0
- data/lib/mongoid/indexable.rb +148 -0
- data/lib/mongoid/inspectable.rb +52 -0
- data/lib/mongoid/interceptable.rb +312 -0
- data/lib/mongoid/loggable.rb +15 -18
- data/lib/mongoid/matchable.rb +23 -0
- 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 +115 -0
- data/lib/mongoid/persistable/creatable.rb +181 -0
- data/lib/mongoid/persistable/deletable.rb +132 -0
- data/lib/mongoid/persistable/destroyable.rb +57 -0
- data/lib/mongoid/persistable/incrementable.rb +35 -0
- data/lib/mongoid/persistable/logical.rb +36 -0
- data/lib/mongoid/persistable/poppable.rb +36 -0
- data/lib/mongoid/persistable/pullable.rb +50 -0
- data/lib/mongoid/persistable/pushable.rb +66 -0
- data/lib/mongoid/persistable/renamable.rb +37 -0
- data/lib/mongoid/persistable/savable.rb +47 -0
- data/lib/mongoid/persistable/settable.rb +93 -0
- data/lib/mongoid/persistable/unsettable.rb +36 -0
- data/lib/mongoid/persistable/updatable.rb +165 -0
- data/lib/mongoid/persistable/upsertable.rb +51 -0
- data/lib/mongoid/persistable.rb +305 -0
- data/lib/mongoid/persistence_context.rb +239 -0
- data/lib/mongoid/positional.rb +72 -0
- data/lib/mongoid/query_cache.rb +64 -0
- data/lib/mongoid/railtie.rb +35 -78
- data/lib/mongoid/railties/controller_runtime.rb +88 -0
- data/lib/mongoid/railties/database.rake +18 -25
- data/lib/mongoid/reloadable.rb +94 -0
- data/lib/mongoid/scopable.rb +324 -0
- data/lib/mongoid/selectable.rb +49 -0
- data/lib/mongoid/serializable.rb +170 -0
- data/lib/mongoid/shardable.rb +130 -0
- data/lib/mongoid/stateful.rb +134 -0
- data/lib/mongoid/stringified_symbol.rb +52 -0
- data/lib/mongoid/tasks/database.rake +38 -0
- data/lib/mongoid/tasks/database.rb +194 -0
- data/lib/mongoid/threaded/lifecycle.rb +28 -70
- data/lib/mongoid/threaded.rb +142 -219
- data/lib/mongoid/timestamps/created/short.rb +2 -1
- data/lib/mongoid/timestamps/created.rb +9 -5
- data/lib/mongoid/timestamps/short.rb +2 -1
- data/lib/mongoid/timestamps/timeless.rb +52 -16
- data/lib/mongoid/timestamps/updated/short.rb +4 -3
- data/lib/mongoid/timestamps/updated.rb +14 -9
- data/lib/mongoid/timestamps.rb +4 -3
- data/lib/mongoid/touchable.rb +131 -0
- data/lib/mongoid/traversable.rb +337 -0
- data/lib/mongoid/validatable/associated.rb +47 -0
- data/lib/mongoid/validatable/format.rb +21 -0
- data/lib/mongoid/validatable/length.rb +21 -0
- data/lib/mongoid/validatable/localizable.rb +29 -0
- data/lib/mongoid/validatable/macros.rb +89 -0
- data/lib/mongoid/validatable/presence.rb +81 -0
- data/lib/mongoid/validatable/queryable.rb +29 -0
- data/lib/mongoid/validatable/uniqueness.rb +304 -0
- data/lib/mongoid/validatable.rb +160 -0
- data/lib/mongoid/version.rb +3 -2
- data/lib/mongoid/warnings.rb +28 -0
- data/lib/mongoid.rb +68 -109
- data/lib/rails/generators/mongoid/config/config_generator.rb +10 -2
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +150 -45
- data/lib/rails/generators/mongoid/model/model_generator.rb +3 -3
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -4
- data/lib/rails/generators/mongoid_generator.rb +5 -41
- data/lib/rails/mongoid.rb +6 -129
- data/spec/README.md +33 -0
- data/spec/config/mongoid.yml +56 -25
- data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
- data/spec/integration/app_spec.rb +345 -0
- data/spec/integration/associations/belongs_to_spec.rb +33 -0
- data/spec/integration/associations/embedded_dirty_spec.rb +57 -0
- data/spec/integration/associations/embedded_spec.rb +283 -0
- data/spec/integration/associations/embeds_many_spec.rb +219 -0
- data/spec/integration/associations/embeds_one_spec.rb +41 -0
- data/spec/integration/associations/foreign_key_spec.rb +107 -0
- data/spec/integration/associations/foreign_key_spec_models.rb +64 -0
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
- data/spec/integration/associations/has_many_spec.rb +128 -0
- data/spec/integration/associations/has_one_spec.rb +272 -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 +155 -0
- data/spec/integration/callbacks_spec.rb +450 -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 +359 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +142 -0
- data/spec/integration/discriminator_key_spec.rb +392 -0
- data/spec/integration/discriminator_value_spec.rb +206 -0
- data/spec/integration/document_spec.rb +51 -0
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +89 -0
- data/spec/integration/matcher_examples_spec.rb +765 -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 +41 -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 +122 -0
- data/spec/integration/matcher_spec.rb +283 -0
- data/spec/integration/persistence/range_field_spec.rb +350 -0
- data/spec/integration/server_query_spec.rb +141 -0
- data/spec/integration/shardable_spec.rb +148 -0
- data/spec/integration/stringified_symbol_field_spec.rb +203 -0
- data/spec/lite_spec_helper.rb +83 -0
- data/spec/mongoid/association/accessors_spec.rb +1067 -0
- data/spec/mongoid/association/auto_save_spec.rb +403 -0
- data/spec/mongoid/association/builders_spec.rb +255 -0
- data/spec/mongoid/association/constrainable_spec.rb +117 -0
- data/spec/mongoid/association/counter_cache_spec.rb +452 -0
- data/spec/mongoid/association/depending_spec.rb +959 -0
- data/spec/mongoid/association/eager_spec.rb +282 -0
- data/spec/mongoid/association/embedded/cyclic_spec.rb +180 -0
- data/spec/mongoid/association/embedded/dirty_spec.rb +67 -0
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +174 -0
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +90 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +619 -0
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +903 -0
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +56 -0
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +218 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +4863 -0
- data/spec/mongoid/association/embedded/embeds_many_models.rb +226 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +63 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +932 -0
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +79 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +106 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +1025 -0
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +8 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +73 -0
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +28 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +984 -0
- data/spec/mongoid/association/macros_spec.rb +1116 -0
- data/spec/mongoid/association/nested/many_spec.rb +232 -0
- data/spec/mongoid/association/nested/one_spec.rb +253 -0
- data/spec/mongoid/association/options_spec.rb +1323 -0
- data/spec/mongoid/association/polymorphic_spec.rb +162 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +244 -0
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +292 -0
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +412 -0
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +1388 -0
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +57 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +2046 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +180 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +148 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +196 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +76 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +3836 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +92 -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 +1104 -0
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +155 -0
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +251 -0
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +290 -0
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2232 -0
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +23 -0
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +4161 -0
- data/spec/mongoid/association/referenced/has_many_models.rb +97 -0
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +1273 -0
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +133 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +159 -0
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +193 -0
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +1248 -0
- data/spec/mongoid/association/referenced/has_one_models.rb +113 -0
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +1383 -0
- data/spec/mongoid/association/reflections_spec.rb +92 -0
- data/spec/mongoid/association/syncable_spec.rb +513 -0
- data/spec/mongoid/association_spec.rb +191 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +88 -39
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +10 -49
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +9 -49
- data/spec/mongoid/atomic/paths/root_spec.rb +5 -61
- data/spec/mongoid/atomic/paths_spec.rb +115 -35
- data/spec/mongoid/atomic_spec.rb +89 -42
- data/spec/mongoid/attributes/dynamic_spec.rb +152 -0
- data/spec/mongoid/attributes/nested_spec.rb +5000 -0
- data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
- 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 +40 -0
- data/spec/mongoid/attributes/readonly_spec.rb +166 -64
- data/spec/mongoid/attributes_spec.rb +1418 -409
- data/spec/mongoid/cacheable_spec.rb +114 -0
- data/spec/mongoid/changeable_spec.rb +1914 -0
- data/spec/mongoid/clients/factory_spec.rb +426 -0
- data/spec/mongoid/clients/options_spec.rb +521 -0
- data/spec/mongoid/clients/sessions_spec.rb +297 -0
- data/spec/mongoid/clients/transactions_spec.rb +415 -0
- data/spec/mongoid/clients_spec.rb +1084 -0
- data/spec/mongoid/composable_spec.rb +33 -0
- data/spec/mongoid/config/environment_spec.rb +138 -17
- data/spec/mongoid/config/options_spec.rb +26 -7
- data/spec/mongoid/config_spec.rb +607 -93
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +433 -153
- data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +221 -56
- data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
- data/spec/mongoid/contextual/atomic_spec.rb +577 -162
- data/spec/mongoid/contextual/geo_near_spec.rb +104 -38
- data/spec/mongoid/contextual/map_reduce_spec.rb +137 -142
- data/spec/mongoid/contextual/memory_spec.rb +1880 -269
- data/spec/mongoid/contextual/mongo_spec.rb +2523 -601
- data/spec/mongoid/contextual/none_spec.rb +123 -0
- data/spec/mongoid/copyable_spec.rb +833 -76
- data/spec/mongoid/copyable_spec_models.rb +47 -0
- data/spec/mongoid/criteria/findable_spec.rb +1132 -0
- data/spec/mongoid/criteria/includable_spec.rb +1492 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
- data/spec/mongoid/criteria/inspectable_spec.rb +29 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +47 -0
- data/spec/mongoid/criteria/modifiable_spec.rb +1812 -0
- data/spec/mongoid/criteria/options_spec.rb +31 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +372 -0
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +61 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +513 -0
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +169 -0
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +60 -0
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +215 -0
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +343 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +434 -0
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +60 -0
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +67 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +314 -0
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +67 -0
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +79 -0
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +119 -0
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +110 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +370 -0
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +91 -0
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +92 -0
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +41 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +347 -0
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +169 -0
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +406 -0
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +387 -0
- data/spec/mongoid/criteria/queryable/key_spec.rb +96 -0
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +182 -0
- data/spec/mongoid/criteria/queryable/optional_spec.rb +1317 -0
- data/spec/mongoid/criteria/queryable/options_spec.rb +362 -0
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +214 -0
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +139 -0
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +2119 -0
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +2462 -0
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +895 -0
- data/spec/mongoid/criteria/queryable/smash_spec.rb +32 -0
- data/spec/mongoid/criteria/queryable/storable_spec.rb +226 -0
- data/spec/mongoid/criteria/scopable_spec.rb +601 -0
- data/spec/mongoid/criteria_projection_spec.rb +410 -0
- data/spec/mongoid/criteria_spec.rb +1828 -3572
- data/spec/mongoid/document_fields_spec.rb +262 -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 +452 -221
- data/spec/mongoid/equality_spec.rb +155 -52
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +8 -6
- data/spec/mongoid/errors/callback_spec.rb +5 -3
- data/spec/mongoid/errors/delete_restriction_spec.rb +7 -5
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +35 -0
- data/spec/mongoid/errors/document_not_found_spec.rb +89 -11
- data/spec/mongoid/errors/invalid_collection_spec.rb +5 -3
- data/spec/mongoid/errors/invalid_config_file_spec.rb +31 -0
- data/spec/mongoid/errors/invalid_config_option_spec.rb +5 -3
- data/spec/mongoid/errors/invalid_field_option_spec.rb +5 -3
- data/spec/mongoid/errors/invalid_field_spec.rb +6 -4
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +5 -3
- data/spec/mongoid/errors/invalid_includes_spec.rb +5 -3
- data/spec/mongoid/errors/invalid_index_spec.rb +5 -3
- data/spec/mongoid/errors/invalid_options_spec.rb +7 -5
- data/spec/mongoid/errors/invalid_path_spec.rb +5 -3
- data/spec/mongoid/errors/invalid_relation_spec.rb +39 -0
- data/spec/mongoid/errors/invalid_scope_spec.rb +7 -5
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +5 -3
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +5 -3
- data/spec/mongoid/errors/invalid_time_spec.rb +5 -3
- data/spec/mongoid/errors/inverse_not_found_spec.rb +6 -4
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +31 -0
- data/spec/mongoid/errors/mixed_relations_spec.rb +5 -3
- data/spec/mongoid/errors/mongoid_error_spec.rb +45 -10
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +8 -6
- data/spec/mongoid/errors/no_client_config_spec.rb +31 -0
- data/spec/mongoid/errors/no_client_database_spec.rb +31 -0
- data/spec/mongoid/errors/no_client_hosts_spec.rb +31 -0
- data/spec/mongoid/errors/no_clients_config_spec.rb +31 -0
- data/spec/mongoid/errors/no_environment_spec.rb +8 -6
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +5 -3
- data/spec/mongoid/errors/no_metadata_spec.rb +5 -3
- data/spec/mongoid/errors/no_parent_spec.rb +6 -4
- data/spec/mongoid/errors/readonly_attribute_spec.rb +5 -3
- data/spec/mongoid/errors/readonly_document_spec.rb +31 -0
- data/spec/mongoid/errors/scope_overwrite_spec.rb +5 -3
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +6 -4
- data/spec/mongoid/errors/unknown_attribute_spec.rb +7 -5
- data/spec/mongoid/errors/unsaved_document_spec.rb +6 -4
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +5 -3
- data/spec/mongoid/errors/validations_spec.rb +9 -7
- data/spec/mongoid/extensions/array_spec.rb +108 -116
- data/spec/mongoid/extensions/big_decimal_spec.rb +838 -49
- data/spec/mongoid/extensions/binary_spec.rb +55 -18
- data/spec/mongoid/extensions/boolean_spec.rb +76 -74
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +339 -0
- data/spec/mongoid/extensions/date_spec.rb +59 -145
- data/spec/mongoid/extensions/date_time_spec.rb +35 -76
- data/spec/mongoid/extensions/decimal128_spec.rb +46 -0
- data/spec/mongoid/extensions/false_class_spec.rb +7 -5
- data/spec/mongoid/extensions/float_spec.rb +69 -62
- data/spec/mongoid/extensions/hash_spec.rb +197 -30
- data/spec/mongoid/extensions/integer_spec.rb +63 -65
- data/spec/mongoid/extensions/module_spec.rb +4 -2
- data/spec/mongoid/extensions/nil_class_spec.rb +3 -1
- data/spec/mongoid/extensions/object_id_spec.rb +136 -134
- data/spec/mongoid/extensions/object_spec.rb +53 -57
- data/spec/mongoid/extensions/range_spec.rb +287 -28
- data/spec/mongoid/extensions/regexp_spec.rb +71 -21
- data/spec/mongoid/extensions/set_spec.rb +112 -4
- data/spec/mongoid/extensions/string_spec.rb +188 -89
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
- data/spec/mongoid/extensions/symbol_spec.rb +25 -30
- data/spec/mongoid/extensions/time_spec.rb +703 -110
- data/spec/mongoid/extensions/time_with_zone_spec.rb +82 -67
- data/spec/mongoid/extensions/true_class_spec.rb +7 -5
- data/spec/mongoid/extensions_spec.rb +43 -0
- data/spec/mongoid/factory_spec.rb +374 -25
- data/spec/mongoid/fields/foreign_key_spec.rb +116 -92
- data/spec/mongoid/fields/localized_spec.rb +177 -35
- data/spec/mongoid/fields/standard_spec.rb +15 -13
- data/spec/mongoid/fields_spec.rb +952 -238
- data/spec/mongoid/findable_spec.rb +632 -0
- data/spec/mongoid/indexable/specification_spec.rb +129 -0
- data/spec/mongoid/indexable_spec.rb +643 -0
- data/spec/mongoid/inspectable_spec.rb +86 -0
- data/spec/mongoid/interceptable_spec.rb +2373 -0
- data/spec/mongoid/interceptable_spec_models.rb +307 -0
- data/spec/mongoid/loggable_spec.rb +3 -1
- 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 +36 -0
- data/spec/mongoid/mongoizable_spec.rb +285 -0
- data/spec/mongoid/persistable/creatable_spec.rb +662 -0
- data/spec/mongoid/persistable/deletable_spec.rb +514 -0
- data/spec/mongoid/persistable/destroyable_spec.rb +455 -0
- data/spec/mongoid/persistable/incrementable_spec.rb +241 -0
- data/spec/mongoid/persistable/logical_spec.rb +159 -0
- data/spec/mongoid/persistable/poppable_spec.rb +131 -0
- data/spec/mongoid/persistable/pullable_spec.rb +258 -0
- data/spec/mongoid/persistable/pushable_spec.rb +353 -0
- data/spec/mongoid/persistable/renamable_spec.rb +151 -0
- data/spec/mongoid/persistable/savable_spec.rb +684 -0
- data/spec/mongoid/persistable/settable_spec.rb +544 -0
- data/spec/mongoid/persistable/unsettable_spec.rb +171 -0
- data/spec/mongoid/persistable/updatable_spec.rb +760 -0
- data/spec/mongoid/persistable/upsertable_spec.rb +122 -0
- data/spec/mongoid/persistable_spec.rb +321 -0
- data/spec/mongoid/persistence_context_spec.rb +745 -0
- data/spec/mongoid/positional_spec.rb +223 -0
- data/spec/mongoid/query_cache_middleware_spec.rb +50 -0
- data/spec/mongoid/query_cache_spec.rb +870 -0
- data/spec/mongoid/relations/proxy_spec.rb +125 -47
- data/spec/mongoid/reloadable_spec.rb +665 -0
- data/spec/mongoid/scopable_spec.rb +1234 -0
- data/spec/mongoid/selectable_spec.rb +136 -0
- data/spec/mongoid/serializable_spec.rb +963 -0
- data/spec/mongoid/shardable_models.rb +61 -0
- data/spec/mongoid/shardable_spec.rb +204 -0
- data/spec/mongoid/stateful_spec.rb +157 -0
- data/spec/mongoid/tasks/database_rake_spec.rb +287 -0
- data/spec/mongoid/tasks/database_spec.rb +181 -0
- data/spec/mongoid/threaded_spec.rb +88 -78
- data/spec/mongoid/timestamps/created/short_spec.rb +9 -7
- data/spec/mongoid/timestamps/created_spec.rb +8 -6
- data/spec/mongoid/timestamps/timeless_spec.rb +29 -10
- data/spec/mongoid/timestamps/updated/short_spec.rb +16 -14
- data/spec/mongoid/timestamps/updated_spec.rb +14 -16
- data/spec/mongoid/timestamps_spec.rb +406 -18
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +704 -0
- data/spec/mongoid/touchable_spec_models.rb +57 -0
- data/spec/mongoid/traversable_spec.rb +1410 -0
- data/spec/mongoid/validatable/associated_spec.rb +208 -0
- data/spec/mongoid/validatable/format_spec.rb +85 -0
- data/spec/mongoid/validatable/length_spec.rb +225 -0
- data/spec/mongoid/validatable/numericality_spec.rb +32 -0
- data/spec/mongoid/validatable/presence_spec.rb +592 -0
- data/spec/mongoid/validatable/uniqueness_spec.rb +2504 -0
- data/spec/mongoid/validatable_spec.rb +327 -0
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +20 -20
- data/spec/rails/controller_extension/controller_runtime_spec.rb +112 -0
- data/spec/rails/mongoid_spec.rb +37 -354
- 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 +378 -0
- data/spec/shared/lib/mrss/docker_runner.rb +291 -0
- data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +200 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +230 -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 +325 -0
- data/spec/shared/share/haproxy-1.conf +16 -0
- data/spec/shared/share/haproxy-2.conf +17 -0
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/distro.sh +74 -0
- data/spec/shared/shlib/server.sh +392 -0
- data/spec/shared/shlib/set_env.sh +169 -0
- data/spec/spec_helper.rb +163 -42
- data/spec/support/authorization.rb +15 -0
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +77 -0
- data/spec/support/expectations.rb +32 -0
- data/spec/support/helpers.rb +11 -0
- data/spec/support/macros.rb +81 -0
- data/spec/support/models/account.rb +38 -0
- data/spec/support/models/acolyte.rb +19 -0
- data/spec/support/models/actor.rb +20 -0
- data/spec/support/models/actress.rb +4 -0
- data/spec/support/models/address.rb +85 -0
- data/spec/support/models/address_component.rb +7 -0
- data/spec/support/models/address_number.rb +8 -0
- data/spec/support/models/agency.rb +7 -0
- data/spec/support/models/agent.rb +18 -0
- data/spec/support/models/album.rb +20 -0
- data/spec/support/models/alert.rb +9 -0
- data/spec/support/models/animal.rb +28 -0
- data/spec/support/models/answer.rb +8 -0
- data/spec/support/models/appointment.rb +9 -0
- data/spec/support/models/armrest.rb +9 -0
- data/spec/support/models/array_field.rb +7 -0
- data/spec/support/models/article.rb +14 -0
- data/spec/support/models/artist.rb +91 -0
- data/spec/support/models/artwork.rb +6 -0
- data/spec/support/models/audible_sound.rb +3 -0
- data/spec/support/models/audio.rb +7 -0
- data/spec/support/models/augmentation.rb +25 -0
- data/spec/support/models/author.rb +8 -0
- data/spec/support/models/baby.rb +6 -0
- data/spec/support/models/band.rb +40 -0
- data/spec/support/models/bar.rb +12 -0
- data/spec/support/models/basic.rb +8 -0
- data/spec/support/models/bed.rb +3 -0
- data/spec/support/models/big_palette.rb +4 -0
- data/spec/support/models/birthday.rb +15 -0
- data/spec/support/models/bolt.rb +7 -0
- data/spec/support/models/bomb.rb +6 -0
- data/spec/support/models/book.rb +18 -0
- data/spec/support/models/breed.rb +6 -0
- data/spec/support/models/browser.rb +8 -0
- data/spec/support/models/building.rb +8 -0
- data/spec/support/models/building_address.rb +9 -0
- data/spec/support/models/bus.rb +9 -0
- data/spec/support/models/business.rb +7 -0
- data/spec/support/models/callback_test.rb +11 -0
- data/spec/support/models/canvas.rb +27 -0
- data/spec/support/models/car.rb +3 -0
- data/spec/support/models/cat.rb +10 -0
- data/spec/support/models/catalog.rb +24 -0
- data/spec/support/models/category.rb +10 -0
- data/spec/support/models/child.rb +6 -0
- data/spec/support/models/child_doc.rb +24 -0
- data/spec/support/models/church.rb +8 -0
- data/spec/support/models/circle.rb +5 -0
- data/spec/support/models/circuit.rb +6 -0
- data/spec/support/models/circus.rb +12 -0
- data/spec/support/models/code.rb +15 -0
- data/spec/support/models/coding/pull_request.rb +11 -0
- data/spec/support/models/coding.rb +3 -0
- data/spec/support/models/comment.rb +18 -0
- data/spec/support/models/company.rb +7 -0
- data/spec/support/models/consumption_period.rb +9 -0
- data/spec/support/models/contextable_item.rb +7 -0
- data/spec/support/models/contractor.rb +7 -0
- data/spec/support/models/cookie.rb +8 -0
- data/spec/support/models/country_code.rb +12 -0
- data/spec/support/models/courier_job.rb +6 -0
- data/spec/support/models/crate.rb +12 -0
- data/spec/support/models/customer.rb +10 -0
- data/spec/support/models/customer_address.rb +11 -0
- data/spec/support/models/deed.rb +7 -0
- data/spec/support/models/definition.rb +11 -0
- data/spec/support/models/delegating_patient.rb +15 -0
- data/spec/support/models/description.rb +13 -0
- data/spec/support/models/dictionary.rb +18 -0
- data/spec/support/models/division.rb +12 -0
- data/spec/support/models/doctor.rb +14 -0
- data/spec/support/models/dog.rb +9 -0
- data/spec/support/models/dokument.rb +8 -0
- data/spec/support/models/draft.rb +11 -0
- data/spec/support/models/dragon.rb +6 -0
- data/spec/support/models/driver.rb +9 -0
- data/spec/support/models/drug.rb +8 -0
- data/spec/support/models/dungeon.rb +6 -0
- data/spec/support/models/edit.rb +7 -0
- data/spec/support/models/email.rb +8 -0
- data/spec/support/models/employer.rb +7 -0
- data/spec/support/models/entry.rb +8 -0
- data/spec/support/models/eraser.rb +3 -0
- data/spec/support/models/even.rb +9 -0
- data/spec/support/models/event.rb +24 -0
- data/spec/support/models/exhibition.rb +6 -0
- data/spec/support/models/exhibitor.rb +8 -0
- data/spec/support/models/explosion.rb +6 -0
- data/spec/support/models/eye.rb +11 -0
- data/spec/support/models/eye_bowl.rb +11 -0
- data/spec/support/models/face.rb +10 -0
- data/spec/support/models/fanatic.rb +8 -0
- data/spec/support/models/favorite.rb +8 -0
- data/spec/support/models/filesystem.rb +7 -0
- data/spec/support/models/fire_hydrant.rb +8 -0
- data/spec/support/models/firefox.rb +6 -0
- data/spec/support/models/fish.rb +9 -0
- data/spec/support/models/folder.rb +9 -0
- data/spec/support/models/folder_item.rb +11 -0
- data/spec/support/models/fruits.rb +36 -0
- data/spec/support/models/game.rb +21 -0
- data/spec/support/models/ghost.rb +9 -0
- data/spec/support/models/guitar.rb +4 -0
- data/spec/support/models/hole.rb +12 -0
- data/spec/support/models/home.rb +6 -0
- data/spec/support/models/house.rb +8 -0
- data/spec/support/models/html_writer.rb +5 -0
- data/spec/support/models/id_key.rb +8 -0
- data/spec/support/models/idnodef.rb +7 -0
- data/spec/support/models/image.rb +24 -0
- data/spec/support/models/implant.rb +27 -0
- data/spec/support/models/instrument.rb +8 -0
- data/spec/support/models/item.rb +10 -0
- data/spec/support/models/jar.rb +9 -0
- data/spec/support/models/kaleidoscope.rb +8 -0
- data/spec/support/models/kangaroo.rb +6 -0
- data/spec/support/models/label.rb +52 -0
- data/spec/support/models/language.rb +7 -0
- data/spec/support/models/lat_lng.rb +17 -0
- data/spec/support/models/league.rb +13 -0
- data/spec/support/models/learner.rb +4 -0
- data/spec/support/models/line_item.rb +8 -0
- data/spec/support/models/location.rb +10 -0
- data/spec/support/models/login.rb +10 -0
- data/spec/support/models/manufacturer.rb +9 -0
- data/spec/support/models/meat.rb +6 -0
- data/spec/support/models/membership.rb +7 -0
- data/spec/support/models/message.rb +13 -0
- data/spec/support/models/minim.rb +6 -0
- data/spec/support/models/mixed_drink.rb +6 -0
- data/spec/support/models/mop.rb +24 -0
- data/spec/support/models/movie.rb +15 -0
- data/spec/support/models/my_hash.rb +4 -0
- data/spec/support/models/name.rb +26 -0
- data/spec/support/models/name_only.rb +8 -0
- data/spec/support/models/node.rb +7 -0
- data/spec/support/models/note.rb +19 -0
- data/spec/support/models/nut.rb +7 -0
- data/spec/support/models/odd.rb +9 -0
- data/spec/support/models/order.rb +12 -0
- data/spec/support/models/ordered_post.rb +13 -0
- data/spec/support/models/ordered_preference.rb +8 -0
- data/spec/support/models/oscar.rb +16 -0
- data/spec/support/models/other_owner_object.rb +4 -0
- data/spec/support/models/override.rb +18 -0
- data/spec/support/models/ownable.rb +8 -0
- data/spec/support/models/owner.rb +10 -0
- data/spec/support/models/pack.rb +5 -0
- data/spec/support/models/page.rb +18 -0
- data/spec/support/models/page_question.rb +6 -0
- data/spec/support/models/palette.rb +9 -0
- data/spec/support/models/parent.rb +7 -0
- data/spec/support/models/parent_doc.rb +8 -0
- data/spec/support/models/passport.rb +22 -0
- data/spec/support/models/patient.rb +11 -0
- data/spec/support/models/pdf_writer.rb +5 -0
- data/spec/support/models/pencil.rb +3 -0
- data/spec/support/models/person.rb +231 -0
- data/spec/support/models/pet.rb +25 -0
- data/spec/support/models/pet_owner.rb +8 -0
- data/spec/support/models/phone.rb +13 -0
- data/spec/support/models/piano.rb +4 -0
- data/spec/support/models/pizza.rb +9 -0
- data/spec/support/models/player.rb +39 -0
- data/spec/support/models/post.rb +52 -0
- data/spec/support/models/post_genre.rb +8 -0
- data/spec/support/models/powerup.rb +25 -0
- data/spec/support/models/preference.rb +11 -0
- data/spec/support/models/princess.rb +12 -0
- data/spec/support/models/product.rb +19 -0
- data/spec/support/models/profile.rb +17 -0
- data/spec/support/models/pronunciation.rb +7 -0
- data/spec/support/models/pub.rb +8 -0
- data/spec/support/models/publication/encyclopedia.rb +11 -0
- data/spec/support/models/publication/review.rb +13 -0
- data/spec/support/models/publication.rb +4 -0
- data/spec/support/models/purchase.rb +6 -0
- data/spec/support/models/purchased_item.rb +10 -0
- data/spec/support/models/question.rb +10 -0
- data/spec/support/models/quiz.rb +9 -0
- data/spec/support/models/rating.rb +10 -0
- data/spec/support/models/record.rb +54 -0
- data/spec/support/models/registry.rb +7 -0
- data/spec/support/models/role.rb +9 -0
- data/spec/support/models/root_category.rb +6 -0
- data/spec/support/models/sandwich.rb +11 -0
- data/spec/support/models/scheduler.rb +9 -0
- data/spec/support/models/school.rb +14 -0
- data/spec/support/models/scribe.rb +7 -0
- data/spec/support/models/sealer.rb +7 -0
- data/spec/support/models/seat.rb +24 -0
- data/spec/support/models/seo.rb +9 -0
- data/spec/support/models/series.rb +7 -0
- data/spec/support/models/server.rb +15 -0
- data/spec/support/models/service.rb +24 -0
- data/spec/support/models/shape.rb +14 -0
- data/spec/support/models/shelf.rb +7 -0
- data/spec/support/models/shield.rb +18 -0
- data/spec/support/models/shipment_address.rb +5 -0
- data/spec/support/models/shipping_container.rb +7 -0
- data/spec/support/models/shipping_pack.rb +5 -0
- data/spec/support/models/shirt.rb +11 -0
- data/spec/support/models/shop.rb +8 -0
- data/spec/support/models/short_agent.rb +6 -0
- data/spec/support/models/short_quiz.rb +7 -0
- data/spec/support/models/simple.rb +7 -0
- data/spec/support/models/slave.rb +8 -0
- data/spec/support/models/song.rb +10 -0
- data/spec/support/models/sound.rb +7 -0
- data/spec/support/models/spacer.rb +7 -0
- data/spec/support/models/square.rb +6 -0
- data/spec/support/models/staff.rb +9 -0
- data/spec/support/models/store_as_dup_test1.rb +7 -0
- data/spec/support/models/store_as_dup_test2.rb +7 -0
- data/spec/support/models/store_as_dup_test3.rb +7 -0
- data/spec/support/models/store_as_dup_test4.rb +7 -0
- data/spec/support/models/strategy.rb +5 -0
- data/spec/support/models/student.rb +14 -0
- data/spec/support/models/sub_item.rb +5 -0
- data/spec/support/models/subscription.rb +7 -0
- data/spec/support/models/survey.rb +7 -0
- data/spec/support/models/symptom.rb +8 -0
- data/spec/support/models/system_role.rb +7 -0
- data/spec/support/models/tag.rb +10 -0
- data/spec/support/models/target.rb +7 -0
- data/spec/support/models/template.rb +7 -0
- data/spec/support/models/thing.rb +11 -0
- data/spec/support/models/threadlocker.rb +7 -0
- data/spec/support/models/title.rb +5 -0
- data/spec/support/models/tool.rb +10 -0
- data/spec/support/models/topping.rb +7 -0
- data/spec/support/models/toy.rb +9 -0
- data/spec/support/models/track.rb +40 -0
- data/spec/support/models/translation.rb +7 -0
- data/spec/support/models/tree.rb +11 -0
- data/spec/support/models/truck.rb +7 -0
- data/spec/support/models/updatable.rb +7 -0
- data/spec/support/models/user.rb +23 -0
- data/spec/support/models/user_account.rb +12 -0
- data/spec/support/models/validation_callback.rb +12 -0
- data/spec/support/models/vehicle.rb +18 -0
- data/spec/support/models/version.rb +7 -0
- data/spec/support/models/vertex.rb +8 -0
- data/spec/support/models/vet_visit.rb +7 -0
- data/spec/support/models/video.rb +15 -0
- data/spec/support/models/video_game.rb +3 -0
- data/spec/support/models/washer.rb +7 -0
- data/spec/support/models/weapon.rb +25 -0
- data/spec/support/models/wiki_page.rb +17 -0
- data/spec/support/models/word.rb +17 -0
- data/spec/support/models/word_origin.rb +13 -0
- data/spec/support/models/writer.rb +13 -0
- data/spec/support/schema_maps/schema_map_aws.json +17 -0
- data/spec/support/schema_maps/schema_map_aws_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_azure.json +17 -0
- data/spec/support/schema_maps/schema_map_azure_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_gcp.json +17 -0
- data/spec/support/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_kmip.json +17 -0
- data/spec/support/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_local.json +18 -0
- data/spec/support/schema_maps/schema_map_local_key_alt_names.json +12 -0
- data/spec/support/shared/time.rb +53 -0
- data/spec/support/spec_config.rb +64 -0
- data.tar.gz.sig +0 -0
- metadata +1582 -912
- metadata.gz.sig +0 -0
- data/lib/mongoid/atomic/positionable.rb +0 -73
- data/lib/mongoid/callbacks.rb +0 -314
- data/lib/mongoid/components.rb +0 -93
- data/lib/mongoid/config/inflections.rb +0 -6
- data/lib/mongoid/config/validators/session.rb +0 -140
- data/lib/mongoid/contextual/eager.rb +0 -158
- data/lib/mongoid/contextual/find_and_modify.rb +0 -69
- data/lib/mongoid/criterion/findable.rb +0 -179
- data/lib/mongoid/criterion/inspection.rb +0 -25
- data/lib/mongoid/criterion/marshalable.rb +0 -48
- data/lib/mongoid/criterion/modifiable.rb +0 -189
- data/lib/mongoid/criterion/scoping.rb +0 -158
- data/lib/mongoid/dirty.rb +0 -376
- data/lib/mongoid/errors/eager_load.rb +0 -22
- data/lib/mongoid/errors/mixed_session_configuration.rb +0 -28
- data/lib/mongoid/errors/no_default_session.rb +0 -23
- data/lib/mongoid/errors/no_session_config.rb +0 -22
- data/lib/mongoid/errors/no_session_database.rb +0 -27
- data/lib/mongoid/errors/no_session_hosts.rb +0 -27
- data/lib/mongoid/errors/no_sessions_config.rb +0 -20
- data/lib/mongoid/errors/versioning_not_on_root.rb +0 -23
- data/lib/mongoid/finders.rb +0 -130
- data/lib/mongoid/hierarchy.rb +0 -188
- data/lib/mongoid/identity_map.rb +0 -163
- data/lib/mongoid/indexes/validators/options.rb +0 -102
- data/lib/mongoid/indexes.rb +0 -154
- data/lib/mongoid/inspection.rb +0 -55
- data/lib/mongoid/json.rb +0 -16
- data/lib/mongoid/matchers/all.rb +0 -27
- data/lib/mongoid/matchers/and.rb +0 -30
- data/lib/mongoid/matchers/default.rb +0 -72
- data/lib/mongoid/matchers/exists.rb +0 -23
- data/lib/mongoid/matchers/gt.rb +0 -21
- data/lib/mongoid/matchers/gte.rb +0 -21
- data/lib/mongoid/matchers/in.rb +0 -24
- data/lib/mongoid/matchers/lt.rb +0 -21
- data/lib/mongoid/matchers/lte.rb +0 -21
- data/lib/mongoid/matchers/ne.rb +0 -21
- data/lib/mongoid/matchers/nin.rb +0 -21
- data/lib/mongoid/matchers/or.rb +0 -33
- data/lib/mongoid/matchers/size.rb +0 -21
- data/lib/mongoid/matchers/strategies.rb +0 -97
- data/lib/mongoid/matchers.rb +0 -32
- data/lib/mongoid/multi_parameter_attributes.rb +0 -105
- data/lib/mongoid/nested_attributes.rb +0 -78
- data/lib/mongoid/observer.rb +0 -192
- data/lib/mongoid/paranoia.rb +0 -137
- data/lib/mongoid/persistence/atomic/add_to_set.rb +0 -47
- data/lib/mongoid/persistence/atomic/bit.rb +0 -35
- data/lib/mongoid/persistence/atomic/inc.rb +0 -45
- data/lib/mongoid/persistence/atomic/operation.rb +0 -154
- data/lib/mongoid/persistence/atomic/pop.rb +0 -32
- data/lib/mongoid/persistence/atomic/pull.rb +0 -32
- data/lib/mongoid/persistence/atomic/pull_all.rb +0 -32
- data/lib/mongoid/persistence/atomic/push.rb +0 -25
- data/lib/mongoid/persistence/atomic/push_all.rb +0 -25
- data/lib/mongoid/persistence/atomic/rename.rb +0 -30
- data/lib/mongoid/persistence/atomic/sets.rb +0 -28
- data/lib/mongoid/persistence/atomic/unset.rb +0 -27
- data/lib/mongoid/persistence/atomic.rb +0 -231
- data/lib/mongoid/persistence/deletion.rb +0 -32
- data/lib/mongoid/persistence/insertion.rb +0 -38
- data/lib/mongoid/persistence/modification.rb +0 -35
- data/lib/mongoid/persistence/operations/embedded/insert.rb +0 -46
- data/lib/mongoid/persistence/operations/embedded/remove.rb +0 -43
- data/lib/mongoid/persistence/operations/insert.rb +0 -34
- data/lib/mongoid/persistence/operations/remove.rb +0 -33
- data/lib/mongoid/persistence/operations/update.rb +0 -59
- data/lib/mongoid/persistence/operations/upsert.rb +0 -28
- data/lib/mongoid/persistence/operations.rb +0 -214
- data/lib/mongoid/persistence/upsertion.rb +0 -31
- data/lib/mongoid/persistence.rb +0 -352
- data/lib/mongoid/railties/document.rb +0 -12
- data/lib/mongoid/relations/accessors.rb +0 -299
- data/lib/mongoid/relations/auto_save.rb +0 -107
- data/lib/mongoid/relations/binding.rb +0 -241
- data/lib/mongoid/relations/bindings/embedded/in.rb +0 -63
- data/lib/mongoid/relations/bindings/embedded/many.rb +0 -52
- data/lib/mongoid/relations/bindings/embedded/one.rb +0 -55
- data/lib/mongoid/relations/bindings/referenced/in.rb +0 -70
- data/lib/mongoid/relations/bindings/referenced/many.rb +0 -42
- data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +0 -67
- data/lib/mongoid/relations/bindings/referenced/one.rb +0 -44
- data/lib/mongoid/relations/bindings.rb +0 -9
- data/lib/mongoid/relations/builder.rb +0 -57
- data/lib/mongoid/relations/builders/embedded/in.rb +0 -29
- data/lib/mongoid/relations/builders/embedded/many.rb +0 -36
- data/lib/mongoid/relations/builders/embedded/one.rb +0 -30
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +0 -177
- data/lib/mongoid/relations/builders/nested_attributes/one.rb +0 -127
- data/lib/mongoid/relations/builders/referenced/in.rb +0 -26
- data/lib/mongoid/relations/builders/referenced/many.rb +0 -27
- data/lib/mongoid/relations/builders/referenced/many_to_many.rb +0 -40
- data/lib/mongoid/relations/builders/referenced/one.rb +0 -26
- data/lib/mongoid/relations/builders.rb +0 -104
- data/lib/mongoid/relations/cascading/delete.rb +0 -44
- data/lib/mongoid/relations/cascading/destroy.rb +0 -43
- data/lib/mongoid/relations/cascading/nullify.rb +0 -35
- data/lib/mongoid/relations/cascading/restrict.rb +0 -39
- data/lib/mongoid/relations/cascading.rb +0 -58
- data/lib/mongoid/relations/constraint.rb +0 -49
- data/lib/mongoid/relations/conversions.rb +0 -34
- data/lib/mongoid/relations/counter_cache.rb +0 -107
- data/lib/mongoid/relations/cyclic.rb +0 -107
- data/lib/mongoid/relations/embedded/batchable.rb +0 -356
- data/lib/mongoid/relations/embedded/in.rb +0 -231
- data/lib/mongoid/relations/embedded/many.rb +0 -659
- data/lib/mongoid/relations/embedded/one.rb +0 -223
- data/lib/mongoid/relations/macros.rb +0 -359
- data/lib/mongoid/relations/many.rb +0 -217
- data/lib/mongoid/relations/marshalable.rb +0 -32
- data/lib/mongoid/relations/metadata.rb +0 -1227
- data/lib/mongoid/relations/nested_builder.rb +0 -74
- data/lib/mongoid/relations/one.rb +0 -60
- data/lib/mongoid/relations/options.rb +0 -48
- data/lib/mongoid/relations/polymorphic.rb +0 -40
- data/lib/mongoid/relations/proxy.rb +0 -264
- data/lib/mongoid/relations/referenced/in.rb +0 -314
- data/lib/mongoid/relations/referenced/many.rb +0 -789
- data/lib/mongoid/relations/referenced/many_to_many.rb +0 -495
- data/lib/mongoid/relations/referenced/one.rb +0 -297
- data/lib/mongoid/relations/reflections.rb +0 -62
- data/lib/mongoid/relations/synchronization.rb +0 -169
- data/lib/mongoid/relations/targets/enumerable.rb +0 -473
- data/lib/mongoid/relations/targets.rb +0 -2
- data/lib/mongoid/relations/touchable.rb +0 -61
- data/lib/mongoid/relations.rb +0 -162
- data/lib/mongoid/reloading.rb +0 -92
- data/lib/mongoid/scoping.rb +0 -356
- data/lib/mongoid/serialization.rb +0 -161
- data/lib/mongoid/sessions/factory.rb +0 -129
- data/lib/mongoid/sessions/mongo_uri.rb +0 -93
- data/lib/mongoid/sessions/validators/storage.rb +0 -49
- data/lib/mongoid/sessions/validators.rb +0 -2
- data/lib/mongoid/sessions.rb +0 -433
- data/lib/mongoid/sharding.rb +0 -61
- data/lib/mongoid/state.rb +0 -97
- data/lib/mongoid/unit_of_work.rb +0 -61
- data/lib/mongoid/validations/associated.rb +0 -46
- data/lib/mongoid/validations/format.rb +0 -20
- data/lib/mongoid/validations/length.rb +0 -20
- data/lib/mongoid/validations/localizable.rb +0 -30
- data/lib/mongoid/validations/macros.rb +0 -93
- data/lib/mongoid/validations/presence.rb +0 -86
- data/lib/mongoid/validations/queryable.rb +0 -31
- data/lib/mongoid/validations/uniqueness.rb +0 -330
- data/lib/mongoid/validations.rb +0 -166
- data/lib/mongoid/versioning.rb +0 -217
- data/lib/rack/mongoid/middleware/identity_map.rb +0 -39
- data/lib/rack/mongoid.rb +0 -2
- data/lib/rails/generators/mongoid/observer/observer_generator.rb +0 -17
- data/lib/rails/generators/mongoid/observer/templates/observer.rb.tt +0 -4
- data/lib/support/ruby_version.rb +0 -26
- data/spec/app/models/account.rb +0 -32
- data/spec/app/models/acolyte.rb +0 -16
- data/spec/app/models/actor.rb +0 -19
- data/spec/app/models/actor_observer.rb +0 -15
- data/spec/app/models/actress.rb +0 -2
- data/spec/app/models/address.rb +0 -72
- data/spec/app/models/address_component.rb +0 -5
- data/spec/app/models/address_number.rb +0 -6
- data/spec/app/models/agency.rb +0 -5
- data/spec/app/models/agent.rb +0 -12
- data/spec/app/models/album.rb +0 -14
- data/spec/app/models/alert.rb +0 -5
- data/spec/app/models/animal.rb +0 -25
- data/spec/app/models/answer.rb +0 -4
- data/spec/app/models/appointment.rb +0 -7
- data/spec/app/models/article.rb +0 -13
- data/spec/app/models/artist.rb +0 -66
- data/spec/app/models/artwork.rb +0 -4
- data/spec/app/models/augmentation.rb +0 -11
- data/spec/app/models/author.rb +0 -6
- data/spec/app/models/band.rb +0 -25
- data/spec/app/models/bar.rb +0 -9
- data/spec/app/models/basic.rb +0 -6
- data/spec/app/models/bed.rb +0 -1
- data/spec/app/models/big_palette.rb +0 -2
- data/spec/app/models/birthday.rb +0 -13
- data/spec/app/models/book.rb +0 -12
- data/spec/app/models/breed.rb +0 -4
- data/spec/app/models/browser.rb +0 -6
- data/spec/app/models/building.rb +0 -7
- data/spec/app/models/building_address.rb +0 -7
- data/spec/app/models/bus.rb +0 -7
- data/spec/app/models/business.rb +0 -5
- data/spec/app/models/callback_recorder.rb +0 -25
- data/spec/app/models/callback_test.rb +0 -9
- data/spec/app/models/canvas.rb +0 -25
- data/spec/app/models/car.rb +0 -1
- data/spec/app/models/cat.rb +0 -8
- data/spec/app/models/category.rb +0 -8
- data/spec/app/models/child.rb +0 -4
- data/spec/app/models/child_doc.rb +0 -22
- data/spec/app/models/church.rb +0 -4
- data/spec/app/models/circle.rb +0 -3
- data/spec/app/models/circuit.rb +0 -4
- data/spec/app/models/circus.rb +0 -7
- data/spec/app/models/code.rb +0 -5
- data/spec/app/models/comment.rb +0 -16
- data/spec/app/models/contractor.rb +0 -7
- data/spec/app/models/cookie.rb +0 -6
- data/spec/app/models/country_code.rb +0 -8
- data/spec/app/models/definition.rb +0 -8
- data/spec/app/models/description.rb +0 -11
- data/spec/app/models/dictionary.rb +0 -10
- data/spec/app/models/division.rb +0 -10
- data/spec/app/models/doctor.rb +0 -12
- data/spec/app/models/dog.rb +0 -7
- data/spec/app/models/dokument.rb +0 -5
- data/spec/app/models/driver.rb +0 -7
- data/spec/app/models/drug.rb +0 -8
- data/spec/app/models/email.rb +0 -6
- data/spec/app/models/employer.rb +0 -5
- data/spec/app/models/entry.rb +0 -6
- data/spec/app/models/eraser.rb +0 -1
- data/spec/app/models/event.rb +0 -22
- data/spec/app/models/exhibition.rb +0 -4
- data/spec/app/models/exhibitor.rb +0 -5
- data/spec/app/models/eye.rb +0 -9
- data/spec/app/models/eye_bowl.rb +0 -9
- data/spec/app/models/face.rb +0 -8
- data/spec/app/models/favorite.rb +0 -6
- data/spec/app/models/filesystem.rb +0 -4
- data/spec/app/models/fire_hydrant.rb +0 -6
- data/spec/app/models/firefox.rb +0 -4
- data/spec/app/models/fish.rb +0 -8
- data/spec/app/models/folder.rb +0 -7
- data/spec/app/models/folder_item.rb +0 -9
- data/spec/app/models/fruits.rb +0 -28
- data/spec/app/models/game.rb +0 -21
- data/spec/app/models/ghost.rb +0 -7
- data/spec/app/models/home.rb +0 -4
- data/spec/app/models/house.rb +0 -8
- data/spec/app/models/html_writer.rb +0 -3
- data/spec/app/models/image.rb +0 -22
- data/spec/app/models/implant.rb +0 -16
- data/spec/app/models/item.rb +0 -12
- data/spec/app/models/jar.rb +0 -7
- data/spec/app/models/label.rb +0 -40
- data/spec/app/models/language.rb +0 -5
- data/spec/app/models/lat_lng.rb +0 -15
- data/spec/app/models/league.rb +0 -11
- data/spec/app/models/learner.rb +0 -2
- data/spec/app/models/line_item.rb +0 -6
- data/spec/app/models/location.rb +0 -8
- data/spec/app/models/login.rb +0 -8
- data/spec/app/models/manufacturer.rb +0 -7
- data/spec/app/models/meat.rb +0 -4
- data/spec/app/models/membership.rb +0 -4
- data/spec/app/models/mixed_drink.rb +0 -4
- data/spec/app/models/movie.rb +0 -12
- data/spec/app/models/my_hash.rb +0 -2
- data/spec/app/models/name.rb +0 -23
- data/spec/app/models/node.rb +0 -5
- data/spec/app/models/note.rb +0 -12
- data/spec/app/models/ordered_post.rb +0 -6
- data/spec/app/models/ordered_preference.rb +0 -6
- data/spec/app/models/oscar.rb +0 -15
- data/spec/app/models/override.rb +0 -16
- data/spec/app/models/ownable.rb +0 -6
- data/spec/app/models/owner.rb +0 -6
- data/spec/app/models/pack.rb +0 -3
- data/spec/app/models/page.rb +0 -5
- data/spec/app/models/page_question.rb +0 -4
- data/spec/app/models/palette.rb +0 -7
- data/spec/app/models/paranoid_phone.rb +0 -25
- data/spec/app/models/paranoid_post.rb +0 -36
- data/spec/app/models/parent.rb +0 -5
- data/spec/app/models/parent_doc.rb +0 -6
- data/spec/app/models/passport.rb +0 -5
- data/spec/app/models/patient.rb +0 -9
- data/spec/app/models/pdf_writer.rb +0 -3
- data/spec/app/models/pencil.rb +0 -1
- data/spec/app/models/person.rb +0 -201
- data/spec/app/models/pet.rb +0 -23
- data/spec/app/models/pet_owner.rb +0 -6
- data/spec/app/models/phone.rb +0 -11
- data/spec/app/models/phone_observer.rb +0 -6
- data/spec/app/models/pizza.rb +0 -7
- data/spec/app/models/player.rb +0 -35
- data/spec/app/models/post.rb +0 -43
- data/spec/app/models/powerup.rb +0 -11
- data/spec/app/models/preference.rb +0 -9
- data/spec/app/models/princess.rb +0 -8
- data/spec/app/models/product.rb +0 -17
- data/spec/app/models/profile.rb +0 -5
- data/spec/app/models/pronunciation.rb +0 -5
- data/spec/app/models/purchase.rb +0 -4
- data/spec/app/models/question.rb +0 -8
- data/spec/app/models/quiz.rb +0 -10
- data/spec/app/models/rating.rb +0 -8
- data/spec/app/models/record.rb +0 -46
- data/spec/app/models/registry.rb +0 -4
- data/spec/app/models/role.rb +0 -7
- data/spec/app/models/root_category.rb +0 -4
- data/spec/app/models/sandwich.rb +0 -4
- data/spec/app/models/scheduler.rb +0 -7
- data/spec/app/models/seo.rb +0 -7
- data/spec/app/models/series.rb +0 -4
- data/spec/app/models/server.rb +0 -13
- data/spec/app/models/service.rb +0 -22
- data/spec/app/models/shape.rb +0 -12
- data/spec/app/models/shelf.rb +0 -5
- data/spec/app/models/shipping_container.rb +0 -5
- data/spec/app/models/shipping_pack.rb +0 -3
- data/spec/app/models/shop.rb +0 -6
- data/spec/app/models/short_agent.rb +0 -4
- data/spec/app/models/short_quiz.rb +0 -5
- data/spec/app/models/slave.rb +0 -6
- data/spec/app/models/song.rb +0 -8
- data/spec/app/models/square.rb +0 -4
- data/spec/app/models/strategy.rb +0 -3
- data/spec/app/models/sub_item.rb +0 -3
- data/spec/app/models/subscription.rb +0 -4
- data/spec/app/models/survey.rb +0 -5
- data/spec/app/models/symptom.rb +0 -6
- data/spec/app/models/tag.rb +0 -8
- data/spec/app/models/target.rb +0 -5
- data/spec/app/models/template.rb +0 -5
- data/spec/app/models/thing.rb +0 -9
- data/spec/app/models/title.rb +0 -4
- data/spec/app/models/tool.rb +0 -8
- data/spec/app/models/topping.rb +0 -5
- data/spec/app/models/track.rb +0 -38
- data/spec/app/models/translation.rb +0 -5
- data/spec/app/models/tree.rb +0 -9
- data/spec/app/models/truck.rb +0 -3
- data/spec/app/models/user.rb +0 -21
- data/spec/app/models/user_account.rb +0 -10
- data/spec/app/models/validation_callback.rb +0 -10
- data/spec/app/models/vehicle.rb +0 -11
- data/spec/app/models/version.rb +0 -5
- data/spec/app/models/vet_visit.rb +0 -5
- data/spec/app/models/video.rb +0 -17
- data/spec/app/models/video_game.rb +0 -1
- data/spec/app/models/weapon.rb +0 -11
- data/spec/app/models/wiki_page.rb +0 -17
- data/spec/app/models/word.rb +0 -12
- data/spec/app/models/word_origin.rb +0 -11
- data/spec/app/models/writer.rb +0 -11
- data/spec/mongoid/atomic/positionable_spec.rb +0 -227
- data/spec/mongoid/attributes/processing_spec.rb +0 -149
- data/spec/mongoid/callbacks_spec.rb +0 -1564
- data/spec/mongoid/components_spec.rb +0 -24
- data/spec/mongoid/contextual/find_and_modify_spec.rb +0 -220
- data/spec/mongoid/criterion/destructive_spec.rb +0 -101
- data/spec/mongoid/criterion/inspection_spec.rb +0 -27
- data/spec/mongoid/criterion/marshalable_spec.rb +0 -28
- data/spec/mongoid/criterion/modifiable_spec.rb +0 -409
- data/spec/mongoid/criterion/modification_spec.rb +0 -402
- data/spec/mongoid/criterion/scoping_spec.rb +0 -391
- data/spec/mongoid/dirty_spec.rb +0 -1508
- data/spec/mongoid/errors/eager_load_spec.rb +0 -29
- data/spec/mongoid/errors/mixed_session_configuration_spec.rb +0 -29
- data/spec/mongoid/errors/no_session_config_spec.rb +0 -29
- data/spec/mongoid/errors/no_session_database_spec.rb +0 -29
- data/spec/mongoid/errors/no_session_hosts_spec.rb +0 -29
- data/spec/mongoid/errors/no_sessions_config_spec.rb +0 -29
- data/spec/mongoid/errors/versioning_not_on_root_spec.rb +0 -29
- data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +0 -184
- data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +0 -201
- data/spec/mongoid/finders_spec.rb +0 -321
- data/spec/mongoid/hierarchy_spec.rb +0 -244
- data/spec/mongoid/identity_map_spec.rb +0 -564
- data/spec/mongoid/indexes_spec.rb +0 -404
- data/spec/mongoid/inspection_spec.rb +0 -57
- data/spec/mongoid/json_spec.rb +0 -33
- data/spec/mongoid/matchers/all_spec.rb +0 -31
- data/spec/mongoid/matchers/and_spec.rb +0 -162
- data/spec/mongoid/matchers/default_spec.rb +0 -130
- data/spec/mongoid/matchers/exists_spec.rb +0 -57
- data/spec/mongoid/matchers/gt_spec.rb +0 -74
- data/spec/mongoid/matchers/gte_spec.rb +0 -74
- data/spec/mongoid/matchers/in_spec.rb +0 -25
- data/spec/mongoid/matchers/lt_spec.rb +0 -74
- data/spec/mongoid/matchers/lte_spec.rb +0 -74
- data/spec/mongoid/matchers/ne_spec.rb +0 -25
- data/spec/mongoid/matchers/nin_spec.rb +0 -25
- data/spec/mongoid/matchers/or_spec.rb +0 -106
- data/spec/mongoid/matchers/size_spec.rb +0 -25
- data/spec/mongoid/matchers_spec.rb +0 -532
- data/spec/mongoid/multi_parameter_attributes_spec.rb +0 -128
- data/spec/mongoid/nested_attributes_spec.rb +0 -4945
- data/spec/mongoid/observer_spec.rb +0 -290
- data/spec/mongoid/paranoia_spec.rb +0 -759
- data/spec/mongoid/persistence/atomic/add_to_set_spec.rb +0 -262
- data/spec/mongoid/persistence/atomic/bit_spec.rb +0 -88
- data/spec/mongoid/persistence/atomic/inc_spec.rb +0 -133
- data/spec/mongoid/persistence/atomic/pop_spec.rb +0 -111
- data/spec/mongoid/persistence/atomic/pull_all_spec.rb +0 -77
- data/spec/mongoid/persistence/atomic/pull_spec.rb +0 -80
- data/spec/mongoid/persistence/atomic/push_all_spec.rb +0 -77
- data/spec/mongoid/persistence/atomic/push_spec.rb +0 -77
- data/spec/mongoid/persistence/atomic/rename_spec.rb +0 -42
- data/spec/mongoid/persistence/atomic/sets_spec.rb +0 -154
- data/spec/mongoid/persistence/atomic/unset_spec.rb +0 -65
- data/spec/mongoid/persistence/atomic_spec.rb +0 -216
- data/spec/mongoid/persistence/operations/embedded/insert_spec.rb +0 -191
- data/spec/mongoid/persistence/operations/embedded/remove_spec.rb +0 -8
- data/spec/mongoid/persistence/operations/insert_spec.rb +0 -149
- data/spec/mongoid/persistence/operations/remove_spec.rb +0 -113
- data/spec/mongoid/persistence/operations/update_spec.rb +0 -141
- data/spec/mongoid/persistence/operations/upsert_spec.rb +0 -59
- data/spec/mongoid/persistence/operations_spec.rb +0 -313
- data/spec/mongoid/persistence_spec.rb +0 -2279
- data/spec/mongoid/railties/document_spec.rb +0 -24
- data/spec/mongoid/relations/accessors_spec.rb +0 -844
- data/spec/mongoid/relations/auto_save_spec.rb +0 -261
- data/spec/mongoid/relations/bindings/embedded/in_spec.rb +0 -171
- data/spec/mongoid/relations/bindings/embedded/many_spec.rb +0 -54
- data/spec/mongoid/relations/bindings/embedded/one_spec.rb +0 -77
- data/spec/mongoid/relations/bindings/referenced/in_spec.rb +0 -241
- data/spec/mongoid/relations/bindings/referenced/many_spec.rb +0 -153
- data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +0 -178
- data/spec/mongoid/relations/bindings/referenced/one_spec.rb +0 -131
- data/spec/mongoid/relations/builders/embedded/in_spec.rb +0 -34
- data/spec/mongoid/relations/builders/embedded/many_spec.rb +0 -132
- data/spec/mongoid/relations/builders/embedded/one_spec.rb +0 -99
- data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +0 -234
- data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +0 -250
- data/spec/mongoid/relations/builders/referenced/in_spec.rb +0 -241
- data/spec/mongoid/relations/builders/referenced/many_spec.rb +0 -137
- data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +0 -178
- data/spec/mongoid/relations/builders/referenced/one_spec.rb +0 -124
- data/spec/mongoid/relations/builders_spec.rb +0 -226
- data/spec/mongoid/relations/cascading/delete_spec.rb +0 -101
- data/spec/mongoid/relations/cascading/destroy_spec.rb +0 -47
- data/spec/mongoid/relations/cascading/nullify_spec.rb +0 -32
- data/spec/mongoid/relations/cascading/restrict_spec.rb +0 -68
- data/spec/mongoid/relations/cascading_spec.rb +0 -355
- data/spec/mongoid/relations/constraint_spec.rb +0 -74
- data/spec/mongoid/relations/conversions_spec.rb +0 -126
- data/spec/mongoid/relations/counter_cache_spec.rb +0 -205
- data/spec/mongoid/relations/cyclic_spec.rb +0 -156
- data/spec/mongoid/relations/embedded/dirty_spec.rb +0 -65
- data/spec/mongoid/relations/embedded/in_spec.rb +0 -580
- data/spec/mongoid/relations/embedded/many_spec.rb +0 -3841
- data/spec/mongoid/relations/embedded/one_spec.rb +0 -1055
- data/spec/mongoid/relations/macros_spec.rb +0 -625
- data/spec/mongoid/relations/metadata_spec.rb +0 -2030
- data/spec/mongoid/relations/options_spec.rb +0 -35
- data/spec/mongoid/relations/polymorphic_spec.rb +0 -132
- data/spec/mongoid/relations/referenced/in_spec.rb +0 -1501
- data/spec/mongoid/relations/referenced/many_spec.rb +0 -3632
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +0 -3561
- data/spec/mongoid/relations/referenced/one_spec.rb +0 -1331
- data/spec/mongoid/relations/reflections_spec.rb +0 -101
- data/spec/mongoid/relations/synchronization_spec.rb +0 -453
- data/spec/mongoid/relations/targets/enumerable_spec.rb +0 -1710
- data/spec/mongoid/relations_spec.rb +0 -188
- data/spec/mongoid/reloading_spec.rb +0 -305
- data/spec/mongoid/scoping_spec.rb +0 -978
- data/spec/mongoid/serialization_spec.rb +0 -833
- data/spec/mongoid/sessions/factory_spec.rb +0 -312
- data/spec/mongoid/sessions/mongo_uri_spec.rb +0 -103
- data/spec/mongoid/sessions_spec.rb +0 -1111
- data/spec/mongoid/sharding_spec.rb +0 -61
- data/spec/mongoid/state_spec.rb +0 -102
- data/spec/mongoid/unit_of_work_spec.rb +0 -196
- data/spec/mongoid/validations/associated_spec.rb +0 -183
- data/spec/mongoid/validations/format_spec.rb +0 -83
- data/spec/mongoid/validations/length_spec.rb +0 -223
- data/spec/mongoid/validations/numericality_spec.rb +0 -30
- data/spec/mongoid/validations/presence_spec.rb +0 -592
- data/spec/mongoid/validations/uniqueness_spec.rb +0 -2399
- data/spec/mongoid/validations_spec.rb +0 -309
- data/spec/mongoid/versioning_spec.rb +0 -540
- data/spec/rack/mongoid/middleware/identity_map_spec.rb +0 -72
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require "spec_helper"
|
|
2
4
|
|
|
3
5
|
describe Mongoid::Contextual::Memory do
|
|
@@ -27,7 +29,7 @@ describe Mongoid::Contextual::Memory do
|
|
|
27
29
|
end
|
|
28
30
|
|
|
29
31
|
it "returns false" do
|
|
30
|
-
context.send(method).
|
|
32
|
+
expect(context.send(method)).to be false
|
|
31
33
|
end
|
|
32
34
|
end
|
|
33
35
|
|
|
@@ -44,7 +46,22 @@ describe Mongoid::Contextual::Memory do
|
|
|
44
46
|
end
|
|
45
47
|
|
|
46
48
|
it "returns true" do
|
|
47
|
-
context.send(method).
|
|
49
|
+
expect(context.send(method)).to be true
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
context 'when there is a collation on the criteria' do
|
|
54
|
+
|
|
55
|
+
let(:criteria) do
|
|
56
|
+
Address.where(street: "hobrecht").tap do |crit|
|
|
57
|
+
crit.documents = [ hobrecht, friedel ]
|
|
58
|
+
end.collation(locale: 'en_US', strength: 2)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "raises an exception" do
|
|
62
|
+
expect {
|
|
63
|
+
context.send(method)
|
|
64
|
+
}.to raise_exception(Mongoid::Errors::InMemoryCollationNotSupported)
|
|
48
65
|
end
|
|
49
66
|
end
|
|
50
67
|
end
|
|
@@ -73,7 +90,22 @@ describe Mongoid::Contextual::Memory do
|
|
|
73
90
|
context "context when no arguments are provided" do
|
|
74
91
|
|
|
75
92
|
it "returns the number of matches" do
|
|
76
|
-
context.count.
|
|
93
|
+
expect(context.count).to eq(1)
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
context 'when there is a collation on the criteria' do
|
|
98
|
+
|
|
99
|
+
let(:criteria) do
|
|
100
|
+
Address.where(street: "hobrecht").tap do |crit|
|
|
101
|
+
crit.documents = [ hobrecht, friedel ]
|
|
102
|
+
end.collation(locale: 'en_US', strength: 2)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
it "raises an exception" do
|
|
106
|
+
expect {
|
|
107
|
+
context.count
|
|
108
|
+
}.to raise_exception(Mongoid::Errors::InMemoryCollationNotSupported)
|
|
77
109
|
end
|
|
78
110
|
end
|
|
79
111
|
|
|
@@ -86,7 +118,7 @@ describe Mongoid::Contextual::Memory do
|
|
|
86
118
|
end
|
|
87
119
|
|
|
88
120
|
it "returns 1" do
|
|
89
|
-
count.
|
|
121
|
+
expect(count).to eq(1)
|
|
90
122
|
end
|
|
91
123
|
end
|
|
92
124
|
|
|
@@ -97,7 +129,7 @@ describe Mongoid::Contextual::Memory do
|
|
|
97
129
|
end
|
|
98
130
|
|
|
99
131
|
it "returns 0" do
|
|
100
|
-
count.
|
|
132
|
+
expect(count).to eq(0)
|
|
101
133
|
end
|
|
102
134
|
end
|
|
103
135
|
end
|
|
@@ -113,7 +145,7 @@ describe Mongoid::Contextual::Memory do
|
|
|
113
145
|
end
|
|
114
146
|
|
|
115
147
|
it "returns 1" do
|
|
116
|
-
count.
|
|
148
|
+
expect(count).to eq(1)
|
|
117
149
|
end
|
|
118
150
|
end
|
|
119
151
|
|
|
@@ -126,7 +158,7 @@ describe Mongoid::Contextual::Memory do
|
|
|
126
158
|
end
|
|
127
159
|
|
|
128
160
|
it "returns 0" do
|
|
129
|
-
count.
|
|
161
|
+
expect(count).to eq(0)
|
|
130
162
|
end
|
|
131
163
|
end
|
|
132
164
|
end
|
|
@@ -135,19 +167,19 @@ describe Mongoid::Contextual::Memory do
|
|
|
135
167
|
[ :delete, :delete_all ].each do |method|
|
|
136
168
|
|
|
137
169
|
let(:person) do
|
|
138
|
-
Person.create
|
|
170
|
+
Person.create!
|
|
139
171
|
end
|
|
140
172
|
|
|
141
173
|
let(:hobrecht) do
|
|
142
|
-
person.addresses.create(street: "hobrecht")
|
|
174
|
+
person.addresses.create!(street: "hobrecht")
|
|
143
175
|
end
|
|
144
176
|
|
|
145
177
|
let(:friedel) do
|
|
146
|
-
person.addresses.create(street: "friedel")
|
|
178
|
+
person.addresses.create!(street: "friedel")
|
|
147
179
|
end
|
|
148
180
|
|
|
149
181
|
let(:pfluger) do
|
|
150
|
-
person.addresses.create(street: "pfluger")
|
|
182
|
+
person.addresses.create!(street: "pfluger")
|
|
151
183
|
end
|
|
152
184
|
|
|
153
185
|
describe "##{method}" do
|
|
@@ -169,42 +201,42 @@ describe Mongoid::Contextual::Memory do
|
|
|
169
201
|
end
|
|
170
202
|
|
|
171
203
|
it "deletes the first matching document" do
|
|
172
|
-
hobrecht.
|
|
204
|
+
expect(hobrecht).to be_destroyed
|
|
173
205
|
end
|
|
174
206
|
|
|
175
207
|
it "deletes the last matching document" do
|
|
176
|
-
friedel.
|
|
208
|
+
expect(friedel).to be_destroyed
|
|
177
209
|
end
|
|
178
210
|
|
|
179
211
|
it "does not delete non matching docs" do
|
|
180
|
-
pfluger.
|
|
212
|
+
expect(pfluger).to_not be_destroyed
|
|
181
213
|
end
|
|
182
214
|
|
|
183
215
|
it "removes the docs from the relation" do
|
|
184
|
-
person.addresses.
|
|
216
|
+
expect(person.addresses).to eq([ pfluger ])
|
|
185
217
|
end
|
|
186
218
|
|
|
187
219
|
it "removes the docs from the context" do
|
|
188
|
-
context.entries.
|
|
220
|
+
expect(context.entries).to be_empty
|
|
189
221
|
end
|
|
190
222
|
|
|
191
223
|
it "persists the changes to the database" do
|
|
192
|
-
person.reload.addresses.
|
|
224
|
+
expect(person.reload.addresses).to eq([ pfluger ])
|
|
193
225
|
end
|
|
194
226
|
|
|
195
227
|
it "returns the number of deleted documents" do
|
|
196
|
-
deleted.
|
|
228
|
+
expect(deleted).to eq(2)
|
|
197
229
|
end
|
|
198
230
|
end
|
|
199
231
|
|
|
200
232
|
context "when embedded multiple levels" do
|
|
201
233
|
|
|
202
234
|
let!(:home) do
|
|
203
|
-
hobrecht.locations.create(name: "home")
|
|
235
|
+
hobrecht.locations.create!(name: "home")
|
|
204
236
|
end
|
|
205
237
|
|
|
206
238
|
let!(:work) do
|
|
207
|
-
hobrecht.locations.create(name: "work")
|
|
239
|
+
hobrecht.locations.create!(name: "work")
|
|
208
240
|
end
|
|
209
241
|
|
|
210
242
|
let(:criteria) do
|
|
@@ -222,27 +254,42 @@ describe Mongoid::Contextual::Memory do
|
|
|
222
254
|
end
|
|
223
255
|
|
|
224
256
|
it "deletes the first matching document" do
|
|
225
|
-
work.
|
|
257
|
+
expect(work).to be_destroyed
|
|
226
258
|
end
|
|
227
259
|
|
|
228
260
|
it "does not delete non matching docs" do
|
|
229
|
-
home.
|
|
261
|
+
expect(home).to_not be_destroyed
|
|
230
262
|
end
|
|
231
263
|
|
|
232
264
|
it "removes the docs from the relation" do
|
|
233
|
-
person.addresses.first.locations.
|
|
265
|
+
expect(person.addresses.first.locations).to eq([ home ])
|
|
234
266
|
end
|
|
235
267
|
|
|
236
268
|
it "removes the docs from the context" do
|
|
237
|
-
context.entries.
|
|
269
|
+
expect(context.entries).to be_empty
|
|
238
270
|
end
|
|
239
271
|
|
|
240
272
|
it "persists the changes to the database" do
|
|
241
|
-
person.reload.addresses.first.locations.
|
|
273
|
+
expect(person.reload.addresses.first.locations).to eq([ home ])
|
|
242
274
|
end
|
|
243
275
|
|
|
244
276
|
it "returns the number of deleted documents" do
|
|
245
|
-
deleted.
|
|
277
|
+
expect(deleted).to eq(1)
|
|
278
|
+
end
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
context 'when there is a collation on the criteria' do
|
|
282
|
+
|
|
283
|
+
let(:criteria) do
|
|
284
|
+
Address.any_in(street: [ "hobrecht", "friedel" ]).tap do |crit|
|
|
285
|
+
crit.documents = [ hobrecht, friedel, pfluger ]
|
|
286
|
+
end.collation(locale: 'en_US', strength: 2)
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
it "raises an exception" do
|
|
290
|
+
expect {
|
|
291
|
+
context.send(method)
|
|
292
|
+
}.to raise_exception(Mongoid::Errors::InMemoryCollationNotSupported)
|
|
246
293
|
end
|
|
247
294
|
end
|
|
248
295
|
end
|
|
@@ -251,19 +298,19 @@ describe Mongoid::Contextual::Memory do
|
|
|
251
298
|
[ :destroy, :destroy_all ].each do |method|
|
|
252
299
|
|
|
253
300
|
let(:person) do
|
|
254
|
-
Person.create
|
|
301
|
+
Person.create!
|
|
255
302
|
end
|
|
256
303
|
|
|
257
304
|
let(:hobrecht) do
|
|
258
|
-
person.addresses.create(street: "hobrecht")
|
|
305
|
+
person.addresses.create!(street: "hobrecht")
|
|
259
306
|
end
|
|
260
307
|
|
|
261
308
|
let(:friedel) do
|
|
262
|
-
person.addresses.create(street: "friedel")
|
|
309
|
+
person.addresses.create!(street: "friedel")
|
|
263
310
|
end
|
|
264
311
|
|
|
265
312
|
let(:pfluger) do
|
|
266
|
-
person.addresses.create(street: "pfluger")
|
|
313
|
+
person.addresses.create!(street: "pfluger")
|
|
267
314
|
end
|
|
268
315
|
|
|
269
316
|
let(:criteria) do
|
|
@@ -278,55 +325,131 @@ describe Mongoid::Contextual::Memory do
|
|
|
278
325
|
|
|
279
326
|
describe "##{method}" do
|
|
280
327
|
|
|
281
|
-
|
|
282
|
-
context.send(method)
|
|
283
|
-
end
|
|
328
|
+
context 'when there is no collation on the criteria' do
|
|
284
329
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
330
|
+
let!(:destroyed) do
|
|
331
|
+
context.send(method)
|
|
332
|
+
end
|
|
333
|
+
|
|
334
|
+
it "deletes the first matching document" do
|
|
335
|
+
expect(hobrecht).to be_destroyed
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
it "deletes the last matching document" do
|
|
339
|
+
expect(friedel).to be_destroyed
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
it "does not delete non matching docs" do
|
|
343
|
+
expect(pfluger).to_not be_destroyed
|
|
344
|
+
end
|
|
345
|
+
|
|
346
|
+
it "removes the docs from the relation" do
|
|
347
|
+
expect(person.addresses).to eq([ pfluger ])
|
|
348
|
+
end
|
|
349
|
+
|
|
350
|
+
it "removes the docs from the context" do
|
|
351
|
+
expect(context.entries).to be_empty
|
|
352
|
+
end
|
|
353
|
+
|
|
354
|
+
it "persists the changes to the database" do
|
|
355
|
+
expect(person.reload.addresses).to eq([ pfluger ])
|
|
356
|
+
end
|
|
288
357
|
|
|
289
|
-
|
|
290
|
-
|
|
358
|
+
it "returns the number of destroyed documents" do
|
|
359
|
+
expect(destroyed).to eq(2)
|
|
360
|
+
end
|
|
291
361
|
end
|
|
292
362
|
|
|
293
|
-
|
|
294
|
-
|
|
363
|
+
context 'when there is a collation on the criteria' do
|
|
364
|
+
|
|
365
|
+
let(:criteria) do
|
|
366
|
+
Address.any_in(street: [ "hobrecht", "friedel" ]).tap do |crit|
|
|
367
|
+
crit.documents = [ hobrecht, friedel, pfluger ]
|
|
368
|
+
end.collation(locale: 'en_US', strength: 2)
|
|
369
|
+
end
|
|
370
|
+
|
|
371
|
+
it "raises an exception" do
|
|
372
|
+
expect {
|
|
373
|
+
context.send(method)
|
|
374
|
+
}.to raise_exception(Mongoid::Errors::InMemoryCollationNotSupported)
|
|
375
|
+
end
|
|
295
376
|
end
|
|
377
|
+
end
|
|
378
|
+
end
|
|
379
|
+
|
|
380
|
+
describe "#distinct" do
|
|
381
|
+
|
|
382
|
+
context "when legacy_pluck_distinct is true" do
|
|
383
|
+
config_override :legacy_pluck_distinct, true
|
|
296
384
|
|
|
297
|
-
|
|
298
|
-
|
|
385
|
+
let(:hobrecht) do
|
|
386
|
+
Address.new(street: "hobrecht")
|
|
299
387
|
end
|
|
300
388
|
|
|
301
|
-
|
|
302
|
-
|
|
389
|
+
let(:friedel) do
|
|
390
|
+
Address.new(street: "friedel")
|
|
303
391
|
end
|
|
304
392
|
|
|
305
|
-
|
|
306
|
-
|
|
393
|
+
context "when limiting the result set" do
|
|
394
|
+
|
|
395
|
+
let(:criteria) do
|
|
396
|
+
Address.where(street: "hobrecht").tap do |crit|
|
|
397
|
+
crit.documents = [ hobrecht, hobrecht, friedel ]
|
|
398
|
+
end
|
|
399
|
+
end
|
|
400
|
+
|
|
401
|
+
let(:context) do
|
|
402
|
+
described_class.new(criteria)
|
|
403
|
+
end
|
|
404
|
+
|
|
405
|
+
it "returns the distinct field values" do
|
|
406
|
+
expect(context.distinct(:street)).to eq([ "hobrecht" ])
|
|
407
|
+
end
|
|
307
408
|
end
|
|
308
409
|
|
|
309
|
-
|
|
310
|
-
|
|
410
|
+
context "when not limiting the result set" do
|
|
411
|
+
|
|
412
|
+
let(:criteria) do
|
|
413
|
+
Address.all.tap do |crit|
|
|
414
|
+
crit.documents = [ hobrecht, friedel, friedel ]
|
|
415
|
+
end
|
|
416
|
+
end
|
|
417
|
+
|
|
418
|
+
let(:context) do
|
|
419
|
+
described_class.new(criteria)
|
|
420
|
+
end
|
|
421
|
+
|
|
422
|
+
it "returns the distinct field values" do
|
|
423
|
+
expect(context.distinct(:street)).to eq([ "hobrecht", "friedel" ])
|
|
424
|
+
end
|
|
311
425
|
end
|
|
312
|
-
end
|
|
313
|
-
end
|
|
314
426
|
|
|
315
|
-
|
|
427
|
+
context 'when there is a collation on the criteria' do
|
|
316
428
|
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
429
|
+
let(:criteria) do
|
|
430
|
+
Address.where(street: "hobrecht").tap do |crit|
|
|
431
|
+
crit.documents = [ hobrecht, hobrecht, friedel ]
|
|
432
|
+
end.collation(locale: 'en_US', strength: 2)
|
|
433
|
+
end
|
|
320
434
|
|
|
321
|
-
|
|
322
|
-
|
|
435
|
+
it "raises an exception" do
|
|
436
|
+
expect {
|
|
437
|
+
context.distinct(:street)
|
|
438
|
+
}.to raise_exception(Mongoid::Errors::InMemoryCollationNotSupported)
|
|
439
|
+
end
|
|
440
|
+
end
|
|
323
441
|
end
|
|
324
442
|
|
|
325
|
-
context "when
|
|
443
|
+
context "when legacy_pluck_distinct is false" do
|
|
444
|
+
config_override :legacy_pluck_distinct, false
|
|
445
|
+
|
|
446
|
+
let(:depeche) { Band.create!(name: "Depeche Mode", years: 30, sales: "1E2") }
|
|
447
|
+
let(:new_order) { Band.create!(name: "New Order", years: 25, sales: "2E3") }
|
|
448
|
+
let(:maniacs) { Band.create!(name: "10,000 Maniacs", years: 20, sales: "1E2") }
|
|
326
449
|
|
|
327
450
|
let(:criteria) do
|
|
328
|
-
|
|
329
|
-
crit.documents = [
|
|
451
|
+
Band.all.tap do |crit|
|
|
452
|
+
crit.documents = [ depeche, new_order, maniacs ]
|
|
330
453
|
end
|
|
331
454
|
end
|
|
332
455
|
|
|
@@ -334,25 +457,180 @@ describe Mongoid::Contextual::Memory do
|
|
|
334
457
|
described_class.new(criteria)
|
|
335
458
|
end
|
|
336
459
|
|
|
337
|
-
|
|
338
|
-
|
|
460
|
+
context "when limiting the result set" do
|
|
461
|
+
|
|
462
|
+
let(:criteria) do
|
|
463
|
+
Band.where(name: "Depeche Mode").tap do |crit|
|
|
464
|
+
crit.documents = [ depeche ]
|
|
465
|
+
end
|
|
466
|
+
end
|
|
467
|
+
|
|
468
|
+
it "returns the distinct matching fields" do
|
|
469
|
+
expect(context.distinct(:name)).to eq([ "Depeche Mode" ])
|
|
470
|
+
end
|
|
471
|
+
end
|
|
472
|
+
|
|
473
|
+
context "when not limiting the result set" do
|
|
474
|
+
|
|
475
|
+
it "returns the distinct field values" do
|
|
476
|
+
expect(context.distinct(:name).sort).to eq([ "10,000 Maniacs", "Depeche Mode", "New Order" ].sort)
|
|
477
|
+
end
|
|
339
478
|
end
|
|
340
|
-
end
|
|
341
479
|
|
|
342
|
-
|
|
480
|
+
context "when providing an aliased field" do
|
|
343
481
|
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
crit.documents = [ hobrecht, friedel, friedel ]
|
|
482
|
+
it "returns the distinct field values" do
|
|
483
|
+
expect(context.distinct(:years).sort).to eq([ 20, 25, 30 ])
|
|
347
484
|
end
|
|
348
485
|
end
|
|
349
486
|
|
|
350
|
-
|
|
351
|
-
|
|
487
|
+
context "when providing a demongoizable field" do
|
|
488
|
+
|
|
489
|
+
it "returns the non-demongoized distinct field values" do
|
|
490
|
+
expect(context.distinct(:sales).sort).to eq([ BigDecimal("1E2"), BigDecimal("2E3") ])
|
|
491
|
+
end
|
|
492
|
+
end
|
|
493
|
+
|
|
494
|
+
context "when getting a localized field" do
|
|
495
|
+
before do
|
|
496
|
+
I18n.locale = :en
|
|
497
|
+
d = Dictionary.create!(description: 'english-text')
|
|
498
|
+
I18n.locale = :de
|
|
499
|
+
d.description = 'deutsch-text'
|
|
500
|
+
d.save!
|
|
501
|
+
end
|
|
502
|
+
|
|
503
|
+
after do
|
|
504
|
+
I18n.locale = :en
|
|
505
|
+
end
|
|
506
|
+
|
|
507
|
+
let(:criteria) do
|
|
508
|
+
Dictionary.all.tap do |crit|
|
|
509
|
+
crit.documents = [ Dictionary.first ]
|
|
510
|
+
end
|
|
511
|
+
end
|
|
512
|
+
|
|
513
|
+
context "when getting the field without _translations" do
|
|
514
|
+
it "gets the demongoized localized field" do
|
|
515
|
+
expect(context.distinct(:description)).to eq([ 'deutsch-text' ])
|
|
516
|
+
end
|
|
517
|
+
end
|
|
518
|
+
|
|
519
|
+
context "when getting the field with _translations" do
|
|
520
|
+
|
|
521
|
+
it "gets the full hash" do
|
|
522
|
+
expect(context.distinct(:description_translations)).to eq([ { "de" => "deutsch-text", "en" => "english-text" } ])
|
|
523
|
+
end
|
|
524
|
+
end
|
|
525
|
+
|
|
526
|
+
context 'when plucking a specific locale' do
|
|
527
|
+
|
|
528
|
+
let(:distinct) do
|
|
529
|
+
context.distinct(:'description.de')
|
|
530
|
+
end
|
|
531
|
+
|
|
532
|
+
it 'returns the specific translation' do
|
|
533
|
+
expect(distinct).to eq([ "deutsch-text" ])
|
|
534
|
+
end
|
|
535
|
+
end
|
|
536
|
+
|
|
537
|
+
context 'when plucking a specific locale from _translations field' do
|
|
538
|
+
|
|
539
|
+
let(:distinct) do
|
|
540
|
+
context.distinct(:'description_translations.de')
|
|
541
|
+
end
|
|
542
|
+
|
|
543
|
+
it 'returns the specific translations' do
|
|
544
|
+
expect(distinct).to eq(['deutsch-text'])
|
|
545
|
+
end
|
|
546
|
+
end
|
|
547
|
+
|
|
548
|
+
context 'when fallbacks are enabled with a locale list' do
|
|
549
|
+
require_fallbacks
|
|
550
|
+
|
|
551
|
+
around(:all) do |example|
|
|
552
|
+
prev_fallbacks = I18n.fallbacks.dup
|
|
553
|
+
I18n.fallbacks[:he] = [ :en ]
|
|
554
|
+
example.run
|
|
555
|
+
I18n.fallbacks = prev_fallbacks
|
|
556
|
+
end
|
|
557
|
+
|
|
558
|
+
after do
|
|
559
|
+
I18n.locale = :en
|
|
560
|
+
end
|
|
561
|
+
|
|
562
|
+
let(:distinct) do
|
|
563
|
+
context.distinct(:description).first
|
|
564
|
+
end
|
|
565
|
+
|
|
566
|
+
it "correctly uses the fallback" do
|
|
567
|
+
I18n.locale = :en
|
|
568
|
+
d = Dictionary.create!(description: 'english-text')
|
|
569
|
+
I18n.locale = :he
|
|
570
|
+
distinct.should == "english-text"
|
|
571
|
+
end
|
|
572
|
+
end
|
|
573
|
+
|
|
574
|
+
context "when the localized field is embedded" do
|
|
575
|
+
let(:person) do
|
|
576
|
+
p = Passport.new
|
|
577
|
+
I18n.locale = :en
|
|
578
|
+
p.name = "Neil"
|
|
579
|
+
I18n.locale = :he
|
|
580
|
+
p.name = "Nissim"
|
|
581
|
+
|
|
582
|
+
Person.create!(passport: p, employer_id: 12345)
|
|
583
|
+
end
|
|
584
|
+
|
|
585
|
+
after do
|
|
586
|
+
I18n.locale = :en
|
|
587
|
+
end
|
|
588
|
+
|
|
589
|
+
let(:criteria) do
|
|
590
|
+
Person.where(employer_id: 12345).tap do |crit|
|
|
591
|
+
crit.documents = [ person ]
|
|
592
|
+
end
|
|
593
|
+
end
|
|
594
|
+
|
|
595
|
+
let(:distinct) do
|
|
596
|
+
context.distinct("pass.name").first
|
|
597
|
+
end
|
|
598
|
+
|
|
599
|
+
let(:distinct_translations) do
|
|
600
|
+
context.distinct("pass.name_translations").first
|
|
601
|
+
end
|
|
602
|
+
|
|
603
|
+
let(:distinct_translations_field) do
|
|
604
|
+
context.distinct("pass.name_translations.en").first
|
|
605
|
+
end
|
|
606
|
+
|
|
607
|
+
it "returns the translation for the current locale" do
|
|
608
|
+
expect(distinct).to eq("Nissim")
|
|
609
|
+
end
|
|
610
|
+
|
|
611
|
+
it "returns the full _translation hash" do
|
|
612
|
+
expect(distinct_translations).to eq({ "en" => "Neil", "he" => "Nissim" })
|
|
613
|
+
end
|
|
614
|
+
|
|
615
|
+
it "returns the translation for the requested locale" do
|
|
616
|
+
expect(distinct_translations_field).to eq("Neil")
|
|
617
|
+
end
|
|
618
|
+
end
|
|
352
619
|
end
|
|
353
620
|
|
|
354
|
-
|
|
355
|
-
|
|
621
|
+
context "when getting an embedded field" do
|
|
622
|
+
|
|
623
|
+
let(:label) { Label.new(sales: "1E2") }
|
|
624
|
+
let!(:band) { Band.create!(label: label) }
|
|
625
|
+
let(:criteria) do
|
|
626
|
+
Band.where(_id: band.id).tap do |crit|
|
|
627
|
+
crit.documents = [ band ]
|
|
628
|
+
end
|
|
629
|
+
end
|
|
630
|
+
|
|
631
|
+
it "returns the distinct matching fields" do
|
|
632
|
+
expect(context.distinct("label.sales")).to eq([ BigDecimal("1E2") ])
|
|
633
|
+
end
|
|
356
634
|
end
|
|
357
635
|
end
|
|
358
636
|
end
|
|
@@ -384,7 +662,7 @@ describe Mongoid::Contextual::Memory do
|
|
|
384
662
|
end
|
|
385
663
|
|
|
386
664
|
it "contains no documents" do
|
|
387
|
-
context.map(&:street).
|
|
665
|
+
expect(context.map(&:street)).to be_empty
|
|
388
666
|
end
|
|
389
667
|
|
|
390
668
|
context "when calling next on the enumerator" do
|
|
@@ -401,13 +679,13 @@ describe Mongoid::Contextual::Memory do
|
|
|
401
679
|
|
|
402
680
|
it "yields mongoid documents to the block" do
|
|
403
681
|
context.each do |doc|
|
|
404
|
-
doc.
|
|
682
|
+
expect(doc).to be_a(Mongoid::Document)
|
|
405
683
|
end
|
|
406
684
|
end
|
|
407
685
|
|
|
408
686
|
it "iterates over the matching documents" do
|
|
409
687
|
context.each do |doc|
|
|
410
|
-
doc.
|
|
688
|
+
expect(doc).to eq(hobrecht)
|
|
411
689
|
end
|
|
412
690
|
end
|
|
413
691
|
end
|
|
@@ -419,7 +697,7 @@ describe Mongoid::Contextual::Memory do
|
|
|
419
697
|
end
|
|
420
698
|
|
|
421
699
|
it "returns an enumerator" do
|
|
422
|
-
enum.
|
|
700
|
+
expect(enum).to be_a(Enumerator)
|
|
423
701
|
end
|
|
424
702
|
|
|
425
703
|
context "when iterating over the enumerator" do
|
|
@@ -428,7 +706,7 @@ describe Mongoid::Contextual::Memory do
|
|
|
428
706
|
|
|
429
707
|
it "yields mongoid documents to the block" do
|
|
430
708
|
enum.each do |doc|
|
|
431
|
-
doc.
|
|
709
|
+
expect(doc).to be_a(Mongoid::Document)
|
|
432
710
|
end
|
|
433
711
|
end
|
|
434
712
|
end
|
|
@@ -436,11 +714,26 @@ describe Mongoid::Contextual::Memory do
|
|
|
436
714
|
context "when iterating with next" do
|
|
437
715
|
|
|
438
716
|
it "yields mongoid documents" do
|
|
439
|
-
enum.next.
|
|
717
|
+
expect(enum.next).to be_a(Mongoid::Document)
|
|
440
718
|
end
|
|
441
719
|
end
|
|
442
720
|
end
|
|
443
721
|
end
|
|
722
|
+
|
|
723
|
+
context 'when there is a collation on the criteria' do
|
|
724
|
+
|
|
725
|
+
let(:criteria) do
|
|
726
|
+
Address.where(street: "hobrecht").tap do |crit|
|
|
727
|
+
crit.documents = [ hobrecht, friedel ]
|
|
728
|
+
end.collation(locale: 'en_US', strength: 2)
|
|
729
|
+
end
|
|
730
|
+
|
|
731
|
+
it "raises an exception" do
|
|
732
|
+
expect {
|
|
733
|
+
context.each
|
|
734
|
+
}.to raise_exception(Mongoid::Errors::InMemoryCollationNotSupported)
|
|
735
|
+
end
|
|
736
|
+
end
|
|
444
737
|
end
|
|
445
738
|
|
|
446
739
|
describe "#exists?" do
|
|
@@ -466,7 +759,7 @@ describe Mongoid::Contextual::Memory do
|
|
|
466
759
|
end
|
|
467
760
|
|
|
468
761
|
it "returns true" do
|
|
469
|
-
context.
|
|
762
|
+
expect(context).to be_exists
|
|
470
763
|
end
|
|
471
764
|
end
|
|
472
765
|
|
|
@@ -483,42 +776,29 @@ describe Mongoid::Contextual::Memory do
|
|
|
483
776
|
end
|
|
484
777
|
|
|
485
778
|
it "returns false" do
|
|
486
|
-
context.
|
|
779
|
+
expect(context).to_not be_exists
|
|
487
780
|
end
|
|
488
781
|
end
|
|
489
|
-
end
|
|
490
|
-
|
|
491
|
-
[ :first, :one ].each do |method|
|
|
492
|
-
|
|
493
|
-
describe "##{method}" do
|
|
494
|
-
|
|
495
|
-
let(:hobrecht) do
|
|
496
|
-
Address.new(street: "hobrecht")
|
|
497
|
-
end
|
|
498
782
|
|
|
499
|
-
|
|
500
|
-
Address.new(street: "friedel")
|
|
501
|
-
end
|
|
783
|
+
context 'when there is a collation on the criteria' do
|
|
502
784
|
|
|
503
785
|
let(:criteria) do
|
|
504
|
-
Address.where(:
|
|
786
|
+
Address.where(street: "pfluger").tap do |crit|
|
|
505
787
|
crit.documents = [ hobrecht, friedel ]
|
|
506
|
-
end
|
|
507
|
-
end
|
|
508
|
-
|
|
509
|
-
let(:context) do
|
|
510
|
-
described_class.new(criteria)
|
|
788
|
+
end.collation(locale: 'en_US', strength: 2)
|
|
511
789
|
end
|
|
512
790
|
|
|
513
|
-
it "
|
|
514
|
-
|
|
791
|
+
it "raises an exception" do
|
|
792
|
+
expect {
|
|
793
|
+
context
|
|
794
|
+
}.to raise_exception(Mongoid::Errors::InMemoryCollationNotSupported)
|
|
515
795
|
end
|
|
516
796
|
end
|
|
517
797
|
end
|
|
518
798
|
|
|
519
|
-
|
|
799
|
+
[ :first, :one ].each do |method|
|
|
520
800
|
|
|
521
|
-
|
|
801
|
+
describe "##{method}" do
|
|
522
802
|
|
|
523
803
|
let(:hobrecht) do
|
|
524
804
|
Address.new(street: "hobrecht")
|
|
@@ -529,7 +809,7 @@ describe Mongoid::Contextual::Memory do
|
|
|
529
809
|
end
|
|
530
810
|
|
|
531
811
|
let(:criteria) do
|
|
532
|
-
Address.where(street
|
|
812
|
+
Address.where(:street.in => [ "hobrecht", "friedel" ]).tap do |crit|
|
|
533
813
|
crit.documents = [ hobrecht, friedel ]
|
|
534
814
|
end
|
|
535
815
|
end
|
|
@@ -538,83 +818,1023 @@ describe Mongoid::Contextual::Memory do
|
|
|
538
818
|
described_class.new(criteria)
|
|
539
819
|
end
|
|
540
820
|
|
|
541
|
-
it "
|
|
542
|
-
context.
|
|
821
|
+
it "returns the first matching document" do
|
|
822
|
+
expect(context.send(method)).to eq(hobrecht)
|
|
543
823
|
end
|
|
544
824
|
|
|
545
|
-
it "
|
|
546
|
-
context.
|
|
825
|
+
it "returns a list when passing a limit" do
|
|
826
|
+
expect(context.send(method, 2)).to eq([ hobrecht, friedel ])
|
|
547
827
|
end
|
|
548
828
|
|
|
549
|
-
it "
|
|
550
|
-
context.
|
|
829
|
+
it "returns a list when passing 1" do
|
|
830
|
+
expect(context.send(method, 1)).to eq([ hobrecht ])
|
|
551
831
|
end
|
|
552
|
-
end
|
|
553
|
-
|
|
554
|
-
context "when the criteria skips" do
|
|
555
832
|
|
|
556
|
-
|
|
557
|
-
Address.new(street: "hobrecht")
|
|
558
|
-
end
|
|
833
|
+
context 'when there is a collation on the criteria' do
|
|
559
834
|
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
835
|
+
let(:criteria) do
|
|
836
|
+
Address.where(:street.in => [ "hobrecht", "friedel" ]).tap do |crit|
|
|
837
|
+
crit.documents = [ hobrecht, friedel ]
|
|
838
|
+
end.collation(locale: 'en_US', strength: 2)
|
|
839
|
+
end
|
|
563
840
|
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
841
|
+
it "raises an exception" do
|
|
842
|
+
expect {
|
|
843
|
+
context.send(method)
|
|
844
|
+
}.to raise_exception(Mongoid::Errors::InMemoryCollationNotSupported)
|
|
567
845
|
end
|
|
568
846
|
end
|
|
847
|
+
end
|
|
848
|
+
end
|
|
569
849
|
|
|
570
|
-
|
|
571
|
-
described_class.new(criteria)
|
|
572
|
-
end
|
|
850
|
+
describe "#take" do
|
|
573
851
|
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
end
|
|
852
|
+
let(:hobrecht) do
|
|
853
|
+
Address.new(street: "hobrecht")
|
|
577
854
|
end
|
|
578
855
|
|
|
579
|
-
|
|
580
|
-
|
|
856
|
+
let(:friedel) do
|
|
857
|
+
Address.new(street: "friedel")
|
|
858
|
+
end
|
|
859
|
+
|
|
860
|
+
let(:criteria) do
|
|
861
|
+
Address.where(:street.in => [ "hobrecht", "friedel" ]).tap do |crit|
|
|
862
|
+
crit.documents = [ hobrecht, friedel ]
|
|
863
|
+
end
|
|
864
|
+
end
|
|
865
|
+
|
|
866
|
+
let(:context) do
|
|
867
|
+
described_class.new(criteria)
|
|
868
|
+
end
|
|
869
|
+
|
|
870
|
+
it "returns the first matching document" do
|
|
871
|
+
expect(context.take).to eq(hobrecht)
|
|
872
|
+
end
|
|
873
|
+
|
|
874
|
+
it "returns an array when passing a limit" do
|
|
875
|
+
expect(context.take(2)).to eq([ hobrecht, friedel ])
|
|
876
|
+
end
|
|
877
|
+
|
|
878
|
+
it "returns an array when passing a limit as 1" do
|
|
879
|
+
expect(context.take(1)).to eq([ hobrecht ])
|
|
880
|
+
end
|
|
881
|
+
|
|
882
|
+
context 'when there is a collation on the criteria' do
|
|
883
|
+
|
|
884
|
+
let(:criteria) do
|
|
885
|
+
Address.where(:street.in => [ "hobrecht", "friedel" ]).tap do |crit|
|
|
886
|
+
crit.documents = [ hobrecht, friedel ]
|
|
887
|
+
end.collation(locale: 'en_US', strength: 2)
|
|
888
|
+
end
|
|
889
|
+
|
|
890
|
+
it "raises an exception" do
|
|
891
|
+
expect {
|
|
892
|
+
context.take
|
|
893
|
+
}.to raise_exception(Mongoid::Errors::InMemoryCollationNotSupported)
|
|
894
|
+
end
|
|
895
|
+
end
|
|
896
|
+
end
|
|
897
|
+
|
|
898
|
+
describe "#take!" do
|
|
899
|
+
|
|
900
|
+
let(:hobrecht) do
|
|
901
|
+
Address.new(street: "hobrecht")
|
|
902
|
+
end
|
|
903
|
+
|
|
904
|
+
let(:friedel) do
|
|
905
|
+
Address.new(street: "friedel")
|
|
906
|
+
end
|
|
907
|
+
|
|
908
|
+
let(:criteria) do
|
|
909
|
+
Address.where(:street.in => [ "hobrecht", "friedel" ]).tap do |crit|
|
|
910
|
+
crit.documents = [ hobrecht, friedel ]
|
|
911
|
+
end
|
|
912
|
+
end
|
|
913
|
+
|
|
914
|
+
let(:context) do
|
|
915
|
+
described_class.new(criteria)
|
|
916
|
+
end
|
|
917
|
+
|
|
918
|
+
it "returns the first matching document" do
|
|
919
|
+
expect(context.take!).to eq(hobrecht)
|
|
920
|
+
end
|
|
921
|
+
|
|
922
|
+
context "when the criteria is empty" do
|
|
923
|
+
let(:criteria) do
|
|
924
|
+
Address.where(street: "bogus").tap do |crit|
|
|
925
|
+
crit.documents = []
|
|
926
|
+
end
|
|
927
|
+
end
|
|
928
|
+
|
|
929
|
+
it "raise an error" do
|
|
930
|
+
expect do
|
|
931
|
+
context.take!
|
|
932
|
+
end.to raise_error(Mongoid::Errors::DocumentNotFound, /Could not find a document of class Address./)
|
|
933
|
+
end
|
|
934
|
+
end
|
|
935
|
+
|
|
936
|
+
context 'when there is a collation on the criteria' do
|
|
937
|
+
|
|
938
|
+
let(:criteria) do
|
|
939
|
+
Address.where(:street.in => [ "hobrecht", "friedel" ]).tap do |crit|
|
|
940
|
+
crit.documents = [ hobrecht, friedel ]
|
|
941
|
+
end.collation(locale: 'en_US', strength: 2)
|
|
942
|
+
end
|
|
943
|
+
|
|
944
|
+
it "raises an exception" do
|
|
945
|
+
expect {
|
|
946
|
+
context.take
|
|
947
|
+
}.to raise_exception(Mongoid::Errors::InMemoryCollationNotSupported)
|
|
948
|
+
end
|
|
949
|
+
end
|
|
950
|
+
end
|
|
951
|
+
|
|
952
|
+
describe "#initialize" do
|
|
953
|
+
|
|
954
|
+
context "when the criteria has no options" do
|
|
955
|
+
|
|
956
|
+
let(:hobrecht) do
|
|
957
|
+
Address.new(street: "hobrecht")
|
|
958
|
+
end
|
|
959
|
+
|
|
960
|
+
let(:friedel) do
|
|
961
|
+
Address.new(street: "friedel")
|
|
962
|
+
end
|
|
963
|
+
|
|
964
|
+
let(:criteria) do
|
|
965
|
+
Address.where(street: "hobrecht").tap do |crit|
|
|
966
|
+
crit.documents = [ hobrecht, friedel ]
|
|
967
|
+
end
|
|
968
|
+
end
|
|
969
|
+
|
|
970
|
+
let(:context) do
|
|
971
|
+
described_class.new(criteria)
|
|
972
|
+
end
|
|
973
|
+
|
|
974
|
+
it "sets the criteria" do
|
|
975
|
+
expect(context.criteria).to eq(criteria)
|
|
976
|
+
end
|
|
977
|
+
|
|
978
|
+
it "sets the klass" do
|
|
979
|
+
expect(context.klass).to eq(Address)
|
|
980
|
+
end
|
|
981
|
+
|
|
982
|
+
it "sets the matching documents" do
|
|
983
|
+
expect(context.documents).to eq([ hobrecht ])
|
|
984
|
+
end
|
|
985
|
+
end
|
|
986
|
+
|
|
987
|
+
context "when the criteria skips" do
|
|
988
|
+
|
|
989
|
+
let(:hobrecht) do
|
|
990
|
+
Address.new(street: "hobrecht")
|
|
991
|
+
end
|
|
992
|
+
|
|
993
|
+
let(:friedel) do
|
|
994
|
+
Address.new(street: "friedel")
|
|
995
|
+
end
|
|
996
|
+
|
|
997
|
+
let(:criteria) do
|
|
998
|
+
Address.all.skip(1).tap do |crit|
|
|
999
|
+
crit.documents = [ hobrecht, friedel ]
|
|
1000
|
+
end
|
|
1001
|
+
end
|
|
1002
|
+
|
|
1003
|
+
let(:context) do
|
|
1004
|
+
described_class.new(criteria)
|
|
1005
|
+
end
|
|
1006
|
+
|
|
1007
|
+
it "limits the matching documents" do
|
|
1008
|
+
expect(context).to eq([ friedel ])
|
|
1009
|
+
end
|
|
1010
|
+
end
|
|
1011
|
+
|
|
1012
|
+
context "when the criteria limits" do
|
|
1013
|
+
|
|
1014
|
+
let(:hobrecht) do
|
|
1015
|
+
Address.new(street: "hobrecht")
|
|
1016
|
+
end
|
|
1017
|
+
|
|
1018
|
+
let(:friedel) do
|
|
1019
|
+
Address.new(street: "friedel")
|
|
1020
|
+
end
|
|
1021
|
+
|
|
1022
|
+
let(:criteria) do
|
|
1023
|
+
Address.all.limit(1).tap do |crit|
|
|
1024
|
+
crit.documents = [ hobrecht, friedel ]
|
|
1025
|
+
end
|
|
1026
|
+
end
|
|
1027
|
+
|
|
1028
|
+
let(:context) do
|
|
1029
|
+
described_class.new(criteria)
|
|
1030
|
+
end
|
|
1031
|
+
|
|
1032
|
+
it "limits the matching documents" do
|
|
1033
|
+
expect(context).to eq([ hobrecht ])
|
|
1034
|
+
end
|
|
1035
|
+
end
|
|
1036
|
+
|
|
1037
|
+
context 'when there is a collation on the criteria' do
|
|
1038
|
+
|
|
1039
|
+
let(:criteria) do
|
|
1040
|
+
Address.all.limit(1).tap do |crit|
|
|
1041
|
+
crit.documents = [ hobrecht, friedel ]
|
|
1042
|
+
end.collation(locale: 'en_US', strength: 2)
|
|
1043
|
+
end
|
|
1044
|
+
|
|
1045
|
+
it "raises an exception" do
|
|
1046
|
+
expect {
|
|
1047
|
+
context
|
|
1048
|
+
}.to raise_exception(Mongoid::Errors::InMemoryCollationNotSupported)
|
|
1049
|
+
end
|
|
1050
|
+
end
|
|
1051
|
+
end
|
|
1052
|
+
|
|
1053
|
+
describe "#last" do
|
|
1054
|
+
|
|
1055
|
+
let(:hobrecht) do
|
|
1056
|
+
Address.new(street: "hobrecht")
|
|
1057
|
+
end
|
|
1058
|
+
|
|
1059
|
+
let(:friedel) do
|
|
1060
|
+
Address.new(street: "friedel")
|
|
1061
|
+
end
|
|
1062
|
+
|
|
1063
|
+
let(:criteria) do
|
|
1064
|
+
Address.where(:street.in => [ "hobrecht", "friedel" ]).tap do |crit|
|
|
1065
|
+
crit.documents = [ hobrecht, friedel ]
|
|
1066
|
+
end
|
|
1067
|
+
end
|
|
1068
|
+
|
|
1069
|
+
let(:context) do
|
|
1070
|
+
described_class.new(criteria)
|
|
1071
|
+
end
|
|
1072
|
+
|
|
1073
|
+
it "returns the last matching document" do
|
|
1074
|
+
expect(context.last).to eq(friedel)
|
|
1075
|
+
end
|
|
1076
|
+
|
|
1077
|
+
it "returns a list when a limit is passed" do
|
|
1078
|
+
expect(context.last(2)).to eq([ hobrecht, friedel ])
|
|
1079
|
+
end
|
|
1080
|
+
|
|
1081
|
+
it "returns a list when the limit is 1" do
|
|
1082
|
+
expect(context.last(1)).to eq([ friedel ])
|
|
1083
|
+
end
|
|
1084
|
+
|
|
1085
|
+
context 'when there is a collation on the criteria' do
|
|
1086
|
+
|
|
1087
|
+
let(:criteria) do
|
|
1088
|
+
Address.where(:street.in => [ "hobrecht", "friedel" ]).tap do |crit|
|
|
1089
|
+
crit.documents = [ hobrecht, friedel ]
|
|
1090
|
+
end.collation(locale: 'en_US', strength: 2)
|
|
1091
|
+
end
|
|
1092
|
+
|
|
1093
|
+
it "raises an exception" do
|
|
1094
|
+
expect {
|
|
1095
|
+
context.last
|
|
1096
|
+
}.to raise_exception(Mongoid::Errors::InMemoryCollationNotSupported)
|
|
1097
|
+
end
|
|
1098
|
+
end
|
|
1099
|
+
end
|
|
1100
|
+
|
|
1101
|
+
[ :length, :size ].each do |method|
|
|
1102
|
+
|
|
1103
|
+
describe "##{method}" do
|
|
1104
|
+
|
|
1105
|
+
let(:hobrecht) do
|
|
1106
|
+
Address.new(street: "hobrecht")
|
|
1107
|
+
end
|
|
1108
|
+
|
|
1109
|
+
let(:friedel) do
|
|
1110
|
+
Address.new(street: "friedel")
|
|
1111
|
+
end
|
|
1112
|
+
|
|
1113
|
+
context "when there are matching documents" do
|
|
1114
|
+
|
|
1115
|
+
let(:criteria) do
|
|
1116
|
+
Address.where(street: "hobrecht").tap do |crit|
|
|
1117
|
+
crit.documents = [ hobrecht, friedel ]
|
|
1118
|
+
end
|
|
1119
|
+
end
|
|
1120
|
+
|
|
1121
|
+
let(:context) do
|
|
1122
|
+
described_class.new(criteria)
|
|
1123
|
+
end
|
|
1124
|
+
|
|
1125
|
+
it "returns the number of matches" do
|
|
1126
|
+
expect(context.send(method)).to eq(1)
|
|
1127
|
+
end
|
|
1128
|
+
end
|
|
1129
|
+
|
|
1130
|
+
context "when there are no matching documents" do
|
|
1131
|
+
|
|
1132
|
+
let(:criteria) do
|
|
1133
|
+
Address.where(street: "pfluger").tap do |crit|
|
|
1134
|
+
crit.documents = [ hobrecht, friedel ]
|
|
1135
|
+
end
|
|
1136
|
+
end
|
|
1137
|
+
|
|
1138
|
+
let(:context) do
|
|
1139
|
+
described_class.new(criteria)
|
|
1140
|
+
end
|
|
1141
|
+
|
|
1142
|
+
it "returns zero" do
|
|
1143
|
+
expect(context.send(method)).to eq(0)
|
|
1144
|
+
end
|
|
1145
|
+
end
|
|
1146
|
+
|
|
1147
|
+
context 'when there is a collation on the criteria' do
|
|
1148
|
+
|
|
1149
|
+
let(:criteria) do
|
|
1150
|
+
Address.where(street: "hobrecht").tap do |crit|
|
|
1151
|
+
crit.documents = [ hobrecht, friedel ]
|
|
1152
|
+
end.collation(locale: 'en_US', strength: 2)
|
|
1153
|
+
end
|
|
1154
|
+
|
|
1155
|
+
it "raises an exception" do
|
|
1156
|
+
expect {
|
|
1157
|
+
context.send(method)
|
|
1158
|
+
}.to raise_exception(Mongoid::Errors::InMemoryCollationNotSupported)
|
|
1159
|
+
end
|
|
1160
|
+
end
|
|
1161
|
+
end
|
|
1162
|
+
end
|
|
1163
|
+
|
|
1164
|
+
describe "#limit" do
|
|
1165
|
+
|
|
1166
|
+
let(:hobrecht) do
|
|
1167
|
+
Address.new(street: "hobrecht")
|
|
1168
|
+
end
|
|
1169
|
+
|
|
1170
|
+
let(:friedel) do
|
|
1171
|
+
Address.new(street: "friedel")
|
|
1172
|
+
end
|
|
1173
|
+
|
|
1174
|
+
let(:pfluger) do
|
|
1175
|
+
Address.new(street: "pfluger")
|
|
1176
|
+
end
|
|
1177
|
+
|
|
1178
|
+
let(:criteria) do
|
|
1179
|
+
Address.all.tap do |crit|
|
|
1180
|
+
crit.documents = [ hobrecht, friedel, pfluger ]
|
|
1181
|
+
end
|
|
1182
|
+
end
|
|
1183
|
+
|
|
1184
|
+
let(:context) do
|
|
1185
|
+
described_class.new(criteria)
|
|
1186
|
+
end
|
|
1187
|
+
|
|
1188
|
+
context 'when there is no collation on the criteria' do
|
|
1189
|
+
|
|
1190
|
+
let!(:limit) do
|
|
1191
|
+
context.limit(2)
|
|
1192
|
+
end
|
|
1193
|
+
|
|
1194
|
+
it "returns the context" do
|
|
1195
|
+
expect(limit).to eq(context)
|
|
1196
|
+
end
|
|
1197
|
+
|
|
1198
|
+
context "when asking for all documents" do
|
|
1199
|
+
|
|
1200
|
+
context "when only a limit exists" do
|
|
1201
|
+
|
|
1202
|
+
it "only returns the limited documents" do
|
|
1203
|
+
expect(context.entries).to eq([ hobrecht, friedel ])
|
|
1204
|
+
end
|
|
1205
|
+
end
|
|
1206
|
+
|
|
1207
|
+
context "when a skip and limit exist" do
|
|
1208
|
+
|
|
1209
|
+
before do
|
|
1210
|
+
limit.skip(1)
|
|
1211
|
+
end
|
|
1212
|
+
|
|
1213
|
+
it "applies the skip before the limit" do
|
|
1214
|
+
expect(context.entries).to eq([ friedel, pfluger ])
|
|
1215
|
+
end
|
|
1216
|
+
end
|
|
1217
|
+
end
|
|
1218
|
+
end
|
|
1219
|
+
|
|
1220
|
+
context 'when there is a collation on the criteria' do
|
|
1221
|
+
|
|
1222
|
+
let(:criteria) do
|
|
1223
|
+
Address.all.tap do |crit|
|
|
1224
|
+
crit.documents = [ hobrecht, friedel, pfluger ]
|
|
1225
|
+
end.collation(locale: 'en_US', strength: 2)
|
|
1226
|
+
end
|
|
1227
|
+
|
|
1228
|
+
it "raises an exception" do
|
|
1229
|
+
expect {
|
|
1230
|
+
context.limit(2)
|
|
1231
|
+
}.to raise_exception(Mongoid::Errors::InMemoryCollationNotSupported)
|
|
1232
|
+
end
|
|
1233
|
+
end
|
|
1234
|
+
end
|
|
1235
|
+
|
|
1236
|
+
describe "#pluck" do
|
|
1237
|
+
|
|
1238
|
+
let(:context) do
|
|
1239
|
+
described_class.new(criteria)
|
|
1240
|
+
end
|
|
1241
|
+
|
|
1242
|
+
context "when legacy_pluck_distinct is true" do
|
|
1243
|
+
config_override :legacy_pluck_distinct, true
|
|
1244
|
+
|
|
581
1245
|
let(:hobrecht) do
|
|
582
1246
|
Address.new(street: "hobrecht")
|
|
583
1247
|
end
|
|
584
1248
|
|
|
585
|
-
let(:friedel) do
|
|
586
|
-
Address.new(street: "friedel")
|
|
1249
|
+
let(:friedel) do
|
|
1250
|
+
Address.new(street: "friedel")
|
|
1251
|
+
end
|
|
1252
|
+
|
|
1253
|
+
let(:criteria) do
|
|
1254
|
+
Address.all.tap do |crit|
|
|
1255
|
+
crit.documents = [ hobrecht, friedel ]
|
|
1256
|
+
end
|
|
1257
|
+
end
|
|
1258
|
+
|
|
1259
|
+
context "when plucking" do
|
|
1260
|
+
|
|
1261
|
+
let!(:plucked) do
|
|
1262
|
+
context.pluck(:street)
|
|
1263
|
+
end
|
|
1264
|
+
|
|
1265
|
+
it "returns the values" do
|
|
1266
|
+
expect(plucked).to eq([ "hobrecht", "friedel" ])
|
|
1267
|
+
end
|
|
1268
|
+
end
|
|
1269
|
+
|
|
1270
|
+
context "when plucking a mix of empty and non-empty values" do
|
|
1271
|
+
|
|
1272
|
+
let(:empty_doc) do
|
|
1273
|
+
Address.new(street: nil)
|
|
1274
|
+
end
|
|
1275
|
+
|
|
1276
|
+
let(:criteria) do
|
|
1277
|
+
Address.all.tap do |crit|
|
|
1278
|
+
crit.documents = [ hobrecht, friedel, empty_doc ]
|
|
1279
|
+
end
|
|
1280
|
+
end
|
|
1281
|
+
|
|
1282
|
+
let!(:plucked) do
|
|
1283
|
+
context.pluck(:street)
|
|
1284
|
+
end
|
|
1285
|
+
|
|
1286
|
+
it "returns the values" do
|
|
1287
|
+
expect(plucked).to eq([ "hobrecht", "friedel", nil ])
|
|
1288
|
+
end
|
|
1289
|
+
end
|
|
1290
|
+
|
|
1291
|
+
context "when plucking a field that doesnt exist" do
|
|
1292
|
+
|
|
1293
|
+
context "when pluck one field" do
|
|
1294
|
+
|
|
1295
|
+
let(:plucked) do
|
|
1296
|
+
context.pluck(:foo)
|
|
1297
|
+
end
|
|
1298
|
+
|
|
1299
|
+
it "returns a empty array" do
|
|
1300
|
+
expect(plucked).to eq([nil, nil])
|
|
1301
|
+
end
|
|
1302
|
+
end
|
|
1303
|
+
|
|
1304
|
+
context "when pluck multiple fields" do
|
|
1305
|
+
|
|
1306
|
+
let(:plucked) do
|
|
1307
|
+
context.pluck(:foo, :bar)
|
|
1308
|
+
end
|
|
1309
|
+
|
|
1310
|
+
it "returns a empty array" do
|
|
1311
|
+
expect(plucked).to eq([[nil, nil], [nil, nil]])
|
|
1312
|
+
end
|
|
1313
|
+
end
|
|
1314
|
+
end
|
|
1315
|
+
|
|
1316
|
+
context 'when there is a collation on the criteria' do
|
|
1317
|
+
|
|
1318
|
+
let(:criteria) do
|
|
1319
|
+
Address.all.tap do |crit|
|
|
1320
|
+
crit.documents = [ hobrecht, friedel ]
|
|
1321
|
+
end.collation(locale: 'en_US', strength: 2)
|
|
1322
|
+
end
|
|
1323
|
+
|
|
1324
|
+
it "raises an exception" do
|
|
1325
|
+
expect {
|
|
1326
|
+
context.pluck(:foo, :bar)
|
|
1327
|
+
}.to raise_exception(Mongoid::Errors::InMemoryCollationNotSupported)
|
|
1328
|
+
end
|
|
1329
|
+
end
|
|
1330
|
+
end
|
|
1331
|
+
|
|
1332
|
+
context "when legacy_pluck_distinct is false" do
|
|
1333
|
+
config_override :legacy_pluck_distinct, false
|
|
1334
|
+
|
|
1335
|
+
let!(:depeche) do
|
|
1336
|
+
Band.create!(name: "Depeche Mode", likes: 3)
|
|
1337
|
+
end
|
|
1338
|
+
|
|
1339
|
+
let!(:tool) do
|
|
1340
|
+
Band.create!(name: "Tool", likes: 3)
|
|
1341
|
+
end
|
|
1342
|
+
|
|
1343
|
+
let!(:photek) do
|
|
1344
|
+
Band.create!(name: "Photek", likes: 1)
|
|
1345
|
+
end
|
|
1346
|
+
|
|
1347
|
+
let!(:maniacs) do
|
|
1348
|
+
Band.create!(name: "10,000 Maniacs", likes: 1, sales: "1E2")
|
|
1349
|
+
end
|
|
1350
|
+
|
|
1351
|
+
let(:criteria) do
|
|
1352
|
+
Band.all.tap do |crit|
|
|
1353
|
+
crit.documents = [ depeche, tool, photek, maniacs ]
|
|
1354
|
+
end
|
|
1355
|
+
end
|
|
1356
|
+
|
|
1357
|
+
context "when the field is aliased" do
|
|
1358
|
+
|
|
1359
|
+
let!(:expensive) do
|
|
1360
|
+
Product.create!(price: 100000)
|
|
1361
|
+
end
|
|
1362
|
+
|
|
1363
|
+
let!(:cheap) do
|
|
1364
|
+
Product.create!(price: 1)
|
|
1365
|
+
end
|
|
1366
|
+
|
|
1367
|
+
let(:criteria) do
|
|
1368
|
+
Product.all.tap do |crit|
|
|
1369
|
+
crit.documents = [ expensive, cheap ]
|
|
1370
|
+
end
|
|
1371
|
+
end
|
|
1372
|
+
|
|
1373
|
+
context "when using alias_attribute" do
|
|
1374
|
+
|
|
1375
|
+
let(:plucked) do
|
|
1376
|
+
context.pluck(:price)
|
|
1377
|
+
end
|
|
1378
|
+
|
|
1379
|
+
it "uses the aliases" do
|
|
1380
|
+
expect(plucked).to eq([ 100000, 1 ])
|
|
1381
|
+
end
|
|
1382
|
+
end
|
|
1383
|
+
end
|
|
1384
|
+
|
|
1385
|
+
context "when the criteria matches" do
|
|
1386
|
+
|
|
1387
|
+
context "when there are no duplicate values" do
|
|
1388
|
+
|
|
1389
|
+
let!(:plucked) do
|
|
1390
|
+
context.pluck(:name)
|
|
1391
|
+
end
|
|
1392
|
+
|
|
1393
|
+
it "returns the values" do
|
|
1394
|
+
expect(plucked).to contain_exactly("10,000 Maniacs", "Depeche Mode", "Tool", "Photek")
|
|
1395
|
+
end
|
|
1396
|
+
|
|
1397
|
+
context "when subsequently executing the criteria without a pluck" do
|
|
1398
|
+
|
|
1399
|
+
it "does not limit the fields" do
|
|
1400
|
+
expect(context.first.likes).to eq(3)
|
|
1401
|
+
end
|
|
1402
|
+
end
|
|
1403
|
+
|
|
1404
|
+
context 'when the field is a subdocument' do
|
|
1405
|
+
|
|
1406
|
+
context 'when a top-level field and a subdocument field are plucked' do
|
|
1407
|
+
let(:criteria) do
|
|
1408
|
+
Band.where(name: 'FKA Twigs').tap do |crit|
|
|
1409
|
+
crit.documents = [
|
|
1410
|
+
Band.create!(name: 'FKA Twigs'),
|
|
1411
|
+
Band.create!(name: 'FKA Twigs', records: [ Record.new(name: 'LP1') ])
|
|
1412
|
+
]
|
|
1413
|
+
end
|
|
1414
|
+
end
|
|
1415
|
+
|
|
1416
|
+
let(:embedded_pluck) do
|
|
1417
|
+
context.pluck(:name, 'records.name')
|
|
1418
|
+
end
|
|
1419
|
+
|
|
1420
|
+
let(:expected) do
|
|
1421
|
+
[
|
|
1422
|
+
["FKA Twigs", []],
|
|
1423
|
+
['FKA Twigs', ["LP1"]]
|
|
1424
|
+
]
|
|
1425
|
+
end
|
|
1426
|
+
|
|
1427
|
+
it 'returns the list of top-level field and subdocument values' do
|
|
1428
|
+
expect(embedded_pluck).to eq(expected)
|
|
1429
|
+
end
|
|
1430
|
+
end
|
|
1431
|
+
|
|
1432
|
+
context 'when only a subdocument field is plucked' do
|
|
1433
|
+
|
|
1434
|
+
let(:criteria) do
|
|
1435
|
+
Band.where(name: 'FKA Twigs').tap do |crit|
|
|
1436
|
+
crit.documents = [
|
|
1437
|
+
Band.create!(name: 'FKA Twigs'),
|
|
1438
|
+
Band.create!(name: 'FKA Twigs', records: [ Record.new(name: 'LP1') ])
|
|
1439
|
+
]
|
|
1440
|
+
end
|
|
1441
|
+
end
|
|
1442
|
+
|
|
1443
|
+
let(:embedded_pluck) do
|
|
1444
|
+
context.pluck('records.name')
|
|
1445
|
+
end
|
|
1446
|
+
|
|
1447
|
+
let(:expected) do
|
|
1448
|
+
[
|
|
1449
|
+
[],
|
|
1450
|
+
["LP1"]
|
|
1451
|
+
]
|
|
1452
|
+
end
|
|
1453
|
+
|
|
1454
|
+
it 'returns the list of subdocument values' do
|
|
1455
|
+
expect(embedded_pluck).to eq(expected)
|
|
1456
|
+
end
|
|
1457
|
+
end
|
|
1458
|
+
end
|
|
1459
|
+
end
|
|
1460
|
+
|
|
1461
|
+
context "when plucking multi-fields" do
|
|
1462
|
+
|
|
1463
|
+
let(:plucked) do
|
|
1464
|
+
context.pluck(:name, :likes)
|
|
1465
|
+
end
|
|
1466
|
+
|
|
1467
|
+
it "returns the values" do
|
|
1468
|
+
expect(plucked).to contain_exactly(["10,000 Maniacs", 1], ["Depeche Mode", 3], ["Tool", 3], ["Photek", 1])
|
|
1469
|
+
end
|
|
1470
|
+
end
|
|
1471
|
+
|
|
1472
|
+
context "when there are duplicate values" do
|
|
1473
|
+
|
|
1474
|
+
let(:plucked) do
|
|
1475
|
+
context.pluck(:likes)
|
|
1476
|
+
end
|
|
1477
|
+
|
|
1478
|
+
it "returns the duplicates" do
|
|
1479
|
+
expect(plucked).to contain_exactly(1, 3, 3, 1)
|
|
1480
|
+
end
|
|
1481
|
+
end
|
|
1482
|
+
end
|
|
1483
|
+
|
|
1484
|
+
context "when plucking an aliased field" do
|
|
1485
|
+
|
|
1486
|
+
let(:plucked) do
|
|
1487
|
+
context.pluck(:id)
|
|
1488
|
+
end
|
|
1489
|
+
|
|
1490
|
+
it "returns the field values" do
|
|
1491
|
+
expect(plucked).to eq([ depeche.id, tool.id, photek.id, maniacs.id ])
|
|
1492
|
+
end
|
|
1493
|
+
end
|
|
1494
|
+
|
|
1495
|
+
context "when plucking existent and non-existent fields" do
|
|
1496
|
+
|
|
1497
|
+
let(:plucked) do
|
|
1498
|
+
context.pluck(:id, :fooz)
|
|
1499
|
+
end
|
|
1500
|
+
|
|
1501
|
+
it "returns nil for the field that doesnt exist" do
|
|
1502
|
+
expect(plucked).to eq([[depeche.id, nil], [tool.id, nil], [photek.id, nil], [maniacs.id, nil] ])
|
|
1503
|
+
end
|
|
1504
|
+
end
|
|
1505
|
+
|
|
1506
|
+
context "when plucking a field that doesnt exist" do
|
|
1507
|
+
|
|
1508
|
+
context "when pluck one field" do
|
|
1509
|
+
|
|
1510
|
+
let(:plucked) do
|
|
1511
|
+
context.pluck(:foo)
|
|
1512
|
+
end
|
|
1513
|
+
|
|
1514
|
+
it "returns an array with nil values" do
|
|
1515
|
+
expect(plucked).to eq([nil, nil, nil, nil])
|
|
1516
|
+
end
|
|
1517
|
+
end
|
|
1518
|
+
|
|
1519
|
+
context "when pluck multiple fields" do
|
|
1520
|
+
|
|
1521
|
+
let(:plucked) do
|
|
1522
|
+
context.pluck(:foo, :bar)
|
|
1523
|
+
end
|
|
1524
|
+
|
|
1525
|
+
it "returns an array of arrays with nil values" do
|
|
1526
|
+
expect(plucked).to eq([[nil, nil], [nil, nil], [nil, nil], [nil, nil]])
|
|
1527
|
+
end
|
|
1528
|
+
end
|
|
1529
|
+
end
|
|
1530
|
+
|
|
1531
|
+
context 'when plucking a localized field' do
|
|
1532
|
+
|
|
1533
|
+
before do
|
|
1534
|
+
I18n.locale = :en
|
|
1535
|
+
d = Dictionary.create!(description: 'english-text')
|
|
1536
|
+
I18n.locale = :de
|
|
1537
|
+
d.description = 'deutsch-text'
|
|
1538
|
+
d.save!
|
|
1539
|
+
end
|
|
1540
|
+
|
|
1541
|
+
after do
|
|
1542
|
+
I18n.locale = :en
|
|
1543
|
+
end
|
|
1544
|
+
|
|
1545
|
+
let(:criteria) do
|
|
1546
|
+
Dictionary.all.tap do |crit|
|
|
1547
|
+
crit.documents = [ Dictionary.first ]
|
|
1548
|
+
end
|
|
1549
|
+
end
|
|
1550
|
+
|
|
1551
|
+
context 'when plucking the entire field' do
|
|
1552
|
+
|
|
1553
|
+
let(:plucked) do
|
|
1554
|
+
context.pluck(:description)
|
|
1555
|
+
end
|
|
1556
|
+
|
|
1557
|
+
let(:plucked_translations) do
|
|
1558
|
+
context.pluck(:description_translations)
|
|
1559
|
+
end
|
|
1560
|
+
|
|
1561
|
+
let(:plucked_translations_both) do
|
|
1562
|
+
context.pluck(:description_translations, :description)
|
|
1563
|
+
end
|
|
1564
|
+
|
|
1565
|
+
it 'returns the demongoized translations' do
|
|
1566
|
+
expect(plucked.first).to eq('deutsch-text')
|
|
1567
|
+
end
|
|
1568
|
+
|
|
1569
|
+
it 'returns the full translations hash to _translations' do
|
|
1570
|
+
expect(plucked_translations.first).to eq({"de"=>"deutsch-text", "en"=>"english-text"})
|
|
1571
|
+
end
|
|
1572
|
+
|
|
1573
|
+
it 'returns both' do
|
|
1574
|
+
expect(plucked_translations_both.first).to eq([{"de"=>"deutsch-text", "en"=>"english-text"}, "deutsch-text"])
|
|
1575
|
+
end
|
|
1576
|
+
end
|
|
1577
|
+
|
|
1578
|
+
context 'when plucking a specific locale' do
|
|
1579
|
+
|
|
1580
|
+
let(:plucked) do
|
|
1581
|
+
context.pluck(:'description.de')
|
|
1582
|
+
end
|
|
1583
|
+
|
|
1584
|
+
it 'returns the specific translations' do
|
|
1585
|
+
expect(plucked.first).to eq('deutsch-text')
|
|
1586
|
+
end
|
|
1587
|
+
end
|
|
1588
|
+
|
|
1589
|
+
context 'when plucking a specific locale from _translations field' do
|
|
1590
|
+
|
|
1591
|
+
let(:plucked) do
|
|
1592
|
+
context.pluck(:'description_translations.de')
|
|
1593
|
+
end
|
|
1594
|
+
|
|
1595
|
+
it 'returns the specific translations' do
|
|
1596
|
+
expect(plucked.first).to eq('deutsch-text')
|
|
1597
|
+
end
|
|
1598
|
+
end
|
|
1599
|
+
|
|
1600
|
+
context 'when fallbacks are enabled with a locale list' do
|
|
1601
|
+
require_fallbacks
|
|
1602
|
+
|
|
1603
|
+
around(:all) do |example|
|
|
1604
|
+
prev_fallbacks = I18n.fallbacks.dup
|
|
1605
|
+
I18n.fallbacks[:he] = [ :en ]
|
|
1606
|
+
example.run
|
|
1607
|
+
I18n.fallbacks = prev_fallbacks
|
|
1608
|
+
end
|
|
1609
|
+
|
|
1610
|
+
after do
|
|
1611
|
+
I18n.locale = :en
|
|
1612
|
+
end
|
|
1613
|
+
|
|
1614
|
+
let(:plucked) do
|
|
1615
|
+
context.pluck(:description).first
|
|
1616
|
+
end
|
|
1617
|
+
|
|
1618
|
+
it "correctly uses the fallback" do
|
|
1619
|
+
I18n.locale = :en
|
|
1620
|
+
d = Dictionary.create!(description: 'english-text')
|
|
1621
|
+
I18n.locale = :he
|
|
1622
|
+
plucked.should == "english-text"
|
|
1623
|
+
end
|
|
1624
|
+
end
|
|
1625
|
+
|
|
1626
|
+
context "when the localized field is embedded" do
|
|
1627
|
+
before do
|
|
1628
|
+
p = Passport.new
|
|
1629
|
+
I18n.locale = :en
|
|
1630
|
+
p.name = "Neil"
|
|
1631
|
+
I18n.locale = :he
|
|
1632
|
+
p.name = "Nissim"
|
|
1633
|
+
|
|
1634
|
+
Person.create!(passport: p, employer_id: 12345)
|
|
1635
|
+
end
|
|
1636
|
+
|
|
1637
|
+
after do
|
|
1638
|
+
I18n.locale = :en
|
|
1639
|
+
end
|
|
1640
|
+
|
|
1641
|
+
let(:plucked) do
|
|
1642
|
+
Person.where(employer_id: 12345).pluck("pass.name").first
|
|
1643
|
+
end
|
|
1644
|
+
|
|
1645
|
+
let(:plucked_translations) do
|
|
1646
|
+
Person.where(employer_id: 12345).pluck("pass.name_translations").first
|
|
1647
|
+
end
|
|
1648
|
+
|
|
1649
|
+
let(:plucked_translations_field) do
|
|
1650
|
+
Person.where(employer_id: 12345).pluck("pass.name_translations.en").first
|
|
1651
|
+
end
|
|
1652
|
+
|
|
1653
|
+
it "returns the translation for the current locale" do
|
|
1654
|
+
expect(plucked).to eq("Nissim")
|
|
1655
|
+
end
|
|
1656
|
+
|
|
1657
|
+
it "returns the full _translation hash" do
|
|
1658
|
+
expect(plucked_translations).to eq({ "en" => "Neil", "he" => "Nissim" })
|
|
1659
|
+
end
|
|
1660
|
+
|
|
1661
|
+
it "returns the translation for the requested locale" do
|
|
1662
|
+
expect(plucked_translations_field).to eq("Neil")
|
|
1663
|
+
end
|
|
1664
|
+
end
|
|
1665
|
+
end
|
|
1666
|
+
|
|
1667
|
+
context 'when plucking a field to be demongoized' do
|
|
1668
|
+
|
|
1669
|
+
let(:plucked) do
|
|
1670
|
+
Band.where(name: maniacs.name).pluck(:sales)
|
|
1671
|
+
end
|
|
1672
|
+
|
|
1673
|
+
with_config_values :map_big_decimal_to_decimal128, true, false do
|
|
1674
|
+
|
|
1675
|
+
it "demongoizes the field" do
|
|
1676
|
+
expect(plucked.first).to be_a(BigDecimal)
|
|
1677
|
+
expect(plucked.first).to eq(BigDecimal("1E2"))
|
|
1678
|
+
end
|
|
1679
|
+
end
|
|
1680
|
+
end
|
|
1681
|
+
|
|
1682
|
+
context "when plucking an embedded field" do
|
|
1683
|
+
let(:label) { Label.new(sales: "1E2") }
|
|
1684
|
+
let!(:band) { Band.create!(label: label) }
|
|
1685
|
+
|
|
1686
|
+
let(:plucked) do
|
|
1687
|
+
Band.where(_id: band.id).tap do |crit|
|
|
1688
|
+
crit.documents = [ band ]
|
|
1689
|
+
end.pluck("label.sales")
|
|
1690
|
+
end
|
|
1691
|
+
|
|
1692
|
+
it "demongoizes the field" do
|
|
1693
|
+
expect(plucked).to eq([ BigDecimal("1E2") ])
|
|
1694
|
+
end
|
|
1695
|
+
end
|
|
1696
|
+
|
|
1697
|
+
context "when plucking an embeds_many field" do
|
|
1698
|
+
let(:label) { Label.new(sales: "1E2") }
|
|
1699
|
+
let!(:band) { Band.create!(labels: [label]) }
|
|
1700
|
+
|
|
1701
|
+
let(:plucked) { Band.where(_id: band.id).pluck("labels.sales") }
|
|
1702
|
+
|
|
1703
|
+
it "demongoizes the field" do
|
|
1704
|
+
expect(plucked.first).to eq([ BigDecimal("1E2") ])
|
|
1705
|
+
end
|
|
1706
|
+
end
|
|
1707
|
+
|
|
1708
|
+
context "when plucking a nonexistent embedded field" do
|
|
1709
|
+
let(:label) { Label.new(sales: "1E2") }
|
|
1710
|
+
let!(:band) { Band.create!(label: label) }
|
|
1711
|
+
|
|
1712
|
+
let(:plucked) do
|
|
1713
|
+
Band.where(_id: band.id).tap do |crit|
|
|
1714
|
+
crit.documents = [ band ]
|
|
1715
|
+
end.pluck("label.qwerty")
|
|
1716
|
+
end
|
|
1717
|
+
|
|
1718
|
+
it "returns nil" do
|
|
1719
|
+
expect(plucked.first).to eq(nil)
|
|
1720
|
+
end
|
|
1721
|
+
end
|
|
1722
|
+
|
|
1723
|
+
context "when tallying deeply nested arrays/embedded associations" do
|
|
1724
|
+
|
|
1725
|
+
let(:criteria) do
|
|
1726
|
+
Person.all.tap do |crit|
|
|
1727
|
+
crit.documents = [
|
|
1728
|
+
Person.create!(addresses: [ Address.new(code: Code.new(deepest: Deepest.new(array: [ { y: { z: 1 } }, { y: { z: 2 } } ]))) ]),
|
|
1729
|
+
Person.create!(addresses: [ Address.new(code: Code.new(deepest: Deepest.new(array: [ { y: { z: 1 } }, { y: { z: 2 } } ]))) ]),
|
|
1730
|
+
Person.create!(addresses: [ Address.new(code: Code.new(deepest: Deepest.new(array: [ { y: { z: 1 } }, { y: { z: 3 } } ]))) ]),
|
|
1731
|
+
]
|
|
1732
|
+
end
|
|
1733
|
+
end
|
|
1734
|
+
|
|
1735
|
+
let(:plucked) do
|
|
1736
|
+
context.pluck("addresses.code.deepest.array.y.z")
|
|
1737
|
+
end
|
|
1738
|
+
|
|
1739
|
+
it "returns the correct hash" do
|
|
1740
|
+
expect(plucked).to eq([
|
|
1741
|
+
[ [ 1, 2 ] ], [ [ 1, 2 ] ], [ [ 1, 3 ] ]
|
|
1742
|
+
])
|
|
1743
|
+
end
|
|
1744
|
+
end
|
|
1745
|
+
end
|
|
1746
|
+
end
|
|
1747
|
+
|
|
1748
|
+
describe "#pick" do
|
|
1749
|
+
|
|
1750
|
+
let(:depeche) do
|
|
1751
|
+
Band.create!(name: "Depeche Mode", likes: 3)
|
|
1752
|
+
end
|
|
1753
|
+
|
|
1754
|
+
let(:tool) do
|
|
1755
|
+
Band.create!(name: "Tool", likes: 3)
|
|
1756
|
+
end
|
|
1757
|
+
|
|
1758
|
+
let(:criteria) do
|
|
1759
|
+
Band.all.tap do |crit|
|
|
1760
|
+
crit.documents = [ depeche, tool ]
|
|
1761
|
+
end
|
|
1762
|
+
end
|
|
1763
|
+
|
|
1764
|
+
let(:context) do
|
|
1765
|
+
described_class.new(criteria)
|
|
1766
|
+
end
|
|
1767
|
+
|
|
1768
|
+
context "when picking a field" do
|
|
1769
|
+
|
|
1770
|
+
let(:picked) do
|
|
1771
|
+
context.pick(:name)
|
|
1772
|
+
end
|
|
1773
|
+
|
|
1774
|
+
it "returns one element" do
|
|
1775
|
+
expect(picked).to eq("Depeche Mode")
|
|
1776
|
+
end
|
|
1777
|
+
end
|
|
1778
|
+
|
|
1779
|
+
context "when picking multiple fields" do
|
|
1780
|
+
|
|
1781
|
+
let(:picked) do
|
|
1782
|
+
context.pick(:name, :likes)
|
|
1783
|
+
end
|
|
1784
|
+
|
|
1785
|
+
it "returns an array" do
|
|
1786
|
+
expect(picked).to eq([ "Depeche Mode", 3 ])
|
|
587
1787
|
end
|
|
1788
|
+
end
|
|
1789
|
+
|
|
1790
|
+
context "when no documents to pick" do
|
|
588
1791
|
|
|
589
1792
|
let(:criteria) do
|
|
590
|
-
|
|
591
|
-
crit.documents = [
|
|
1793
|
+
Band.all.tap do |crit|
|
|
1794
|
+
crit.documents = []
|
|
592
1795
|
end
|
|
593
1796
|
end
|
|
594
1797
|
|
|
595
|
-
let(:
|
|
596
|
-
|
|
1798
|
+
let(:picked) do
|
|
1799
|
+
context.pick(:name)
|
|
597
1800
|
end
|
|
598
1801
|
|
|
599
|
-
it "
|
|
600
|
-
|
|
1802
|
+
it "returns nil" do
|
|
1803
|
+
expect(picked).to be_nil
|
|
601
1804
|
end
|
|
602
1805
|
end
|
|
603
1806
|
end
|
|
604
1807
|
|
|
605
|
-
describe "#
|
|
1808
|
+
describe "#tally" do
|
|
1809
|
+
let(:fans1) { [ Fanatic.new(age:1), Fanatic.new(age:2) ] }
|
|
1810
|
+
let(:fans2) { [ Fanatic.new(age:1), Fanatic.new(age:2) ] }
|
|
1811
|
+
let(:fans3) { [ Fanatic.new(age:1), Fanatic.new(age:3) ] }
|
|
606
1812
|
|
|
607
|
-
let(:
|
|
608
|
-
|
|
609
|
-
|
|
1813
|
+
let(:genres1) { [ { x: 1, y: { z: 1 } }, { x: 2, y: { z: 2 } }, { y: 3 } ]}
|
|
1814
|
+
let(:genres2) { [ { x: 1, y: { z: 1 } }, { x: 2, y: { z: 2 } }, { y: 4 } ]}
|
|
1815
|
+
let(:genres3) { [ { x: 1, y: { z: 1 } }, { x: 3, y: { z: 3 } }, { y: 5 } ]}
|
|
1816
|
+
|
|
1817
|
+
let(:label1) { Label.new(name: "Atlantic") }
|
|
1818
|
+
let(:label2) { Label.new(name: "Atlantic") }
|
|
1819
|
+
let(:label3) { Label.new(name: "Columbia") }
|
|
610
1820
|
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
1821
|
+
|
|
1822
|
+
let(:band1) { Band.new(origin: "tally", name: "Depeche Mode", years: 30, sales: "1E2", label: label1, genres: genres1) }
|
|
1823
|
+
let(:band2) { Band.new(origin: "tally", name: "New Order", years: 30, sales: "2E3", label: label2, genres: genres2) }
|
|
1824
|
+
let(:band3) { Band.new(origin: "tally", name: "10,000 Maniacs", years: 30, sales: "1E2", label: label3, genres: genres3) }
|
|
1825
|
+
let(:band4) { Band.new(origin: "tally2", fanatics: fans1, genres: [1, 2]) }
|
|
1826
|
+
let(:band5) { Band.new(origin: "tally2", fanatics: fans2, genres: [1, 2]) }
|
|
1827
|
+
let(:band6) { Band.new(origin: "tally2", fanatics: fans3, genres: [1, 3]) }
|
|
614
1828
|
|
|
615
1829
|
let(:criteria) do
|
|
616
|
-
|
|
617
|
-
crit.documents = [
|
|
1830
|
+
Band.where(origin: "tally").all.tap do |crit|
|
|
1831
|
+
crit.documents = [ band1, band2, band3 ]
|
|
1832
|
+
end
|
|
1833
|
+
end
|
|
1834
|
+
|
|
1835
|
+
let(:criteria2) do
|
|
1836
|
+
Band.where(origin: "tally2").tap do |crit|
|
|
1837
|
+
crit.documents = [ band4, band5, band6 ]
|
|
618
1838
|
end
|
|
619
1839
|
end
|
|
620
1840
|
|
|
@@ -622,110 +1842,437 @@ describe Mongoid::Contextual::Memory do
|
|
|
622
1842
|
described_class.new(criteria)
|
|
623
1843
|
end
|
|
624
1844
|
|
|
625
|
-
|
|
626
|
-
|
|
1845
|
+
let(:context2) do
|
|
1846
|
+
described_class.new(criteria2)
|
|
627
1847
|
end
|
|
628
|
-
end
|
|
629
1848
|
|
|
630
|
-
|
|
1849
|
+
context "when tallying a string" do
|
|
1850
|
+
let(:tally) do
|
|
1851
|
+
context.tally(:name)
|
|
1852
|
+
end
|
|
631
1853
|
|
|
632
|
-
|
|
1854
|
+
it "returns the correct hash" do
|
|
1855
|
+
expect(tally).to eq("Depeche Mode" => 1, "New Order" => 1, "10,000 Maniacs" => 1)
|
|
1856
|
+
end
|
|
1857
|
+
end
|
|
633
1858
|
|
|
634
|
-
|
|
635
|
-
|
|
1859
|
+
context "using an aliased field" do
|
|
1860
|
+
let(:tally) do
|
|
1861
|
+
context.tally(:years)
|
|
636
1862
|
end
|
|
637
1863
|
|
|
638
|
-
|
|
639
|
-
|
|
1864
|
+
it "returns the correct hash" do
|
|
1865
|
+
expect(tally).to eq(30 => 3)
|
|
640
1866
|
end
|
|
1867
|
+
end
|
|
641
1868
|
|
|
642
|
-
|
|
1869
|
+
context "when tallying a demongoizable field" do
|
|
1870
|
+
let(:tally) do
|
|
1871
|
+
context.tally(:sales)
|
|
1872
|
+
end
|
|
643
1873
|
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
1874
|
+
it "returns the correct hash" do
|
|
1875
|
+
expect(tally).to eq(BigDecimal("1E2") => 2, BigDecimal("2E3") => 1)
|
|
1876
|
+
end
|
|
1877
|
+
end
|
|
1878
|
+
|
|
1879
|
+
context "when tallying a localized field" do
|
|
1880
|
+
let(:d1) { Dictionary.new(description: 'en1') }
|
|
1881
|
+
let(:d2) { Dictionary.new(description: 'en1') }
|
|
1882
|
+
let(:d3) { Dictionary.new(description: 'en1') }
|
|
1883
|
+
let(:d4) { Dictionary.new(description: 'en2') }
|
|
1884
|
+
|
|
1885
|
+
before do
|
|
1886
|
+
I18n.locale = :en
|
|
1887
|
+
d1
|
|
1888
|
+
d2
|
|
1889
|
+
d3
|
|
1890
|
+
d4
|
|
1891
|
+
I18n.locale = :de
|
|
1892
|
+
d1.description = 'de1'
|
|
1893
|
+
d2.description = 'de1'
|
|
1894
|
+
d3.description = 'de2'
|
|
1895
|
+
d4.description = 'de3'
|
|
1896
|
+
I18n.locale = :en
|
|
1897
|
+
end
|
|
1898
|
+
|
|
1899
|
+
let(:criteria) do
|
|
1900
|
+
Dictionary.all.tap do |crit|
|
|
1901
|
+
crit.documents = [ d1, d2, d3, d4 ]
|
|
648
1902
|
end
|
|
1903
|
+
end
|
|
649
1904
|
|
|
650
|
-
|
|
651
|
-
|
|
1905
|
+
context "when getting the demongoized field" do
|
|
1906
|
+
let(:tallied) do
|
|
1907
|
+
context.tally(:description)
|
|
652
1908
|
end
|
|
653
1909
|
|
|
654
|
-
it "returns the
|
|
655
|
-
|
|
1910
|
+
it "returns the translation for the current locale" do
|
|
1911
|
+
expect(tallied).to eq("en1" => 3, "en2" => 1)
|
|
656
1912
|
end
|
|
657
1913
|
end
|
|
658
1914
|
|
|
659
|
-
context "when
|
|
1915
|
+
context "when getting a specific locale" do
|
|
1916
|
+
let(:tallied) do
|
|
1917
|
+
context.tally("description.de")
|
|
1918
|
+
end
|
|
660
1919
|
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
crit.documents = [ hobrecht, friedel ]
|
|
664
|
-
end
|
|
1920
|
+
it "returns the translation for the the specific locale" do
|
|
1921
|
+
expect(tallied).to eq("de1" => 2, "de2" => 1, "de3" => 1)
|
|
665
1922
|
end
|
|
1923
|
+
end
|
|
666
1924
|
|
|
667
|
-
|
|
668
|
-
|
|
1925
|
+
context "when getting the full hash" do
|
|
1926
|
+
let(:tallied) do
|
|
1927
|
+
context.tally("description_translations")
|
|
669
1928
|
end
|
|
670
1929
|
|
|
671
|
-
it "returns
|
|
672
|
-
|
|
1930
|
+
it "returns the correct hash" do
|
|
1931
|
+
expect(tallied).to eq(
|
|
1932
|
+
{"de" => "de1", "en" => "en1" } => 2,
|
|
1933
|
+
{"de" => "de2", "en" => "en1" } => 1,
|
|
1934
|
+
{"de" => "de3", "en" => "en2" } => 1
|
|
1935
|
+
)
|
|
673
1936
|
end
|
|
674
1937
|
end
|
|
675
1938
|
end
|
|
676
|
-
end
|
|
677
1939
|
|
|
678
|
-
|
|
1940
|
+
context "when tallying an embedded localized field" do
|
|
679
1941
|
|
|
680
|
-
|
|
681
|
-
|
|
1942
|
+
let(:person1) { Person.create!(addresses: [ address1a, address1b ]) }
|
|
1943
|
+
let(:person2) { Person.create!(addresses: [ address2a, address2b ]) }
|
|
1944
|
+
|
|
1945
|
+
let(:address1a) { Address.new(name: "en1") }
|
|
1946
|
+
let(:address1b) { Address.new(name: "en2") }
|
|
1947
|
+
let(:address2a) { Address.new(name: "en1") }
|
|
1948
|
+
let(:address2b) { Address.new(name: "en3") }
|
|
1949
|
+
|
|
1950
|
+
before do
|
|
1951
|
+
I18n.locale = :en
|
|
1952
|
+
address1a
|
|
1953
|
+
address1b
|
|
1954
|
+
address2a
|
|
1955
|
+
address2b
|
|
1956
|
+
I18n.locale = :de
|
|
1957
|
+
address1a.name = "de1"
|
|
1958
|
+
address1b.name = "de2"
|
|
1959
|
+
address2a.name = "de1"
|
|
1960
|
+
address2b.name = "de3"
|
|
1961
|
+
person1
|
|
1962
|
+
person2
|
|
1963
|
+
|
|
1964
|
+
I18n.locale = :en
|
|
1965
|
+
end
|
|
1966
|
+
|
|
1967
|
+
let(:criteria) do
|
|
1968
|
+
Person.all.tap do |crit|
|
|
1969
|
+
crit.documents = [ person1, person2 ]
|
|
1970
|
+
end
|
|
1971
|
+
end
|
|
1972
|
+
|
|
1973
|
+
context "when getting the demongoized field" do
|
|
1974
|
+
let(:tallied) do
|
|
1975
|
+
context.tally("addresses.name")
|
|
1976
|
+
end
|
|
1977
|
+
|
|
1978
|
+
it "returns the translation for the current locale" do
|
|
1979
|
+
expect(tallied).to eq(
|
|
1980
|
+
[ "en1", "en2" ] => 1,
|
|
1981
|
+
[ "en1", "en3" ] => 1,
|
|
1982
|
+
)
|
|
1983
|
+
end
|
|
1984
|
+
end
|
|
1985
|
+
|
|
1986
|
+
context "when getting a specific locale" do
|
|
1987
|
+
let(:tallied) do
|
|
1988
|
+
context.tally("addresses.name.de")
|
|
1989
|
+
end
|
|
1990
|
+
|
|
1991
|
+
it "returns the translation for the the specific locale" do
|
|
1992
|
+
expect(tallied).to eq(
|
|
1993
|
+
[ "de1", "de2" ] => 1,
|
|
1994
|
+
[ "de1", "de3" ] => 1,
|
|
1995
|
+
)
|
|
1996
|
+
end
|
|
1997
|
+
end
|
|
1998
|
+
|
|
1999
|
+
context "when getting the full hash" do
|
|
2000
|
+
let(:tallied) do
|
|
2001
|
+
context.tally("addresses.name_translations")
|
|
2002
|
+
end
|
|
2003
|
+
|
|
2004
|
+
it "returns the correct hash" do
|
|
2005
|
+
expect(tallied).to eq(
|
|
2006
|
+
[{ "de" => "de1", "en" => "en1" }, { "de" => "de2", "en" => "en2" }] => 1,
|
|
2007
|
+
[{ "de" => "de1", "en" => "en1" }, { "de" => "de3", "en" => "en3" }] => 1,
|
|
2008
|
+
)
|
|
2009
|
+
end
|
|
2010
|
+
end
|
|
682
2011
|
end
|
|
683
2012
|
|
|
684
|
-
|
|
685
|
-
|
|
2013
|
+
context "when tallying an embedded field" do
|
|
2014
|
+
let(:tally) do
|
|
2015
|
+
context.tally("label.name")
|
|
2016
|
+
end
|
|
2017
|
+
|
|
2018
|
+
it "returns the correct hash" do
|
|
2019
|
+
expect(tally).to eq("Atlantic" => 2, "Columbia" => 1)
|
|
2020
|
+
end
|
|
686
2021
|
end
|
|
687
2022
|
|
|
688
|
-
|
|
689
|
-
|
|
2023
|
+
context "when tallying an element in an embeds_many field" do
|
|
2024
|
+
|
|
2025
|
+
let(:tally) do
|
|
2026
|
+
context2.tally("fanatics.age")
|
|
2027
|
+
end
|
|
2028
|
+
|
|
2029
|
+
it "returns the correct hash" do
|
|
2030
|
+
expect(tally).to eq(
|
|
2031
|
+
[1, 2] => 2,
|
|
2032
|
+
[1, 3] => 1
|
|
2033
|
+
)
|
|
2034
|
+
end
|
|
690
2035
|
end
|
|
691
2036
|
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
2037
|
+
context "when tallying an embeds_many field" do
|
|
2038
|
+
|
|
2039
|
+
let(:tally) do
|
|
2040
|
+
context2.tally("fanatics")
|
|
2041
|
+
end
|
|
2042
|
+
|
|
2043
|
+
it "returns the correct hash" do
|
|
2044
|
+
expect(tally).to eq(
|
|
2045
|
+
fans1 => 1,
|
|
2046
|
+
fans2 => 1,
|
|
2047
|
+
fans3 => 1,
|
|
2048
|
+
)
|
|
695
2049
|
end
|
|
696
2050
|
end
|
|
697
2051
|
|
|
698
|
-
|
|
699
|
-
|
|
2052
|
+
context "when tallying a field of type array" do
|
|
2053
|
+
|
|
2054
|
+
let(:tally) do
|
|
2055
|
+
context2.tally("genres")
|
|
2056
|
+
end
|
|
2057
|
+
|
|
2058
|
+
it "returns the correct hash" do
|
|
2059
|
+
expect(tally).to eq(
|
|
2060
|
+
[1, 2] => 2,
|
|
2061
|
+
[1, 3] => 1
|
|
2062
|
+
)
|
|
2063
|
+
end
|
|
2064
|
+
end
|
|
2065
|
+
|
|
2066
|
+
context "when tallying an element from an array of hashes" do
|
|
2067
|
+
|
|
2068
|
+
let(:tally) do
|
|
2069
|
+
context.tally("genres.x")
|
|
2070
|
+
end
|
|
2071
|
+
|
|
2072
|
+
it "returns the correct hash without the nil keys" do
|
|
2073
|
+
expect(tally).to eq(
|
|
2074
|
+
[1, 2] => 2,
|
|
2075
|
+
[1, 3] => 1
|
|
2076
|
+
)
|
|
2077
|
+
end
|
|
2078
|
+
end
|
|
2079
|
+
|
|
2080
|
+
context "when tallying an element from an array of hashes; with duplicate" do
|
|
2081
|
+
|
|
2082
|
+
let(:band4) { Band.new(origin: "tally", genres: [ { x: 1 }, {x: 1} ] ) }
|
|
2083
|
+
|
|
2084
|
+
let(:criteria) do
|
|
2085
|
+
Band.where(origin: "tally").all.tap do |crit|
|
|
2086
|
+
crit.documents = [ band1, band2, band3, band4 ]
|
|
2087
|
+
end
|
|
2088
|
+
end
|
|
2089
|
+
|
|
2090
|
+
let(:tally) do
|
|
2091
|
+
context.tally("genres.x")
|
|
2092
|
+
end
|
|
2093
|
+
|
|
2094
|
+
it "returns the correct hash without the nil keys" do
|
|
2095
|
+
expect(tally).to eq(
|
|
2096
|
+
[1, 2] => 2,
|
|
2097
|
+
[1, 3] => 1,
|
|
2098
|
+
[1, 1] => 1,
|
|
2099
|
+
)
|
|
2100
|
+
end
|
|
2101
|
+
end
|
|
2102
|
+
|
|
2103
|
+
context "when tallying an aliased field of type array" do
|
|
2104
|
+
|
|
2105
|
+
let(:person1) { Person.new(array: [ 1, 2 ]) }
|
|
2106
|
+
let(:person2) { Person.new(array: [ 1, 3 ]) }
|
|
2107
|
+
|
|
2108
|
+
let(:criteria) do
|
|
2109
|
+
Person.all.tap do |crit|
|
|
2110
|
+
crit.documents = [ person1, person2 ]
|
|
2111
|
+
end
|
|
2112
|
+
end
|
|
2113
|
+
|
|
2114
|
+
let(:tally) do
|
|
2115
|
+
context.tally("array")
|
|
2116
|
+
end
|
|
2117
|
+
|
|
2118
|
+
it "returns the correct hash" do
|
|
2119
|
+
expect(tally).to eq(
|
|
2120
|
+
[1, 2] => 1,
|
|
2121
|
+
[1, 3] => 1
|
|
2122
|
+
)
|
|
2123
|
+
end
|
|
700
2124
|
end
|
|
701
2125
|
|
|
702
|
-
|
|
703
|
-
|
|
2126
|
+
context "when going multiple levels deep in arrays" do
|
|
2127
|
+
|
|
2128
|
+
let(:tally) do
|
|
2129
|
+
context.tally("genres.y.z")
|
|
2130
|
+
end
|
|
2131
|
+
|
|
2132
|
+
it "returns the correct hash" do
|
|
2133
|
+
expect(tally).to eq(
|
|
2134
|
+
[1, 2] => 2,
|
|
2135
|
+
[1, 3] => 1
|
|
2136
|
+
)
|
|
2137
|
+
end
|
|
2138
|
+
end
|
|
2139
|
+
|
|
2140
|
+
context "when going multiple levels deep in an array" do
|
|
2141
|
+
|
|
2142
|
+
let(:tally) do
|
|
2143
|
+
context.tally("genres.y.z")
|
|
2144
|
+
end
|
|
2145
|
+
|
|
2146
|
+
it "returns the correct hash" do
|
|
2147
|
+
expect(tally).to eq(
|
|
2148
|
+
[1, 2] => 2,
|
|
2149
|
+
[1, 3] => 1
|
|
2150
|
+
)
|
|
2151
|
+
end
|
|
704
2152
|
end
|
|
705
2153
|
|
|
706
|
-
|
|
707
|
-
|
|
2154
|
+
context "when tallying deeply nested arrays/embedded associations" do
|
|
2155
|
+
|
|
2156
|
+
let(:person1) { Person.new(addresses: [ Address.new(code: Code.new(deepest: Deepest.new(array: [ { y: { z: 1 } }, { y: { z: 2 } } ]))) ]) }
|
|
2157
|
+
let(:person2) { Person.new(addresses: [ Address.new(code: Code.new(deepest: Deepest.new(array: [ { y: { z: 1 } }, { y: { z: 2 } } ]))) ]) }
|
|
2158
|
+
let(:person3) { Person.new(addresses: [ Address.new(code: Code.new(deepest: Deepest.new(array: [ { y: { z: 1 } }, { y: { z: 3 } } ]))) ]) }
|
|
2159
|
+
|
|
2160
|
+
let(:criteria) do
|
|
2161
|
+
Person.all.tap do |crit|
|
|
2162
|
+
crit.documents = [ person1, person2, person3 ]
|
|
2163
|
+
end
|
|
2164
|
+
end
|
|
2165
|
+
|
|
2166
|
+
let(:tally) do
|
|
2167
|
+
context.tally("addresses.code.deepest.array.y.z")
|
|
2168
|
+
end
|
|
2169
|
+
|
|
2170
|
+
it "returns the correct hash" do
|
|
2171
|
+
expect(tally).to eq(
|
|
2172
|
+
[ [ 1, 2 ] ] => 2,
|
|
2173
|
+
[ [ 1, 3 ] ] => 1
|
|
2174
|
+
)
|
|
2175
|
+
end
|
|
708
2176
|
end
|
|
709
2177
|
|
|
710
|
-
context "when
|
|
2178
|
+
context "when tallying deeply nested arrays/embedded associations" do
|
|
2179
|
+
|
|
2180
|
+
let(:person1) do
|
|
2181
|
+
Person.new(addresses: [ Address.new(code: Code.new(deepest: Deepest.new(array: [ { y: { z: 1 } }, { y: { z: 2 } } ]))),
|
|
2182
|
+
Address.new(code: Code.new(deepest: Deepest.new(array: [ { y: { z: 1 } }, { y: { z: 2 } } ]))) ])
|
|
2183
|
+
end
|
|
2184
|
+
|
|
2185
|
+
let(:person2) do
|
|
2186
|
+
Person.new(addresses: [ Address.new(code: Code.new(deepest: Deepest.new(array: [ { y: { z: 1 } }, { y: { z: 2 } } ]))),
|
|
2187
|
+
Address.new(code: Code.new(deepest: Deepest.new(array: [ { y: { z: 1 } }, { y: { z: 2 } } ]))) ])
|
|
2188
|
+
end
|
|
711
2189
|
|
|
712
|
-
|
|
2190
|
+
let(:person3) do
|
|
2191
|
+
Person.new(addresses: [ Address.new(code: Code.new(deepest: Deepest.new(array: [ { y: { z: 1 } }, { y: { z: 3 } } ]))),
|
|
2192
|
+
Address.new(code: Code.new(deepest: Deepest.new(array: [ { y: { z: 1 } }, { y: { z: 3 } } ]))) ])
|
|
2193
|
+
end
|
|
713
2194
|
|
|
714
|
-
|
|
715
|
-
|
|
2195
|
+
let(:criteria) do
|
|
2196
|
+
Person.all.tap do |crit|
|
|
2197
|
+
crit.documents = [ person1, person2, person3 ]
|
|
716
2198
|
end
|
|
717
2199
|
end
|
|
718
2200
|
|
|
719
|
-
|
|
2201
|
+
let(:tally) do
|
|
2202
|
+
context.tally("addresses.code.deepest.array.y.z")
|
|
2203
|
+
end
|
|
720
2204
|
|
|
721
|
-
|
|
722
|
-
|
|
2205
|
+
it "returns the correct hash" do
|
|
2206
|
+
expect(tally).to eq(
|
|
2207
|
+
[ [ 1, 2 ], [ 1, 2 ] ] => 2,
|
|
2208
|
+
[ [ 1, 3 ], [ 1, 3 ] ] => 1
|
|
2209
|
+
)
|
|
2210
|
+
end
|
|
2211
|
+
end
|
|
2212
|
+
|
|
2213
|
+
context "when some keys are missing" do
|
|
2214
|
+
|
|
2215
|
+
let(:criteria) do
|
|
2216
|
+
Band.where(origin: "tally").all.tap do |crit|
|
|
2217
|
+
crit.documents = [ band1, band2, band3 ]
|
|
2218
|
+
3.times{ crit.documents << Band.new(origin: "tally") }
|
|
723
2219
|
end
|
|
2220
|
+
end
|
|
2221
|
+
|
|
2222
|
+
let(:tally) do
|
|
2223
|
+
context.tally(:name)
|
|
2224
|
+
end
|
|
2225
|
+
|
|
2226
|
+
it "returns the correct hash" do
|
|
2227
|
+
expect(tally).to eq(
|
|
2228
|
+
"Depeche Mode" => 1,
|
|
2229
|
+
"New Order" => 1,
|
|
2230
|
+
"10,000 Maniacs" => 1,
|
|
2231
|
+
nil => 3
|
|
2232
|
+
)
|
|
2233
|
+
end
|
|
2234
|
+
end
|
|
724
2235
|
|
|
725
|
-
|
|
726
|
-
|
|
2236
|
+
context "when the first element is an embeds_one" do
|
|
2237
|
+
let(:person1) { Person.create!(name: Name.new(translations: [ Translation.new(language: 1), Translation.new(language: 2) ])) }
|
|
2238
|
+
let(:person2) { Person.create!(name: Name.new(translations: [ Translation.new(language: 1), Translation.new(language: 2) ])) }
|
|
2239
|
+
let(:person3) { Person.create!(name: Name.new(translations: [ Translation.new(language: 1), Translation.new(language: 3) ])) }
|
|
2240
|
+
|
|
2241
|
+
let(:criteria) do
|
|
2242
|
+
Person.all.tap do |crit|
|
|
2243
|
+
crit.documents = [ person1, person2, person3 ]
|
|
727
2244
|
end
|
|
728
2245
|
end
|
|
2246
|
+
|
|
2247
|
+
let(:tally) do
|
|
2248
|
+
context.tally("name.translations.language")
|
|
2249
|
+
end
|
|
2250
|
+
|
|
2251
|
+
it "returns the correct hash" do
|
|
2252
|
+
expect(tally).to eq(
|
|
2253
|
+
[1, 2] => 2,
|
|
2254
|
+
[1, 3] => 1
|
|
2255
|
+
)
|
|
2256
|
+
end
|
|
2257
|
+
end
|
|
2258
|
+
end
|
|
2259
|
+
|
|
2260
|
+
describe '#inc' do
|
|
2261
|
+
|
|
2262
|
+
let(:criteria) do
|
|
2263
|
+
Address.all.tap do |crit|
|
|
2264
|
+
crit.documents = [ Address.new(number: 1),
|
|
2265
|
+
Address.new(number: 2),
|
|
2266
|
+
Address.new(number: 3) ]
|
|
2267
|
+
end
|
|
2268
|
+
end
|
|
2269
|
+
|
|
2270
|
+
let(:context) do
|
|
2271
|
+
described_class.new(criteria)
|
|
2272
|
+
end
|
|
2273
|
+
|
|
2274
|
+
it 'increases each member' do
|
|
2275
|
+
expect(context.inc(number: 10).collect(&:number)).to eql([11, 12, 13])
|
|
729
2276
|
end
|
|
730
2277
|
end
|
|
731
2278
|
|
|
@@ -753,34 +2300,52 @@ describe Mongoid::Contextual::Memory do
|
|
|
753
2300
|
described_class.new(criteria)
|
|
754
2301
|
end
|
|
755
2302
|
|
|
756
|
-
|
|
757
|
-
context.skip(1)
|
|
758
|
-
end
|
|
2303
|
+
context 'when there is no collation on the criteria' do
|
|
759
2304
|
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
2305
|
+
let!(:skip) do
|
|
2306
|
+
context.skip(1)
|
|
2307
|
+
end
|
|
763
2308
|
|
|
764
|
-
|
|
2309
|
+
it "returns the context" do
|
|
2310
|
+
expect(skip).to eq(context)
|
|
2311
|
+
end
|
|
765
2312
|
|
|
766
|
-
context "when
|
|
2313
|
+
context "when asking for all documents" do
|
|
767
2314
|
|
|
768
|
-
|
|
769
|
-
|
|
2315
|
+
context "when only a skip exists" do
|
|
2316
|
+
|
|
2317
|
+
it "skips the correct number" do
|
|
2318
|
+
expect(context.entries).to eq([ friedel, pfluger ])
|
|
2319
|
+
end
|
|
770
2320
|
end
|
|
771
|
-
end
|
|
772
2321
|
|
|
773
|
-
|
|
2322
|
+
context "when a skip and limit exist" do
|
|
774
2323
|
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
2324
|
+
before do
|
|
2325
|
+
skip.limit(1)
|
|
2326
|
+
end
|
|
778
2327
|
|
|
779
|
-
|
|
780
|
-
|
|
2328
|
+
it "applies the skip before the limit" do
|
|
2329
|
+
expect(context.entries).to eq([ friedel ])
|
|
2330
|
+
end
|
|
781
2331
|
end
|
|
782
2332
|
end
|
|
783
2333
|
end
|
|
2334
|
+
|
|
2335
|
+
context 'when there is a collation on the criteria' do
|
|
2336
|
+
|
|
2337
|
+
let(:criteria) do
|
|
2338
|
+
Address.all.tap do |crit|
|
|
2339
|
+
crit.documents = [ hobrecht, friedel, pfluger ]
|
|
2340
|
+
end.collation(locale: 'en_US', strength: 2)
|
|
2341
|
+
end
|
|
2342
|
+
|
|
2343
|
+
it "raises an exception" do
|
|
2344
|
+
expect {
|
|
2345
|
+
context.skip(1)
|
|
2346
|
+
}.to raise_exception(Mongoid::Errors::InMemoryCollationNotSupported)
|
|
2347
|
+
end
|
|
2348
|
+
end
|
|
784
2349
|
end
|
|
785
2350
|
|
|
786
2351
|
describe "#sort" do
|
|
@@ -816,11 +2381,11 @@ describe Mongoid::Contextual::Memory do
|
|
|
816
2381
|
end
|
|
817
2382
|
|
|
818
2383
|
it "sorts the documents" do
|
|
819
|
-
context.entries.
|
|
2384
|
+
expect(context.entries).to eq([ friedel, hobrecht, pfluger ])
|
|
820
2385
|
end
|
|
821
2386
|
|
|
822
2387
|
it "returns the context" do
|
|
823
|
-
sorted.
|
|
2388
|
+
expect(sorted).to eq(context)
|
|
824
2389
|
end
|
|
825
2390
|
end
|
|
826
2391
|
|
|
@@ -833,11 +2398,11 @@ describe Mongoid::Contextual::Memory do
|
|
|
833
2398
|
end
|
|
834
2399
|
|
|
835
2400
|
it "sorts the documents" do
|
|
836
|
-
context.entries.
|
|
2401
|
+
expect(context.entries).to eq([ pfluger, hobrecht, friedel ])
|
|
837
2402
|
end
|
|
838
2403
|
|
|
839
2404
|
it "returns the context" do
|
|
840
|
-
sorted.
|
|
2405
|
+
expect(sorted).to eq(context)
|
|
841
2406
|
end
|
|
842
2407
|
end
|
|
843
2408
|
|
|
@@ -853,11 +2418,11 @@ describe Mongoid::Contextual::Memory do
|
|
|
853
2418
|
end
|
|
854
2419
|
|
|
855
2420
|
it "sorts the documents" do
|
|
856
|
-
context.entries.
|
|
2421
|
+
expect(context.entries).to eq([ friedel, hobrecht, pfluger ])
|
|
857
2422
|
end
|
|
858
2423
|
|
|
859
2424
|
it "returns the context" do
|
|
860
|
-
sorted.
|
|
2425
|
+
expect(sorted).to eq(context)
|
|
861
2426
|
end
|
|
862
2427
|
end
|
|
863
2428
|
end
|
|
@@ -869,8 +2434,13 @@ describe Mongoid::Contextual::Memory do
|
|
|
869
2434
|
Address.new(street: "lenau", number: 5, name: "lenau")
|
|
870
2435
|
end
|
|
871
2436
|
|
|
2437
|
+
let(:kampuchea_krom) do
|
|
2438
|
+
Address.new(street: "kampuchea krom", number: 5, name: "kampuchea krom")
|
|
2439
|
+
end
|
|
2440
|
+
|
|
872
2441
|
before do
|
|
873
2442
|
criteria.documents.unshift(lenau)
|
|
2443
|
+
criteria.documents.unshift(kampuchea_krom)
|
|
874
2444
|
end
|
|
875
2445
|
|
|
876
2446
|
context "when the sort is ascending" do
|
|
@@ -880,11 +2450,11 @@ describe Mongoid::Contextual::Memory do
|
|
|
880
2450
|
end
|
|
881
2451
|
|
|
882
2452
|
it "sorts the documents" do
|
|
883
|
-
context.entries.
|
|
2453
|
+
expect(context.entries).to eq([ friedel, kampuchea_krom, lenau, pfluger, hobrecht ])
|
|
884
2454
|
end
|
|
885
2455
|
|
|
886
2456
|
it "returns the context" do
|
|
887
|
-
sorted.
|
|
2457
|
+
expect(sorted).to eq(context)
|
|
888
2458
|
end
|
|
889
2459
|
end
|
|
890
2460
|
|
|
@@ -895,11 +2465,11 @@ describe Mongoid::Contextual::Memory do
|
|
|
895
2465
|
end
|
|
896
2466
|
|
|
897
2467
|
it "sorts the documents" do
|
|
898
|
-
context.entries.
|
|
2468
|
+
expect(context.entries).to eq([ hobrecht, pfluger, lenau, kampuchea_krom, friedel ])
|
|
899
2469
|
end
|
|
900
2470
|
|
|
901
2471
|
it "returns the context" do
|
|
902
|
-
sorted.
|
|
2472
|
+
expect(sorted).to eq(context)
|
|
903
2473
|
end
|
|
904
2474
|
end
|
|
905
2475
|
end
|
|
@@ -911,11 +2481,11 @@ describe Mongoid::Contextual::Memory do
|
|
|
911
2481
|
end
|
|
912
2482
|
|
|
913
2483
|
it "does not sort the documents" do
|
|
914
|
-
context.entries.
|
|
2484
|
+
expect(context.entries).to eq([ hobrecht, friedel, pfluger ])
|
|
915
2485
|
end
|
|
916
2486
|
|
|
917
2487
|
it "returns the context" do
|
|
918
|
-
sorted.
|
|
2488
|
+
expect(sorted).to eq(context)
|
|
919
2489
|
end
|
|
920
2490
|
end
|
|
921
2491
|
|
|
@@ -926,7 +2496,22 @@ describe Mongoid::Contextual::Memory do
|
|
|
926
2496
|
end
|
|
927
2497
|
|
|
928
2498
|
it "sorts the documents" do
|
|
929
|
-
context.entries.
|
|
2499
|
+
expect(context.entries).to eq([ friedel, hobrecht, pfluger ])
|
|
2500
|
+
end
|
|
2501
|
+
end
|
|
2502
|
+
|
|
2503
|
+
context 'when there is a collation on the criteria' do
|
|
2504
|
+
|
|
2505
|
+
let(:criteria) do
|
|
2506
|
+
Address.all.tap do |crit|
|
|
2507
|
+
crit.documents = [ hobrecht, friedel, pfluger ]
|
|
2508
|
+
end.collation(locale: 'en_US', strength: 2)
|
|
2509
|
+
end
|
|
2510
|
+
|
|
2511
|
+
it "raises an exception" do
|
|
2512
|
+
expect {
|
|
2513
|
+
context.sort(state: 1)
|
|
2514
|
+
}.to raise_exception(Mongoid::Errors::InMemoryCollationNotSupported)
|
|
930
2515
|
end
|
|
931
2516
|
end
|
|
932
2517
|
end
|
|
@@ -934,19 +2519,19 @@ describe Mongoid::Contextual::Memory do
|
|
|
934
2519
|
describe "#update" do
|
|
935
2520
|
|
|
936
2521
|
let(:person) do
|
|
937
|
-
Person.create
|
|
2522
|
+
Person.create!
|
|
938
2523
|
end
|
|
939
2524
|
|
|
940
2525
|
let(:hobrecht) do
|
|
941
|
-
person.addresses.create(street: "hobrecht")
|
|
2526
|
+
person.addresses.create!(street: "hobrecht")
|
|
942
2527
|
end
|
|
943
2528
|
|
|
944
2529
|
let(:friedel) do
|
|
945
|
-
person.addresses.create(street: "friedel")
|
|
2530
|
+
person.addresses.create!(street: "friedel")
|
|
946
2531
|
end
|
|
947
2532
|
|
|
948
2533
|
let(:pfluger) do
|
|
949
|
-
person.addresses.create(street: "pfluger")
|
|
2534
|
+
person.addresses.create!(street: "pfluger")
|
|
950
2535
|
end
|
|
951
2536
|
|
|
952
2537
|
context "when the documents are embedded one level" do
|
|
@@ -968,29 +2553,29 @@ describe Mongoid::Contextual::Memory do
|
|
|
968
2553
|
end
|
|
969
2554
|
|
|
970
2555
|
it "updates the first matching document" do
|
|
971
|
-
hobrecht.number.
|
|
2556
|
+
expect(hobrecht.number).to eq(5)
|
|
972
2557
|
end
|
|
973
2558
|
|
|
974
2559
|
it "does not update the last matching document" do
|
|
975
|
-
friedel.number.
|
|
2560
|
+
expect(friedel.number).to be_nil
|
|
976
2561
|
end
|
|
977
2562
|
|
|
978
2563
|
it "does not update non matching docs" do
|
|
979
|
-
pfluger.number.
|
|
2564
|
+
expect(pfluger.number).to be_nil
|
|
980
2565
|
end
|
|
981
2566
|
|
|
982
2567
|
context "when reloading the embedded documents" do
|
|
983
2568
|
|
|
984
2569
|
it "updates the first matching document" do
|
|
985
|
-
hobrecht.reload.number.
|
|
2570
|
+
expect(hobrecht.reload.number).to eq(5)
|
|
986
2571
|
end
|
|
987
2572
|
|
|
988
2573
|
it "updates the last matching document" do
|
|
989
|
-
friedel.reload.number.
|
|
2574
|
+
expect(friedel.reload.number).to be_nil
|
|
990
2575
|
end
|
|
991
2576
|
|
|
992
2577
|
it "does not update non matching docs" do
|
|
993
|
-
pfluger.reload.number.
|
|
2578
|
+
expect(pfluger.reload.number).to be_nil
|
|
994
2579
|
end
|
|
995
2580
|
end
|
|
996
2581
|
end
|
|
@@ -998,7 +2583,7 @@ describe Mongoid::Contextual::Memory do
|
|
|
998
2583
|
context "when no attributes are provided" do
|
|
999
2584
|
|
|
1000
2585
|
it "returns false" do
|
|
1001
|
-
context.update.
|
|
2586
|
+
expect(context.update).to be false
|
|
1002
2587
|
end
|
|
1003
2588
|
end
|
|
1004
2589
|
end
|
|
@@ -1006,11 +2591,11 @@ describe Mongoid::Contextual::Memory do
|
|
|
1006
2591
|
context "when the documents are embedded multiple levels" do
|
|
1007
2592
|
|
|
1008
2593
|
let!(:home) do
|
|
1009
|
-
hobrecht.locations.create(name: "home")
|
|
2594
|
+
hobrecht.locations.create!(name: "home")
|
|
1010
2595
|
end
|
|
1011
2596
|
|
|
1012
2597
|
let!(:work) do
|
|
1013
|
-
hobrecht.locations.create(name: "work")
|
|
2598
|
+
hobrecht.locations.create!(name: "work")
|
|
1014
2599
|
end
|
|
1015
2600
|
|
|
1016
2601
|
let(:criteria) do
|
|
@@ -1030,21 +2615,21 @@ describe Mongoid::Contextual::Memory do
|
|
|
1030
2615
|
end
|
|
1031
2616
|
|
|
1032
2617
|
it "updates the first matching document" do
|
|
1033
|
-
work.number.
|
|
2618
|
+
expect(work.number).to eq(5)
|
|
1034
2619
|
end
|
|
1035
2620
|
|
|
1036
2621
|
it "does not update non matching docs" do
|
|
1037
|
-
home.number.
|
|
2622
|
+
expect(home.number).to be_nil
|
|
1038
2623
|
end
|
|
1039
2624
|
|
|
1040
2625
|
context "when reloading the embedded documents" do
|
|
1041
2626
|
|
|
1042
2627
|
it "updates the first matching document" do
|
|
1043
|
-
work.reload.number.
|
|
2628
|
+
expect(work.reload.number).to eq(5)
|
|
1044
2629
|
end
|
|
1045
2630
|
|
|
1046
2631
|
it "does not update non matching docs" do
|
|
1047
|
-
home.reload.number.
|
|
2632
|
+
expect(home.reload.number).to be_nil
|
|
1048
2633
|
end
|
|
1049
2634
|
end
|
|
1050
2635
|
end
|
|
@@ -1052,34 +2637,60 @@ describe Mongoid::Contextual::Memory do
|
|
|
1052
2637
|
context "when no attributes are provided" do
|
|
1053
2638
|
|
|
1054
2639
|
it "returns false" do
|
|
1055
|
-
context.update.
|
|
2640
|
+
expect(context.update).to be false
|
|
1056
2641
|
end
|
|
1057
2642
|
end
|
|
1058
2643
|
end
|
|
2644
|
+
|
|
2645
|
+
context 'when there is a collation on the criteria' do
|
|
2646
|
+
|
|
2647
|
+
let(:criteria) do
|
|
2648
|
+
Address.all.collation(locale: 'en_US', strength: 2)
|
|
2649
|
+
end
|
|
2650
|
+
|
|
2651
|
+
it "raises an exception" do
|
|
2652
|
+
expect {
|
|
2653
|
+
context.update
|
|
2654
|
+
}.to raise_exception(Mongoid::Errors::InMemoryCollationNotSupported)
|
|
2655
|
+
end
|
|
2656
|
+
end
|
|
1059
2657
|
end
|
|
1060
2658
|
|
|
1061
2659
|
describe "#update_all" do
|
|
1062
2660
|
|
|
1063
2661
|
let(:person) do
|
|
1064
|
-
Person.create
|
|
2662
|
+
Person.create!
|
|
1065
2663
|
end
|
|
1066
2664
|
|
|
1067
2665
|
let(:hobrecht) do
|
|
1068
|
-
person.addresses.create(street: "hobrecht")
|
|
2666
|
+
person.addresses.create!(street: "hobrecht")
|
|
1069
2667
|
end
|
|
1070
2668
|
|
|
1071
2669
|
let(:friedel) do
|
|
1072
|
-
person.addresses.create(street: "friedel")
|
|
2670
|
+
person.addresses.create!(street: "friedel")
|
|
1073
2671
|
end
|
|
1074
2672
|
|
|
1075
2673
|
let(:pfluger) do
|
|
1076
|
-
person.addresses.create(street: "pfluger")
|
|
2674
|
+
person.addresses.create!(street: "pfluger")
|
|
2675
|
+
end
|
|
2676
|
+
|
|
2677
|
+
context 'when there is a collation on the criteria' do
|
|
2678
|
+
|
|
2679
|
+
let(:criteria) do
|
|
2680
|
+
Address.all.collation(locale: 'en_US', strength: 2)
|
|
2681
|
+
end
|
|
2682
|
+
|
|
2683
|
+
it "raises an exception" do
|
|
2684
|
+
expect {
|
|
2685
|
+
context.update_all({})
|
|
2686
|
+
}.to raise_exception(Mongoid::Errors::InMemoryCollationNotSupported)
|
|
2687
|
+
end
|
|
1077
2688
|
end
|
|
1078
2689
|
|
|
1079
2690
|
context "when the documents are empty" do
|
|
1080
2691
|
|
|
1081
2692
|
let(:person_two) do
|
|
1082
|
-
Person.create
|
|
2693
|
+
Person.create!
|
|
1083
2694
|
end
|
|
1084
2695
|
|
|
1085
2696
|
let(:criteria) do
|
|
@@ -1091,7 +2702,7 @@ describe Mongoid::Contextual::Memory do
|
|
|
1091
2702
|
end
|
|
1092
2703
|
|
|
1093
2704
|
it "returns false" do
|
|
1094
|
-
context.update_all({}).
|
|
2705
|
+
expect(context.update_all({})).to be false
|
|
1095
2706
|
end
|
|
1096
2707
|
end
|
|
1097
2708
|
|
|
@@ -1114,15 +2725,15 @@ describe Mongoid::Contextual::Memory do
|
|
|
1114
2725
|
end
|
|
1115
2726
|
|
|
1116
2727
|
it "updates the first matching document" do
|
|
1117
|
-
hobrecht.suite.
|
|
2728
|
+
expect(hobrecht.suite).to eq("10B")
|
|
1118
2729
|
end
|
|
1119
2730
|
|
|
1120
2731
|
it "updates the last matching document" do
|
|
1121
|
-
friedel.suite.
|
|
2732
|
+
expect(friedel.suite).to eq("10B")
|
|
1122
2733
|
end
|
|
1123
2734
|
|
|
1124
2735
|
it "does not update non matching docs" do
|
|
1125
|
-
pfluger.suite.
|
|
2736
|
+
expect(pfluger.suite).to be_nil
|
|
1126
2737
|
end
|
|
1127
2738
|
end
|
|
1128
2739
|
|
|
@@ -1133,29 +2744,29 @@ describe Mongoid::Contextual::Memory do
|
|
|
1133
2744
|
end
|
|
1134
2745
|
|
|
1135
2746
|
it "updates the first matching document" do
|
|
1136
|
-
hobrecht.number.
|
|
2747
|
+
expect(hobrecht.number).to eq(5)
|
|
1137
2748
|
end
|
|
1138
2749
|
|
|
1139
2750
|
it "updates the last matching document" do
|
|
1140
|
-
friedel.number.
|
|
2751
|
+
expect(friedel.number).to eq(5)
|
|
1141
2752
|
end
|
|
1142
2753
|
|
|
1143
2754
|
it "does not update non matching docs" do
|
|
1144
|
-
pfluger.number.
|
|
2755
|
+
expect(pfluger.number).to be_nil
|
|
1145
2756
|
end
|
|
1146
2757
|
|
|
1147
2758
|
context "when reloading the embedded documents" do
|
|
1148
2759
|
|
|
1149
2760
|
it "updates the first matching document" do
|
|
1150
|
-
hobrecht.reload.number.
|
|
2761
|
+
expect(hobrecht.reload.number).to eq(5)
|
|
1151
2762
|
end
|
|
1152
2763
|
|
|
1153
2764
|
it "updates the last matching document" do
|
|
1154
|
-
friedel.reload.number.
|
|
2765
|
+
expect(friedel.reload.number).to eq(5)
|
|
1155
2766
|
end
|
|
1156
2767
|
|
|
1157
2768
|
it "does not update non matching docs" do
|
|
1158
|
-
pfluger.reload.number.
|
|
2769
|
+
expect(pfluger.reload.number).to be_nil
|
|
1159
2770
|
end
|
|
1160
2771
|
end
|
|
1161
2772
|
|
|
@@ -1166,7 +2777,7 @@ describe Mongoid::Contextual::Memory do
|
|
|
1166
2777
|
end
|
|
1167
2778
|
|
|
1168
2779
|
it "does not error on the update" do
|
|
1169
|
-
hobrecht.number.
|
|
2780
|
+
expect(hobrecht.number).to eq(5)
|
|
1170
2781
|
end
|
|
1171
2782
|
end
|
|
1172
2783
|
end
|
|
@@ -1174,7 +2785,7 @@ describe Mongoid::Contextual::Memory do
|
|
|
1174
2785
|
context "when no attributes are provided" do
|
|
1175
2786
|
|
|
1176
2787
|
it "returns false" do
|
|
1177
|
-
context.update_all.
|
|
2788
|
+
expect(context.update_all).to be false
|
|
1178
2789
|
end
|
|
1179
2790
|
end
|
|
1180
2791
|
end
|
|
@@ -1182,11 +2793,11 @@ describe Mongoid::Contextual::Memory do
|
|
|
1182
2793
|
context "when the documents are embedded multiple levels" do
|
|
1183
2794
|
|
|
1184
2795
|
let!(:home) do
|
|
1185
|
-
hobrecht.locations.create(name: "home")
|
|
2796
|
+
hobrecht.locations.create!(name: "home")
|
|
1186
2797
|
end
|
|
1187
2798
|
|
|
1188
2799
|
let!(:work) do
|
|
1189
|
-
hobrecht.locations.create(name: "work")
|
|
2800
|
+
hobrecht.locations.create!(name: "work")
|
|
1190
2801
|
end
|
|
1191
2802
|
|
|
1192
2803
|
let(:criteria) do
|
|
@@ -1206,21 +2817,21 @@ describe Mongoid::Contextual::Memory do
|
|
|
1206
2817
|
end
|
|
1207
2818
|
|
|
1208
2819
|
it "updates the first matching document" do
|
|
1209
|
-
work.number.
|
|
2820
|
+
expect(work.number).to eq(5)
|
|
1210
2821
|
end
|
|
1211
2822
|
|
|
1212
2823
|
it "does not update non matching docs" do
|
|
1213
|
-
home.number.
|
|
2824
|
+
expect(home.number).to be_nil
|
|
1214
2825
|
end
|
|
1215
2826
|
|
|
1216
2827
|
context "when reloading the embedded documents" do
|
|
1217
2828
|
|
|
1218
2829
|
it "updates the first matching document" do
|
|
1219
|
-
work.reload.number.
|
|
2830
|
+
expect(work.reload.number).to eq(5)
|
|
1220
2831
|
end
|
|
1221
2832
|
|
|
1222
2833
|
it "does not update non matching docs" do
|
|
1223
|
-
home.reload.number.
|
|
2834
|
+
expect(home.reload.number).to be_nil
|
|
1224
2835
|
end
|
|
1225
2836
|
end
|
|
1226
2837
|
end
|
|
@@ -1228,7 +2839,7 @@ describe Mongoid::Contextual::Memory do
|
|
|
1228
2839
|
context "when no attributes are provided" do
|
|
1229
2840
|
|
|
1230
2841
|
it "returns false" do
|
|
1231
|
-
context.update_all.
|
|
2842
|
+
expect(context.update_all).to be false
|
|
1232
2843
|
end
|
|
1233
2844
|
end
|
|
1234
2845
|
end
|