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
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
|
-
|