mongoid 7.0.0 → 7.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +30 -30
- data/LICENSE +1 -0
- data/README.md +34 -20
- data/Rakefile +75 -5
- data/lib/config/locales/en.yml +129 -70
- data/lib/mongoid/association/accessors.rb +143 -80
- data/lib/mongoid/association/bindable.rb +7 -26
- data/lib/mongoid/association/builders.rb +4 -12
- data/lib/mongoid/association/constrainable.rb +5 -6
- data/lib/mongoid/association/depending.rb +31 -19
- data/lib/mongoid/association/eager_loadable.rb +2 -3
- data/lib/mongoid/association/embedded/batchable.rb +19 -45
- data/lib/mongoid/association/embedded/cyclic.rb +10 -17
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +3 -7
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +7 -4
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +14 -24
- data/lib/mongoid/association/embedded/embedded_in.rb +6 -26
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +4 -8
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +8 -5
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +113 -93
- data/lib/mongoid/association/embedded/embeds_many.rb +8 -35
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +4 -8
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +9 -6
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +45 -30
- data/lib/mongoid/association/embedded/embeds_one.rb +8 -31
- data/lib/mongoid/association/embedded.rb +2 -0
- data/lib/mongoid/association/macros.rb +44 -41
- data/lib/mongoid/association/many.rb +18 -32
- data/lib/mongoid/association/marshalable.rb +3 -6
- data/lib/mongoid/association/nested/many.rb +18 -27
- data/lib/mongoid/association/nested/nested_buildable.rb +5 -11
- data/lib/mongoid/association/nested/one.rb +16 -27
- data/lib/mongoid/association/nested.rb +3 -3
- data/lib/mongoid/association/one.rb +4 -11
- data/lib/mongoid/association/options.rb +8 -38
- data/lib/mongoid/association/proxy.rb +37 -36
- data/lib/mongoid/association/referenced/auto_save.rb +5 -11
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +4 -9
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +11 -9
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +40 -3
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +16 -27
- data/lib/mongoid/association/referenced/belongs_to.rb +14 -36
- data/lib/mongoid/association/referenced/counter_cache.rb +4 -15
- data/lib/mongoid/association/referenced/eager.rb +40 -36
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +12 -11
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +38 -56
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +23 -43
- data/lib/mongoid/association/referenced/has_many/binding.rb +3 -6
- data/lib/mongoid/association/referenced/has_many/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +444 -456
- data/lib/mongoid/association/referenced/has_many/proxy.rb +78 -111
- data/lib/mongoid/association/referenced/has_many.rb +18 -42
- data/lib/mongoid/association/referenced/has_one/binding.rb +4 -9
- data/lib/mongoid/association/referenced/has_one/buildable.rb +20 -6
- data/lib/mongoid/association/referenced/has_one/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +13 -26
- data/lib/mongoid/association/referenced/has_one/proxy.rb +23 -25
- data/lib/mongoid/association/referenced/has_one.rb +13 -33
- data/lib/mongoid/association/referenced/syncable.rb +7 -22
- data/lib/mongoid/association/referenced.rb +2 -0
- data/lib/mongoid/association/reflections.rb +7 -6
- data/lib/mongoid/association/relatable.rb +118 -78
- data/lib/mongoid/association.rb +8 -23
- data/lib/mongoid/atomic/modifiers.rb +27 -51
- data/lib/mongoid/atomic/paths/embedded/many.rb +4 -7
- data/lib/mongoid/atomic/paths/embedded/one.rb +4 -7
- data/lib/mongoid/atomic/paths/embedded.rb +3 -4
- data/lib/mongoid/atomic/paths/root.rb +4 -7
- data/lib/mongoid/atomic/paths.rb +2 -1
- data/lib/mongoid/atomic.rb +42 -47
- data/lib/mongoid/attributes/dynamic.rb +18 -32
- data/lib/mongoid/attributes/nested.rb +21 -13
- data/lib/mongoid/attributes/processing.rb +9 -24
- data/lib/mongoid/attributes/projector.rb +119 -0
- data/lib/mongoid/attributes/readonly.rb +3 -6
- data/lib/mongoid/attributes.rb +75 -81
- data/lib/mongoid/cacheable.rb +6 -9
- data/lib/mongoid/changeable.rb +6 -60
- data/lib/mongoid/clients/factory.rb +42 -17
- data/lib/mongoid/clients/options.rb +16 -17
- data/lib/mongoid/clients/sessions.rb +24 -12
- data/lib/mongoid/clients/storage_options.rb +7 -12
- data/lib/mongoid/clients/validators/storage.rb +2 -9
- data/lib/mongoid/clients/validators.rb +2 -1
- data/lib/mongoid/clients.rb +3 -10
- data/lib/mongoid/composable.rb +5 -9
- data/lib/mongoid/config/environment.rb +36 -14
- data/lib/mongoid/config/options.rb +20 -23
- data/lib/mongoid/config/validators/client.rb +2 -17
- data/lib/mongoid/config/validators/option.rb +2 -3
- data/lib/mongoid/config/validators.rb +2 -1
- data/lib/mongoid/config.rb +112 -41
- data/lib/mongoid/contextual/aggregable/memory.rb +17 -12
- data/lib/mongoid/contextual/aggregable/mongo.rb +26 -27
- data/lib/mongoid/contextual/aggregable/none.rb +65 -0
- data/lib/mongoid/contextual/aggregable.rb +17 -0
- data/lib/mongoid/contextual/atomic.rb +29 -31
- data/lib/mongoid/contextual/command.rb +2 -5
- data/lib/mongoid/contextual/geo_near.rb +6 -37
- data/lib/mongoid/contextual/map_reduce.rb +9 -37
- data/lib/mongoid/contextual/memory.rb +12 -65
- data/lib/mongoid/contextual/mongo.rb +163 -85
- data/lib/mongoid/contextual/none.rb +44 -28
- data/lib/mongoid/contextual/queryable.rb +2 -3
- data/lib/mongoid/contextual.rb +7 -9
- data/lib/mongoid/copyable.rb +16 -10
- data/lib/mongoid/criteria/findable.rb +12 -15
- data/lib/mongoid/criteria/includable.rb +8 -15
- data/lib/mongoid/criteria/inspectable.rb +2 -3
- data/lib/mongoid/criteria/marshalable.rb +2 -5
- data/lib/mongoid/criteria/modifiable.rb +15 -21
- data/lib/mongoid/criteria/options.rb +4 -5
- data/lib/mongoid/criteria/permission.rb +2 -1
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -13
- data/lib/mongoid/criteria/queryable/expandable.rb +68 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +4 -27
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -4
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +3 -4
- data/lib/mongoid/criteria/queryable/extensions/date.rb +3 -8
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +5 -11
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +3 -26
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +3 -14
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +4 -13
- data/lib/mongoid/criteria/queryable/extensions/object.rb +4 -29
- data/lib/mongoid/criteria/queryable/extensions/range.rb +41 -17
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +9 -16
- data/lib/mongoid/criteria/queryable/extensions/set.rb +3 -4
- data/lib/mongoid/criteria/queryable/extensions/string.rb +3 -18
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -10
- data/lib/mongoid/criteria/queryable/extensions/time.rb +4 -9
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +13 -6
- data/lib/mongoid/criteria/queryable/extensions.rb +1 -4
- data/lib/mongoid/criteria/queryable/key.rb +101 -27
- data/lib/mongoid/criteria/queryable/macroable.rb +3 -4
- data/lib/mongoid/criteria/queryable/mergeable.rb +184 -44
- data/lib/mongoid/criteria/queryable/optional.rb +5 -48
- data/lib/mongoid/criteria/queryable/options.rb +2 -19
- data/lib/mongoid/criteria/queryable/pipeline.rb +5 -15
- data/lib/mongoid/criteria/queryable/selectable.rb +436 -158
- data/lib/mongoid/criteria/queryable/selector.rb +45 -55
- data/lib/mongoid/criteria/queryable/smash.rb +2 -11
- data/lib/mongoid/criteria/queryable/storable.rb +237 -0
- data/lib/mongoid/criteria/queryable.rb +7 -9
- data/lib/mongoid/criteria/scopable.rb +27 -19
- data/lib/mongoid/criteria.rb +86 -73
- data/lib/mongoid/document.rb +37 -77
- data/lib/mongoid/equality.rb +29 -12
- data/lib/mongoid/errors/ambiguous_relationship.rb +4 -5
- data/lib/mongoid/errors/callback.rb +2 -3
- data/lib/mongoid/errors/criteria_argument_required.rb +18 -0
- data/lib/mongoid/errors/delete_restriction.rb +10 -13
- data/lib/mongoid/errors/document_not_destroyed.rb +4 -7
- data/lib/mongoid/errors/document_not_found.rb +2 -9
- data/lib/mongoid/errors/eager_load.rb +6 -5
- data/lib/mongoid/errors/empty_config_file.rb +25 -0
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +2 -3
- data/lib/mongoid/errors/invalid_collection.rb +2 -1
- data/lib/mongoid/errors/invalid_config_file.rb +25 -0
- data/lib/mongoid/errors/invalid_config_option.rb +2 -3
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +2 -3
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +24 -0
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +25 -0
- data/lib/mongoid/errors/invalid_expression_operator.rb +27 -0
- data/lib/mongoid/errors/invalid_field.rb +2 -5
- data/lib/mongoid/errors/invalid_field_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_field_option.rb +2 -3
- data/lib/mongoid/errors/invalid_find.rb +2 -3
- data/lib/mongoid/errors/invalid_includes.rb +2 -3
- data/lib/mongoid/errors/invalid_index.rb +2 -3
- data/lib/mongoid/errors/invalid_options.rb +4 -5
- data/lib/mongoid/errors/invalid_path.rb +2 -3
- data/lib/mongoid/errors/invalid_persistence_option.rb +2 -5
- data/lib/mongoid/errors/invalid_query.rb +40 -0
- data/lib/mongoid/errors/invalid_relation.rb +4 -9
- data/lib/mongoid/errors/invalid_relation_option.rb +4 -5
- data/lib/mongoid/errors/invalid_scope.rb +2 -3
- data/lib/mongoid/errors/invalid_session_use.rb +3 -6
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +6 -5
- data/lib/mongoid/errors/invalid_storage_options.rb +2 -3
- data/lib/mongoid/errors/invalid_storage_parent.rb +2 -3
- data/lib/mongoid/errors/invalid_time.rb +2 -3
- data/lib/mongoid/errors/invalid_value.rb +2 -1
- data/lib/mongoid/errors/inverse_not_found.rb +3 -4
- data/lib/mongoid/errors/mixed_client_configuration.rb +2 -3
- data/lib/mongoid/errors/mixed_relations.rb +2 -3
- data/lib/mongoid/errors/mongoid_error.rb +3 -10
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +3 -4
- data/lib/mongoid/errors/no_client_config.rb +4 -5
- data/lib/mongoid/errors/no_client_database.rb +2 -3
- data/lib/mongoid/errors/no_client_hosts.rb +2 -3
- data/lib/mongoid/errors/no_clients_config.rb +2 -3
- data/lib/mongoid/errors/no_default_client.rb +3 -4
- data/lib/mongoid/errors/no_environment.rb +2 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +2 -3
- data/lib/mongoid/errors/no_metadata.rb +2 -3
- data/lib/mongoid/errors/no_parent.rb +2 -3
- data/lib/mongoid/errors/readonly_attribute.rb +2 -3
- data/lib/mongoid/errors/readonly_document.rb +3 -6
- data/lib/mongoid/errors/scope_overwrite.rb +2 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +2 -0
- data/lib/mongoid/errors/unknown_attribute.rb +2 -3
- data/lib/mongoid/errors/unknown_model.rb +2 -3
- data/lib/mongoid/errors/unsaved_document.rb +3 -2
- data/lib/mongoid/errors/unsupported_javascript.rb +2 -3
- data/lib/mongoid/errors/validations.rb +2 -1
- data/lib/mongoid/errors.rb +12 -1
- data/lib/mongoid/evolvable.rb +4 -5
- data/lib/mongoid/extensions/array.rb +28 -37
- data/lib/mongoid/extensions/big_decimal.rb +3 -12
- data/lib/mongoid/extensions/boolean.rb +3 -5
- data/lib/mongoid/extensions/date.rb +13 -12
- data/lib/mongoid/extensions/date_time.rb +4 -12
- data/lib/mongoid/extensions/decimal128.rb +2 -5
- data/lib/mongoid/extensions/false_class.rb +4 -7
- data/lib/mongoid/extensions/float.rb +5 -10
- data/lib/mongoid/extensions/hash.rb +51 -36
- data/lib/mongoid/extensions/integer.rb +5 -12
- data/lib/mongoid/extensions/module.rb +2 -3
- data/lib/mongoid/extensions/nil_class.rb +2 -5
- data/lib/mongoid/extensions/object.rb +17 -44
- data/lib/mongoid/extensions/object_id.rb +2 -7
- data/lib/mongoid/extensions/range.rb +2 -11
- data/lib/mongoid/extensions/regexp.rb +4 -4
- data/lib/mongoid/extensions/set.rb +2 -7
- data/lib/mongoid/extensions/string.rb +24 -42
- data/lib/mongoid/extensions/symbol.rb +2 -7
- data/lib/mongoid/extensions/time.rb +12 -9
- data/lib/mongoid/extensions/time_with_zone.rb +25 -7
- data/lib/mongoid/extensions/true_class.rb +4 -7
- data/lib/mongoid/extensions.rb +18 -3
- data/lib/mongoid/factory.rb +52 -13
- data/lib/mongoid/fields/foreign_key.rb +3 -22
- data/lib/mongoid/fields/localized.rb +2 -11
- data/lib/mongoid/fields/standard.rb +6 -36
- data/lib/mongoid/fields/validators/macro.rb +36 -18
- data/lib/mongoid/fields/validators.rb +2 -1
- data/lib/mongoid/fields.rb +115 -64
- data/lib/mongoid/findable.rb +59 -23
- data/lib/mongoid/indexable/specification.rb +3 -16
- data/lib/mongoid/indexable/validators/options.rb +2 -7
- data/lib/mongoid/indexable.rb +10 -25
- data/lib/mongoid/inspectable.rb +4 -11
- data/lib/mongoid/interceptable.rb +13 -30
- data/lib/mongoid/loggable.rb +13 -16
- data/lib/mongoid/matchable.rb +3 -150
- data/lib/mongoid/matcher/all.rb +22 -0
- data/lib/mongoid/matcher/and.rb +21 -0
- data/lib/mongoid/matcher/bits.rb +41 -0
- data/lib/mongoid/matcher/bits_all_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_all_set.rb +20 -0
- data/lib/mongoid/matcher/bits_any_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_any_set.rb +20 -0
- data/lib/mongoid/matcher/elem_match.rb +36 -0
- data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
- data/lib/mongoid/matcher/eq.rb +11 -0
- data/lib/mongoid/matcher/eq_impl.rb +67 -0
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +26 -0
- data/lib/mongoid/matcher/exists.rb +15 -0
- data/lib/mongoid/matcher/expression.rb +35 -0
- data/lib/mongoid/matcher/expression_operator.rb +19 -0
- data/lib/mongoid/matcher/field_expression.rb +62 -0
- data/lib/mongoid/matcher/field_operator.rb +54 -0
- data/lib/mongoid/matcher/gt.rb +17 -0
- data/lib/mongoid/matcher/gte.rb +17 -0
- data/lib/mongoid/matcher/in.rb +25 -0
- data/lib/mongoid/matcher/lt.rb +17 -0
- data/lib/mongoid/matcher/lte.rb +17 -0
- data/lib/mongoid/matcher/mod.rb +17 -0
- data/lib/mongoid/matcher/ne.rb +16 -0
- data/lib/mongoid/matcher/nin.rb +11 -0
- data/lib/mongoid/matcher/nor.rb +25 -0
- data/lib/mongoid/matcher/not.rb +29 -0
- data/lib/mongoid/matcher/or.rb +21 -0
- data/lib/mongoid/matcher/regex.rb +41 -0
- data/lib/mongoid/matcher/size.rb +26 -0
- data/lib/mongoid/matcher/type.rb +99 -0
- data/lib/mongoid/matcher.rb +110 -0
- data/lib/mongoid/persistable/creatable.rb +6 -23
- data/lib/mongoid/persistable/deletable.rb +7 -23
- data/lib/mongoid/persistable/destroyable.rb +11 -10
- data/lib/mongoid/persistable/incrementable.rb +6 -7
- data/lib/mongoid/persistable/logical.rb +4 -6
- data/lib/mongoid/persistable/poppable.rb +3 -6
- data/lib/mongoid/persistable/pullable.rb +3 -8
- data/lib/mongoid/persistable/pushable.rb +14 -10
- data/lib/mongoid/persistable/renamable.rb +10 -8
- data/lib/mongoid/persistable/savable.rb +3 -8
- data/lib/mongoid/persistable/settable.rb +61 -19
- data/lib/mongoid/persistable/unsettable.rb +8 -8
- data/lib/mongoid/persistable/updatable.rb +33 -21
- data/lib/mongoid/persistable/upsertable.rb +4 -9
- data/lib/mongoid/persistable.rb +134 -39
- data/lib/mongoid/persistence_context.rb +51 -45
- data/lib/mongoid/positional.rb +3 -6
- data/lib/mongoid/query_cache.rb +138 -106
- data/lib/mongoid/railtie.rb +20 -16
- data/lib/mongoid/railties/controller_runtime.rb +88 -0
- data/lib/mongoid/railties/database.rake +9 -0
- data/lib/mongoid/reloadable.rb +14 -19
- data/lib/mongoid/scopable.rb +11 -38
- data/lib/mongoid/selectable.rb +8 -17
- data/lib/mongoid/serializable.rb +24 -29
- data/lib/mongoid/shardable.rb +80 -17
- data/lib/mongoid/stateful.rb +3 -10
- data/lib/mongoid/stringified_symbol.rb +52 -0
- data/lib/mongoid/tasks/database.rake +12 -5
- data/lib/mongoid/tasks/database.rb +87 -7
- data/lib/mongoid/threaded/lifecycle.rb +2 -21
- data/lib/mongoid/threaded.rb +38 -55
- data/lib/mongoid/timestamps/created/short.rb +2 -1
- data/lib/mongoid/timestamps/created.rb +3 -2
- data/lib/mongoid/timestamps/short.rb +2 -1
- data/lib/mongoid/timestamps/timeless.rb +6 -9
- data/lib/mongoid/timestamps/updated/short.rb +2 -1
- data/lib/mongoid/timestamps/updated.rb +3 -4
- data/lib/mongoid/timestamps.rb +3 -2
- data/lib/mongoid/touchable.rb +132 -0
- data/lib/mongoid/traversable.rb +177 -57
- data/lib/mongoid/validatable/associated.rb +5 -6
- data/lib/mongoid/validatable/format.rb +2 -1
- data/lib/mongoid/validatable/length.rb +2 -1
- data/lib/mongoid/validatable/localizable.rb +2 -3
- data/lib/mongoid/validatable/macros.rb +3 -8
- data/lib/mongoid/validatable/presence.rb +8 -13
- data/lib/mongoid/validatable/queryable.rb +2 -3
- data/lib/mongoid/validatable/uniqueness.rb +21 -34
- data/lib/mongoid/validatable.rb +8 -27
- data/lib/mongoid/version.rb +3 -2
- data/lib/mongoid.rb +33 -15
- data/lib/rails/generators/mongoid/config/config_generator.rb +10 -2
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +45 -30
- data/lib/rails/generators/mongoid/model/model_generator.rb +3 -2
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -1
- data/lib/rails/generators/mongoid_generator.rb +2 -1
- data/lib/rails/mongoid.rb +4 -5
- data/spec/README.md +33 -0
- data/spec/config/mongoid.yml +13 -3
- data/spec/integration/app_spec.rb +343 -0
- data/spec/integration/associations/belongs_to_spec.rb +15 -0
- data/spec/integration/associations/embedded_dirty_spec.rb +29 -0
- data/spec/integration/associations/embedded_spec.rb +268 -0
- data/spec/integration/associations/embeds_many_spec.rb +206 -0
- data/spec/integration/associations/embeds_one_spec.rb +23 -0
- data/spec/integration/associations/foreign_key_spec.rb +98 -0
- data/spec/integration/associations/foreign_key_spec_models.rb +64 -0
- data/spec/integration/associations/has_many_spec.rb +128 -0
- data/spec/integration/associations/has_one_spec.rb +176 -0
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +115 -0
- data/spec/integration/associations/reverse_population_spec.rb +34 -0
- data/spec/integration/associations/reverse_population_spec_models.rb +36 -0
- data/spec/integration/associations/scope_option_spec.rb +101 -0
- data/spec/integration/atomic/modifiers_spec.rb +116 -0
- data/spec/integration/bson_regexp_raw_spec.rb +19 -0
- data/spec/integration/callbacks_models.rb +61 -0
- data/spec/integration/callbacks_spec.rb +228 -0
- data/spec/integration/contextual/empty_spec.rb +141 -0
- data/spec/integration/criteria/alias_query_spec.rb +161 -0
- data/spec/integration/criteria/date_field_spec.rb +40 -0
- data/spec/integration/criteria/default_scope_spec.rb +72 -0
- data/spec/integration/criteria/logical_spec.rb +124 -0
- data/spec/integration/criteria/range_spec.rb +265 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +142 -0
- data/spec/integration/discriminator_key_spec.rb +353 -0
- data/spec/integration/discriminator_value_spec.rb +206 -0
- data/spec/integration/document_spec.rb +51 -0
- data/spec/integration/i18n_fallbacks_spec.rb +89 -0
- data/spec/integration/matcher_examples_spec.rb +758 -0
- data/spec/integration/matcher_operator_data/all.yml +140 -0
- data/spec/integration/matcher_operator_data/and.yml +93 -0
- data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
- data/spec/integration/matcher_operator_data/comment.yml +22 -0
- data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
- data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
- data/spec/integration/matcher_operator_data/eq.yml +191 -0
- data/spec/integration/matcher_operator_data/exists.yml +213 -0
- data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
- data/spec/integration/matcher_operator_data/gt.yml +132 -0
- data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
- data/spec/integration/matcher_operator_data/gte.yml +132 -0
- data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/implicit.yml +331 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
- data/spec/integration/matcher_operator_data/in.yml +210 -0
- data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
- data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
- data/spec/integration/matcher_operator_data/lt.yml +132 -0
- data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
- data/spec/integration/matcher_operator_data/lte.yml +132 -0
- data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/mod.yml +55 -0
- data/spec/integration/matcher_operator_data/multiple.yml +29 -0
- data/spec/integration/matcher_operator_data/ne.yml +150 -0
- data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
- data/spec/integration/matcher_operator_data/nin.yml +114 -0
- data/spec/integration/matcher_operator_data/nor.yml +126 -0
- data/spec/integration/matcher_operator_data/not.yml +196 -0
- data/spec/integration/matcher_operator_data/or.yml +137 -0
- data/spec/integration/matcher_operator_data/regex.yml +174 -0
- data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
- data/spec/integration/matcher_operator_data/size.yml +174 -0
- data/spec/integration/matcher_operator_data/type.yml +70 -0
- data/spec/integration/matcher_operator_data/type_array.yml +16 -0
- data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
- data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
- data/spec/integration/matcher_operator_data/type_code.yml +26 -0
- data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
- data/spec/integration/matcher_operator_data/type_date.yml +39 -0
- data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
- data/spec/integration/matcher_operator_data/type_decimal.yml +40 -0
- data/spec/integration/matcher_operator_data/type_double.yml +15 -0
- data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
- data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
- data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_null.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
- data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
- data/spec/integration/matcher_operator_data/type_string.yml +15 -0
- data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
- data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
- data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
- data/spec/integration/matcher_operator_spec.rb +124 -0
- data/spec/integration/matcher_spec.rb +283 -0
- data/spec/integration/server_query_spec.rb +141 -0
- data/spec/integration/shardable_spec.rb +148 -0
- data/spec/integration/stringified_symbol_field_spec.rb +203 -0
- data/spec/lite_spec_helper.rb +83 -0
- data/spec/mongoid/association/accessors_spec.rb +323 -77
- data/spec/mongoid/association/auto_save_spec.rb +74 -33
- data/spec/mongoid/association/builders_spec.rb +3 -1
- data/spec/mongoid/association/constrainable_spec.rb +2 -0
- data/spec/mongoid/association/counter_cache_spec.rb +34 -32
- data/spec/mongoid/association/depending_spec.rb +678 -332
- data/spec/mongoid/association/eager_spec.rb +6 -4
- data/spec/mongoid/association/embedded/cyclic_spec.rb +4 -2
- data/spec/mongoid/association/embedded/dirty_spec.rb +4 -2
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +65 -13
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +61 -1
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +672 -144
- data/spec/mongoid/association/embedded/embeds_many_models.rb +69 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +51 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +13 -1
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +23 -21
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +8 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +54 -0
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +28 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +49 -1
- data/spec/mongoid/association/macros_spec.rb +11 -9
- data/spec/mongoid/association/nested/many_spec.rb +2 -0
- data/spec/mongoid/association/nested/one_spec.rb +18 -12
- data/spec/mongoid/association/options_spec.rb +2 -0
- data/spec/mongoid/association/polymorphic_spec.rb +61 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -0
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +57 -16
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +266 -17
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +99 -58
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +57 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +95 -12
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +3 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +28 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +67 -4
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +76 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +351 -164
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +67 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +39 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +49 -5
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +3 -1
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +23 -0
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +40 -9
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +407 -121
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +23 -0
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +681 -340
- data/spec/mongoid/association/referenced/has_many_models.rb +95 -0
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +26 -3
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +2 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +53 -7
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +34 -4
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +28 -26
- data/spec/mongoid/association/referenced/has_one_models.rb +97 -0
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +144 -5
- data/spec/mongoid/association/reflections_spec.rb +2 -0
- data/spec/mongoid/association/syncable_spec.rb +33 -31
- data/spec/mongoid/association_spec.rb +2 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +49 -0
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +2 -0
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +2 -0
- data/spec/mongoid/atomic/paths/root_spec.rb +2 -0
- data/spec/mongoid/atomic/paths_spec.rb +107 -12
- data/spec/mongoid/atomic_spec.rb +31 -6
- data/spec/mongoid/attributes/dynamic_spec.rb +152 -0
- data/spec/mongoid/attributes/nested_spec.rb +87 -69
- data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
- data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
- data/spec/mongoid/attributes/projector_spec.rb +44 -0
- data/spec/mongoid/attributes/readonly_spec.rb +24 -22
- data/spec/mongoid/attributes_spec.rb +382 -35
- data/spec/mongoid/cacheable_spec.rb +3 -1
- data/spec/mongoid/changeable_spec.rb +60 -35
- data/spec/mongoid/clients/factory_spec.rb +148 -34
- data/spec/mongoid/clients/options_spec.rb +102 -66
- data/spec/mongoid/clients/sessions_spec.rb +39 -29
- data/spec/mongoid/clients/transactions_spec.rb +415 -0
- data/spec/mongoid/clients_spec.rb +78 -16
- data/spec/mongoid/composable_spec.rb +2 -0
- data/spec/mongoid/config/environment_spec.rb +88 -8
- data/spec/mongoid/config/options_spec.rb +22 -3
- data/spec/mongoid/config_spec.rb +280 -2
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +53 -11
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +122 -20
- data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
- data/spec/mongoid/contextual/atomic_spec.rb +242 -81
- data/spec/mongoid/contextual/geo_near_spec.rb +31 -19
- data/spec/mongoid/contextual/map_reduce_spec.rb +24 -7
- data/spec/mongoid/contextual/memory_spec.rb +25 -23
- data/spec/mongoid/contextual/mongo_spec.rb +491 -144
- data/spec/mongoid/contextual/none_spec.rb +9 -81
- data/spec/mongoid/copyable_spec.rb +261 -30
- data/spec/mongoid/copyable_spec_models.rb +47 -0
- data/spec/mongoid/criteria/findable_spec.rb +77 -20
- data/spec/mongoid/criteria/inspectable_spec.rb +2 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +2 -0
- data/spec/mongoid/criteria/modifiable_spec.rb +100 -48
- data/spec/mongoid/criteria/options_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +61 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +5 -3
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +35 -17
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +53 -0
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +239 -178
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +9 -7
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +42 -23
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +30 -1
- data/spec/mongoid/criteria/queryable/key_spec.rb +50 -6
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +145 -12
- data/spec/mongoid/criteria/queryable/optional_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/options_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +2069 -0
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +994 -2900
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +41 -2
- data/spec/mongoid/criteria/queryable/smash_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/storable_spec.rb +226 -0
- data/spec/mongoid/criteria/scopable_spec.rb +210 -0
- data/spec/mongoid/criteria_projection_spec.rb +410 -0
- data/spec/mongoid/criteria_spec.rb +807 -464
- data/spec/mongoid/document_fields_spec.rb +113 -0
- data/spec/mongoid/document_persistence_context_spec.rb +32 -0
- data/spec/mongoid/document_query_spec.rb +89 -0
- data/spec/mongoid/document_spec.rb +182 -28
- data/spec/mongoid/equality_spec.rb +144 -41
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +5 -3
- data/spec/mongoid/errors/callback_spec.rb +2 -0
- data/spec/mongoid/errors/delete_restriction_spec.rb +4 -2
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +2 -0
- data/spec/mongoid/errors/document_not_found_spec.rb +2 -0
- data/spec/mongoid/errors/eager_load_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_collection_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_config_file_spec.rb +31 -0
- data/spec/mongoid/errors/invalid_config_option_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_field_option_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_field_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_includes_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_index_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_options_spec.rb +4 -2
- data/spec/mongoid/errors/invalid_path_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_relation_spec.rb +4 -2
- data/spec/mongoid/errors/invalid_scope_spec.rb +3 -1
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_time_spec.rb +2 -0
- data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +2 -0
- data/spec/mongoid/errors/mixed_relations_spec.rb +2 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +22 -8
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_config_spec.rb +4 -2
- data/spec/mongoid/errors/no_client_database_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_hosts_spec.rb +5 -3
- data/spec/mongoid/errors/no_clients_config_spec.rb +2 -0
- data/spec/mongoid/errors/no_environment_spec.rb +2 -0
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +2 -0
- data/spec/mongoid/errors/no_metadata_spec.rb +4 -2
- data/spec/mongoid/errors/no_parent_spec.rb +3 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +2 -0
- data/spec/mongoid/errors/readonly_document_spec.rb +2 -0
- data/spec/mongoid/errors/scope_overwrite_spec.rb +2 -0
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +2 -0
- data/spec/mongoid/errors/unknown_attribute_spec.rb +4 -2
- data/spec/mongoid/errors/unsaved_document_spec.rb +3 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +2 -0
- data/spec/mongoid/errors/validations_spec.rb +2 -0
- data/spec/mongoid/extensions/array_spec.rb +25 -43
- data/spec/mongoid/extensions/big_decimal_spec.rb +11 -9
- data/spec/mongoid/extensions/binary_spec.rb +2 -0
- data/spec/mongoid/extensions/boolean_spec.rb +2 -0
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +335 -0
- data/spec/mongoid/extensions/date_spec.rb +8 -160
- data/spec/mongoid/extensions/date_time_spec.rb +17 -60
- data/spec/mongoid/extensions/decimal128_spec.rb +2 -0
- data/spec/mongoid/extensions/false_class_spec.rb +3 -1
- data/spec/mongoid/extensions/float_spec.rb +17 -3
- data/spec/mongoid/extensions/hash_spec.rb +105 -0
- data/spec/mongoid/extensions/integer_spec.rb +14 -2
- data/spec/mongoid/extensions/module_spec.rb +2 -0
- data/spec/mongoid/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/extensions/object_id_spec.rb +2 -0
- data/spec/mongoid/extensions/object_spec.rb +13 -24
- data/spec/mongoid/extensions/range_spec.rb +2 -0
- data/spec/mongoid/extensions/regexp_spec.rb +25 -0
- data/spec/mongoid/extensions/set_spec.rb +2 -0
- data/spec/mongoid/extensions/string_spec.rb +95 -34
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
- data/spec/mongoid/extensions/symbol_spec.rb +2 -0
- data/spec/mongoid/extensions/time_spec.rb +29 -0
- data/spec/mongoid/extensions/time_with_zone_spec.rb +33 -0
- data/spec/mongoid/extensions/true_class_spec.rb +3 -1
- data/spec/mongoid/extensions_spec.rb +16 -2
- data/spec/mongoid/factory_spec.rb +287 -27
- data/spec/mongoid/fields/foreign_key_spec.rb +2 -0
- data/spec/mongoid/fields/localized_spec.rb +6 -4
- data/spec/mongoid/fields/standard_spec.rb +2 -0
- data/spec/mongoid/fields_spec.rb +419 -37
- data/spec/mongoid/findable_spec.rb +54 -20
- data/spec/mongoid/indexable/specification_spec.rb +2 -0
- data/spec/mongoid/indexable_spec.rb +36 -6
- data/spec/mongoid/inspectable_spec.rb +39 -2
- data/spec/mongoid/interceptable_spec.rb +168 -96
- data/spec/mongoid/interceptable_spec_models.rb +76 -0
- data/spec/mongoid/loggable_spec.rb +2 -0
- data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
- data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +239 -0
- data/spec/mongoid/matcher/extract_attribute_spec.rb +40 -0
- data/spec/mongoid/persistable/creatable_spec.rb +112 -27
- data/spec/mongoid/persistable/deletable_spec.rb +273 -11
- data/spec/mongoid/persistable/destroyable_spec.rb +201 -11
- data/spec/mongoid/persistable/incrementable_spec.rb +29 -13
- data/spec/mongoid/persistable/logical_spec.rb +19 -3
- data/spec/mongoid/persistable/poppable_spec.rb +19 -3
- data/spec/mongoid/persistable/pullable_spec.rb +36 -6
- data/spec/mongoid/persistable/pushable_spec.rb +91 -7
- data/spec/mongoid/persistable/renamable_spec.rb +18 -2
- data/spec/mongoid/persistable/savable_spec.rb +188 -25
- data/spec/mongoid/persistable/settable_spec.rb +182 -17
- data/spec/mongoid/persistable/unsettable_spec.rb +19 -3
- data/spec/mongoid/persistable/updatable_spec.rb +45 -23
- data/spec/mongoid/persistable/upsertable_spec.rb +4 -2
- data/spec/mongoid/persistable_spec.rb +85 -9
- data/spec/mongoid/persistence_context_spec.rb +3 -1
- data/spec/mongoid/positional_spec.rb +2 -0
- data/spec/mongoid/query_cache_middleware_spec.rb +68 -0
- data/spec/mongoid/query_cache_spec.rb +575 -48
- data/spec/mongoid/relations/proxy_spec.rb +9 -7
- data/spec/mongoid/reloadable_spec.rb +298 -20
- data/spec/mongoid/scopable_spec.rb +82 -22
- data/spec/mongoid/selectable_spec.rb +8 -6
- data/spec/mongoid/serializable_spec.rb +160 -29
- data/spec/mongoid/shardable_models.rb +61 -0
- data/spec/mongoid/shardable_spec.rb +116 -17
- data/spec/mongoid/stateful_spec.rb +3 -1
- data/spec/mongoid/tasks/database_rake_spec.rb +15 -13
- data/spec/mongoid/tasks/database_spec.rb +3 -1
- data/spec/mongoid/threaded_spec.rb +72 -2
- data/spec/mongoid/timestamps/created/short_spec.rb +3 -1
- data/spec/mongoid/timestamps/created_spec.rb +3 -1
- data/spec/mongoid/timestamps/timeless_spec.rb +4 -2
- data/spec/mongoid/timestamps/updated/short_spec.rb +5 -3
- data/spec/mongoid/timestamps/updated_spec.rb +5 -3
- data/spec/mongoid/timestamps_spec.rb +8 -6
- data/spec/mongoid/{association/touchable_spec.rb → touchable_spec.rb} +206 -38
- data/spec/mongoid/touchable_spec_models.rb +53 -0
- data/spec/mongoid/traversable_spec.rb +1167 -1
- data/spec/mongoid/validatable/associated_spec.rb +2 -0
- data/spec/mongoid/validatable/format_spec.rb +2 -0
- data/spec/mongoid/validatable/length_spec.rb +2 -0
- data/spec/mongoid/validatable/numericality_spec.rb +2 -0
- data/spec/mongoid/validatable/presence_spec.rb +28 -22
- data/spec/mongoid/validatable/uniqueness_spec.rb +102 -73
- data/spec/mongoid/validatable_spec.rb +5 -3
- data/spec/mongoid_spec.rb +2 -0
- data/spec/rails/controller_extension/controller_runtime_spec.rb +112 -0
- data/spec/rails/mongoid_spec.rb +4 -2
- data/spec/shared/LICENSE +20 -0
- data/spec/shared/bin/get-mongodb-download-url +17 -0
- data/spec/shared/bin/s3-copy +45 -0
- data/spec/shared/bin/s3-upload +69 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/cluster_config.rb +231 -0
- data/spec/shared/lib/mrss/constraints.rb +386 -0
- data/spec/shared/lib/mrss/docker_runner.rb +271 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +200 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +199 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +120 -0
- data/spec/shared/lib/mrss/session_registry.rb +69 -0
- data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
- data/spec/shared/lib/mrss/utils.rb +15 -0
- data/spec/shared/share/Dockerfile.erb +339 -0
- data/spec/shared/share/haproxy-1.conf +16 -0
- data/spec/shared/share/haproxy-2.conf +17 -0
- data/spec/shared/shlib/distro.sh +74 -0
- data/spec/shared/shlib/server.sh +379 -0
- data/spec/shared/shlib/set_env.sh +132 -0
- data/spec/spec_helper.rb +69 -80
- data/spec/support/authorization.rb +2 -0
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +53 -0
- data/spec/support/expectations.rb +21 -3
- data/spec/support/helpers.rb +11 -0
- data/spec/support/macros.rb +42 -0
- data/spec/{app → support}/models/account.rb +3 -1
- data/spec/{app → support}/models/acolyte.rb +2 -0
- data/spec/{app → support}/models/actor.rb +3 -1
- data/spec/support/models/actress.rb +4 -0
- data/spec/{app → support}/models/address.rb +6 -0
- data/spec/{app → support}/models/address_component.rb +2 -0
- data/spec/{app → support}/models/address_number.rb +2 -0
- data/spec/{app → support}/models/agency.rb +2 -0
- data/spec/{app → support}/models/agent.rb +2 -0
- data/spec/{app → support}/models/album.rb +2 -0
- data/spec/{app → support}/models/alert.rb +2 -0
- data/spec/{app → support}/models/animal.rb +2 -0
- data/spec/{app → support}/models/answer.rb +2 -0
- data/spec/{app → support}/models/appointment.rb +2 -0
- data/spec/support/models/armrest.rb +9 -0
- data/spec/support/models/array_field.rb +7 -0
- data/spec/{app → support}/models/article.rb +2 -0
- data/spec/{app → support}/models/artist.rb +4 -0
- data/spec/{app → support}/models/artwork.rb +2 -0
- data/spec/support/models/audible_sound.rb +3 -0
- data/spec/{app → support}/models/audio.rb +2 -0
- data/spec/{app → support}/models/augmentation.rb +2 -0
- data/spec/{app → support}/models/author.rb +2 -0
- data/spec/{app → support}/models/baby.rb +2 -0
- data/spec/{app → support}/models/band.rb +6 -0
- data/spec/{app → support}/models/bar.rb +2 -0
- data/spec/{app → support}/models/basic.rb +2 -0
- data/spec/support/models/bed.rb +3 -0
- data/spec/{app → support}/models/big_palette.rb +2 -0
- data/spec/{app → support}/models/birthday.rb +2 -0
- data/spec/support/models/bolt.rb +7 -0
- data/spec/{app → support}/models/bomb.rb +2 -0
- data/spec/{app → support}/models/book.rb +2 -0
- data/spec/{app → support}/models/breed.rb +2 -0
- data/spec/{app → support}/models/browser.rb +3 -1
- data/spec/{app → support}/models/building.rb +2 -0
- data/spec/{app → support}/models/building_address.rb +2 -0
- data/spec/{app → support}/models/bus.rb +2 -0
- data/spec/{app → support}/models/business.rb +2 -0
- data/spec/{app → support}/models/callback_test.rb +2 -0
- data/spec/{app → support}/models/canvas.rb +3 -1
- data/spec/support/models/car.rb +3 -0
- data/spec/{app → support}/models/cat.rb +2 -0
- data/spec/{app → support}/models/category.rb +2 -0
- data/spec/{app → support}/models/child.rb +2 -0
- data/spec/{app → support}/models/child_doc.rb +5 -3
- data/spec/{app → support}/models/church.rb +2 -0
- data/spec/{app → support}/models/circle.rb +2 -0
- data/spec/{app → support}/models/circuit.rb +2 -0
- data/spec/{app → support}/models/circus.rb +2 -0
- data/spec/{app → support}/models/code.rb +2 -0
- data/spec/support/models/coding/pull_request.rb +11 -0
- data/spec/support/models/coding.rb +3 -0
- data/spec/{app → support}/models/comment.rb +2 -0
- data/spec/{app → support}/models/company.rb +2 -0
- data/spec/{app → support}/models/consumption_period.rb +2 -0
- data/spec/{app → support}/models/contextable_item.rb +2 -0
- data/spec/{app → support}/models/contractor.rb +2 -0
- data/spec/{app → support}/models/cookie.rb +2 -0
- data/spec/{app → support}/models/country_code.rb +4 -0
- data/spec/{app → support}/models/courier_job.rb +2 -0
- data/spec/support/models/crate.rb +12 -0
- data/spec/support/models/customer.rb +10 -0
- data/spec/support/models/customer_address.rb +11 -0
- data/spec/support/models/deed.rb +7 -0
- data/spec/{app → support}/models/definition.rb +2 -0
- data/spec/support/models/delegating_patient.rb +15 -0
- data/spec/{app → support}/models/description.rb +2 -0
- data/spec/{app → support}/models/dictionary.rb +8 -0
- data/spec/{app → support}/models/division.rb +2 -0
- data/spec/{app → support}/models/doctor.rb +2 -0
- data/spec/{app → support}/models/dog.rb +2 -0
- data/spec/{app → support}/models/dokument.rb +2 -0
- data/spec/{app → support}/models/draft.rb +2 -0
- data/spec/{app → support}/models/dragon.rb +2 -0
- data/spec/{app → support}/models/driver.rb +3 -1
- data/spec/{app → support}/models/drug.rb +2 -0
- data/spec/{app → support}/models/dungeon.rb +2 -0
- data/spec/{app → support}/models/edit.rb +2 -0
- data/spec/{app → support}/models/email.rb +2 -0
- data/spec/{app → support}/models/employer.rb +2 -0
- data/spec/{app → support}/models/entry.rb +2 -0
- data/spec/support/models/eraser.rb +3 -0
- data/spec/{app → support}/models/even.rb +2 -0
- data/spec/{app → support}/models/event.rb +2 -0
- data/spec/{app → support}/models/exhibition.rb +2 -0
- data/spec/{app → support}/models/exhibitor.rb +2 -0
- data/spec/{app → support}/models/explosion.rb +2 -0
- data/spec/{app → support}/models/eye.rb +2 -0
- data/spec/{app → support}/models/eye_bowl.rb +2 -0
- data/spec/{app → support}/models/face.rb +2 -0
- data/spec/{app → support}/models/favorite.rb +2 -0
- data/spec/{app → support}/models/filesystem.rb +2 -0
- data/spec/{app → support}/models/fire_hydrant.rb +2 -0
- data/spec/{app → support}/models/firefox.rb +2 -0
- data/spec/{app → support}/models/fish.rb +2 -0
- data/spec/{app → support}/models/folder.rb +2 -0
- data/spec/{app → support}/models/folder_item.rb +2 -0
- data/spec/{app → support}/models/fruits.rb +2 -0
- data/spec/{app → support}/models/game.rb +2 -0
- data/spec/{app → support}/models/ghost.rb +2 -0
- data/spec/support/models/guitar.rb +4 -0
- data/spec/support/models/hole.rb +12 -0
- data/spec/{app → support}/models/home.rb +2 -0
- data/spec/{app → support}/models/house.rb +2 -0
- data/spec/{app → support}/models/html_writer.rb +2 -0
- data/spec/{app → support}/models/id_key.rb +2 -0
- data/spec/support/models/idnodef.rb +7 -0
- data/spec/{app → support}/models/image.rb +2 -0
- data/spec/{app → support}/models/implant.rb +2 -0
- data/spec/support/models/instrument.rb +8 -0
- data/spec/{app → support}/models/item.rb +3 -1
- data/spec/{app → support}/models/jar.rb +2 -0
- data/spec/{app → support}/models/kaleidoscope.rb +2 -0
- data/spec/{app → support}/models/kangaroo.rb +3 -1
- data/spec/{app → support}/models/label.rb +4 -1
- data/spec/{app → support}/models/language.rb +2 -0
- data/spec/{app → support}/models/lat_lng.rb +2 -0
- data/spec/{app → support}/models/league.rb +2 -0
- data/spec/support/models/learner.rb +4 -0
- data/spec/{app → support}/models/line_item.rb +2 -0
- data/spec/{app → support}/models/location.rb +2 -0
- data/spec/{app → support}/models/login.rb +2 -0
- data/spec/{app → support}/models/manufacturer.rb +2 -0
- data/spec/{app → support}/models/meat.rb +2 -0
- data/spec/{app → support}/models/membership.rb +2 -0
- data/spec/{app → support}/models/message.rb +2 -0
- data/spec/support/models/minim.rb +6 -0
- data/spec/{app → support}/models/mixed_drink.rb +2 -0
- data/spec/support/models/mop.rb +24 -0
- data/spec/{app → support}/models/movie.rb +2 -0
- data/spec/support/models/my_hash.rb +4 -0
- data/spec/{app → support}/models/name.rb +2 -0
- data/spec/support/models/name_only.rb +8 -0
- data/spec/{app → support}/models/node.rb +2 -0
- data/spec/{app → support}/models/note.rb +2 -0
- data/spec/support/models/nut.rb +7 -0
- data/spec/{app → support}/models/odd.rb +2 -0
- data/spec/support/models/order.rb +12 -0
- data/spec/{app → support}/models/ordered_post.rb +3 -1
- data/spec/{app → support}/models/ordered_preference.rb +2 -0
- data/spec/{app → support}/models/oscar.rb +2 -0
- data/spec/support/models/other_owner_object.rb +4 -0
- data/spec/{app → support}/models/override.rb +2 -0
- data/spec/{app → support}/models/ownable.rb +2 -0
- data/spec/{app → support}/models/owner.rb +4 -0
- data/spec/{app → support}/models/pack.rb +2 -0
- data/spec/{app → support}/models/page.rb +2 -0
- data/spec/{app → support}/models/page_question.rb +2 -0
- data/spec/{app → support}/models/palette.rb +3 -1
- data/spec/{app → support}/models/parent.rb +2 -0
- data/spec/{app → support}/models/parent_doc.rb +2 -0
- data/spec/support/models/passport.rb +13 -0
- data/spec/{app → support}/models/patient.rb +2 -0
- data/spec/{app → support}/models/pdf_writer.rb +2 -0
- data/spec/support/models/pencil.rb +3 -0
- data/spec/{app → support}/models/person.rb +21 -1
- data/spec/{app → support}/models/pet.rb +2 -0
- data/spec/{app → support}/models/pet_owner.rb +2 -0
- data/spec/{app → support}/models/phone.rb +5 -1
- data/spec/support/models/piano.rb +4 -0
- data/spec/{app → support}/models/pizza.rb +2 -0
- data/spec/{app → support}/models/player.rb +2 -0
- data/spec/{app → support}/models/post.rb +2 -0
- data/spec/{app → support}/models/post_genre.rb +2 -0
- data/spec/{app → support}/models/powerup.rb +2 -0
- data/spec/{app → support}/models/preference.rb +2 -0
- data/spec/{app → support}/models/princess.rb +2 -0
- data/spec/{app → support}/models/product.rb +2 -0
- data/spec/support/models/profile.rb +17 -0
- data/spec/{app → support}/models/pronunciation.rb +2 -0
- data/spec/{app → support}/models/pub.rb +2 -0
- data/spec/support/models/publication/encyclopedia.rb +11 -0
- data/spec/support/models/publication/review.rb +13 -0
- data/spec/support/models/publication.rb +4 -0
- data/spec/{app → support}/models/purchase.rb +2 -0
- data/spec/support/models/purchased_item.rb +10 -0
- data/spec/{app → support}/models/question.rb +2 -0
- data/spec/{app → support}/models/quiz.rb +2 -0
- data/spec/{app → support}/models/rating.rb +2 -0
- data/spec/{app → support}/models/record.rb +2 -0
- data/spec/{app → support}/models/registry.rb +2 -0
- data/spec/{app → support}/models/role.rb +2 -0
- data/spec/{app → support}/models/root_category.rb +2 -0
- data/spec/{app → support}/models/sandwich.rb +2 -0
- data/spec/{app → support}/models/scheduler.rb +2 -0
- data/spec/support/models/scribe.rb +7 -0
- data/spec/support/models/sealer.rb +7 -0
- data/spec/support/models/seat.rb +24 -0
- data/spec/{app → support}/models/seo.rb +2 -0
- data/spec/support/models/series.rb +7 -0
- data/spec/{app → support}/models/server.rb +2 -0
- data/spec/{app → support}/models/service.rb +2 -0
- data/spec/{app → support}/models/shape.rb +4 -2
- data/spec/{app → support}/models/shelf.rb +2 -0
- data/spec/{app → support}/models/shipment_address.rb +2 -0
- data/spec/{app → support}/models/shipping_container.rb +2 -0
- data/spec/{app → support}/models/shipping_pack.rb +2 -0
- data/spec/support/models/shirt.rb +11 -0
- data/spec/{app → support}/models/shop.rb +2 -0
- data/spec/{app → support}/models/short_agent.rb +2 -0
- data/spec/{app → support}/models/short_quiz.rb +2 -0
- data/spec/{app → support}/models/simple.rb +2 -0
- data/spec/{app → support}/models/slave.rb +2 -0
- data/spec/{app → support}/models/song.rb +2 -0
- data/spec/{app → support}/models/sound.rb +2 -0
- data/spec/support/models/spacer.rb +7 -0
- data/spec/{app → support}/models/square.rb +2 -0
- data/spec/{app → support}/models/staff.rb +2 -0
- data/spec/{app → support}/models/store_as_dup_test1.rb +2 -0
- data/spec/{app → support}/models/store_as_dup_test2.rb +2 -0
- data/spec/support/models/store_as_dup_test3.rb +7 -0
- data/spec/support/models/store_as_dup_test4.rb +7 -0
- data/spec/{app → support}/models/strategy.rb +2 -0
- data/spec/{app → support}/models/sub_item.rb +2 -0
- data/spec/{app → support}/models/subscription.rb +2 -0
- data/spec/{app → support}/models/survey.rb +2 -0
- data/spec/{app → support}/models/symptom.rb +2 -0
- data/spec/support/models/system_role.rb +7 -0
- data/spec/{app → support}/models/tag.rb +2 -0
- data/spec/{app → support}/models/target.rb +2 -0
- data/spec/{app → support}/models/template.rb +2 -0
- data/spec/{app → support}/models/thing.rb +2 -0
- data/spec/support/models/threadlocker.rb +7 -0
- data/spec/{app → support}/models/title.rb +2 -0
- data/spec/{app → support}/models/tool.rb +4 -2
- data/spec/{app → support}/models/topping.rb +2 -0
- data/spec/support/models/toy.rb +9 -0
- data/spec/{app → support}/models/track.rb +2 -0
- data/spec/{app → support}/models/translation.rb +2 -0
- data/spec/{app → support}/models/tree.rb +2 -0
- data/spec/support/models/truck.rb +7 -0
- data/spec/support/models/updatable.rb +7 -0
- data/spec/{app → support}/models/user.rb +2 -0
- data/spec/{app → support}/models/user_account.rb +2 -0
- data/spec/{app → support}/models/validation_callback.rb +2 -0
- data/spec/support/models/vehicle.rb +18 -0
- data/spec/{app → support}/models/version.rb +2 -0
- data/spec/{app → support}/models/vertex.rb +3 -1
- data/spec/{app → support}/models/vet_visit.rb +2 -0
- data/spec/{app → support}/models/video.rb +2 -0
- data/spec/support/models/video_game.rb +3 -0
- data/spec/support/models/washer.rb +7 -0
- data/spec/{app → support}/models/weapon.rb +2 -0
- data/spec/{app → support}/models/wiki_page.rb +3 -0
- data/spec/{app → support}/models/word.rb +2 -0
- data/spec/{app → support}/models/word_origin.rb +2 -0
- data/spec/{app → support}/models/writer.rb +4 -2
- data/spec/support/shared/time.rb +53 -0
- data/spec/support/spec_config.rb +60 -0
- data.tar.gz.sig +0 -0
- metadata +1131 -686
- metadata.gz.sig +0 -0
- data/lib/mongoid/association/touchable.rb +0 -97
- data/lib/mongoid/criteria/queryable/forwardable.rb +0 -65
- data/lib/mongoid/matchable/all.rb +0 -27
- data/lib/mongoid/matchable/and.rb +0 -30
- data/lib/mongoid/matchable/default.rb +0 -72
- data/lib/mongoid/matchable/elem_match.rb +0 -34
- data/lib/mongoid/matchable/exists.rb +0 -23
- data/lib/mongoid/matchable/gt.rb +0 -23
- data/lib/mongoid/matchable/gte.rb +0 -23
- data/lib/mongoid/matchable/in.rb +0 -24
- data/lib/mongoid/matchable/lt.rb +0 -23
- data/lib/mongoid/matchable/lte.rb +0 -23
- data/lib/mongoid/matchable/ne.rb +0 -21
- data/lib/mongoid/matchable/nin.rb +0 -22
- data/lib/mongoid/matchable/or.rb +0 -33
- data/lib/mongoid/matchable/regexp.rb +0 -27
- data/lib/mongoid/matchable/size.rb +0 -21
- data/lib/support/ruby_version.rb +0 -26
- data/spec/app/models/actress.rb +0 -2
- data/spec/app/models/bed.rb +0 -1
- data/spec/app/models/car.rb +0 -1
- data/spec/app/models/eraser.rb +0 -1
- data/spec/app/models/learner.rb +0 -2
- data/spec/app/models/my_hash.rb +0 -2
- data/spec/app/models/passport.rb +0 -5
- data/spec/app/models/pencil.rb +0 -1
- data/spec/app/models/profile.rb +0 -5
- data/spec/app/models/series.rb +0 -4
- data/spec/app/models/truck.rb +0 -3
- data/spec/app/models/vehicle.rb +0 -11
- data/spec/app/models/video_game.rb +0 -1
- data/spec/mongoid/criteria/queryable/forwardable_spec.rb +0 -87
- data/spec/mongoid/matchable/all_spec.rb +0 -31
- data/spec/mongoid/matchable/and_spec.rb +0 -187
- data/spec/mongoid/matchable/default_spec.rb +0 -130
- data/spec/mongoid/matchable/elem_match_spec.rb +0 -106
- data/spec/mongoid/matchable/exists_spec.rb +0 -57
- data/spec/mongoid/matchable/gt_spec.rb +0 -86
- data/spec/mongoid/matchable/gte_spec.rb +0 -84
- data/spec/mongoid/matchable/in_spec.rb +0 -49
- data/spec/mongoid/matchable/lt_spec.rb +0 -85
- data/spec/mongoid/matchable/lte_spec.rb +0 -85
- data/spec/mongoid/matchable/ne_spec.rb +0 -46
- data/spec/mongoid/matchable/nin_spec.rb +0 -48
- data/spec/mongoid/matchable/or_spec.rb +0 -131
- data/spec/mongoid/matchable/regexp_spec.rb +0 -59
- data/spec/mongoid/matchable/size_spec.rb +0 -25
- data/spec/mongoid/matchable_spec.rb +0 -828
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,10 +455,14 @@ 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?
|
|
460
|
+
# CodeWithScope is not supported for $where as of MongoDB 4.4
|
|
461
|
+
BSON::Code.new(javascript)
|
|
462
|
+
else
|
|
463
|
+
BSON::CodeWithScope.new(javascript, scope)
|
|
464
|
+
end
|
|
465
|
+
js_query(code)
|
|
439
466
|
end
|
|
440
467
|
|
|
441
468
|
private
|
|
@@ -453,8 +480,6 @@ module Mongoid
|
|
|
453
480
|
#
|
|
454
481
|
# @raise [ Errors::DocumentNotFound ] If none are found and raising an
|
|
455
482
|
# error.
|
|
456
|
-
#
|
|
457
|
-
# @since 3.0.0
|
|
458
483
|
def check_for_missing_documents!(result, ids)
|
|
459
484
|
if (result.size < ids.size) && Mongoid.raise_not_found_error
|
|
460
485
|
raise Errors::DocumentNotFound.new(klass, ids, ids - result.map(&:_id))
|
|
@@ -475,8 +500,6 @@ module Mongoid
|
|
|
475
500
|
# @param [ Criteria ] other The criteria getting cloned.
|
|
476
501
|
#
|
|
477
502
|
# @return [ nil ] nil.
|
|
478
|
-
#
|
|
479
|
-
# @since 1.0.0
|
|
480
503
|
def initialize_copy(other)
|
|
481
504
|
@inclusions = other.inclusions.dup
|
|
482
505
|
@scoping_options = other.scoping_options
|
|
@@ -495,9 +518,7 @@ module Mongoid
|
|
|
495
518
|
# @param [ Array ] args The arguments.
|
|
496
519
|
#
|
|
497
520
|
# @return [ Object ] The result of the method call.
|
|
498
|
-
|
|
499
|
-
# @since 1.0.0
|
|
500
|
-
def method_missing(name, *args, &block)
|
|
521
|
+
ruby2_keywords def method_missing(name, *args, &block)
|
|
501
522
|
if klass.respond_to?(name)
|
|
502
523
|
klass.send(:with_scope, self) do
|
|
503
524
|
klass.send(name, *args, &block)
|
|
@@ -516,8 +537,6 @@ module Mongoid
|
|
|
516
537
|
# criteria.merge_type_selection
|
|
517
538
|
#
|
|
518
539
|
# @return [ true, false ] If type selection was added.
|
|
519
|
-
#
|
|
520
|
-
# @since 3.0.3
|
|
521
540
|
def merge_type_selection
|
|
522
541
|
selector.merge!(type_selection) if type_selectable?
|
|
523
542
|
end
|
|
@@ -530,12 +549,10 @@ module Mongoid
|
|
|
530
549
|
# criteria.type_selectable?
|
|
531
550
|
#
|
|
532
551
|
# @return [ true, false ] If type selection should be added.
|
|
533
|
-
#
|
|
534
|
-
# @since 3.0.3
|
|
535
552
|
def type_selectable?
|
|
536
553
|
klass.hereditary? &&
|
|
537
|
-
!selector.keys.include?(
|
|
538
|
-
!selector.keys.include?(
|
|
554
|
+
!selector.keys.include?(self.discriminator_key) &&
|
|
555
|
+
!selector.keys.include?(self.discriminator_key.to_sym)
|
|
539
556
|
end
|
|
540
557
|
|
|
541
558
|
# Get the selector for type selection.
|
|
@@ -546,14 +563,12 @@ module Mongoid
|
|
|
546
563
|
# criteria.type_selection
|
|
547
564
|
#
|
|
548
565
|
# @return [ Hash ] The type selection.
|
|
549
|
-
#
|
|
550
|
-
# @since 3.0.3
|
|
551
566
|
def type_selection
|
|
552
567
|
klasses = klass._types
|
|
553
568
|
if klasses.size > 1
|
|
554
|
-
{
|
|
569
|
+
{ klass.discriminator_key.to_sym => { "$in" => klass._types }}
|
|
555
570
|
else
|
|
556
|
-
{
|
|
571
|
+
{ klass.discriminator_key.to_sym => klass._types[0] }
|
|
557
572
|
end
|
|
558
573
|
end
|
|
559
574
|
|
|
@@ -565,8 +580,6 @@ module Mongoid
|
|
|
565
580
|
# criteria.selector_with_type_selection
|
|
566
581
|
#
|
|
567
582
|
# @return [ Hash ] The selector.
|
|
568
|
-
#
|
|
569
|
-
# @since 3.0.3
|
|
570
583
|
def selector_with_type_selection
|
|
571
584
|
type_selectable? ? selector.merge(type_selection) : selector
|
|
572
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"
|
|
@@ -15,6 +16,7 @@ require "mongoid/fields"
|
|
|
15
16
|
require "mongoid/timestamps"
|
|
16
17
|
require "mongoid/association"
|
|
17
18
|
require "mongoid/composable"
|
|
19
|
+
require "mongoid/touchable"
|
|
18
20
|
|
|
19
21
|
module Mongoid
|
|
20
22
|
|
|
@@ -23,6 +25,7 @@ module Mongoid
|
|
|
23
25
|
module Document
|
|
24
26
|
extend ActiveSupport::Concern
|
|
25
27
|
include Composable
|
|
28
|
+
include Mongoid::Touchable::InstanceMethods
|
|
26
29
|
|
|
27
30
|
attr_accessor :__selected_fields
|
|
28
31
|
attr_reader :new_record
|
|
@@ -36,8 +39,6 @@ module Mongoid
|
|
|
36
39
|
# that should be used instead.
|
|
37
40
|
# When ruby driver 2.3.0 is released and Mongoid can be updated
|
|
38
41
|
# to require >= 2.3.0, the BSON constant can be used.
|
|
39
|
-
#
|
|
40
|
-
# @since 6.0.0
|
|
41
42
|
ILLEGAL_KEY = /(\A[$])|(\.)/.freeze
|
|
42
43
|
|
|
43
44
|
# Freezes the internal attributes of the document.
|
|
@@ -46,8 +47,6 @@ module Mongoid
|
|
|
46
47
|
# document.freeze
|
|
47
48
|
#
|
|
48
49
|
# @return [ Document ] The document.
|
|
49
|
-
#
|
|
50
|
-
# @since 2.0.0
|
|
51
50
|
def freeze
|
|
52
51
|
as_attributes.freeze and self
|
|
53
52
|
end
|
|
@@ -58,8 +57,6 @@ module Mongoid
|
|
|
58
57
|
# document.frozen?
|
|
59
58
|
#
|
|
60
59
|
# @return [ true, false ] True if frozen, else false.
|
|
61
|
-
#
|
|
62
|
-
# @since 2.0.0
|
|
63
60
|
def frozen?
|
|
64
61
|
attributes.frozen?
|
|
65
62
|
end
|
|
@@ -74,8 +71,6 @@ module Mongoid
|
|
|
74
71
|
# document.hash
|
|
75
72
|
#
|
|
76
73
|
# @return [ Integer ] The hash of the document's identity.
|
|
77
|
-
#
|
|
78
|
-
# @since 1.0.0
|
|
79
74
|
def hash
|
|
80
75
|
identity.hash
|
|
81
76
|
end
|
|
@@ -88,8 +83,6 @@ module Mongoid
|
|
|
88
83
|
# document.identity
|
|
89
84
|
#
|
|
90
85
|
# @return [ Array ] An array containing [document.class, document._id]
|
|
91
|
-
#
|
|
92
|
-
# @since 3.0.0
|
|
93
86
|
def identity
|
|
94
87
|
[ self.class, self._id ]
|
|
95
88
|
end
|
|
@@ -107,8 +100,6 @@ module Mongoid
|
|
|
107
100
|
# @param [ Hash ] attrs The attributes to set up the document with.
|
|
108
101
|
#
|
|
109
102
|
# @return [ Document ] A new document.
|
|
110
|
-
#
|
|
111
|
-
# @since 1.0.0
|
|
112
103
|
def initialize(attrs = nil)
|
|
113
104
|
@__parent = nil
|
|
114
105
|
_building do
|
|
@@ -132,8 +123,6 @@ module Mongoid
|
|
|
132
123
|
# document.model_name
|
|
133
124
|
#
|
|
134
125
|
# @return [ String ] The model name.
|
|
135
|
-
#
|
|
136
|
-
# @since 3.0.16
|
|
137
126
|
def model_name
|
|
138
127
|
self.class.model_name
|
|
139
128
|
end
|
|
@@ -144,10 +133,8 @@ module Mongoid
|
|
|
144
133
|
# document.to_key
|
|
145
134
|
#
|
|
146
135
|
# @return [ String ] The id of the document or nil if new.
|
|
147
|
-
#
|
|
148
|
-
# @since 2.4.0
|
|
149
136
|
def to_key
|
|
150
|
-
(persisted? || destroyed?) ? [
|
|
137
|
+
(persisted? || destroyed?) ? [ _id.to_s ] : nil
|
|
151
138
|
end
|
|
152
139
|
|
|
153
140
|
# Return an array with this +Document+ only in it.
|
|
@@ -156,8 +143,6 @@ module Mongoid
|
|
|
156
143
|
# document.to_a
|
|
157
144
|
#
|
|
158
145
|
# @return [ Array<Document> ] An array with the document as its only item.
|
|
159
|
-
#
|
|
160
|
-
# @since 1.0.0
|
|
161
146
|
def to_a
|
|
162
147
|
[ self ]
|
|
163
148
|
end
|
|
@@ -170,31 +155,35 @@ module Mongoid
|
|
|
170
155
|
# person.as_document
|
|
171
156
|
#
|
|
172
157
|
# @return [ Hash ] A hash of all attributes in the hierarchy.
|
|
173
|
-
#
|
|
174
|
-
# @since 1.0.0
|
|
175
158
|
def as_document
|
|
176
159
|
BSON::Document.new(as_attributes)
|
|
177
160
|
end
|
|
178
161
|
|
|
179
162
|
# Calls #as_json on the document with additional, Mongoid-specific options.
|
|
180
163
|
#
|
|
164
|
+
# @note Rails 6 changes return value of as_json for non-primitive types
|
|
165
|
+
# such as BSON::ObjectId. In Rails <= 5, as_json returned these as
|
|
166
|
+
# instances of the class. In Rails 6, these are returned serialized to
|
|
167
|
+
# primitive types (e.g. {"$oid"=>"5bcfc40bde340b37feda98e9"}).
|
|
168
|
+
# See https://github.com/rails/rails/commit/2e5cb980a448e7f4ab00df6e9ad4c1cc456616aa
|
|
169
|
+
# for more information.
|
|
170
|
+
#
|
|
181
171
|
# @example Get the document as json.
|
|
182
172
|
# document.as_json(compact: true)
|
|
183
173
|
#
|
|
184
174
|
# @param [ Hash ] options The options.
|
|
185
175
|
#
|
|
186
|
-
# @option options [ true, false ] :compact Whether to include fields
|
|
187
|
-
# 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.
|
|
188
178
|
#
|
|
189
179
|
# @return [ Hash ] The document as json.
|
|
190
|
-
#
|
|
191
|
-
# @since 5.1.0
|
|
192
180
|
def as_json(options = nil)
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
181
|
+
rv = super
|
|
182
|
+
if options && options[:compact]
|
|
183
|
+
Mongoid.logger.warn('#as_json :compact option is deprecated. Please call #compact on the returned Hash object instead.')
|
|
184
|
+
rv = rv.compact
|
|
197
185
|
end
|
|
186
|
+
rv
|
|
198
187
|
end
|
|
199
188
|
|
|
200
189
|
# Returns an instance of the specified class with the attributes,
|
|
@@ -208,8 +197,6 @@ module Mongoid
|
|
|
208
197
|
# @param [ Class ] klass The class to become.
|
|
209
198
|
#
|
|
210
199
|
# @return [ Document ] An instance of the specified class.
|
|
211
|
-
#
|
|
212
|
-
# @since 2.0.0
|
|
213
200
|
def becomes(klass)
|
|
214
201
|
unless klass.include?(Mongoid::Document)
|
|
215
202
|
raise ArgumentError, "A class which includes Mongoid::Document is expected"
|
|
@@ -218,12 +205,13 @@ module Mongoid
|
|
|
218
205
|
became = klass.new(clone_document)
|
|
219
206
|
became._id = _id
|
|
220
207
|
became.instance_variable_set(:@changed_attributes, changed_attributes)
|
|
221
|
-
|
|
222
|
-
|
|
208
|
+
new_errors = ActiveModel::Errors.new(became)
|
|
209
|
+
new_errors.copy!(errors)
|
|
210
|
+
became.instance_variable_set(:@errors, new_errors)
|
|
223
211
|
became.instance_variable_set(:@new_record, new_record?)
|
|
224
212
|
became.instance_variable_set(:@destroyed, destroyed?)
|
|
225
|
-
became.changed_attributes[
|
|
226
|
-
became.
|
|
213
|
+
became.changed_attributes[klass.discriminator_key] = self.class.discriminator_value
|
|
214
|
+
became[klass.discriminator_key] = klass.discriminator_value
|
|
227
215
|
|
|
228
216
|
# mark embedded docs as persisted
|
|
229
217
|
embedded_relations.each_pair do |name, meta|
|
|
@@ -243,8 +231,6 @@ module Mongoid
|
|
|
243
231
|
# Returns the logger
|
|
244
232
|
#
|
|
245
233
|
# @return [ Logger ] The configured logger or a default Logger instance.
|
|
246
|
-
#
|
|
247
|
-
# @since 2.2.0
|
|
248
234
|
def logger
|
|
249
235
|
Mongoid.logger
|
|
250
236
|
end
|
|
@@ -255,26 +241,10 @@ module Mongoid
|
|
|
255
241
|
# model.model_key
|
|
256
242
|
#
|
|
257
243
|
# @return [ String ] The model key.
|
|
258
|
-
#
|
|
259
|
-
# @since 2.4.0
|
|
260
244
|
def model_key
|
|
261
245
|
@model_cache_key ||= self.class.model_name.cache_key
|
|
262
246
|
end
|
|
263
247
|
|
|
264
|
-
# Implement this for calls to flatten on array.
|
|
265
|
-
#
|
|
266
|
-
# @example Get the document as an array.
|
|
267
|
-
# document.to_ary
|
|
268
|
-
#
|
|
269
|
-
# @return [ nil ] Always nil.
|
|
270
|
-
#
|
|
271
|
-
# @since 2.1.0
|
|
272
|
-
def to_ary
|
|
273
|
-
nil
|
|
274
|
-
end
|
|
275
|
-
|
|
276
|
-
private
|
|
277
|
-
|
|
278
248
|
def as_attributes
|
|
279
249
|
return attributes if frozen?
|
|
280
250
|
embedded_relations.each_pair do |name, meta|
|
|
@@ -294,20 +264,6 @@ module Mongoid
|
|
|
294
264
|
|
|
295
265
|
module ClassMethods
|
|
296
266
|
|
|
297
|
-
# Performs class equality checking.
|
|
298
|
-
#
|
|
299
|
-
# @example Compare the classes.
|
|
300
|
-
# document === other
|
|
301
|
-
#
|
|
302
|
-
# @param [ Document, Object ] other The other object to compare with.
|
|
303
|
-
#
|
|
304
|
-
# @return [ true, false ] True if the classes are equal, false if not.
|
|
305
|
-
#
|
|
306
|
-
# @since 2.0.0.rc.4
|
|
307
|
-
def ===(other)
|
|
308
|
-
other.class == Class ? self <= other : other.is_a?(self)
|
|
309
|
-
end
|
|
310
|
-
|
|
311
267
|
# Instantiate a new object, only when loaded from the database or when
|
|
312
268
|
# the attributes have already been typecast.
|
|
313
269
|
#
|
|
@@ -319,8 +275,6 @@ module Mongoid
|
|
|
319
275
|
# criteria.
|
|
320
276
|
#
|
|
321
277
|
# @return [ Document ] A new document.
|
|
322
|
-
#
|
|
323
|
-
# @since 1.0.0
|
|
324
278
|
def instantiate(attrs = nil, selected_fields = nil)
|
|
325
279
|
attributes = attrs || {}
|
|
326
280
|
doc = allocate
|
|
@@ -339,17 +293,25 @@ module Mongoid
|
|
|
339
293
|
# document._types
|
|
340
294
|
#
|
|
341
295
|
# @return [ Array<Class> ] All subclasses of the current document.
|
|
342
|
-
#
|
|
343
|
-
# @since 1.0.0
|
|
344
296
|
def _types
|
|
345
|
-
@_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?
|
|
346
310
|
end
|
|
347
311
|
|
|
348
312
|
# Set the i18n scope to overwrite ActiveModel.
|
|
349
313
|
#
|
|
350
314
|
# @return [ Symbol ] :mongoid
|
|
351
|
-
#
|
|
352
|
-
# @since 2.0.0
|
|
353
315
|
def i18n_scope
|
|
354
316
|
:mongoid
|
|
355
317
|
end
|
|
@@ -360,8 +322,6 @@ module Mongoid
|
|
|
360
322
|
# Person.logger
|
|
361
323
|
#
|
|
362
324
|
# @return [ Logger ] The configured logger or a default Logger instance.
|
|
363
|
-
#
|
|
364
|
-
# @since 2.2.0
|
|
365
325
|
def logger
|
|
366
326
|
Mongoid.logger
|
|
367
327
|
end
|