mongoid 7.0.10 → 7.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +30 -30
- data/README.md +32 -19
- data/Rakefile +51 -7
- data/lib/config/locales/en.yml +129 -70
- data/lib/mongoid/association/accessors.rb +143 -80
- data/lib/mongoid/association/bindable.rb +7 -26
- data/lib/mongoid/association/builders.rb +4 -12
- data/lib/mongoid/association/constrainable.rb +5 -6
- data/lib/mongoid/association/depending.rb +9 -18
- data/lib/mongoid/association/eager_loadable.rb +2 -3
- data/lib/mongoid/association/embedded/batchable.rb +16 -42
- data/lib/mongoid/association/embedded/cyclic.rb +10 -17
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +3 -7
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +7 -4
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +14 -24
- data/lib/mongoid/association/embedded/embedded_in.rb +6 -26
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +4 -8
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +8 -5
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +90 -93
- data/lib/mongoid/association/embedded/embeds_many.rb +6 -34
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +4 -8
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +9 -6
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +42 -27
- data/lib/mongoid/association/embedded/embeds_one.rb +6 -30
- data/lib/mongoid/association/embedded.rb +2 -0
- data/lib/mongoid/association/macros.rb +44 -41
- data/lib/mongoid/association/many.rb +16 -30
- data/lib/mongoid/association/marshalable.rb +3 -6
- data/lib/mongoid/association/nested/many.rb +18 -27
- data/lib/mongoid/association/nested/nested_buildable.rb +5 -11
- data/lib/mongoid/association/nested/one.rb +16 -27
- data/lib/mongoid/association/nested.rb +3 -3
- data/lib/mongoid/association/one.rb +4 -11
- data/lib/mongoid/association/options.rb +8 -38
- data/lib/mongoid/association/proxy.rb +37 -36
- data/lib/mongoid/association/referenced/auto_save.rb +5 -11
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +4 -9
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +11 -9
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +40 -3
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +16 -27
- data/lib/mongoid/association/referenced/belongs_to.rb +14 -36
- data/lib/mongoid/association/referenced/counter_cache.rb +4 -15
- data/lib/mongoid/association/referenced/eager.rb +39 -38
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +12 -11
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +37 -57
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +23 -43
- data/lib/mongoid/association/referenced/has_many/binding.rb +3 -6
- data/lib/mongoid/association/referenced/has_many/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +444 -456
- data/lib/mongoid/association/referenced/has_many/proxy.rb +74 -107
- data/lib/mongoid/association/referenced/has_many.rb +18 -42
- data/lib/mongoid/association/referenced/has_one/binding.rb +4 -9
- data/lib/mongoid/association/referenced/has_one/buildable.rb +20 -6
- data/lib/mongoid/association/referenced/has_one/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +13 -26
- data/lib/mongoid/association/referenced/has_one/proxy.rb +23 -25
- data/lib/mongoid/association/referenced/has_one.rb +13 -33
- data/lib/mongoid/association/referenced/syncable.rb +7 -22
- data/lib/mongoid/association/referenced.rb +2 -0
- data/lib/mongoid/association/reflections.rb +7 -6
- data/lib/mongoid/association/relatable.rb +18 -74
- data/lib/mongoid/association.rb +8 -22
- data/lib/mongoid/atomic/modifiers.rb +27 -51
- data/lib/mongoid/atomic/paths/embedded/many.rb +4 -7
- data/lib/mongoid/atomic/paths/embedded/one.rb +4 -7
- data/lib/mongoid/atomic/paths/embedded.rb +2 -3
- data/lib/mongoid/atomic/paths/root.rb +4 -7
- data/lib/mongoid/atomic/paths.rb +2 -1
- data/lib/mongoid/atomic.rb +29 -44
- data/lib/mongoid/attributes/dynamic.rb +3 -18
- data/lib/mongoid/attributes/nested.rb +7 -10
- data/lib/mongoid/attributes/processing.rb +9 -24
- data/lib/mongoid/attributes/projector.rb +119 -0
- data/lib/mongoid/attributes/readonly.rb +3 -6
- data/lib/mongoid/attributes.rb +46 -60
- data/lib/mongoid/cacheable.rb +6 -9
- data/lib/mongoid/changeable.rb +6 -60
- data/lib/mongoid/clients/factory.rb +42 -17
- data/lib/mongoid/clients/options.rb +10 -13
- data/lib/mongoid/clients/sessions.rb +2 -6
- data/lib/mongoid/clients/storage_options.rb +7 -12
- data/lib/mongoid/clients/validators/storage.rb +2 -9
- data/lib/mongoid/clients/validators.rb +2 -1
- data/lib/mongoid/clients.rb +3 -10
- data/lib/mongoid/composable.rb +5 -9
- data/lib/mongoid/config/environment.rb +15 -6
- data/lib/mongoid/config/options.rb +20 -23
- data/lib/mongoid/config/validators/client.rb +2 -17
- data/lib/mongoid/config/validators/option.rb +2 -3
- data/lib/mongoid/config/validators.rb +2 -1
- data/lib/mongoid/config.rb +112 -41
- data/lib/mongoid/contextual/aggregable/memory.rb +17 -12
- data/lib/mongoid/contextual/aggregable/mongo.rb +25 -26
- data/lib/mongoid/contextual/aggregable/none.rb +65 -0
- data/lib/mongoid/contextual/aggregable.rb +17 -0
- data/lib/mongoid/contextual/atomic.rb +29 -31
- data/lib/mongoid/contextual/command.rb +2 -5
- data/lib/mongoid/contextual/geo_near.rb +6 -37
- data/lib/mongoid/contextual/map_reduce.rb +5 -33
- data/lib/mongoid/contextual/memory.rb +8 -61
- data/lib/mongoid/contextual/mongo.rb +160 -82
- data/lib/mongoid/contextual/none.rb +44 -28
- data/lib/mongoid/contextual/queryable.rb +2 -3
- data/lib/mongoid/contextual.rb +7 -9
- data/lib/mongoid/copyable.rb +11 -10
- data/lib/mongoid/criteria/findable.rb +12 -15
- data/lib/mongoid/criteria/includable.rb +8 -15
- data/lib/mongoid/criteria/inspectable.rb +2 -3
- data/lib/mongoid/criteria/marshalable.rb +2 -5
- data/lib/mongoid/criteria/modifiable.rb +2 -19
- data/lib/mongoid/criteria/options.rb +2 -3
- data/lib/mongoid/criteria/permission.rb +2 -1
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -13
- data/lib/mongoid/criteria/queryable/expandable.rb +68 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +4 -27
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -4
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +3 -4
- data/lib/mongoid/criteria/queryable/extensions/date.rb +3 -8
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +5 -11
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +3 -26
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +3 -14
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +3 -12
- data/lib/mongoid/criteria/queryable/extensions/object.rb +4 -29
- data/lib/mongoid/criteria/queryable/extensions/range.rb +41 -17
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +6 -13
- data/lib/mongoid/criteria/queryable/extensions/set.rb +3 -4
- data/lib/mongoid/criteria/queryable/extensions/string.rb +3 -18
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -10
- data/lib/mongoid/criteria/queryable/extensions/time.rb +3 -8
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +3 -8
- data/lib/mongoid/criteria/queryable/extensions.rb +1 -4
- data/lib/mongoid/criteria/queryable/key.rb +36 -21
- data/lib/mongoid/criteria/queryable/macroable.rb +3 -4
- data/lib/mongoid/criteria/queryable/mergeable.rb +179 -40
- data/lib/mongoid/criteria/queryable/optional.rb +5 -48
- data/lib/mongoid/criteria/queryable/options.rb +2 -19
- data/lib/mongoid/criteria/queryable/pipeline.rb +5 -15
- data/lib/mongoid/criteria/queryable/selectable.rb +414 -162
- data/lib/mongoid/criteria/queryable/selector.rb +36 -24
- data/lib/mongoid/criteria/queryable/smash.rb +2 -11
- data/lib/mongoid/criteria/queryable/storable.rb +237 -0
- data/lib/mongoid/criteria/queryable.rb +7 -9
- data/lib/mongoid/criteria/scopable.rb +27 -19
- data/lib/mongoid/criteria.rb +79 -72
- data/lib/mongoid/document.rb +24 -73
- data/lib/mongoid/equality.rb +29 -12
- data/lib/mongoid/errors/ambiguous_relationship.rb +4 -5
- data/lib/mongoid/errors/callback.rb +2 -3
- data/lib/mongoid/errors/criteria_argument_required.rb +18 -0
- data/lib/mongoid/errors/delete_restriction.rb +10 -13
- data/lib/mongoid/errors/document_not_destroyed.rb +4 -7
- data/lib/mongoid/errors/document_not_found.rb +2 -9
- data/lib/mongoid/errors/eager_load.rb +6 -5
- data/lib/mongoid/errors/empty_config_file.rb +25 -0
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +2 -3
- data/lib/mongoid/errors/invalid_collection.rb +2 -1
- data/lib/mongoid/errors/invalid_config_file.rb +25 -0
- data/lib/mongoid/errors/invalid_config_option.rb +2 -3
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +2 -3
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +24 -0
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +25 -0
- data/lib/mongoid/errors/invalid_expression_operator.rb +27 -0
- data/lib/mongoid/errors/invalid_field.rb +2 -5
- data/lib/mongoid/errors/invalid_field_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_field_option.rb +2 -3
- data/lib/mongoid/errors/invalid_find.rb +2 -3
- data/lib/mongoid/errors/invalid_includes.rb +2 -3
- data/lib/mongoid/errors/invalid_index.rb +2 -3
- data/lib/mongoid/errors/invalid_options.rb +4 -5
- data/lib/mongoid/errors/invalid_path.rb +2 -3
- data/lib/mongoid/errors/invalid_persistence_option.rb +2 -5
- data/lib/mongoid/errors/invalid_query.rb +40 -0
- data/lib/mongoid/errors/invalid_relation.rb +4 -9
- data/lib/mongoid/errors/invalid_relation_option.rb +4 -5
- data/lib/mongoid/errors/invalid_scope.rb +2 -3
- data/lib/mongoid/errors/invalid_session_use.rb +3 -6
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +6 -5
- data/lib/mongoid/errors/invalid_storage_options.rb +2 -3
- data/lib/mongoid/errors/invalid_storage_parent.rb +2 -3
- data/lib/mongoid/errors/invalid_time.rb +2 -3
- data/lib/mongoid/errors/invalid_value.rb +2 -1
- data/lib/mongoid/errors/inverse_not_found.rb +3 -4
- data/lib/mongoid/errors/mixed_client_configuration.rb +2 -3
- data/lib/mongoid/errors/mixed_relations.rb +2 -3
- data/lib/mongoid/errors/mongoid_error.rb +3 -10
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +3 -4
- data/lib/mongoid/errors/no_client_config.rb +4 -5
- data/lib/mongoid/errors/no_client_database.rb +2 -3
- data/lib/mongoid/errors/no_client_hosts.rb +2 -3
- data/lib/mongoid/errors/no_clients_config.rb +2 -3
- data/lib/mongoid/errors/no_default_client.rb +3 -4
- data/lib/mongoid/errors/no_environment.rb +2 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +2 -3
- data/lib/mongoid/errors/no_metadata.rb +2 -3
- data/lib/mongoid/errors/no_parent.rb +2 -3
- data/lib/mongoid/errors/readonly_attribute.rb +2 -3
- data/lib/mongoid/errors/readonly_document.rb +3 -6
- data/lib/mongoid/errors/scope_overwrite.rb +2 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +2 -0
- data/lib/mongoid/errors/unknown_attribute.rb +2 -3
- data/lib/mongoid/errors/unknown_model.rb +2 -3
- data/lib/mongoid/errors/unsaved_document.rb +3 -2
- data/lib/mongoid/errors/unsupported_javascript.rb +2 -3
- data/lib/mongoid/errors/validations.rb +2 -1
- data/lib/mongoid/errors.rb +12 -1
- data/lib/mongoid/evolvable.rb +4 -5
- data/lib/mongoid/extensions/array.rb +28 -37
- data/lib/mongoid/extensions/big_decimal.rb +2 -11
- data/lib/mongoid/extensions/boolean.rb +3 -5
- data/lib/mongoid/extensions/date.rb +13 -12
- data/lib/mongoid/extensions/date_time.rb +4 -12
- data/lib/mongoid/extensions/decimal128.rb +2 -5
- data/lib/mongoid/extensions/false_class.rb +4 -7
- data/lib/mongoid/extensions/float.rb +5 -10
- data/lib/mongoid/extensions/hash.rb +47 -34
- data/lib/mongoid/extensions/integer.rb +5 -12
- data/lib/mongoid/extensions/module.rb +2 -3
- data/lib/mongoid/extensions/nil_class.rb +2 -5
- data/lib/mongoid/extensions/object.rb +17 -44
- data/lib/mongoid/extensions/object_id.rb +2 -7
- data/lib/mongoid/extensions/range.rb +2 -11
- data/lib/mongoid/extensions/regexp.rb +2 -3
- data/lib/mongoid/extensions/set.rb +2 -7
- data/lib/mongoid/extensions/string.rb +19 -39
- data/lib/mongoid/extensions/symbol.rb +2 -7
- data/lib/mongoid/extensions/time.rb +12 -9
- data/lib/mongoid/extensions/time_with_zone.rb +25 -7
- data/lib/mongoid/extensions/true_class.rb +4 -7
- data/lib/mongoid/extensions.rb +18 -3
- data/lib/mongoid/factory.rb +52 -13
- data/lib/mongoid/fields/foreign_key.rb +3 -22
- data/lib/mongoid/fields/localized.rb +2 -11
- data/lib/mongoid/fields/standard.rb +6 -36
- data/lib/mongoid/fields/validators/macro.rb +36 -18
- data/lib/mongoid/fields/validators.rb +2 -1
- data/lib/mongoid/fields.rb +113 -63
- data/lib/mongoid/findable.rb +59 -23
- data/lib/mongoid/indexable/specification.rb +3 -16
- data/lib/mongoid/indexable/validators/options.rb +2 -7
- data/lib/mongoid/indexable.rb +6 -21
- data/lib/mongoid/inspectable.rb +4 -11
- data/lib/mongoid/interceptable.rb +13 -30
- data/lib/mongoid/loggable.rb +13 -16
- data/lib/mongoid/matchable.rb +2 -153
- data/lib/mongoid/matcher/all.rb +22 -0
- data/lib/mongoid/matcher/and.rb +21 -0
- data/lib/mongoid/matcher/bits.rb +41 -0
- data/lib/mongoid/matcher/bits_all_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_all_set.rb +20 -0
- data/lib/mongoid/matcher/bits_any_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_any_set.rb +20 -0
- data/lib/mongoid/matcher/elem_match.rb +36 -0
- data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
- data/lib/mongoid/matcher/eq.rb +11 -0
- data/lib/mongoid/matcher/eq_impl.rb +67 -0
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +26 -0
- data/lib/mongoid/matcher/exists.rb +15 -0
- data/lib/mongoid/matcher/expression.rb +35 -0
- data/lib/mongoid/matcher/expression_operator.rb +19 -0
- data/lib/mongoid/matcher/field_expression.rb +62 -0
- data/lib/mongoid/matcher/field_operator.rb +54 -0
- data/lib/mongoid/matcher/gt.rb +17 -0
- data/lib/mongoid/matcher/gte.rb +17 -0
- data/lib/mongoid/matcher/in.rb +25 -0
- data/lib/mongoid/matcher/lt.rb +17 -0
- data/lib/mongoid/matcher/lte.rb +17 -0
- data/lib/mongoid/matcher/mod.rb +17 -0
- data/lib/mongoid/matcher/ne.rb +16 -0
- data/lib/mongoid/matcher/nin.rb +11 -0
- data/lib/mongoid/matcher/nor.rb +25 -0
- data/lib/mongoid/matcher/not.rb +29 -0
- data/lib/mongoid/matcher/or.rb +21 -0
- data/lib/mongoid/matcher/regex.rb +41 -0
- data/lib/mongoid/matcher/size.rb +26 -0
- data/lib/mongoid/matcher/type.rb +99 -0
- data/lib/mongoid/matcher.rb +110 -0
- data/lib/mongoid/persistable/creatable.rb +4 -21
- data/lib/mongoid/persistable/deletable.rb +5 -21
- data/lib/mongoid/persistable/destroyable.rb +11 -10
- data/lib/mongoid/persistable/incrementable.rb +6 -7
- data/lib/mongoid/persistable/logical.rb +4 -6
- data/lib/mongoid/persistable/poppable.rb +3 -6
- data/lib/mongoid/persistable/pullable.rb +3 -8
- data/lib/mongoid/persistable/pushable.rb +3 -8
- data/lib/mongoid/persistable/renamable.rb +10 -8
- data/lib/mongoid/persistable/savable.rb +3 -8
- data/lib/mongoid/persistable/settable.rb +3 -6
- data/lib/mongoid/persistable/unsettable.rb +8 -8
- data/lib/mongoid/persistable/updatable.rb +32 -20
- data/lib/mongoid/persistable/upsertable.rb +3 -8
- data/lib/mongoid/persistable.rb +133 -38
- data/lib/mongoid/persistence_context.rb +23 -36
- data/lib/mongoid/positional.rb +2 -5
- data/lib/mongoid/query_cache.rb +118 -103
- data/lib/mongoid/railtie.rb +3 -16
- data/lib/mongoid/railties/controller_runtime.rb +3 -1
- data/lib/mongoid/railties/database.rake +9 -0
- data/lib/mongoid/reloadable.rb +14 -19
- data/lib/mongoid/scopable.rb +8 -35
- data/lib/mongoid/selectable.rb +8 -17
- data/lib/mongoid/serializable.rb +24 -29
- data/lib/mongoid/shardable.rb +80 -17
- data/lib/mongoid/stateful.rb +3 -10
- data/lib/mongoid/stringified_symbol.rb +52 -0
- data/lib/mongoid/tasks/database.rake +12 -5
- data/lib/mongoid/tasks/database.rb +85 -5
- data/lib/mongoid/threaded/lifecycle.rb +2 -21
- data/lib/mongoid/threaded.rb +2 -55
- data/lib/mongoid/timestamps/created/short.rb +2 -1
- data/lib/mongoid/timestamps/created.rb +3 -2
- data/lib/mongoid/timestamps/short.rb +2 -1
- data/lib/mongoid/timestamps/timeless.rb +6 -9
- data/lib/mongoid/timestamps/updated/short.rb +2 -1
- data/lib/mongoid/timestamps/updated.rb +3 -4
- data/lib/mongoid/timestamps.rb +3 -2
- data/lib/mongoid/touchable.rb +53 -23
- data/lib/mongoid/traversable.rb +177 -57
- data/lib/mongoid/validatable/associated.rb +5 -6
- data/lib/mongoid/validatable/format.rb +2 -1
- data/lib/mongoid/validatable/length.rb +2 -1
- data/lib/mongoid/validatable/localizable.rb +2 -3
- data/lib/mongoid/validatable/macros.rb +2 -7
- data/lib/mongoid/validatable/presence.rb +8 -13
- data/lib/mongoid/validatable/queryable.rb +2 -3
- data/lib/mongoid/validatable/uniqueness.rb +20 -33
- data/lib/mongoid/validatable.rb +8 -27
- data/lib/mongoid/version.rb +2 -2
- data/lib/mongoid.rb +32 -15
- data/lib/rails/generators/mongoid/config/config_generator.rb +10 -2
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +45 -30
- data/lib/rails/generators/mongoid/model/model_generator.rb +3 -2
- data/lib/rails/generators/mongoid_generator.rb +2 -1
- data/lib/rails/mongoid.rb +4 -5
- data/spec/README.md +19 -4
- data/spec/config/mongoid.yml +1 -0
- data/spec/integration/app_spec.rb +246 -95
- data/spec/integration/associations/belongs_to_spec.rb +2 -0
- data/spec/integration/associations/embedded_dirty_spec.rb +29 -0
- data/spec/integration/associations/embedded_spec.rb +207 -1
- data/spec/integration/associations/embeds_many_spec.rb +206 -0
- data/spec/integration/associations/embeds_one_spec.rb +23 -0
- data/spec/integration/associations/foreign_key_spec.rb +98 -0
- data/spec/integration/associations/foreign_key_spec_models.rb +64 -0
- data/spec/integration/associations/has_many_spec.rb +128 -0
- data/spec/integration/associations/has_one_spec.rb +176 -0
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +115 -0
- data/spec/integration/associations/reverse_population_spec.rb +34 -0
- data/spec/integration/associations/reverse_population_spec_models.rb +36 -0
- data/spec/integration/associations/scope_option_spec.rb +101 -0
- data/spec/integration/atomic/modifiers_spec.rb +116 -0
- data/spec/integration/bson_regexp_raw_spec.rb +19 -0
- data/spec/integration/callbacks_models.rb +61 -0
- data/spec/integration/callbacks_spec.rb +228 -0
- data/spec/integration/contextual/empty_spec.rb +141 -0
- data/spec/integration/criteria/alias_query_spec.rb +161 -0
- data/spec/integration/criteria/date_field_spec.rb +1 -2
- data/spec/integration/criteria/default_scope_spec.rb +72 -0
- data/spec/integration/criteria/logical_spec.rb +124 -0
- data/spec/integration/criteria/range_spec.rb +265 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +125 -15
- data/spec/integration/discriminator_key_spec.rb +353 -0
- data/spec/integration/discriminator_value_spec.rb +206 -0
- data/spec/integration/document_spec.rb +30 -1
- data/spec/integration/i18n_fallbacks_spec.rb +89 -0
- data/spec/integration/{matchable_spec.rb → matcher_examples_spec.rb} +120 -42
- data/spec/integration/matcher_operator_data/all.yml +140 -0
- data/spec/integration/matcher_operator_data/and.yml +93 -0
- data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
- data/spec/integration/matcher_operator_data/comment.yml +22 -0
- data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
- data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
- data/spec/integration/matcher_operator_data/eq.yml +191 -0
- data/spec/integration/matcher_operator_data/exists.yml +213 -0
- data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
- data/spec/integration/matcher_operator_data/gt.yml +132 -0
- data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
- data/spec/integration/matcher_operator_data/gte.yml +132 -0
- data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/implicit.yml +331 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
- data/spec/integration/matcher_operator_data/in.yml +210 -0
- data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
- data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
- data/spec/integration/matcher_operator_data/lt.yml +132 -0
- data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
- data/spec/integration/matcher_operator_data/lte.yml +132 -0
- data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/mod.yml +55 -0
- data/spec/integration/matcher_operator_data/multiple.yml +29 -0
- data/spec/integration/matcher_operator_data/ne.yml +150 -0
- data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
- data/spec/integration/matcher_operator_data/nin.yml +114 -0
- data/spec/integration/matcher_operator_data/nor.yml +126 -0
- data/spec/integration/matcher_operator_data/not.yml +196 -0
- data/spec/integration/matcher_operator_data/or.yml +137 -0
- data/spec/integration/matcher_operator_data/regex.yml +174 -0
- data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
- data/spec/integration/matcher_operator_data/size.yml +174 -0
- data/spec/integration/matcher_operator_data/type.yml +70 -0
- data/spec/integration/matcher_operator_data/type_array.yml +16 -0
- data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
- data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
- data/spec/integration/matcher_operator_data/type_code.yml +26 -0
- data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
- data/spec/integration/matcher_operator_data/type_date.yml +39 -0
- data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
- data/spec/integration/matcher_operator_data/type_decimal.yml +40 -0
- data/spec/integration/matcher_operator_data/type_double.yml +15 -0
- data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
- data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
- data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_null.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
- data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
- data/spec/integration/matcher_operator_data/type_string.yml +15 -0
- data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
- data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
- data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
- data/spec/integration/matcher_operator_spec.rb +124 -0
- data/spec/integration/matcher_spec.rb +283 -0
- data/spec/integration/server_query_spec.rb +141 -0
- data/spec/integration/shardable_spec.rb +148 -0
- data/spec/integration/stringified_symbol_field_spec.rb +203 -0
- data/spec/lite_spec_helper.rb +22 -5
- data/spec/mongoid/association/accessors_spec.rb +284 -77
- data/spec/mongoid/association/auto_save_spec.rb +74 -33
- data/spec/mongoid/association/builders_spec.rb +3 -1
- data/spec/mongoid/association/constrainable_spec.rb +2 -0
- data/spec/mongoid/association/counter_cache_spec.rb +34 -32
- data/spec/mongoid/association/depending_spec.rb +426 -333
- data/spec/mongoid/association/eager_spec.rb +6 -4
- data/spec/mongoid/association/embedded/cyclic_spec.rb +4 -2
- data/spec/mongoid/association/embedded/dirty_spec.rb +4 -2
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +65 -13
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +3 -1
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +431 -133
- data/spec/mongoid/association/embedded/embeds_many_models.rb +17 -1
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +51 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +3 -1
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +23 -21
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +3 -0
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +28 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +3 -1
- data/spec/mongoid/association/macros_spec.rb +11 -9
- data/spec/mongoid/association/nested/many_spec.rb +2 -0
- data/spec/mongoid/association/nested/one_spec.rb +18 -12
- data/spec/mongoid/association/options_spec.rb +2 -0
- data/spec/mongoid/association/polymorphic_spec.rb +2 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -0
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +57 -16
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +242 -12
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +99 -58
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +57 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +24 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +3 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +28 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +46 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +25 -5
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +215 -167
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +43 -2
- 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 +46 -2
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +3 -1
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +23 -0
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +40 -9
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +306 -125
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +679 -339
- data/spec/mongoid/association/referenced/has_many_models.rb +58 -0
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +23 -0
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +2 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +53 -7
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +34 -4
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +28 -26
- data/spec/mongoid/association/referenced/has_one_models.rb +49 -0
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +24 -1
- data/spec/mongoid/association/reflections_spec.rb +2 -0
- data/spec/mongoid/association/syncable_spec.rb +33 -31
- data/spec/mongoid/association_spec.rb +2 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +49 -0
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +2 -0
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +2 -0
- data/spec/mongoid/atomic/paths/root_spec.rb +2 -0
- data/spec/mongoid/atomic/paths_spec.rb +107 -12
- data/spec/mongoid/atomic_spec.rb +31 -6
- data/spec/mongoid/attributes/dynamic_spec.rb +0 -1
- data/spec/mongoid/attributes/nested_spec.rb +69 -67
- data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
- data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
- data/spec/mongoid/attributes/projector_spec.rb +44 -0
- data/spec/mongoid/attributes/readonly_spec.rb +24 -22
- data/spec/mongoid/attributes_spec.rb +363 -28
- data/spec/mongoid/cacheable_spec.rb +3 -1
- data/spec/mongoid/changeable_spec.rb +60 -35
- data/spec/mongoid/clients/factory_spec.rb +136 -28
- data/spec/mongoid/clients/options_spec.rb +44 -26
- data/spec/mongoid/clients/sessions_spec.rb +25 -28
- data/spec/mongoid/clients/transactions_spec.rb +54 -29
- data/spec/mongoid/clients_spec.rb +8 -6
- data/spec/mongoid/composable_spec.rb +2 -0
- data/spec/mongoid/config/environment_spec.rb +88 -8
- data/spec/mongoid/config/options_spec.rb +22 -3
- data/spec/mongoid/config_spec.rb +277 -1
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +53 -11
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +122 -20
- data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
- data/spec/mongoid/contextual/atomic_spec.rb +222 -71
- data/spec/mongoid/contextual/geo_near_spec.rb +20 -18
- data/spec/mongoid/contextual/map_reduce_spec.rb +4 -2
- data/spec/mongoid/contextual/memory_spec.rb +25 -23
- data/spec/mongoid/contextual/mongo_spec.rb +413 -92
- data/spec/mongoid/contextual/none_spec.rb +9 -81
- data/spec/mongoid/copyable_spec.rb +207 -26
- data/spec/mongoid/copyable_spec_models.rb +30 -0
- data/spec/mongoid/criteria/findable_spec.rb +77 -20
- data/spec/mongoid/criteria/inspectable_spec.rb +2 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +2 -0
- data/spec/mongoid/criteria/modifiable_spec.rb +43 -40
- data/spec/mongoid/criteria/options_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +61 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +35 -17
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +239 -178
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +23 -16
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/key_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +145 -12
- data/spec/mongoid/criteria/queryable/optional_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/options_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +1593 -286
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +1010 -2736
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/smash_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/storable_spec.rb +226 -0
- data/spec/mongoid/criteria/scopable_spec.rb +129 -0
- data/spec/mongoid/criteria_projection_spec.rb +410 -0
- data/spec/mongoid/criteria_spec.rb +782 -459
- data/spec/mongoid/document_fields_spec.rb +26 -1
- data/spec/mongoid/document_persistence_context_spec.rb +0 -1
- data/spec/mongoid/document_query_spec.rb +89 -0
- data/spec/mongoid/document_spec.rb +123 -48
- data/spec/mongoid/equality_spec.rb +144 -41
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +5 -3
- data/spec/mongoid/errors/callback_spec.rb +2 -0
- data/spec/mongoid/errors/delete_restriction_spec.rb +4 -2
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +2 -0
- data/spec/mongoid/errors/document_not_found_spec.rb +2 -0
- data/spec/mongoid/errors/eager_load_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_collection_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_config_file_spec.rb +31 -0
- data/spec/mongoid/errors/invalid_config_option_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_field_option_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_field_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_includes_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_index_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_options_spec.rb +4 -2
- data/spec/mongoid/errors/invalid_path_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_relation_spec.rb +4 -2
- data/spec/mongoid/errors/invalid_scope_spec.rb +3 -1
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_time_spec.rb +2 -0
- data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +2 -0
- data/spec/mongoid/errors/mixed_relations_spec.rb +2 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +22 -8
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_config_spec.rb +4 -2
- data/spec/mongoid/errors/no_client_database_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_hosts_spec.rb +5 -3
- data/spec/mongoid/errors/no_clients_config_spec.rb +2 -0
- data/spec/mongoid/errors/no_environment_spec.rb +2 -0
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +2 -0
- data/spec/mongoid/errors/no_metadata_spec.rb +4 -2
- data/spec/mongoid/errors/no_parent_spec.rb +3 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +2 -0
- data/spec/mongoid/errors/readonly_document_spec.rb +2 -0
- data/spec/mongoid/errors/scope_overwrite_spec.rb +2 -0
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +2 -0
- data/spec/mongoid/errors/unknown_attribute_spec.rb +4 -2
- data/spec/mongoid/errors/unsaved_document_spec.rb +3 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +2 -0
- data/spec/mongoid/errors/validations_spec.rb +2 -0
- data/spec/mongoid/extensions/array_spec.rb +25 -43
- data/spec/mongoid/extensions/big_decimal_spec.rb +2 -0
- data/spec/mongoid/extensions/binary_spec.rb +2 -0
- data/spec/mongoid/extensions/boolean_spec.rb +2 -0
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +335 -0
- data/spec/mongoid/extensions/date_spec.rb +8 -160
- data/spec/mongoid/extensions/date_time_spec.rb +17 -60
- data/spec/mongoid/extensions/decimal128_spec.rb +2 -0
- data/spec/mongoid/extensions/false_class_spec.rb +3 -1
- data/spec/mongoid/extensions/float_spec.rb +17 -3
- data/spec/mongoid/extensions/hash_spec.rb +105 -0
- data/spec/mongoid/extensions/integer_spec.rb +14 -2
- data/spec/mongoid/extensions/module_spec.rb +2 -0
- data/spec/mongoid/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/extensions/object_id_spec.rb +2 -0
- data/spec/mongoid/extensions/object_spec.rb +13 -24
- data/spec/mongoid/extensions/range_spec.rb +2 -0
- data/spec/mongoid/extensions/regexp_spec.rb +2 -0
- data/spec/mongoid/extensions/set_spec.rb +2 -0
- data/spec/mongoid/extensions/string_spec.rb +60 -27
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
- data/spec/mongoid/extensions/symbol_spec.rb +2 -0
- data/spec/mongoid/extensions/time_spec.rb +29 -0
- data/spec/mongoid/extensions/time_with_zone_spec.rb +33 -0
- data/spec/mongoid/extensions/true_class_spec.rb +3 -1
- data/spec/mongoid/extensions_spec.rb +16 -2
- data/spec/mongoid/factory_spec.rb +287 -27
- data/spec/mongoid/fields/foreign_key_spec.rb +2 -0
- data/spec/mongoid/fields/localized_spec.rb +6 -4
- data/spec/mongoid/fields/standard_spec.rb +2 -0
- data/spec/mongoid/fields_spec.rb +418 -36
- data/spec/mongoid/findable_spec.rb +53 -19
- data/spec/mongoid/indexable/specification_spec.rb +2 -0
- data/spec/mongoid/indexable_spec.rb +30 -2
- data/spec/mongoid/inspectable_spec.rb +39 -2
- data/spec/mongoid/interceptable_spec.rb +168 -96
- data/spec/mongoid/interceptable_spec_models.rb +76 -0
- data/spec/mongoid/loggable_spec.rb +2 -0
- data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
- data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +239 -0
- data/spec/mongoid/matcher/extract_attribute_spec.rb +40 -0
- data/spec/mongoid/persistable/creatable_spec.rb +112 -27
- data/spec/mongoid/persistable/deletable_spec.rb +273 -11
- data/spec/mongoid/persistable/destroyable_spec.rb +201 -11
- data/spec/mongoid/persistable/incrementable_spec.rb +23 -7
- data/spec/mongoid/persistable/logical_spec.rb +19 -3
- data/spec/mongoid/persistable/poppable_spec.rb +19 -3
- data/spec/mongoid/persistable/pullable_spec.rb +36 -6
- data/spec/mongoid/persistable/pushable_spec.rb +36 -6
- data/spec/mongoid/persistable/renamable_spec.rb +18 -2
- data/spec/mongoid/persistable/savable_spec.rb +188 -25
- data/spec/mongoid/persistable/settable_spec.rb +54 -8
- data/spec/mongoid/persistable/unsettable_spec.rb +19 -3
- data/spec/mongoid/persistable/updatable_spec.rb +45 -23
- data/spec/mongoid/persistable/upsertable_spec.rb +4 -2
- data/spec/mongoid/persistable_spec.rb +85 -9
- data/spec/mongoid/persistence_context_spec.rb +2 -0
- data/spec/mongoid/positional_spec.rb +2 -0
- data/spec/mongoid/query_cache_middleware_spec.rb +68 -0
- data/spec/mongoid/query_cache_spec.rb +501 -81
- data/spec/mongoid/relations/proxy_spec.rb +8 -6
- data/spec/mongoid/reloadable_spec.rb +298 -20
- data/spec/mongoid/scopable_spec.rb +67 -21
- data/spec/mongoid/selectable_spec.rb +8 -6
- data/spec/mongoid/serializable_spec.rb +160 -29
- data/spec/mongoid/shardable_models.rb +61 -0
- data/spec/mongoid/shardable_spec.rb +116 -17
- data/spec/mongoid/stateful_spec.rb +3 -1
- data/spec/mongoid/tasks/database_rake_spec.rb +2 -0
- data/spec/mongoid/tasks/database_spec.rb +2 -0
- data/spec/mongoid/threaded_spec.rb +4 -2
- data/spec/mongoid/timestamps/created/short_spec.rb +3 -1
- data/spec/mongoid/timestamps/created_spec.rb +3 -1
- data/spec/mongoid/timestamps/timeless_spec.rb +4 -2
- data/spec/mongoid/timestamps/updated/short_spec.rb +5 -3
- data/spec/mongoid/timestamps/updated_spec.rb +5 -3
- data/spec/mongoid/timestamps_spec.rb +8 -6
- data/spec/mongoid/touchable_spec.rb +180 -33
- data/spec/mongoid/touchable_spec_models.rb +53 -0
- data/spec/mongoid/traversable_spec.rb +1167 -1
- data/spec/mongoid/validatable/associated_spec.rb +2 -0
- data/spec/mongoid/validatable/format_spec.rb +2 -0
- data/spec/mongoid/validatable/length_spec.rb +2 -0
- data/spec/mongoid/validatable/numericality_spec.rb +2 -0
- data/spec/mongoid/validatable/presence_spec.rb +28 -22
- data/spec/mongoid/validatable/uniqueness_spec.rb +69 -67
- data/spec/mongoid/validatable_spec.rb +5 -3
- data/spec/mongoid_spec.rb +2 -0
- data/spec/rails/controller_extension/controller_runtime_spec.rb +3 -1
- data/spec/rails/mongoid_spec.rb +4 -2
- data/spec/shared/LICENSE +20 -0
- data/spec/shared/bin/get-mongodb-download-url +17 -0
- data/spec/shared/bin/s3-copy +45 -0
- data/spec/shared/bin/s3-upload +69 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/cluster_config.rb +231 -0
- data/spec/shared/lib/mrss/constraints.rb +386 -0
- data/spec/shared/lib/mrss/docker_runner.rb +271 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +200 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +199 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +120 -0
- data/spec/shared/lib/mrss/session_registry.rb +69 -0
- data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
- data/spec/shared/lib/mrss/utils.rb +15 -0
- data/spec/shared/share/Dockerfile.erb +339 -0
- data/spec/shared/share/haproxy-1.conf +16 -0
- data/spec/shared/share/haproxy-2.conf +17 -0
- data/spec/shared/shlib/distro.sh +74 -0
- data/spec/shared/shlib/server.sh +379 -0
- data/spec/shared/shlib/set_env.sh +132 -0
- data/spec/spec_helper.rb +39 -35
- data/spec/support/authorization.rb +2 -0
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +15 -234
- data/spec/support/expectations.rb +5 -1
- data/spec/support/helpers.rb +11 -0
- data/spec/support/macros.rb +22 -0
- data/spec/{app → support}/models/account.rb +3 -1
- data/spec/{app → support}/models/acolyte.rb +2 -0
- data/spec/{app → support}/models/actor.rb +3 -1
- data/spec/support/models/actress.rb +4 -0
- data/spec/{app → support}/models/address.rb +6 -0
- data/spec/{app → support}/models/address_component.rb +2 -0
- data/spec/{app → support}/models/address_number.rb +2 -0
- data/spec/{app → support}/models/agency.rb +2 -0
- data/spec/{app → support}/models/agent.rb +2 -0
- data/spec/{app → support}/models/album.rb +2 -0
- data/spec/{app → support}/models/alert.rb +2 -0
- data/spec/{app → support}/models/animal.rb +2 -0
- data/spec/{app → support}/models/answer.rb +2 -0
- data/spec/{app → support}/models/appointment.rb +2 -0
- data/spec/support/models/armrest.rb +9 -0
- data/spec/{app → support}/models/article.rb +2 -0
- data/spec/{app → support}/models/artist.rb +4 -0
- data/spec/{app → support}/models/artwork.rb +2 -0
- data/spec/support/models/audible_sound.rb +3 -0
- data/spec/{app → support}/models/audio.rb +2 -0
- data/spec/{app → support}/models/augmentation.rb +2 -0
- data/spec/{app → support}/models/author.rb +2 -0
- data/spec/{app → support}/models/baby.rb +2 -0
- data/spec/{app → support}/models/band.rb +6 -0
- data/spec/{app → support}/models/bar.rb +2 -0
- data/spec/{app → support}/models/basic.rb +2 -0
- data/spec/support/models/bed.rb +3 -0
- data/spec/{app → support}/models/big_palette.rb +2 -0
- data/spec/{app → support}/models/birthday.rb +2 -0
- data/spec/support/models/bolt.rb +7 -0
- data/spec/{app → support}/models/bomb.rb +2 -0
- data/spec/{app → support}/models/book.rb +2 -0
- data/spec/{app → support}/models/breed.rb +2 -0
- data/spec/{app → support}/models/browser.rb +3 -1
- data/spec/{app → support}/models/building.rb +2 -0
- data/spec/{app → support}/models/building_address.rb +2 -0
- data/spec/{app → support}/models/bus.rb +2 -0
- data/spec/{app → support}/models/business.rb +2 -0
- data/spec/{app → support}/models/callback_test.rb +2 -0
- data/spec/{app → support}/models/canvas.rb +3 -1
- data/spec/support/models/car.rb +3 -0
- data/spec/{app → support}/models/cat.rb +2 -0
- data/spec/{app → support}/models/category.rb +2 -0
- data/spec/{app → support}/models/child.rb +2 -0
- data/spec/{app → support}/models/child_doc.rb +5 -3
- data/spec/{app → support}/models/church.rb +2 -0
- data/spec/{app → support}/models/circle.rb +2 -0
- data/spec/{app → support}/models/circuit.rb +2 -0
- data/spec/{app → support}/models/circus.rb +2 -0
- data/spec/{app → support}/models/code.rb +2 -0
- data/spec/support/models/coding/pull_request.rb +11 -0
- data/spec/support/models/coding.rb +3 -0
- data/spec/{app → support}/models/comment.rb +2 -0
- data/spec/{app → support}/models/company.rb +2 -0
- data/spec/{app → support}/models/consumption_period.rb +2 -0
- data/spec/{app → support}/models/contextable_item.rb +2 -0
- data/spec/{app → support}/models/contractor.rb +2 -0
- data/spec/{app → support}/models/cookie.rb +2 -0
- data/spec/{app → support}/models/country_code.rb +4 -0
- data/spec/{app → support}/models/courier_job.rb +2 -0
- data/spec/support/models/crate.rb +12 -0
- data/spec/support/models/customer.rb +10 -0
- data/spec/support/models/customer_address.rb +11 -0
- data/spec/support/models/deed.rb +7 -0
- data/spec/{app → support}/models/definition.rb +2 -0
- data/spec/{app → support}/models/delegating_patient.rb +0 -1
- data/spec/{app → support}/models/description.rb +2 -0
- data/spec/{app → support}/models/dictionary.rb +8 -0
- data/spec/{app → support}/models/division.rb +2 -0
- data/spec/{app → support}/models/doctor.rb +2 -0
- data/spec/{app → support}/models/dog.rb +2 -0
- data/spec/{app → support}/models/dokument.rb +2 -0
- data/spec/{app → support}/models/draft.rb +2 -0
- data/spec/{app → support}/models/dragon.rb +2 -0
- data/spec/{app → support}/models/driver.rb +3 -1
- data/spec/{app → support}/models/drug.rb +2 -0
- data/spec/{app → support}/models/dungeon.rb +2 -0
- data/spec/{app → support}/models/edit.rb +2 -0
- data/spec/{app → support}/models/email.rb +2 -0
- data/spec/{app → support}/models/employer.rb +2 -0
- data/spec/{app → support}/models/entry.rb +2 -0
- data/spec/support/models/eraser.rb +3 -0
- data/spec/{app → support}/models/even.rb +2 -0
- data/spec/{app → support}/models/event.rb +2 -0
- data/spec/{app → support}/models/exhibition.rb +2 -0
- data/spec/{app → support}/models/exhibitor.rb +2 -0
- data/spec/{app → support}/models/explosion.rb +2 -0
- data/spec/{app → support}/models/eye.rb +2 -0
- data/spec/{app → support}/models/eye_bowl.rb +2 -0
- data/spec/{app → support}/models/face.rb +2 -0
- data/spec/{app → support}/models/favorite.rb +2 -0
- data/spec/{app → support}/models/filesystem.rb +2 -0
- data/spec/{app → support}/models/fire_hydrant.rb +2 -0
- data/spec/{app → support}/models/firefox.rb +2 -0
- data/spec/{app → support}/models/fish.rb +2 -0
- data/spec/{app → support}/models/folder.rb +2 -0
- data/spec/{app → support}/models/folder_item.rb +2 -0
- data/spec/{app → support}/models/fruits.rb +2 -0
- data/spec/{app → support}/models/game.rb +2 -0
- data/spec/{app → support}/models/ghost.rb +2 -0
- data/spec/support/models/guitar.rb +4 -0
- data/spec/support/models/hole.rb +12 -0
- data/spec/{app → support}/models/home.rb +2 -0
- data/spec/{app → support}/models/house.rb +2 -0
- data/spec/{app → support}/models/html_writer.rb +2 -0
- data/spec/{app → support}/models/id_key.rb +2 -0
- data/spec/support/models/idnodef.rb +7 -0
- data/spec/{app → support}/models/image.rb +2 -0
- data/spec/{app → support}/models/implant.rb +2 -0
- data/spec/support/models/instrument.rb +8 -0
- data/spec/{app → support}/models/item.rb +3 -1
- data/spec/{app → support}/models/jar.rb +2 -0
- data/spec/{app → support}/models/kaleidoscope.rb +2 -0
- data/spec/{app → support}/models/kangaroo.rb +3 -1
- data/spec/{app → support}/models/label.rb +4 -1
- data/spec/{app → support}/models/language.rb +2 -0
- data/spec/{app → support}/models/lat_lng.rb +2 -0
- data/spec/{app → support}/models/league.rb +2 -0
- data/spec/support/models/learner.rb +4 -0
- data/spec/{app → support}/models/line_item.rb +2 -0
- data/spec/{app → support}/models/location.rb +2 -0
- data/spec/{app → support}/models/login.rb +2 -0
- data/spec/{app → support}/models/manufacturer.rb +2 -0
- data/spec/{app → support}/models/meat.rb +2 -0
- data/spec/{app → support}/models/membership.rb +2 -0
- data/spec/{app → support}/models/message.rb +2 -0
- data/spec/{app → support}/models/minim.rb +0 -1
- data/spec/{app → support}/models/mixed_drink.rb +2 -0
- data/spec/support/models/mop.rb +24 -0
- data/spec/{app → support}/models/movie.rb +2 -0
- data/spec/support/models/my_hash.rb +4 -0
- data/spec/{app → support}/models/name.rb +2 -0
- data/spec/support/models/name_only.rb +8 -0
- data/spec/{app → support}/models/node.rb +2 -0
- data/spec/{app → support}/models/note.rb +2 -0
- data/spec/support/models/nut.rb +7 -0
- data/spec/{app → support}/models/odd.rb +2 -0
- data/spec/support/models/order.rb +12 -0
- data/spec/{app → support}/models/ordered_post.rb +3 -1
- data/spec/{app → support}/models/ordered_preference.rb +2 -0
- data/spec/{app → support}/models/oscar.rb +2 -0
- data/spec/support/models/other_owner_object.rb +4 -0
- data/spec/{app → support}/models/override.rb +2 -0
- data/spec/{app → support}/models/ownable.rb +2 -0
- data/spec/{app → support}/models/owner.rb +4 -0
- data/spec/{app → support}/models/pack.rb +2 -0
- data/spec/{app → support}/models/page.rb +2 -0
- data/spec/{app → support}/models/page_question.rb +2 -0
- data/spec/{app → support}/models/palette.rb +3 -1
- data/spec/{app → support}/models/parent.rb +2 -0
- data/spec/{app → support}/models/parent_doc.rb +2 -0
- data/spec/support/models/passport.rb +13 -0
- data/spec/{app → support}/models/patient.rb +2 -0
- data/spec/{app → support}/models/pdf_writer.rb +2 -0
- data/spec/support/models/pencil.rb +3 -0
- data/spec/{app → support}/models/person.rb +21 -1
- data/spec/{app → support}/models/pet.rb +2 -0
- data/spec/{app → support}/models/pet_owner.rb +2 -0
- data/spec/{app → support}/models/phone.rb +5 -1
- data/spec/support/models/piano.rb +4 -0
- data/spec/{app → support}/models/pizza.rb +2 -0
- data/spec/{app → support}/models/player.rb +2 -0
- data/spec/{app → support}/models/post.rb +2 -0
- data/spec/{app → support}/models/post_genre.rb +2 -0
- data/spec/{app → support}/models/powerup.rb +2 -0
- data/spec/{app → support}/models/preference.rb +2 -0
- data/spec/{app → support}/models/princess.rb +2 -0
- data/spec/{app → support}/models/product.rb +2 -0
- data/spec/support/models/profile.rb +17 -0
- data/spec/{app → support}/models/pronunciation.rb +2 -0
- data/spec/{app → support}/models/pub.rb +2 -0
- data/spec/support/models/publication/encyclopedia.rb +11 -0
- data/spec/support/models/publication/review.rb +13 -0
- data/spec/support/models/publication.rb +4 -0
- data/spec/{app → support}/models/purchase.rb +2 -0
- data/spec/support/models/purchased_item.rb +10 -0
- data/spec/{app → support}/models/question.rb +2 -0
- data/spec/{app → support}/models/quiz.rb +2 -0
- data/spec/{app → support}/models/rating.rb +2 -0
- data/spec/{app → support}/models/record.rb +2 -0
- data/spec/{app → support}/models/registry.rb +2 -0
- data/spec/{app → support}/models/role.rb +2 -0
- data/spec/{app → support}/models/root_category.rb +2 -0
- data/spec/{app → support}/models/sandwich.rb +2 -0
- data/spec/{app → support}/models/scheduler.rb +2 -0
- data/spec/support/models/scribe.rb +7 -0
- data/spec/support/models/sealer.rb +7 -0
- data/spec/support/models/seat.rb +24 -0
- data/spec/{app → support}/models/seo.rb +2 -0
- data/spec/support/models/series.rb +7 -0
- data/spec/{app → support}/models/server.rb +2 -0
- data/spec/{app → support}/models/service.rb +2 -0
- data/spec/{app → support}/models/shape.rb +4 -2
- data/spec/{app → support}/models/shelf.rb +2 -0
- data/spec/{app → support}/models/shipment_address.rb +2 -0
- data/spec/{app → support}/models/shipping_container.rb +2 -0
- data/spec/{app → support}/models/shipping_pack.rb +2 -0
- data/spec/support/models/shirt.rb +11 -0
- data/spec/{app → support}/models/shop.rb +2 -0
- data/spec/{app → support}/models/short_agent.rb +2 -0
- data/spec/{app → support}/models/short_quiz.rb +2 -0
- data/spec/{app → support}/models/simple.rb +2 -0
- data/spec/{app → support}/models/slave.rb +2 -0
- data/spec/{app → support}/models/song.rb +2 -0
- data/spec/{app → support}/models/sound.rb +2 -0
- data/spec/support/models/spacer.rb +7 -0
- data/spec/{app → support}/models/square.rb +2 -0
- data/spec/{app → support}/models/staff.rb +2 -0
- data/spec/{app → support}/models/store_as_dup_test1.rb +2 -0
- data/spec/{app → support}/models/store_as_dup_test2.rb +2 -0
- data/spec/{app → support}/models/strategy.rb +2 -0
- data/spec/{app → support}/models/sub_item.rb +2 -0
- data/spec/{app → support}/models/subscription.rb +2 -0
- data/spec/{app → support}/models/survey.rb +2 -0
- data/spec/{app → support}/models/symptom.rb +2 -0
- data/spec/support/models/system_role.rb +7 -0
- data/spec/{app → support}/models/tag.rb +2 -0
- data/spec/{app → support}/models/target.rb +2 -0
- data/spec/{app → support}/models/template.rb +2 -0
- data/spec/{app → support}/models/thing.rb +2 -0
- data/spec/support/models/threadlocker.rb +7 -0
- data/spec/{app → support}/models/title.rb +2 -0
- data/spec/{app → support}/models/tool.rb +4 -2
- data/spec/{app → support}/models/topping.rb +2 -0
- data/spec/support/models/toy.rb +9 -0
- data/spec/{app → support}/models/track.rb +2 -0
- data/spec/{app → support}/models/translation.rb +2 -0
- data/spec/{app → support}/models/tree.rb +2 -0
- data/spec/support/models/truck.rb +7 -0
- data/spec/{app → support}/models/user.rb +2 -0
- data/spec/{app → support}/models/user_account.rb +2 -0
- data/spec/{app → support}/models/validation_callback.rb +2 -0
- data/spec/support/models/vehicle.rb +18 -0
- data/spec/{app → support}/models/version.rb +2 -0
- data/spec/{app → support}/models/vertex.rb +3 -1
- data/spec/{app → support}/models/vet_visit.rb +2 -0
- data/spec/{app → support}/models/video.rb +2 -0
- data/spec/support/models/video_game.rb +3 -0
- data/spec/support/models/washer.rb +7 -0
- data/spec/{app → support}/models/weapon.rb +2 -0
- data/spec/{app → support}/models/wiki_page.rb +3 -0
- data/spec/{app → support}/models/word.rb +2 -0
- data/spec/{app → support}/models/word_origin.rb +2 -0
- data/spec/{app → support}/models/writer.rb +4 -2
- data/spec/support/shared/time.rb +53 -0
- data/spec/support/spec_config.rb +16 -3
- data.tar.gz.sig +0 -0
- metadata +1100 -738
- metadata.gz.sig +0 -0
- data/lib/mongoid/criteria/queryable/forwardable.rb +0 -65
- data/lib/mongoid/matchable/all.rb +0 -28
- data/lib/mongoid/matchable/and.rb +0 -30
- data/lib/mongoid/matchable/default.rb +0 -119
- data/lib/mongoid/matchable/elem_match.rb +0 -34
- data/lib/mongoid/matchable/eq.rb +0 -22
- data/lib/mongoid/matchable/exists.rb +0 -23
- data/lib/mongoid/matchable/gt.rb +0 -23
- data/lib/mongoid/matchable/gte.rb +0 -23
- data/lib/mongoid/matchable/in.rb +0 -24
- data/lib/mongoid/matchable/lt.rb +0 -23
- data/lib/mongoid/matchable/lte.rb +0 -23
- data/lib/mongoid/matchable/ne.rb +0 -21
- data/lib/mongoid/matchable/nin.rb +0 -22
- data/lib/mongoid/matchable/nor.rb +0 -37
- data/lib/mongoid/matchable/or.rb +0 -33
- data/lib/mongoid/matchable/regexp.rb +0 -27
- data/lib/mongoid/matchable/size.rb +0 -21
- data/lib/support/ruby_version.rb +0 -26
- data/spec/app/models/actress.rb +0 -2
- data/spec/app/models/bed.rb +0 -1
- data/spec/app/models/car.rb +0 -1
- data/spec/app/models/eraser.rb +0 -1
- data/spec/app/models/learner.rb +0 -2
- data/spec/app/models/my_hash.rb +0 -2
- data/spec/app/models/other_owner_object.rb +0 -2
- data/spec/app/models/passport.rb +0 -5
- data/spec/app/models/pencil.rb +0 -1
- data/spec/app/models/profile.rb +0 -5
- data/spec/app/models/series.rb +0 -4
- data/spec/app/models/truck.rb +0 -3
- data/spec/app/models/vehicle.rb +0 -11
- data/spec/app/models/video_game.rb +0 -1
- data/spec/mongoid/criteria/queryable/forwardable_spec.rb +0 -87
- data/spec/mongoid/matchable/all_spec.rb +0 -31
- data/spec/mongoid/matchable/and_spec.rb +0 -187
- data/spec/mongoid/matchable/default_spec.rb +0 -137
- data/spec/mongoid/matchable/elem_match_spec.rb +0 -106
- data/spec/mongoid/matchable/eq_spec.rb +0 -48
- data/spec/mongoid/matchable/exists_spec.rb +0 -57
- data/spec/mongoid/matchable/gt_spec.rb +0 -86
- data/spec/mongoid/matchable/gte_spec.rb +0 -84
- data/spec/mongoid/matchable/in_spec.rb +0 -49
- data/spec/mongoid/matchable/lt_spec.rb +0 -85
- data/spec/mongoid/matchable/lte_spec.rb +0 -85
- data/spec/mongoid/matchable/ne_spec.rb +0 -46
- data/spec/mongoid/matchable/nin_spec.rb +0 -48
- data/spec/mongoid/matchable/nor_spec.rb +0 -209
- data/spec/mongoid/matchable/or_spec.rb +0 -131
- data/spec/mongoid/matchable/regexp_spec.rb +0 -59
- data/spec/mongoid/matchable/size_spec.rb +0 -25
- data/spec/mongoid/matchable_spec.rb +0 -853
- data/spec/support/child_process_helper.rb +0 -76
- data/spec/support/cluster_config.rb +0 -158
- /data/spec/{app → support}/models/array_field.rb +0 -0
- /data/spec/{app → support}/models/store_as_dup_test3.rb +0 -0
- /data/spec/{app → support}/models/store_as_dup_test4.rb +0 -0
- /data/spec/{app → support}/models/updatable.rb +0 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
require "mongoid/contextual/atomic"
|
|
3
4
|
require "mongoid/contextual/aggregable/mongo"
|
|
4
5
|
require "mongoid/contextual/command"
|
|
@@ -9,6 +10,7 @@ require "mongoid/association/eager_loadable"
|
|
|
9
10
|
module Mongoid
|
|
10
11
|
module Contextual
|
|
11
12
|
class Mongo
|
|
13
|
+
extend Forwardable
|
|
12
14
|
include Enumerable
|
|
13
15
|
include Aggregable::Mongo
|
|
14
16
|
include Atomic
|
|
@@ -16,8 +18,6 @@ module Mongoid
|
|
|
16
18
|
include Queryable
|
|
17
19
|
|
|
18
20
|
# Options constant.
|
|
19
|
-
#
|
|
20
|
-
# @since 5.0.0
|
|
21
21
|
OPTIONS = [ :hint,
|
|
22
22
|
:limit,
|
|
23
23
|
:skip,
|
|
@@ -41,8 +41,6 @@ module Mongoid
|
|
|
41
41
|
# context.cached?
|
|
42
42
|
#
|
|
43
43
|
# @return [ true, false ] If the context is cached.
|
|
44
|
-
#
|
|
45
|
-
# @since 3.0.0
|
|
46
44
|
def cached?
|
|
47
45
|
!!@cache
|
|
48
46
|
end
|
|
@@ -64,11 +62,28 @@ module Mongoid
|
|
|
64
62
|
# into the count.
|
|
65
63
|
#
|
|
66
64
|
# @return [ Integer ] The number of matches.
|
|
67
|
-
#
|
|
68
|
-
# @since 3.0.0
|
|
69
65
|
def count(options = {}, &block)
|
|
70
66
|
return super(&block) if block_given?
|
|
71
|
-
try_cache(:count) { view.
|
|
67
|
+
try_cache(:count) { view.count_documents(options) }
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Get the estimated number of documents matching the query.
|
|
71
|
+
#
|
|
72
|
+
# Unlike count, estimated_count does not take a block because it is not
|
|
73
|
+
# traditionally defined (with a block) on Enumarable like count is.
|
|
74
|
+
#
|
|
75
|
+
# @example Get the estimated number of matching documents.
|
|
76
|
+
# context.estimated_count
|
|
77
|
+
#
|
|
78
|
+
# @param [ Hash ] options The options, such as maxTimeMS to be factored
|
|
79
|
+
# into the count.
|
|
80
|
+
#
|
|
81
|
+
# @return [ Integer ] The number of matches.
|
|
82
|
+
def estimated_count(options = {})
|
|
83
|
+
unless self.criteria.selector.empty?
|
|
84
|
+
raise Mongoid::Errors::InvalidEstimatedCountCriteria.new(self.klass)
|
|
85
|
+
end
|
|
86
|
+
try_cache(:estimated_count) { view.estimated_document_count(options) }
|
|
72
87
|
end
|
|
73
88
|
|
|
74
89
|
# Delete all documents in the database that match the selector.
|
|
@@ -77,8 +92,6 @@ module Mongoid
|
|
|
77
92
|
# context.delete
|
|
78
93
|
#
|
|
79
94
|
# @return [ nil ] Nil.
|
|
80
|
-
#
|
|
81
|
-
# @since 3.0.0
|
|
82
95
|
def delete
|
|
83
96
|
view.delete_many.deleted_count
|
|
84
97
|
end
|
|
@@ -90,8 +103,6 @@ module Mongoid
|
|
|
90
103
|
# context.destroy
|
|
91
104
|
#
|
|
92
105
|
# @return [ nil ] Nil.
|
|
93
|
-
#
|
|
94
|
-
# @since 3.0.0
|
|
95
106
|
def destroy
|
|
96
107
|
each.inject(0) do |count, doc|
|
|
97
108
|
doc.destroy
|
|
@@ -109,11 +120,20 @@ module Mongoid
|
|
|
109
120
|
# @param [ String, Symbol ] field The name of the field.
|
|
110
121
|
#
|
|
111
122
|
# @return [ Array<Object> ] The distinct values for the field.
|
|
112
|
-
#
|
|
113
|
-
# @since 3.0.0
|
|
114
123
|
def distinct(field)
|
|
115
|
-
|
|
116
|
-
|
|
124
|
+
name = if Mongoid.legacy_pluck_distinct
|
|
125
|
+
klass.database_field_name(field)
|
|
126
|
+
else
|
|
127
|
+
klass.cleanse_localized_field_names(field)
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
view.distinct(name).map do |value|
|
|
131
|
+
if Mongoid.legacy_pluck_distinct
|
|
132
|
+
value.class.demongoize(value)
|
|
133
|
+
else
|
|
134
|
+
is_translation = "#{name}_translations" == field.to_s
|
|
135
|
+
recursive_demongoize(name, value, is_translation)
|
|
136
|
+
end
|
|
117
137
|
end
|
|
118
138
|
end
|
|
119
139
|
|
|
@@ -126,8 +146,6 @@ module Mongoid
|
|
|
126
146
|
# end
|
|
127
147
|
#
|
|
128
148
|
# @return [ Enumerator ] The enumerator.
|
|
129
|
-
#
|
|
130
|
-
# @since 3.0.0
|
|
131
149
|
def each(&block)
|
|
132
150
|
if block_given?
|
|
133
151
|
documents_for_iteration.each do |doc|
|
|
@@ -150,8 +168,6 @@ module Mongoid
|
|
|
150
168
|
# used to determine the value.
|
|
151
169
|
#
|
|
152
170
|
# @return [ true, false ] If the count is more than zero.
|
|
153
|
-
#
|
|
154
|
-
# @since 3.0.0
|
|
155
171
|
def exists?
|
|
156
172
|
return !documents.empty? if cached? && cache_loaded?
|
|
157
173
|
return @count > 0 if instance_variable_defined?(:@count)
|
|
@@ -167,8 +183,6 @@ module Mongoid
|
|
|
167
183
|
# Band.where(name: "Depeche Mode").explain
|
|
168
184
|
#
|
|
169
185
|
# @return [ Hash ] The explain result.
|
|
170
|
-
#
|
|
171
|
-
# @since 3.0.0
|
|
172
186
|
def explain
|
|
173
187
|
view.explain
|
|
174
188
|
end
|
|
@@ -187,8 +201,6 @@ module Mongoid
|
|
|
187
201
|
# @option options [ true, false ] :upsert Create the document if it doesn't exist.
|
|
188
202
|
#
|
|
189
203
|
# @return [ Document ] The result of the command.
|
|
190
|
-
#
|
|
191
|
-
# @since 5.0.0
|
|
192
204
|
def find_one_and_update(update, options = {})
|
|
193
205
|
if doc = view.find_one_and_update(update, options)
|
|
194
206
|
Factory.from_db(klass, doc)
|
|
@@ -209,8 +221,6 @@ module Mongoid
|
|
|
209
221
|
# @option options [ true, false ] :upsert Create the document if it doesn't exist.
|
|
210
222
|
#
|
|
211
223
|
# @return [ Document ] The result of the command.
|
|
212
|
-
#
|
|
213
|
-
# @since 5.0.0
|
|
214
224
|
def find_one_and_replace(replacement, options = {})
|
|
215
225
|
if doc = view.find_one_and_replace(replacement, options)
|
|
216
226
|
Factory.from_db(klass, doc)
|
|
@@ -224,8 +234,6 @@ module Mongoid
|
|
|
224
234
|
# context.find_one_and_delete
|
|
225
235
|
#
|
|
226
236
|
# @return [ Document ] The result of the command.
|
|
227
|
-
#
|
|
228
|
-
# @since 5.0.0
|
|
229
237
|
def find_one_and_delete
|
|
230
238
|
if doc = view.find_one_and_delete
|
|
231
239
|
Factory.from_db(klass, doc)
|
|
@@ -249,18 +257,16 @@ module Mongoid
|
|
|
249
257
|
# is defined on the criteria.
|
|
250
258
|
#
|
|
251
259
|
# @return [ Document ] The first document.
|
|
252
|
-
#
|
|
253
|
-
# @since 3.0.0
|
|
254
260
|
def first(opts = {})
|
|
255
261
|
return documents.first if cached? && cache_loaded?
|
|
256
262
|
try_cache(:first) do
|
|
257
263
|
if sort = view.sort || ({ _id: 1 } unless opts[:id_sort] == :none)
|
|
258
|
-
if raw_doc = view.sort(sort).limit(
|
|
264
|
+
if raw_doc = view.sort(sort).limit(1).first
|
|
259
265
|
doc = Factory.from_db(klass, raw_doc, criteria)
|
|
260
266
|
eager_load([doc]).first
|
|
261
267
|
end
|
|
262
268
|
else
|
|
263
|
-
if raw_doc = view.limit(
|
|
269
|
+
if raw_doc = view.limit(1).first
|
|
264
270
|
doc = Factory.from_db(klass, raw_doc, criteria)
|
|
265
271
|
eager_load([doc]).first
|
|
266
272
|
end
|
|
@@ -272,8 +278,6 @@ module Mongoid
|
|
|
272
278
|
# Return the first result without applying sort
|
|
273
279
|
#
|
|
274
280
|
# @api private
|
|
275
|
-
#
|
|
276
|
-
# @since 4.0.2
|
|
277
281
|
def find_first
|
|
278
282
|
return documents.first if cached? && cache_loaded?
|
|
279
283
|
if raw_doc = view.first
|
|
@@ -300,7 +304,7 @@ module Mongoid
|
|
|
300
304
|
#
|
|
301
305
|
# @return [ GeoNear ] The GeoNear command.
|
|
302
306
|
#
|
|
303
|
-
# @
|
|
307
|
+
# @deprecated
|
|
304
308
|
def geo_near(coordinates)
|
|
305
309
|
GeoNear.new(collection, criteria, coordinates)
|
|
306
310
|
end
|
|
@@ -335,8 +339,6 @@ module Mongoid
|
|
|
335
339
|
# Mongo.new(criteria)
|
|
336
340
|
#
|
|
337
341
|
# @param [ Criteria ] criteria The criteria.
|
|
338
|
-
#
|
|
339
|
-
# @since 3.0.0
|
|
340
342
|
def initialize(criteria)
|
|
341
343
|
@criteria, @klass, @cache = criteria, criteria.klass, criteria.options[:cache]
|
|
342
344
|
@collection = @klass.collection
|
|
@@ -345,7 +347,7 @@ module Mongoid
|
|
|
345
347
|
apply_options
|
|
346
348
|
end
|
|
347
349
|
|
|
348
|
-
|
|
350
|
+
def_delegator :@klass, :database_field_name
|
|
349
351
|
|
|
350
352
|
# Get the last document in the database for the criteria's selector.
|
|
351
353
|
#
|
|
@@ -362,12 +364,10 @@ module Mongoid
|
|
|
362
364
|
#
|
|
363
365
|
# @option opts [ :none ] :id_sort Don't apply a sort on _id if no other sort
|
|
364
366
|
# is defined on the criteria.
|
|
365
|
-
#
|
|
366
|
-
# @since 3.0.0
|
|
367
367
|
def last(opts = {})
|
|
368
368
|
try_cache(:last) do
|
|
369
369
|
with_inverse_sorting(opts) do
|
|
370
|
-
if raw_doc = view.limit(
|
|
370
|
+
if raw_doc = view.limit(1).first
|
|
371
371
|
doc = Factory.from_db(klass, raw_doc, criteria)
|
|
372
372
|
eager_load([doc]).first
|
|
373
373
|
end
|
|
@@ -381,8 +381,6 @@ module Mongoid
|
|
|
381
381
|
# context.length
|
|
382
382
|
#
|
|
383
383
|
# @return [ Integer ] The number of documents.
|
|
384
|
-
#
|
|
385
|
-
# @since 3.0.0
|
|
386
384
|
def length
|
|
387
385
|
@length ||= self.count
|
|
388
386
|
end
|
|
@@ -396,8 +394,6 @@ module Mongoid
|
|
|
396
394
|
# @param [ Integer ] value The number of documents to return.
|
|
397
395
|
#
|
|
398
396
|
# @return [ Mongo ] The context.
|
|
399
|
-
#
|
|
400
|
-
# @since 3.0.0
|
|
401
397
|
def limit(value)
|
|
402
398
|
@view = view.limit(value) and self
|
|
403
399
|
end
|
|
@@ -411,8 +407,6 @@ module Mongoid
|
|
|
411
407
|
# @param [ String ] reduce The reduce js function.
|
|
412
408
|
#
|
|
413
409
|
# @return [ MapReduce ] The map/reduce lazy wrapper.
|
|
414
|
-
#
|
|
415
|
-
# @since 3.0.0
|
|
416
410
|
def map_reduce(map, reduce)
|
|
417
411
|
MapReduce.new(collection, criteria, map, reduce)
|
|
418
412
|
end
|
|
@@ -429,17 +423,30 @@ module Mongoid
|
|
|
429
423
|
# @param [ String, Symbol, Array ] fields Fields to pluck.
|
|
430
424
|
#
|
|
431
425
|
# @return [ Array<Object, Array> ] The plucked values.
|
|
432
|
-
#
|
|
433
|
-
# @since 3.1.0
|
|
434
426
|
def pluck(*fields)
|
|
427
|
+
# Multiple fields can map to the same field name. For example, plucking
|
|
428
|
+
# a field and its _translations field map to the same field in the database.
|
|
429
|
+
# because of this, we need to keep track of the fields requested.
|
|
430
|
+
normalized_field_names = []
|
|
435
431
|
normalized_select = fields.inject({}) do |hash, f|
|
|
436
|
-
|
|
432
|
+
db_fn = klass.database_field_name(f)
|
|
433
|
+
normalized_field_names.push(db_fn)
|
|
434
|
+
|
|
435
|
+
if Mongoid.legacy_pluck_distinct
|
|
436
|
+
hash[db_fn] = true
|
|
437
|
+
else
|
|
438
|
+
hash[klass.cleanse_localized_field_names(f)] = true
|
|
439
|
+
end
|
|
437
440
|
hash
|
|
438
441
|
end
|
|
439
442
|
|
|
440
443
|
view.projection(normalized_select).reduce([]) do |plucked, doc|
|
|
441
|
-
values =
|
|
442
|
-
|
|
444
|
+
values = normalized_field_names.map do |n|
|
|
445
|
+
if Mongoid.legacy_pluck_distinct
|
|
446
|
+
n.include?('.') ? doc[n.partition('.')[0]] : doc[n]
|
|
447
|
+
else
|
|
448
|
+
extract_value(doc, n)
|
|
449
|
+
end
|
|
443
450
|
end
|
|
444
451
|
plucked << (values.size == 1 ? values.first : values)
|
|
445
452
|
end
|
|
@@ -453,8 +460,6 @@ module Mongoid
|
|
|
453
460
|
# @param [ Integer ] value The number of documents to skip.
|
|
454
461
|
#
|
|
455
462
|
# @return [ Mongo ] The context.
|
|
456
|
-
#
|
|
457
|
-
# @since 3.0.0
|
|
458
463
|
def skip(value)
|
|
459
464
|
@view = view.skip(value) and self
|
|
460
465
|
end
|
|
@@ -468,8 +473,6 @@ module Mongoid
|
|
|
468
473
|
# pairs.
|
|
469
474
|
#
|
|
470
475
|
# @return [ Mongo ] The context.
|
|
471
|
-
#
|
|
472
|
-
# @since 3.0.0
|
|
473
476
|
def sort(values = nil, &block)
|
|
474
477
|
if block_given?
|
|
475
478
|
super(&block)
|
|
@@ -493,8 +496,6 @@ module Mongoid
|
|
|
493
496
|
# an update should apply.
|
|
494
497
|
#
|
|
495
498
|
# @return [ nil, false ] False if no attributes were provided.
|
|
496
|
-
#
|
|
497
|
-
# @since 3.0.0
|
|
498
499
|
def update(attributes = nil, opts = {})
|
|
499
500
|
update_documents(attributes, :update_one, opts)
|
|
500
501
|
end
|
|
@@ -511,8 +512,6 @@ module Mongoid
|
|
|
511
512
|
# an update should apply.
|
|
512
513
|
#
|
|
513
514
|
# @return [ nil, false ] False if no attributes were provided.
|
|
514
|
-
#
|
|
515
|
-
# @since 3.0.0
|
|
516
515
|
def update_all(attributes = nil, opts = {})
|
|
517
516
|
update_documents(attributes, :update_many, opts)
|
|
518
517
|
end
|
|
@@ -524,8 +523,6 @@ module Mongoid
|
|
|
524
523
|
# @param [ String, Symbol ] key The instance variable name
|
|
525
524
|
#
|
|
526
525
|
# @return the result of the block
|
|
527
|
-
#
|
|
528
|
-
# @since 3.1.4
|
|
529
526
|
def try_cache(key, &block)
|
|
530
527
|
unless cached?
|
|
531
528
|
yield
|
|
@@ -548,8 +545,6 @@ module Mongoid
|
|
|
548
545
|
# @param [ Symbol ] method The method to use.
|
|
549
546
|
#
|
|
550
547
|
# @return [ true, false ] If the update succeeded.
|
|
551
|
-
#
|
|
552
|
-
# @since 3.0.4
|
|
553
548
|
def update_documents(attributes, method = :update_one, opts = {})
|
|
554
549
|
return false unless attributes
|
|
555
550
|
attributes = Hash[attributes.map { |k, v| [klass.database_field_name(k.to_s), v] }]
|
|
@@ -562,8 +557,6 @@ module Mongoid
|
|
|
562
557
|
#
|
|
563
558
|
# @example Apply the field limitations.
|
|
564
559
|
# context.apply_fields
|
|
565
|
-
#
|
|
566
|
-
# @since 3.0.0
|
|
567
560
|
def apply_fields
|
|
568
561
|
if spec = criteria.options[:fields]
|
|
569
562
|
@view = view.projection(spec)
|
|
@@ -576,8 +569,6 @@ module Mongoid
|
|
|
576
569
|
#
|
|
577
570
|
# @example Apply all options.
|
|
578
571
|
# context.apply_options
|
|
579
|
-
#
|
|
580
|
-
# @since 3.1.0
|
|
581
572
|
def apply_options
|
|
582
573
|
apply_fields
|
|
583
574
|
OPTIONS.each do |name|
|
|
@@ -594,8 +585,6 @@ module Mongoid
|
|
|
594
585
|
#
|
|
595
586
|
# @example Apply the skip option.
|
|
596
587
|
# context.apply_option(:skip)
|
|
597
|
-
#
|
|
598
|
-
# @since 3.1.0
|
|
599
588
|
def apply_option(name)
|
|
600
589
|
if spec = criteria.options[name]
|
|
601
590
|
@view = view.send(name, spec)
|
|
@@ -608,8 +597,6 @@ module Mongoid
|
|
|
608
597
|
#
|
|
609
598
|
# @example Apply the inverse sorting params to the given block
|
|
610
599
|
# context.with_inverse_sorting
|
|
611
|
-
#
|
|
612
|
-
# @since 3.0.0
|
|
613
600
|
def with_inverse_sorting(opts = {})
|
|
614
601
|
begin
|
|
615
602
|
if sort = criteria.options[:sort] || ( { _id: 1 } unless opts[:id_sort] == :none )
|
|
@@ -629,8 +616,6 @@ module Mongoid
|
|
|
629
616
|
# context.cacheable?
|
|
630
617
|
#
|
|
631
618
|
# @return [ true, false ] If caching, and the cache isn't loaded.
|
|
632
|
-
#
|
|
633
|
-
# @since 3.0.0
|
|
634
619
|
def cacheable?
|
|
635
620
|
cached? && !cache_loaded?
|
|
636
621
|
end
|
|
@@ -644,8 +629,6 @@ module Mongoid
|
|
|
644
629
|
# context.cache_loaded?
|
|
645
630
|
#
|
|
646
631
|
# @return [ true, false ] If the cache is loaded.
|
|
647
|
-
#
|
|
648
|
-
# @since 3.0.0
|
|
649
632
|
def cache_loaded?
|
|
650
633
|
!!@cache_loaded
|
|
651
634
|
end
|
|
@@ -658,8 +641,6 @@ module Mongoid
|
|
|
658
641
|
# context.documents
|
|
659
642
|
#
|
|
660
643
|
# @return [ Array<Document> ] The documents.
|
|
661
|
-
#
|
|
662
|
-
# @since 3.0.0
|
|
663
644
|
def documents
|
|
664
645
|
@documents ||= []
|
|
665
646
|
end
|
|
@@ -678,8 +659,6 @@ module Mongoid
|
|
|
678
659
|
# context.documents_for_iteration
|
|
679
660
|
#
|
|
680
661
|
# @return [ Array<Document>, Mongo::Collection::View ] The docs to iterate.
|
|
681
|
-
#
|
|
682
|
-
# @since 3.0.0
|
|
683
662
|
def documents_for_iteration
|
|
684
663
|
return documents if cached? && !documents.empty?
|
|
685
664
|
return view unless eager_loadable?
|
|
@@ -697,8 +676,6 @@ module Mongoid
|
|
|
697
676
|
# end
|
|
698
677
|
#
|
|
699
678
|
# @param [ Document ] document The document to yield to.
|
|
700
|
-
#
|
|
701
|
-
# @since 3.0.0
|
|
702
679
|
def yield_document(document, &block)
|
|
703
680
|
doc = document.respond_to?(:_id) ?
|
|
704
681
|
document : Factory.from_db(klass, document, criteria)
|
|
@@ -715,6 +692,107 @@ module Mongoid
|
|
|
715
692
|
def acknowledged_write?
|
|
716
693
|
collection.write_concern.nil? || collection.write_concern.acknowledged?
|
|
717
694
|
end
|
|
695
|
+
|
|
696
|
+
# Extracts the value for the given field name from the given attribute
|
|
697
|
+
# hash.
|
|
698
|
+
#
|
|
699
|
+
# @param [ Hash ] attrs The attributes hash.
|
|
700
|
+
# @param [ String ] field_name The name of the field to extract.
|
|
701
|
+
#
|
|
702
|
+
# @param [ Object ] The value for the given field name
|
|
703
|
+
def extract_value(attrs, field_name)
|
|
704
|
+
def fetch_and_demongoize(d, meth, klass)
|
|
705
|
+
res = d.try(:fetch, meth, nil)
|
|
706
|
+
if field = klass.fields[meth]
|
|
707
|
+
field.demongoize(res)
|
|
708
|
+
else
|
|
709
|
+
res.class.demongoize(res)
|
|
710
|
+
end
|
|
711
|
+
end
|
|
712
|
+
|
|
713
|
+
k = klass
|
|
714
|
+
meths = field_name.split('.')
|
|
715
|
+
meths.each_with_index.inject(attrs) do |curr, (meth, i)|
|
|
716
|
+
is_translation = false
|
|
717
|
+
if !k.fields.key?(meth) && !k.relations.key?(meth)
|
|
718
|
+
if tr = meth.match(/(.*)_translations\z/)&.captures&.first
|
|
719
|
+
is_translation = true
|
|
720
|
+
meth = tr
|
|
721
|
+
end
|
|
722
|
+
end
|
|
723
|
+
|
|
724
|
+
# 1. If curr is an array fetch from all elements in the array.
|
|
725
|
+
# 2. If the field is localized, and is not an _translations field
|
|
726
|
+
# (_translations fields don't show up in the fields hash).
|
|
727
|
+
# - If this is the end of the methods, return the translation for
|
|
728
|
+
# the current locale.
|
|
729
|
+
# - Otherwise, return the whole translations hash so the next method
|
|
730
|
+
# can select the language it wants.
|
|
731
|
+
# 3. If the meth is an _translations field, do not demongoize the
|
|
732
|
+
# value so the full hash is returned.
|
|
733
|
+
# 4. Otherwise, fetch and demongoize the value for the key meth.
|
|
734
|
+
if curr.is_a? Array
|
|
735
|
+
res = curr.map { |x| fetch_and_demongoize(x, meth, k) }
|
|
736
|
+
res.empty? ? nil : res
|
|
737
|
+
elsif !is_translation && k.fields[meth]&.localized?
|
|
738
|
+
if i < meths.length-1
|
|
739
|
+
curr.try(:fetch, meth, nil)
|
|
740
|
+
else
|
|
741
|
+
fetch_and_demongoize(curr, meth, k)
|
|
742
|
+
end
|
|
743
|
+
elsif is_translation
|
|
744
|
+
curr.try(:fetch, meth, nil)
|
|
745
|
+
else
|
|
746
|
+
fetch_and_demongoize(curr, meth, k)
|
|
747
|
+
end.tap do
|
|
748
|
+
if as = k.try(:aliased_associations)
|
|
749
|
+
if a = as.fetch(meth, nil)
|
|
750
|
+
meth = a
|
|
751
|
+
end
|
|
752
|
+
end
|
|
753
|
+
|
|
754
|
+
if relation = k.relations[meth]
|
|
755
|
+
k = relation.klass
|
|
756
|
+
end
|
|
757
|
+
end
|
|
758
|
+
end
|
|
759
|
+
end
|
|
760
|
+
|
|
761
|
+
# Recursively demongoize the given value. This method recursively traverses
|
|
762
|
+
# the class tree to find the correct field to use to demongoize the value.
|
|
763
|
+
#
|
|
764
|
+
# @param [ String ] field_name The name of the field to demongoize.
|
|
765
|
+
# @param [ Object ] value The value to demongoize.
|
|
766
|
+
# @param [ Boolean ] is_translation The field we are retrieving is an
|
|
767
|
+
# _translations field.
|
|
768
|
+
#
|
|
769
|
+
# @return [ Object ] The demongoized value.
|
|
770
|
+
def recursive_demongoize(field_name, value, is_translation)
|
|
771
|
+
k = klass
|
|
772
|
+
field_name.split('.').each do |meth|
|
|
773
|
+
if as = k.try(:aliased_associations)
|
|
774
|
+
if a = as.fetch(meth, nil)
|
|
775
|
+
meth = a.to_s
|
|
776
|
+
end
|
|
777
|
+
end
|
|
778
|
+
|
|
779
|
+
if relation = k.relations[meth]
|
|
780
|
+
k = relation.klass
|
|
781
|
+
elsif field = k.fields[meth]
|
|
782
|
+
# If it's a localized field that's not a hash, don't demongoize
|
|
783
|
+
# again, we already have the translation. If it's an _translation
|
|
784
|
+
# field, don't demongoize, we want the full hash not just a
|
|
785
|
+
# specific translation.
|
|
786
|
+
if field.localized? && (!value.is_a?(Hash) || is_translation)
|
|
787
|
+
return value.class.demongoize(value)
|
|
788
|
+
else
|
|
789
|
+
return field.demongoize(value)
|
|
790
|
+
end
|
|
791
|
+
else
|
|
792
|
+
return value.class.demongoize(value)
|
|
793
|
+
end
|
|
794
|
+
end
|
|
795
|
+
end
|
|
718
796
|
end
|
|
719
797
|
end
|
|
720
798
|
end
|
|
@@ -1,12 +1,38 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "mongoid/contextual/aggregable/none"
|
|
4
|
+
|
|
2
5
|
module Mongoid
|
|
3
6
|
module Contextual
|
|
4
7
|
class None
|
|
5
8
|
include Enumerable
|
|
9
|
+
alias :old_sum :sum
|
|
10
|
+
|
|
11
|
+
include Aggregable::None
|
|
6
12
|
include Queryable
|
|
7
13
|
|
|
8
14
|
attr_reader :criteria, :klass
|
|
9
15
|
|
|
16
|
+
alias :new_sum :sum
|
|
17
|
+
|
|
18
|
+
# Get the sum in the null context.
|
|
19
|
+
#
|
|
20
|
+
# @example Get the sum of null context.
|
|
21
|
+
# context.sum(_field)
|
|
22
|
+
#
|
|
23
|
+
# @param [ Symbol ] _field The field to sum.
|
|
24
|
+
#
|
|
25
|
+
# @return [ Integer | Symbol ] If Mongoid.broken_aggregables is
|
|
26
|
+
# set to false, this will always be zero. Otherwise, it will return the
|
|
27
|
+
# field name as a symbol.
|
|
28
|
+
def sum(_field = nil)
|
|
29
|
+
if Mongoid.broken_aggregables
|
|
30
|
+
old_sum(_field)
|
|
31
|
+
else
|
|
32
|
+
new_sum(_field)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
10
36
|
# Check if the context is equal to the other object.
|
|
11
37
|
#
|
|
12
38
|
# @example Check equality.
|
|
@@ -15,35 +41,31 @@ module Mongoid
|
|
|
15
41
|
# @param [ Array ] other The other array.
|
|
16
42
|
#
|
|
17
43
|
# @return [ true, false ] If the objects are equal.
|
|
18
|
-
#
|
|
19
|
-
# @since 4.0.0
|
|
20
44
|
def ==(other)
|
|
21
45
|
other.is_a?(None)
|
|
22
46
|
end
|
|
23
47
|
|
|
24
|
-
#
|
|
48
|
+
# Get the distinct field values in null context.
|
|
25
49
|
#
|
|
26
|
-
# @example Get the distinct values.
|
|
50
|
+
# @example Get the distinct values in null context.
|
|
27
51
|
# context.distinct(:name)
|
|
28
52
|
#
|
|
29
|
-
# @param [ String, Symbol ]
|
|
53
|
+
# @param [ String, Symbol ] _field The name of the field.
|
|
30
54
|
#
|
|
31
|
-
# @return [ Array ]
|
|
32
|
-
def distinct(
|
|
55
|
+
# @return [ Array ] An empty Array.
|
|
56
|
+
def distinct(_field)
|
|
33
57
|
[]
|
|
34
58
|
end
|
|
35
59
|
|
|
36
60
|
# Iterate over the null context. There are no documents to iterate over
|
|
37
61
|
# in this case.
|
|
38
62
|
#
|
|
39
|
-
# @example Iterate over the context.
|
|
63
|
+
# @example Iterate over the null context.
|
|
40
64
|
# context.each do |doc|
|
|
41
65
|
# puts doc.name
|
|
42
66
|
# end
|
|
43
67
|
#
|
|
44
68
|
# @return [ Enumerator ] The enumerator.
|
|
45
|
-
#
|
|
46
|
-
# @since 4.0.0
|
|
47
69
|
def each
|
|
48
70
|
if block_given?
|
|
49
71
|
[].each { |doc| yield(doc) }
|
|
@@ -55,23 +77,20 @@ module Mongoid
|
|
|
55
77
|
|
|
56
78
|
# Do any documents exist for the context.
|
|
57
79
|
#
|
|
58
|
-
# @example Do any documents exist
|
|
80
|
+
# @example Do any documents exist in the null context.
|
|
59
81
|
# context.exists?
|
|
60
82
|
#
|
|
61
|
-
# @return [
|
|
62
|
-
#
|
|
63
|
-
# @since 4.0.0
|
|
83
|
+
# @return [ false ] Always false.
|
|
64
84
|
def exists?; false; end
|
|
65
85
|
|
|
66
|
-
|
|
67
|
-
# Allow pluck for null context.
|
|
86
|
+
# Pluck the field values in null context.
|
|
68
87
|
#
|
|
69
|
-
# @example
|
|
88
|
+
# @example Get the values for null context.
|
|
70
89
|
# context.pluck(:name)
|
|
71
90
|
#
|
|
72
91
|
# @param [ String, Symbol, Array ] args Field or fields to pluck.
|
|
73
92
|
#
|
|
74
|
-
# @return [ Array ]
|
|
93
|
+
# @return [ Array ] An empty Array.
|
|
75
94
|
def pluck(*args)
|
|
76
95
|
[]
|
|
77
96
|
end
|
|
@@ -82,34 +101,31 @@ module Mongoid
|
|
|
82
101
|
# Null.new(criteria)
|
|
83
102
|
#
|
|
84
103
|
# @param [ Criteria ] criteria The criteria.
|
|
85
|
-
#
|
|
86
|
-
# @since 4.0.0
|
|
87
104
|
def initialize(criteria)
|
|
88
105
|
@criteria, @klass = criteria, criteria.klass
|
|
89
106
|
end
|
|
90
107
|
|
|
91
108
|
# Always returns nil.
|
|
92
109
|
#
|
|
93
|
-
# @example Get the last document.
|
|
110
|
+
# @example Get the last document in null context.
|
|
94
111
|
# context.last
|
|
95
112
|
#
|
|
96
113
|
# @return [ nil ] Always nil.
|
|
97
|
-
#
|
|
98
|
-
# @since 4.0.0
|
|
99
114
|
def last; nil; end
|
|
100
115
|
|
|
101
116
|
# Always returns zero.
|
|
102
117
|
#
|
|
103
|
-
# @example Get the length of
|
|
118
|
+
# @example Get the length of null context.
|
|
104
119
|
# context.length
|
|
105
120
|
#
|
|
106
121
|
# @return [ Integer ] Always zero.
|
|
107
|
-
#
|
|
108
|
-
# @since 4.0.0
|
|
109
122
|
def length
|
|
110
|
-
entries.length
|
|
123
|
+
Mongoid.broken_aggregables ? 0 : entries.length
|
|
111
124
|
end
|
|
112
125
|
alias :size :length
|
|
126
|
+
|
|
127
|
+
alias :find_first :first
|
|
128
|
+
alias :one :first
|
|
113
129
|
end
|
|
114
130
|
end
|
|
115
131
|
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
module Mongoid
|
|
3
4
|
module Contextual
|
|
4
5
|
module Queryable
|
|
@@ -14,8 +15,6 @@ module Mongoid
|
|
|
14
15
|
# context.blank?
|
|
15
16
|
#
|
|
16
17
|
# @return [ true, false ] If the context is empty.
|
|
17
|
-
#
|
|
18
|
-
# @since 3.0.0
|
|
19
18
|
def blank?
|
|
20
19
|
!exists?
|
|
21
20
|
end
|