mongoid 7.0.10 → 7.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
data/lib/mongoid/criteria.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "mongoid/criteria/findable"
|
3
4
|
require "mongoid/criteria/includable"
|
4
5
|
require "mongoid/criteria/inspectable"
|
@@ -18,9 +19,17 @@ module Mongoid
|
|
18
19
|
# against the database.
|
19
20
|
class Criteria
|
20
21
|
include Enumerable
|
22
|
+
|
23
|
+
# @api private
|
24
|
+
alias :_enumerable_find :find
|
25
|
+
|
21
26
|
include Contextual
|
22
27
|
include Queryable
|
23
28
|
include Findable
|
29
|
+
|
30
|
+
# @api private
|
31
|
+
alias :_findable_find :find
|
32
|
+
|
24
33
|
include Inspectable
|
25
34
|
include Includable
|
26
35
|
include Marshalable
|
@@ -32,8 +41,6 @@ module Mongoid
|
|
32
41
|
|
33
42
|
# Static array used to check with method missing - we only need to ever
|
34
43
|
# instantiate once.
|
35
|
-
#
|
36
|
-
# @since 4.0.0
|
37
44
|
CHECK = []
|
38
45
|
|
39
46
|
attr_accessor :embedded, :klass, :parent_document, :association
|
@@ -46,13 +53,53 @@ module Mongoid
|
|
46
53
|
# @param [ Object ] other The other +Enumerable+ or +Criteria+ to compare to.
|
47
54
|
#
|
48
55
|
# @return [ true, false ] If the objects are equal.
|
49
|
-
#
|
50
|
-
# @since 1.0.0
|
51
56
|
def ==(other)
|
52
57
|
return super if other.respond_to?(:selector)
|
53
58
|
entries == other
|
54
59
|
end
|
55
60
|
|
61
|
+
# Finds one or many documents given the provided _id values, or filters
|
62
|
+
# the documents in the current scope in the application process space
|
63
|
+
# after loading them if needed.
|
64
|
+
#
|
65
|
+
# If this method is not given a block, it delegates to +Findable#find+
|
66
|
+
# and finds one or many documents for the provided _id values.
|
67
|
+
#
|
68
|
+
# If this method is given a block, it delegates to +Enumerable#find+ and
|
69
|
+
# returns the first document of those found by the current Crieria object
|
70
|
+
# for which the block returns a truthy value.
|
71
|
+
#
|
72
|
+
# Note that the "default proc" argument of Enumerable is not specially
|
73
|
+
# treated by Mongoid - the decision between delegating to +Findable+ vs
|
74
|
+
# +Enumerable+ is made solely based on whether +find+ is passed a block.
|
75
|
+
#
|
76
|
+
# @example Finds a document by its _id, invokes Findable#find.
|
77
|
+
# critera.find("1234")
|
78
|
+
#
|
79
|
+
# @example Finds the first matching document using a block, invokes Enumerable#find.
|
80
|
+
# criteria.find { |item| item.name == "Depeche Mode" }
|
81
|
+
#
|
82
|
+
# @example Finds the first matching document using a block using the default Proc, invokes Enumerable#find.
|
83
|
+
# criteria.find(-> { "Default Band" }) { |item| item.name == "Milwaukee Mode" }
|
84
|
+
#
|
85
|
+
# @example Tries to find a document whose _id is the stringification of the provided Proc, typically failing.
|
86
|
+
# enumerator = criteria.find(-> { "Default Band" })
|
87
|
+
#
|
88
|
+
# @return [ Document | Array<Document> | nil ] A document or matching documents.
|
89
|
+
#
|
90
|
+
# @raise Errors::DocumentNotFound If the parameters were _id values and
|
91
|
+
# not all documents are found and the +raise_not_found_error+
|
92
|
+
# Mongoid configuration option is truthy.
|
93
|
+
#
|
94
|
+
# @see https://ruby-doc.org/core/Enumerable.html#method-i-find
|
95
|
+
def find(*args, &block)
|
96
|
+
if block_given?
|
97
|
+
_enumerable_find(*args, &block)
|
98
|
+
else
|
99
|
+
_findable_find(*args)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
56
103
|
# Needed to properly get a criteria back as json
|
57
104
|
#
|
58
105
|
# @example Get the criteria as json.
|
@@ -96,8 +143,6 @@ module Mongoid
|
|
96
143
|
# criteria.documents
|
97
144
|
#
|
98
145
|
# @return [ Array<Document> ] The documents.
|
99
|
-
#
|
100
|
-
# @since 3.0.0
|
101
146
|
def documents
|
102
147
|
@documents ||= []
|
103
148
|
end
|
@@ -109,8 +154,6 @@ module Mongoid
|
|
109
154
|
# @param [ Array<Document> ] docs The embedded documents.
|
110
155
|
#
|
111
156
|
# @return [ Array<Document> ] The embedded documents.
|
112
|
-
#
|
113
|
-
# @since 3.0.0
|
114
157
|
def documents=(docs)
|
115
158
|
@documents = docs
|
116
159
|
end
|
@@ -121,8 +164,6 @@ module Mongoid
|
|
121
164
|
# criteria.embedded?
|
122
165
|
#
|
123
166
|
# @return [ true, false ] If the criteria is embedded.
|
124
|
-
#
|
125
|
-
# @since 3.0.0
|
126
167
|
def embedded?
|
127
168
|
!!@embedded
|
128
169
|
end
|
@@ -134,8 +175,6 @@ module Mongoid
|
|
134
175
|
# criteria.extract_id
|
135
176
|
#
|
136
177
|
# @return [ Object ] The id.
|
137
|
-
#
|
138
|
-
# @since 2.3.0
|
139
178
|
def extract_id
|
140
179
|
selector.extract_id
|
141
180
|
end
|
@@ -149,8 +188,6 @@ module Mongoid
|
|
149
188
|
# @param [ Hash ] extras The extra driver options.
|
150
189
|
#
|
151
190
|
# @return [ Criteria ] The cloned criteria.
|
152
|
-
#
|
153
|
-
# @since 2.0.0
|
154
191
|
def extras(extras)
|
155
192
|
crit = clone
|
156
193
|
crit.options.merge!(extras)
|
@@ -163,11 +200,9 @@ module Mongoid
|
|
163
200
|
# criteria.field_list
|
164
201
|
#
|
165
202
|
# @return [ Array<String> ] The fields.
|
166
|
-
#
|
167
|
-
# @since 2.0.0
|
168
203
|
def field_list
|
169
204
|
if options[:fields]
|
170
|
-
options[:fields].keys.reject{ |key| key ==
|
205
|
+
options[:fields].keys.reject{ |key| key == klass.discriminator_key }
|
171
206
|
else
|
172
207
|
[]
|
173
208
|
end
|
@@ -181,8 +216,6 @@ module Mongoid
|
|
181
216
|
# criteria.freeze
|
182
217
|
#
|
183
218
|
# @return [ Criteria ] The frozen criteria.
|
184
|
-
#
|
185
|
-
# @since 2.0.0
|
186
219
|
def freeze
|
187
220
|
context and inclusions and super
|
188
221
|
end
|
@@ -193,8 +226,6 @@ module Mongoid
|
|
193
226
|
# Criteria.new(Band)
|
194
227
|
#
|
195
228
|
# @param [ Class ] klass The model class.
|
196
|
-
#
|
197
|
-
# @since 1.0.0
|
198
229
|
def initialize(klass)
|
199
230
|
@klass = klass
|
200
231
|
@embedded = nil
|
@@ -236,8 +267,6 @@ module Mongoid
|
|
236
267
|
# @param [ Criteria ] other The criteria to merge in.
|
237
268
|
#
|
238
269
|
# @return [ Criteria ] The merged criteria.
|
239
|
-
#
|
240
|
-
# @since 3.0.0
|
241
270
|
def merge!(other)
|
242
271
|
criteria = other.to_criteria
|
243
272
|
selector.merge!(criteria.selector)
|
@@ -255,8 +284,6 @@ module Mongoid
|
|
255
284
|
# criteria.none
|
256
285
|
#
|
257
286
|
# @return [ Criteria ] The none criteria.
|
258
|
-
#
|
259
|
-
# @since 4.0.0
|
260
287
|
def none
|
261
288
|
@none = true and self
|
262
289
|
end
|
@@ -267,8 +294,6 @@ module Mongoid
|
|
267
294
|
# criteria.empty_and_chainable?
|
268
295
|
#
|
269
296
|
# @return [ true, false ] If the criteria is a none.
|
270
|
-
#
|
271
|
-
# @since 4.0.0
|
272
297
|
def empty_and_chainable?
|
273
298
|
!!@none
|
274
299
|
end
|
@@ -281,19 +306,16 @@ module Mongoid
|
|
281
306
|
# @param [ Array<Symbol> ] args The names of the fields.
|
282
307
|
#
|
283
308
|
# @return [ Criteria ] The cloned criteria.
|
284
|
-
#
|
285
|
-
# @since 1.0.0
|
286
309
|
def only(*args)
|
287
|
-
return clone if args.flatten.empty?
|
288
310
|
args = args.flatten
|
311
|
+
return clone if args.empty?
|
289
312
|
if (args & Fields::IDS).empty?
|
290
313
|
args.unshift(:_id)
|
291
314
|
end
|
292
315
|
if klass.hereditary?
|
293
|
-
|
294
|
-
else
|
295
|
-
super(*args)
|
316
|
+
args.push(klass.discriminator_key.to_sym)
|
296
317
|
end
|
318
|
+
super(*args)
|
297
319
|
end
|
298
320
|
|
299
321
|
# Set the read preference for the criteria.
|
@@ -304,8 +326,6 @@ module Mongoid
|
|
304
326
|
# @param [ Hash ] value The mode preference.
|
305
327
|
#
|
306
328
|
# @return [ Criteria ] The cloned criteria.
|
307
|
-
#
|
308
|
-
# @since 5.0.0
|
309
329
|
def read(value = nil)
|
310
330
|
clone.tap do |criteria|
|
311
331
|
criteria.options.merge!(read: value)
|
@@ -320,10 +340,8 @@ module Mongoid
|
|
320
340
|
# @param [ Array<Symbol> ] args The names of the fields.
|
321
341
|
#
|
322
342
|
# @return [ Criteria ] The cloned criteria.
|
323
|
-
#
|
324
|
-
# @since 4.0.3
|
325
343
|
def without(*args)
|
326
|
-
args -=
|
344
|
+
args -= id_fields
|
327
345
|
super(*args)
|
328
346
|
end
|
329
347
|
|
@@ -348,8 +366,6 @@ module Mongoid
|
|
348
366
|
# criteria.to_criteria
|
349
367
|
#
|
350
368
|
# @return [ Criteria ] self.
|
351
|
-
#
|
352
|
-
# @since 3.0.0
|
353
369
|
def to_criteria
|
354
370
|
self
|
355
371
|
end
|
@@ -360,8 +376,6 @@ module Mongoid
|
|
360
376
|
# criteria.to_proc
|
361
377
|
#
|
362
378
|
# @return [ Proc ] The wrapped criteria.
|
363
|
-
#
|
364
|
-
# @since 3.0.0
|
365
379
|
def to_proc
|
366
380
|
->{ self }
|
367
381
|
end
|
@@ -377,7 +391,7 @@ module Mongoid
|
|
377
391
|
#
|
378
392
|
# @return [ Criteria ] The cloned criteria.
|
379
393
|
def type(types)
|
380
|
-
any_in(
|
394
|
+
any_in(self.discriminator_key.to_sym => Array(types))
|
381
395
|
end
|
382
396
|
|
383
397
|
# This is the general entry point for most MongoDB queries. This either
|
@@ -396,11 +410,22 @@ module Mongoid
|
|
396
410
|
# is embedded.
|
397
411
|
#
|
398
412
|
# @return [ Criteria ] The cloned selectable.
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
413
|
+
def where(*args)
|
414
|
+
# Historically this method required exactly one argument.
|
415
|
+
# As of https://jira.mongodb.org/browse/MONGOID-4804 it also accepts
|
416
|
+
# zero arguments.
|
417
|
+
# The underlying where implemetation that super invokes supports
|
418
|
+
# any number of arguments, but we don't presently allow mutiple
|
419
|
+
# arguments through this method. This API can be reconsidered in the
|
420
|
+
# future.
|
421
|
+
if args.length > 1
|
422
|
+
raise ArgumentError, "Criteria#where requires zero or one arguments (given #{args.length})"
|
423
|
+
end
|
424
|
+
if args.length == 1
|
425
|
+
expression = args.first
|
426
|
+
if expression.is_a?(::String) && embedded?
|
427
|
+
raise Errors::UnsupportedJavascript.new(klass, expression)
|
428
|
+
end
|
404
429
|
end
|
405
430
|
super
|
406
431
|
end
|
@@ -412,8 +437,6 @@ module Mongoid
|
|
412
437
|
# criteria.without_options
|
413
438
|
#
|
414
439
|
# @return [ Criteria ] The cloned criteria.
|
415
|
-
#
|
416
|
-
# @since 3.0.4
|
417
440
|
def without_options
|
418
441
|
crit = clone
|
419
442
|
crit.options.clear
|
@@ -432,8 +455,6 @@ module Mongoid
|
|
432
455
|
# @param [ Hash ] scope The scope for the code.
|
433
456
|
#
|
434
457
|
# @return [ Criteria ] The criteria.
|
435
|
-
#
|
436
|
-
# @since 3.1.0
|
437
458
|
def for_js(javascript, scope = {})
|
438
459
|
code = if scope.empty?
|
439
460
|
# CodeWithScope is not supported for $where as of MongoDB 4.4
|
@@ -459,8 +480,6 @@ module Mongoid
|
|
459
480
|
#
|
460
481
|
# @raise [ Errors::DocumentNotFound ] If none are found and raising an
|
461
482
|
# error.
|
462
|
-
#
|
463
|
-
# @since 3.0.0
|
464
483
|
def check_for_missing_documents!(result, ids)
|
465
484
|
if (result.size < ids.size) && Mongoid.raise_not_found_error
|
466
485
|
raise Errors::DocumentNotFound.new(klass, ids, ids - result.map(&:_id))
|
@@ -481,8 +500,6 @@ module Mongoid
|
|
481
500
|
# @param [ Criteria ] other The criteria getting cloned.
|
482
501
|
#
|
483
502
|
# @return [ nil ] nil.
|
484
|
-
#
|
485
|
-
# @since 1.0.0
|
486
503
|
def initialize_copy(other)
|
487
504
|
@inclusions = other.inclusions.dup
|
488
505
|
@scoping_options = other.scoping_options
|
@@ -501,9 +518,7 @@ module Mongoid
|
|
501
518
|
# @param [ Array ] args The arguments.
|
502
519
|
#
|
503
520
|
# @return [ Object ] The result of the method call.
|
504
|
-
|
505
|
-
# @since 1.0.0
|
506
|
-
def method_missing(name, *args, &block)
|
521
|
+
ruby2_keywords def method_missing(name, *args, &block)
|
507
522
|
if klass.respond_to?(name)
|
508
523
|
klass.send(:with_scope, self) do
|
509
524
|
klass.send(name, *args, &block)
|
@@ -522,8 +537,6 @@ module Mongoid
|
|
522
537
|
# criteria.merge_type_selection
|
523
538
|
#
|
524
539
|
# @return [ true, false ] If type selection was added.
|
525
|
-
#
|
526
|
-
# @since 3.0.3
|
527
540
|
def merge_type_selection
|
528
541
|
selector.merge!(type_selection) if type_selectable?
|
529
542
|
end
|
@@ -536,12 +549,10 @@ module Mongoid
|
|
536
549
|
# criteria.type_selectable?
|
537
550
|
#
|
538
551
|
# @return [ true, false ] If type selection should be added.
|
539
|
-
#
|
540
|
-
# @since 3.0.3
|
541
552
|
def type_selectable?
|
542
553
|
klass.hereditary? &&
|
543
|
-
!selector.keys.include?(
|
544
|
-
!selector.keys.include?(
|
554
|
+
!selector.keys.include?(self.discriminator_key) &&
|
555
|
+
!selector.keys.include?(self.discriminator_key.to_sym)
|
545
556
|
end
|
546
557
|
|
547
558
|
# Get the selector for type selection.
|
@@ -552,14 +563,12 @@ module Mongoid
|
|
552
563
|
# criteria.type_selection
|
553
564
|
#
|
554
565
|
# @return [ Hash ] The type selection.
|
555
|
-
#
|
556
|
-
# @since 3.0.3
|
557
566
|
def type_selection
|
558
567
|
klasses = klass._types
|
559
568
|
if klasses.size > 1
|
560
|
-
{
|
569
|
+
{ klass.discriminator_key.to_sym => { "$in" => klass._types }}
|
561
570
|
else
|
562
|
-
{
|
571
|
+
{ klass.discriminator_key.to_sym => klass._types[0] }
|
563
572
|
end
|
564
573
|
end
|
565
574
|
|
@@ -571,8 +580,6 @@ module Mongoid
|
|
571
580
|
# criteria.selector_with_type_selection
|
572
581
|
#
|
573
582
|
# @return [ Hash ] The selector.
|
574
|
-
#
|
575
|
-
# @since 3.0.3
|
576
583
|
def selector_with_type_selection
|
577
584
|
type_selectable? ? selector.merge(type_selection) : selector
|
578
585
|
end
|
data/lib/mongoid/document.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "mongoid/positional"
|
3
4
|
require "mongoid/evolvable"
|
4
5
|
require "mongoid/extensions"
|
@@ -38,8 +39,6 @@ module Mongoid
|
|
38
39
|
# that should be used instead.
|
39
40
|
# When ruby driver 2.3.0 is released and Mongoid can be updated
|
40
41
|
# to require >= 2.3.0, the BSON constant can be used.
|
41
|
-
#
|
42
|
-
# @since 6.0.0
|
43
42
|
ILLEGAL_KEY = /(\A[$])|(\.)/.freeze
|
44
43
|
|
45
44
|
# Freezes the internal attributes of the document.
|
@@ -48,8 +47,6 @@ module Mongoid
|
|
48
47
|
# document.freeze
|
49
48
|
#
|
50
49
|
# @return [ Document ] The document.
|
51
|
-
#
|
52
|
-
# @since 2.0.0
|
53
50
|
def freeze
|
54
51
|
as_attributes.freeze and self
|
55
52
|
end
|
@@ -60,8 +57,6 @@ module Mongoid
|
|
60
57
|
# document.frozen?
|
61
58
|
#
|
62
59
|
# @return [ true, false ] True if frozen, else false.
|
63
|
-
#
|
64
|
-
# @since 2.0.0
|
65
60
|
def frozen?
|
66
61
|
attributes.frozen?
|
67
62
|
end
|
@@ -76,8 +71,6 @@ module Mongoid
|
|
76
71
|
# document.hash
|
77
72
|
#
|
78
73
|
# @return [ Integer ] The hash of the document's identity.
|
79
|
-
#
|
80
|
-
# @since 1.0.0
|
81
74
|
def hash
|
82
75
|
identity.hash
|
83
76
|
end
|
@@ -90,8 +83,6 @@ module Mongoid
|
|
90
83
|
# document.identity
|
91
84
|
#
|
92
85
|
# @return [ Array ] An array containing [document.class, document._id]
|
93
|
-
#
|
94
|
-
# @since 3.0.0
|
95
86
|
def identity
|
96
87
|
[ self.class, self._id ]
|
97
88
|
end
|
@@ -109,8 +100,6 @@ module Mongoid
|
|
109
100
|
# @param [ Hash ] attrs The attributes to set up the document with.
|
110
101
|
#
|
111
102
|
# @return [ Document ] A new document.
|
112
|
-
#
|
113
|
-
# @since 1.0.0
|
114
103
|
def initialize(attrs = nil)
|
115
104
|
@__parent = nil
|
116
105
|
_building do
|
@@ -134,8 +123,6 @@ module Mongoid
|
|
134
123
|
# document.model_name
|
135
124
|
#
|
136
125
|
# @return [ String ] The model name.
|
137
|
-
#
|
138
|
-
# @since 3.0.16
|
139
126
|
def model_name
|
140
127
|
self.class.model_name
|
141
128
|
end
|
@@ -146,10 +133,8 @@ module Mongoid
|
|
146
133
|
# document.to_key
|
147
134
|
#
|
148
135
|
# @return [ String ] The id of the document or nil if new.
|
149
|
-
#
|
150
|
-
# @since 2.4.0
|
151
136
|
def to_key
|
152
|
-
(persisted? || destroyed?) ? [
|
137
|
+
(persisted? || destroyed?) ? [ _id.to_s ] : nil
|
153
138
|
end
|
154
139
|
|
155
140
|
# Return an array with this +Document+ only in it.
|
@@ -158,8 +143,6 @@ module Mongoid
|
|
158
143
|
# document.to_a
|
159
144
|
#
|
160
145
|
# @return [ Array<Document> ] An array with the document as its only item.
|
161
|
-
#
|
162
|
-
# @since 1.0.0
|
163
146
|
def to_a
|
164
147
|
[ self ]
|
165
148
|
end
|
@@ -172,8 +155,6 @@ module Mongoid
|
|
172
155
|
# person.as_document
|
173
156
|
#
|
174
157
|
# @return [ Hash ] A hash of all attributes in the hierarchy.
|
175
|
-
#
|
176
|
-
# @since 1.0.0
|
177
158
|
def as_document
|
178
159
|
BSON::Document.new(as_attributes)
|
179
160
|
end
|
@@ -192,15 +173,14 @@ module Mongoid
|
|
192
173
|
#
|
193
174
|
# @param [ Hash ] options The options.
|
194
175
|
#
|
195
|
-
# @option options [ true, false ] :compact Whether to include fields
|
196
|
-
# nil values in the json document.
|
176
|
+
# @option options [ true, false ] :compact (Deprecated) Whether to include fields
|
177
|
+
# with nil values in the json document.
|
197
178
|
#
|
198
179
|
# @return [ Hash ] The document as json.
|
199
|
-
#
|
200
|
-
# @since 5.1.0
|
201
180
|
def as_json(options = nil)
|
202
181
|
rv = super
|
203
182
|
if options && options[:compact]
|
183
|
+
Mongoid.logger.warn('#as_json :compact option is deprecated. Please call #compact on the returned Hash object instead.')
|
204
184
|
rv = rv.compact
|
205
185
|
end
|
206
186
|
rv
|
@@ -217,8 +197,6 @@ module Mongoid
|
|
217
197
|
# @param [ Class ] klass The class to become.
|
218
198
|
#
|
219
199
|
# @return [ Document ] An instance of the specified class.
|
220
|
-
#
|
221
|
-
# @since 2.0.0
|
222
200
|
def becomes(klass)
|
223
201
|
unless klass.include?(Mongoid::Document)
|
224
202
|
raise ArgumentError, "A class which includes Mongoid::Document is expected"
|
@@ -227,12 +205,13 @@ module Mongoid
|
|
227
205
|
became = klass.new(clone_document)
|
228
206
|
became._id = _id
|
229
207
|
became.instance_variable_set(:@changed_attributes, changed_attributes)
|
230
|
-
|
231
|
-
|
208
|
+
new_errors = ActiveModel::Errors.new(became)
|
209
|
+
new_errors.copy!(errors)
|
210
|
+
became.instance_variable_set(:@errors, new_errors)
|
232
211
|
became.instance_variable_set(:@new_record, new_record?)
|
233
212
|
became.instance_variable_set(:@destroyed, destroyed?)
|
234
|
-
became.changed_attributes[
|
235
|
-
became.
|
213
|
+
became.changed_attributes[klass.discriminator_key] = self.class.discriminator_value
|
214
|
+
became[klass.discriminator_key] = klass.discriminator_value
|
236
215
|
|
237
216
|
# mark embedded docs as persisted
|
238
217
|
embedded_relations.each_pair do |name, meta|
|
@@ -252,8 +231,6 @@ module Mongoid
|
|
252
231
|
# Returns the logger
|
253
232
|
#
|
254
233
|
# @return [ Logger ] The configured logger or a default Logger instance.
|
255
|
-
#
|
256
|
-
# @since 2.2.0
|
257
234
|
def logger
|
258
235
|
Mongoid.logger
|
259
236
|
end
|
@@ -264,26 +241,10 @@ module Mongoid
|
|
264
241
|
# model.model_key
|
265
242
|
#
|
266
243
|
# @return [ String ] The model key.
|
267
|
-
#
|
268
|
-
# @since 2.4.0
|
269
244
|
def model_key
|
270
245
|
@model_cache_key ||= self.class.model_name.cache_key
|
271
246
|
end
|
272
247
|
|
273
|
-
# Implement this for calls to flatten on array.
|
274
|
-
#
|
275
|
-
# @example Get the document as an array.
|
276
|
-
# document.to_ary
|
277
|
-
#
|
278
|
-
# @return [ nil ] Always nil.
|
279
|
-
#
|
280
|
-
# @since 2.1.0
|
281
|
-
def to_ary
|
282
|
-
nil
|
283
|
-
end
|
284
|
-
|
285
|
-
private
|
286
|
-
|
287
248
|
def as_attributes
|
288
249
|
return attributes if frozen?
|
289
250
|
embedded_relations.each_pair do |name, meta|
|
@@ -303,20 +264,6 @@ module Mongoid
|
|
303
264
|
|
304
265
|
module ClassMethods
|
305
266
|
|
306
|
-
# Performs class equality checking.
|
307
|
-
#
|
308
|
-
# @example Compare the classes.
|
309
|
-
# document === other
|
310
|
-
#
|
311
|
-
# @param [ Document, Object ] other The other object to compare with.
|
312
|
-
#
|
313
|
-
# @return [ true, false ] True if the classes are equal, false if not.
|
314
|
-
#
|
315
|
-
# @since 2.0.0.rc.4
|
316
|
-
def ===(other)
|
317
|
-
other.class == Class ? self <= other : other.is_a?(self)
|
318
|
-
end
|
319
|
-
|
320
267
|
# Instantiate a new object, only when loaded from the database or when
|
321
268
|
# the attributes have already been typecast.
|
322
269
|
#
|
@@ -328,8 +275,6 @@ module Mongoid
|
|
328
275
|
# criteria.
|
329
276
|
#
|
330
277
|
# @return [ Document ] A new document.
|
331
|
-
#
|
332
|
-
# @since 1.0.0
|
333
278
|
def instantiate(attrs = nil, selected_fields = nil)
|
334
279
|
attributes = attrs || {}
|
335
280
|
doc = allocate
|
@@ -348,17 +293,25 @@ module Mongoid
|
|
348
293
|
# document._types
|
349
294
|
#
|
350
295
|
# @return [ Array<Class> ] All subclasses of the current document.
|
351
|
-
#
|
352
|
-
# @since 1.0.0
|
353
296
|
def _types
|
354
|
-
@_type ||= (descendants + [ self ]).uniq.map(&:
|
297
|
+
@_type ||= (descendants + [ self ]).uniq.map(&:discriminator_value)
|
298
|
+
end
|
299
|
+
|
300
|
+
# Clear the @_type cache. This is generally called when changing the discriminator
|
301
|
+
# key/value on a class.
|
302
|
+
#
|
303
|
+
# @example Get the types.
|
304
|
+
# document._mongoid_clear_types
|
305
|
+
#
|
306
|
+
# @api private
|
307
|
+
def _mongoid_clear_types
|
308
|
+
@_type = nil
|
309
|
+
superclass._mongoid_clear_types if hereditary?
|
355
310
|
end
|
356
311
|
|
357
312
|
# Set the i18n scope to overwrite ActiveModel.
|
358
313
|
#
|
359
314
|
# @return [ Symbol ] :mongoid
|
360
|
-
#
|
361
|
-
# @since 2.0.0
|
362
315
|
def i18n_scope
|
363
316
|
:mongoid
|
364
317
|
end
|
@@ -369,8 +322,6 @@ module Mongoid
|
|
369
322
|
# Person.logger
|
370
323
|
#
|
371
324
|
# @return [ Logger ] The configured logger or a default Logger instance.
|
372
|
-
#
|
373
|
-
# @since 2.2.0
|
374
325
|
def logger
|
375
326
|
Mongoid.logger
|
376
327
|
end
|
data/lib/mongoid/equality.rb
CHANGED
@@ -1,8 +1,12 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Mongoid
|
3
4
|
|
4
|
-
# This module contains the
|
5
|
+
# This module contains the behavior of Mongoid's clone/dup of documents.
|
5
6
|
module Equality
|
7
|
+
# Leave the current contents of this module outside of InstanceMethods
|
8
|
+
# to prevent cherry picking conflicts. For now...
|
9
|
+
extend ActiveSupport::Concern
|
6
10
|
|
7
11
|
# Default comparison is via the string version of the id.
|
8
12
|
#
|
@@ -12,8 +16,6 @@ module Mongoid
|
|
12
16
|
# @param [ Document ] other The document to compare with.
|
13
17
|
#
|
14
18
|
# @return [ Integer ] -1, 0, 1.
|
15
|
-
#
|
16
|
-
# @since 1.0.0
|
17
19
|
def <=>(other)
|
18
20
|
attributes["_id"].to_s <=> other.attributes["_id"].to_s
|
19
21
|
end
|
@@ -27,8 +29,6 @@ module Mongoid
|
|
27
29
|
# @param [ Document, Object ] other The other object to compare with.
|
28
30
|
#
|
29
31
|
# @return [ true, false ] True if the ids are equal, false if not.
|
30
|
-
#
|
31
|
-
# @since 1.0.0
|
32
32
|
def ==(other)
|
33
33
|
self.class == other.class &&
|
34
34
|
attributes["_id"] == other.attributes["_id"]
|
@@ -42,10 +42,12 @@ module Mongoid
|
|
42
42
|
# @param [ Document, Object ] other The other object to compare with.
|
43
43
|
#
|
44
44
|
# @return [ true, false ] True if the classes are equal, false if not.
|
45
|
-
#
|
46
|
-
# @since 1.0.0
|
47
45
|
def ===(other)
|
48
|
-
|
46
|
+
if Mongoid.legacy_triple_equals
|
47
|
+
super
|
48
|
+
else
|
49
|
+
other.class == Class ? self.class === other : self == other
|
50
|
+
end
|
49
51
|
end
|
50
52
|
|
51
53
|
# Delegates to ==. Used when needing checks in hashes.
|
@@ -56,11 +58,26 @@ module Mongoid
|
|
56
58
|
# @param [ Document, Object ] other The object to check against.
|
57
59
|
#
|
58
60
|
# @return [ true, false ] True if equal, false if not.
|
59
|
-
#
|
60
|
-
# @since 1.0.0
|
61
61
|
def eql?(other)
|
62
62
|
self == (other)
|
63
63
|
end
|
64
|
+
|
65
|
+
module ClassMethods
|
66
|
+
# Performs class equality checking.
|
67
|
+
#
|
68
|
+
# @example Compare the classes.
|
69
|
+
# document === other
|
70
|
+
#
|
71
|
+
# @param [ Document, Object ] other The other object to compare with.
|
72
|
+
#
|
73
|
+
# @return [ true, false ] True if the classes are equal, false if not.
|
74
|
+
def ===(other)
|
75
|
+
if Mongoid.legacy_triple_equals
|
76
|
+
other.is_a?(self)
|
77
|
+
else
|
78
|
+
other.class == Class ? self <= other : other.is_a?(self)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
64
82
|
end
|
65
83
|
end
|
66
|
-
|