mongoid 7.0.5 → 8.1.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 +33 -33
- data/LICENSE +1 -0
- data/README.md +34 -20
- data/Rakefile +63 -5
- data/lib/config/locales/en.yml +220 -105
- data/lib/mongoid/association/accessors.rb +176 -84
- data/lib/mongoid/association/bindable.rb +57 -28
- data/lib/mongoid/association/builders.rb +9 -15
- data/lib/mongoid/association/constrainable.rb +5 -7
- data/lib/mongoid/association/depending.rb +9 -18
- data/lib/mongoid/association/eager_loadable.rb +31 -10
- data/lib/mongoid/association/embedded/batchable.rb +68 -54
- data/lib/mongoid/association/embedded/cyclic.rb +10 -17
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +27 -9
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +9 -6
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +16 -25
- data/lib/mongoid/association/embedded/embedded_in.rb +9 -28
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +5 -8
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +10 -6
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +156 -135
- data/lib/mongoid/association/embedded/embeds_many.rb +10 -37
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +4 -8
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +27 -10
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +64 -30
- data/lib/mongoid/association/embedded/embeds_one.rb +11 -34
- data/lib/mongoid/association/embedded.rb +2 -0
- data/lib/mongoid/association/macros.rb +65 -41
- data/lib/mongoid/association/many.rb +25 -35
- data/lib/mongoid/association/marshalable.rb +3 -6
- data/lib/mongoid/association/nested/many.rb +22 -30
- data/lib/mongoid/association/nested/nested_buildable.rb +9 -15
- data/lib/mongoid/association/nested/one.rb +57 -30
- data/lib/mongoid/association/nested.rb +3 -3
- data/lib/mongoid/association/one.rb +5 -12
- data/lib/mongoid/association/options.rb +16 -46
- data/lib/mongoid/association/proxy.rb +52 -40
- data/lib/mongoid/association/referenced/auto_save.rb +9 -14
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +5 -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 +19 -31
- data/lib/mongoid/association/referenced/belongs_to.rb +16 -38
- data/lib/mongoid/association/referenced/counter_cache.rb +14 -25
- data/lib/mongoid/association/referenced/eager.rb +41 -40
- 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 +105 -68
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +29 -46
- 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 +440 -456
- data/lib/mongoid/association/referenced/has_many/proxy.rb +102 -125
- data/lib/mongoid/association/referenced/has_many.rb +21 -45
- 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 +16 -29
- data/lib/mongoid/association/referenced/has_one/proxy.rb +25 -30
- data/lib/mongoid/association/referenced/has_one.rb +16 -36
- data/lib/mongoid/association/referenced/syncable.rb +11 -26
- data/lib/mongoid/association/referenced.rb +2 -0
- data/lib/mongoid/association/reflections.rb +7 -6
- data/lib/mongoid/association/relatable.rb +62 -84
- data/lib/mongoid/association.rb +13 -27
- data/lib/mongoid/atomic/modifiers.rb +29 -53
- data/lib/mongoid/atomic/paths/embedded/many.rb +23 -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 +42 -47
- data/lib/mongoid/attributes/dynamic.rb +22 -36
- data/lib/mongoid/attributes/nested.rb +12 -15
- data/lib/mongoid/attributes/processing.rb +19 -27
- data/lib/mongoid/attributes/projector.rb +119 -0
- data/lib/mongoid/attributes/readonly.rb +6 -9
- data/lib/mongoid/attributes.rb +103 -100
- data/lib/mongoid/cacheable.rb +7 -10
- data/lib/mongoid/changeable.rb +151 -70
- data/lib/mongoid/clients/factory.rb +42 -17
- data/lib/mongoid/clients/options.rb +15 -14
- data/lib/mongoid/clients/sessions.rb +10 -10
- data/lib/mongoid/clients/storage_options.rb +9 -17
- data/lib/mongoid/clients/validators/storage.rb +5 -24
- data/lib/mongoid/clients/validators.rb +2 -1
- data/lib/mongoid/clients.rb +3 -10
- data/lib/mongoid/collection_configurable.rb +58 -0
- data/lib/mongoid/composable.rb +7 -9
- data/lib/mongoid/config/defaults.rb +60 -0
- data/lib/mongoid/config/environment.rb +51 -13
- data/lib/mongoid/config/options.rb +20 -23
- data/lib/mongoid/config/validators/async_query_executor.rb +24 -0
- data/lib/mongoid/config/validators/client.rb +8 -23
- data/lib/mongoid/config/validators/option.rb +2 -3
- data/lib/mongoid/config/validators.rb +3 -1
- data/lib/mongoid/config.rb +235 -48
- data/lib/mongoid/contextual/aggregable/memory.rb +40 -27
- data/lib/mongoid/contextual/aggregable/mongo.rb +32 -33
- 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 +13 -44
- data/lib/mongoid/contextual/map_reduce.rb +7 -35
- data/lib/mongoid/contextual/memory.rb +387 -81
- data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
- data/lib/mongoid/contextual/mongo.rb +641 -283
- data/lib/mongoid/contextual/none.rb +264 -31
- data/lib/mongoid/contextual/queryable.rb +3 -4
- data/lib/mongoid/contextual.rb +21 -11
- data/lib/mongoid/copyable.rb +42 -17
- data/lib/mongoid/criteria/findable.rb +20 -20
- data/lib/mongoid/criteria/includable.rb +32 -34
- data/lib/mongoid/criteria/inspectable.rb +2 -3
- data/lib/mongoid/criteria/marshalable.rb +12 -7
- data/lib/mongoid/criteria/modifiable.rb +4 -20
- data/lib/mongoid/criteria/options.rb +2 -3
- data/lib/mongoid/criteria/permission.rb +3 -2
- data/lib/mongoid/criteria/queryable/aggregable.rb +4 -15
- data/lib/mongoid/criteria/queryable/expandable.rb +68 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +7 -41
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +28 -8
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +5 -6
- data/lib/mongoid/criteria/queryable/extensions/date.rb +9 -9
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +11 -12
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +4 -41
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +3 -14
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +4 -21
- data/lib/mongoid/criteria/queryable/extensions/object.rb +6 -30
- data/lib/mongoid/criteria/queryable/extensions/range.rb +49 -17
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +12 -19
- data/lib/mongoid/criteria/queryable/extensions/set.rb +4 -5
- data/lib/mongoid/criteria/queryable/extensions/string.rb +7 -32
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +7 -22
- data/lib/mongoid/criteria/queryable/extensions/time.rb +10 -10
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +19 -7
- data/lib/mongoid/criteria/queryable/extensions.rb +1 -4
- data/lib/mongoid/criteria/queryable/key.rb +40 -25
- data/lib/mongoid/criteria/queryable/macroable.rb +3 -4
- data/lib/mongoid/criteria/queryable/mergeable.rb +205 -44
- data/lib/mongoid/criteria/queryable/optional.rb +16 -65
- data/lib/mongoid/criteria/queryable/options.rb +4 -21
- data/lib/mongoid/criteria/queryable/pipeline.rb +5 -15
- data/lib/mongoid/criteria/queryable/selectable.rb +453 -177
- data/lib/mongoid/criteria/queryable/selector.rb +126 -29
- data/lib/mongoid/criteria/queryable/smash.rb +42 -18
- data/lib/mongoid/criteria/queryable/storable.rb +237 -0
- data/lib/mongoid/criteria/queryable.rb +18 -15
- data/lib/mongoid/criteria/scopable.rb +29 -21
- data/lib/mongoid/criteria/translator.rb +45 -0
- data/lib/mongoid/criteria.rb +106 -111
- data/lib/mongoid/deprecable.rb +36 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +151 -99
- data/lib/mongoid/equality.rb +35 -18
- data/lib/mongoid/errors/ambiguous_relationship.rb +4 -5
- data/lib/mongoid/errors/callback.rb +2 -3
- data/lib/mongoid/errors/create_collection_failure.rb +33 -0
- 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 +35 -21
- data/lib/mongoid/errors/drop_collection_failure.rb +27 -0
- data/lib/mongoid/errors/empty_config_file.rb +25 -0
- data/lib/mongoid/errors/immutable_attribute.rb +26 -0
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +2 -3
- data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
- data/lib/mongoid/errors/invalid_collection.rb +2 -1
- data/lib/mongoid/errors/invalid_config_file.rb +25 -0
- data/lib/mongoid/errors/invalid_config_option.rb +3 -4
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +3 -4
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +24 -0
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +25 -0
- data/lib/mongoid/errors/invalid_expression_operator.rb +27 -0
- data/lib/mongoid/errors/invalid_field.rb +8 -7
- data/lib/mongoid/errors/invalid_field_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_field_option.rb +2 -3
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/invalid_find.rb +2 -3
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
- 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 +5 -10
- 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 +3 -4
- data/lib/mongoid/errors/invalid_storage_parent.rb +4 -3
- data/lib/mongoid/errors/invalid_time.rb +2 -3
- 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 +6 -13
- 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 +3 -4
- data/lib/mongoid/errors/no_client_hosts.rb +3 -4
- 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 +3 -4
- 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 +3 -1
- data/lib/mongoid/errors/unknown_attribute.rb +3 -4
- 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 +18 -4
- data/lib/mongoid/evolvable.rb +4 -5
- data/lib/mongoid/extensions/array.rb +37 -44
- data/lib/mongoid/extensions/big_decimal.rb +35 -21
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +10 -6
- data/lib/mongoid/extensions/date.rb +32 -25
- data/lib/mongoid/extensions/date_time.rb +5 -13
- data/lib/mongoid/extensions/decimal128.rb +2 -5
- data/lib/mongoid/extensions/false_class.rb +5 -8
- data/lib/mongoid/extensions/float.rb +12 -14
- data/lib/mongoid/extensions/hash.rb +64 -42
- data/lib/mongoid/extensions/integer.rb +12 -16
- data/lib/mongoid/extensions/module.rb +3 -4
- data/lib/mongoid/extensions/nil_class.rb +2 -5
- data/lib/mongoid/extensions/object.rb +27 -52
- data/lib/mongoid/extensions/object_id.rb +2 -7
- data/lib/mongoid/extensions/range.rb +42 -20
- data/lib/mongoid/extensions/regexp.rb +14 -8
- data/lib/mongoid/extensions/set.rb +13 -11
- data/lib/mongoid/extensions/string.rb +30 -61
- data/lib/mongoid/extensions/symbol.rb +6 -22
- data/lib/mongoid/extensions/time.rb +38 -22
- data/lib/mongoid/extensions/time_with_zone.rb +26 -9
- data/lib/mongoid/extensions/true_class.rb +5 -8
- data/lib/mongoid/extensions.rb +19 -3
- data/lib/mongoid/factory.rb +104 -17
- data/lib/mongoid/fields/foreign_key.rb +14 -26
- data/lib/mongoid/fields/localized.rb +21 -15
- data/lib/mongoid/fields/standard.rb +23 -43
- data/lib/mongoid/fields/validators/macro.rb +32 -20
- data/lib/mongoid/fields/validators.rb +2 -1
- data/lib/mongoid/fields.rb +349 -76
- data/lib/mongoid/findable.rb +115 -34
- data/lib/mongoid/indexable/specification.rb +5 -18
- data/lib/mongoid/indexable/validators/options.rb +8 -9
- data/lib/mongoid/indexable.rb +6 -21
- data/lib/mongoid/inspectable.rb +4 -11
- data/lib/mongoid/interceptable.rb +85 -41
- data/lib/mongoid/loggable.rb +13 -16
- data/lib/mongoid/matchable.rb +4 -156
- 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 +130 -0
- data/lib/mongoid/persistable/creatable.rb +23 -30
- data/lib/mongoid/persistable/deletable.rb +7 -23
- data/lib/mongoid/persistable/destroyable.rb +12 -11
- 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 +16 -9
- data/lib/mongoid/persistable/settable.rb +3 -6
- data/lib/mongoid/persistable/unsettable.rb +10 -10
- data/lib/mongoid/persistable/updatable.rb +99 -30
- data/lib/mongoid/persistable/upsertable.rb +23 -9
- data/lib/mongoid/persistable.rb +138 -40
- data/lib/mongoid/persistence_context.rb +91 -51
- data/lib/mongoid/positional.rb +2 -5
- data/lib/mongoid/query_cache.rb +18 -238
- data/lib/mongoid/railtie.rb +3 -16
- data/lib/mongoid/railties/controller_runtime.rb +4 -2
- data/lib/mongoid/railties/database.rake +16 -2
- data/lib/mongoid/reloadable.rb +21 -22
- data/lib/mongoid/scopable.rb +34 -57
- data/lib/mongoid/selectable.rb +8 -18
- data/lib/mongoid/serializable.rb +33 -34
- data/lib/mongoid/shardable.rb +108 -21
- data/lib/mongoid/stateful.rb +60 -20
- data/lib/mongoid/stringified_symbol.rb +52 -0
- data/lib/mongoid/tasks/database.rake +24 -5
- data/lib/mongoid/tasks/database.rb +105 -7
- data/lib/mongoid/threaded/lifecycle.rb +7 -26
- data/lib/mongoid/threaded.rb +44 -67
- data/lib/mongoid/timestamps/created/short.rb +2 -1
- data/lib/mongoid/timestamps/created.rb +4 -3
- 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 +5 -6
- data/lib/mongoid/timestamps.rb +3 -2
- data/lib/mongoid/touchable.rb +54 -25
- data/lib/mongoid/traversable.rb +185 -61
- data/lib/mongoid/utils.rb +22 -0
- 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 +3 -4
- data/lib/mongoid/validatable/macros.rb +7 -14
- data/lib/mongoid/validatable/presence.rb +10 -15
- data/lib/mongoid/validatable/queryable.rb +2 -3
- data/lib/mongoid/validatable/uniqueness.rb +30 -42
- data/lib/mongoid/validatable.rb +16 -32
- data/lib/mongoid/version.rb +3 -2
- data/lib/mongoid/warnings.rb +44 -0
- data/lib/mongoid.rb +50 -17
- data/lib/rails/generators/mongoid/config/config_generator.rb +10 -2
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +53 -32
- 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 +19 -4
- data/spec/config/mongoid.yml +17 -0
- data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
- data/spec/integration/app_spec.rb +345 -0
- data/spec/integration/associations/belongs_to_spec.rb +20 -0
- data/spec/integration/associations/embedded_dirty_spec.rb +57 -0
- data/spec/integration/associations/embedded_spec.rb +283 -0
- data/spec/integration/associations/embeds_many_spec.rb +219 -0
- data/spec/integration/associations/embeds_one_spec.rb +41 -0
- data/spec/integration/associations/foreign_key_spec.rb +107 -0
- data/spec/integration/associations/foreign_key_spec_models.rb +64 -0
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
- data/spec/integration/associations/has_many_spec.rb +128 -0
- data/spec/integration/associations/has_one_spec.rb +272 -0
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +115 -0
- data/spec/integration/associations/reverse_population_spec.rb +34 -0
- data/spec/integration/associations/reverse_population_spec_models.rb +36 -0
- data/spec/integration/associations/scope_option_spec.rb +101 -0
- data/spec/integration/atomic/modifiers_spec.rb +116 -0
- data/spec/integration/bson_regexp_raw_spec.rb +19 -0
- data/spec/integration/callbacks_models.rb +192 -0
- data/spec/integration/callbacks_spec.rb +584 -0
- data/spec/integration/contextual/empty_spec.rb +141 -0
- data/spec/integration/criteria/alias_query_spec.rb +161 -0
- data/spec/integration/criteria/date_field_spec.rb +40 -0
- data/spec/integration/criteria/default_scope_spec.rb +72 -0
- data/spec/integration/criteria/logical_spec.rb +124 -0
- data/spec/integration/criteria/range_spec.rb +359 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +142 -0
- data/spec/integration/discriminator_key_spec.rb +391 -0
- data/spec/integration/discriminator_value_spec.rb +206 -0
- data/spec/integration/document_spec.rb +51 -0
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +74 -0
- data/spec/integration/matcher_examples_spec.rb +765 -0
- data/spec/integration/matcher_operator_data/all.yml +140 -0
- data/spec/integration/matcher_operator_data/and.yml +93 -0
- data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
- data/spec/integration/matcher_operator_data/comment.yml +22 -0
- data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
- data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
- data/spec/integration/matcher_operator_data/eq.yml +191 -0
- data/spec/integration/matcher_operator_data/exists.yml +213 -0
- data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
- data/spec/integration/matcher_operator_data/gt.yml +132 -0
- data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
- data/spec/integration/matcher_operator_data/gte.yml +132 -0
- data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/implicit.yml +331 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
- data/spec/integration/matcher_operator_data/in.yml +210 -0
- data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
- data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
- data/spec/integration/matcher_operator_data/lt.yml +132 -0
- data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
- data/spec/integration/matcher_operator_data/lte.yml +132 -0
- data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/mod.yml +55 -0
- data/spec/integration/matcher_operator_data/multiple.yml +29 -0
- data/spec/integration/matcher_operator_data/ne.yml +150 -0
- data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
- data/spec/integration/matcher_operator_data/nin.yml +114 -0
- data/spec/integration/matcher_operator_data/nor.yml +126 -0
- data/spec/integration/matcher_operator_data/not.yml +196 -0
- data/spec/integration/matcher_operator_data/or.yml +137 -0
- data/spec/integration/matcher_operator_data/regex.yml +174 -0
- data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
- data/spec/integration/matcher_operator_data/size.yml +174 -0
- data/spec/integration/matcher_operator_data/type.yml +70 -0
- data/spec/integration/matcher_operator_data/type_array.yml +16 -0
- data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
- data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
- data/spec/integration/matcher_operator_data/type_code.yml +26 -0
- data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
- data/spec/integration/matcher_operator_data/type_date.yml +39 -0
- data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
- data/spec/integration/matcher_operator_data/type_decimal.yml +41 -0
- data/spec/integration/matcher_operator_data/type_double.yml +15 -0
- data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
- data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
- data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_null.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
- data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
- data/spec/integration/matcher_operator_data/type_string.yml +15 -0
- data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
- data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
- data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
- data/spec/integration/matcher_operator_spec.rb +122 -0
- data/spec/integration/matcher_spec.rb +283 -0
- data/spec/integration/persistence/range_field_spec.rb +350 -0
- data/spec/integration/server_query_spec.rb +141 -0
- data/spec/integration/shardable_spec.rb +148 -0
- data/spec/integration/stringified_symbol_field_spec.rb +203 -0
- data/spec/lite_spec_helper.rb +35 -8
- 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 +35 -33
- data/spec/mongoid/association/depending_spec.rb +431 -338
- data/spec/mongoid/association/eager_spec.rb +8 -5
- 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 +4 -1
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +56 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +152 -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 +114 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +706 -197
- data/spec/mongoid/association/embedded/embeds_many_models.rb +227 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +63 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +81 -1
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +27 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +38 -23
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +22 -0
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +28 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +31 -3
- 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 +4 -1
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +111 -16
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +242 -12
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +114 -58
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +57 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +28 -21
- 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 +559 -385
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +68 -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 +81 -4
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +3 -1
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +132 -0
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +40 -9
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +415 -129
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +859 -502
- data/spec/mongoid/association/referenced/has_many_models.rb +61 -1
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +48 -0
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +2 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +55 -9
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +34 -4
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +135 -27
- data/spec/mongoid/association/referenced/has_one_models.rb +65 -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 +48 -32
- 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 +93 -12
- data/spec/mongoid/atomic_spec.rb +53 -6
- data/spec/mongoid/attributes/dynamic_spec.rb +152 -0
- data/spec/mongoid/attributes/nested_spec.rb +149 -78
- data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
- data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
- data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
- data/spec/mongoid/attributes/projector_spec.rb +40 -0
- data/spec/mongoid/attributes/readonly_spec.rb +24 -22
- data/spec/mongoid/attributes_spec.rb +895 -54
- data/spec/mongoid/cacheable_spec.rb +6 -4
- data/spec/mongoid/changeable_spec.rb +484 -67
- data/spec/mongoid/clients/factory_spec.rb +128 -28
- data/spec/mongoid/clients/options_spec.rb +49 -30
- data/spec/mongoid/clients/sessions_spec.rb +29 -66
- data/spec/mongoid/clients/transactions_spec.rb +74 -37
- data/spec/mongoid/clients_spec.rb +189 -23
- data/spec/mongoid/collection_configurable_spec.rb +158 -0
- data/spec/mongoid/composable_spec.rb +2 -0
- data/spec/mongoid/config/defaults_spec.rb +160 -0
- data/spec/mongoid/config/environment_spec.rb +126 -8
- data/spec/mongoid/config/options_spec.rb +22 -3
- data/spec/mongoid/config_spec.rb +504 -1
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +433 -153
- data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +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 +30 -19
- data/spec/mongoid/contextual/map_reduce_spec.rb +22 -19
- data/spec/mongoid/contextual/memory_spec.rb +1828 -303
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
- data/spec/mongoid/contextual/mongo_spec.rb +3504 -1270
- data/spec/mongoid/contextual/none_spec.rb +80 -67
- data/spec/mongoid/copyable_spec.rb +659 -36
- data/spec/mongoid/copyable_spec_models.rb +30 -0
- data/spec/mongoid/criteria/findable_spec.rb +161 -228
- data/spec/mongoid/criteria/includable_spec.rb +1492 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
- data/spec/mongoid/criteria/inspectable_spec.rb +2 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +20 -1
- 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 +9 -19
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +136 -26
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +13 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +46 -17
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +2 -15
- 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 +73 -8
- 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 +7 -70
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +2 -59
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +53 -23
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +41 -1
- 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 +18 -485
- data/spec/mongoid/criteria/queryable/options_spec.rb +3 -1
- 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 +2538 -0
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +1100 -2880
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +17 -3
- 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/translator_spec.rb +132 -0
- data/spec/mongoid/criteria_projection_spec.rb +406 -0
- data/spec/mongoid/criteria_spec.rb +1320 -1723
- data/spec/mongoid/document_fields_spec.rb +262 -0
- data/spec/mongoid/document_persistence_context_spec.rb +32 -0
- data/spec/mongoid/document_query_spec.rb +89 -0
- data/spec/mongoid/document_spec.rb +153 -87
- 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 +78 -0
- data/spec/mongoid/errors/invalid_collection_spec.rb +2 -0
- data/spec/mongoid/errors/{eager_load_spec.rb → invalid_config_file_spec.rb} +7 -5
- 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 +3 -1
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -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 +24 -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 +5 -3
- 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 +4 -2
- data/spec/mongoid/errors/scope_overwrite_spec.rb +2 -0
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -1
- 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 +41 -45
- data/spec/mongoid/extensions/big_decimal_spec.rb +714 -212
- data/spec/mongoid/extensions/binary_spec.rb +46 -9
- data/spec/mongoid/extensions/boolean_spec.rb +70 -82
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +339 -0
- data/spec/mongoid/extensions/date_spec.rb +58 -140
- data/spec/mongoid/extensions/date_time_spec.rb +32 -69
- 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 +66 -73
- data/spec/mongoid/extensions/hash_spec.rb +135 -0
- data/spec/mongoid/extensions/integer_spec.rb +61 -63
- 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 +257 -54
- data/spec/mongoid/extensions/regexp_spec.rb +60 -33
- data/spec/mongoid/extensions/set_spec.rb +108 -0
- data/spec/mongoid/extensions/string_spec.rb +111 -50
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
- data/spec/mongoid/extensions/symbol_spec.rb +20 -25
- data/spec/mongoid/extensions/time_spec.rb +668 -106
- data/spec/mongoid/extensions/time_with_zone_spec.rb +57 -83
- data/spec/mongoid/extensions/true_class_spec.rb +3 -1
- data/spec/mongoid/extensions_spec.rb +16 -2
- data/spec/mongoid/factory_spec.rb +347 -27
- data/spec/mongoid/fields/foreign_key_spec.rb +2 -0
- data/spec/mongoid/fields/localized_spec.rb +86 -41
- data/spec/mongoid/fields/standard_spec.rb +2 -0
- data/spec/mongoid/fields_spec.rb +869 -114
- data/spec/mongoid/findable_spec.rb +520 -64
- data/spec/mongoid/indexable/specification_spec.rb +4 -2
- data/spec/mongoid/indexable_spec.rb +87 -32
- data/spec/mongoid/inspectable_spec.rb +39 -2
- data/spec/mongoid/interceptable_spec.rb +761 -98
- data/spec/mongoid/interceptable_spec_models.rb +307 -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 +36 -0
- data/spec/mongoid/mongoizable_spec.rb +285 -0
- data/spec/mongoid/persistable/creatable_spec.rb +114 -29
- data/spec/mongoid/persistable/deletable_spec.rb +300 -18
- data/spec/mongoid/persistable/destroyable_spec.rb +228 -18
- data/spec/mongoid/persistable/incrementable_spec.rb +60 -7
- data/spec/mongoid/persistable/logical_spec.rb +56 -3
- data/spec/mongoid/persistable/poppable_spec.rb +55 -3
- data/spec/mongoid/persistable/pullable_spec.rb +108 -6
- data/spec/mongoid/persistable/pushable_spec.rb +163 -7
- data/spec/mongoid/persistable/renamable_spec.rb +54 -2
- data/spec/mongoid/persistable/savable_spec.rb +284 -25
- data/spec/mongoid/persistable/settable_spec.rb +91 -8
- data/spec/mongoid/persistable/unsettable_spec.rb +55 -3
- data/spec/mongoid/persistable/updatable_spec.rb +63 -49
- data/spec/mongoid/persistable/upsertable_spec.rb +93 -3
- data/spec/mongoid/persistable_spec.rb +85 -9
- data/spec/mongoid/persistence_context_spec.rb +59 -58
- data/spec/mongoid/positional_spec.rb +2 -0
- data/spec/mongoid/query_cache_middleware_spec.rb +50 -0
- data/spec/mongoid/query_cache_spec.rb +410 -95
- data/spec/mongoid/relations/proxy_spec.rb +9 -7
- data/spec/mongoid/reloadable_spec.rb +357 -26
- data/spec/mongoid/scopable_spec.rb +193 -38
- data/spec/mongoid/selectable_spec.rb +8 -6
- data/spec/mongoid/serializable_spec.rb +148 -38
- data/spec/mongoid/shardable_models.rb +75 -0
- data/spec/mongoid/shardable_spec.rb +239 -34
- data/spec/mongoid/stateful_spec.rb +153 -9
- data/spec/mongoid/tasks/database_rake_spec.rb +89 -13
- data/spec/mongoid/tasks/database_spec.rb +130 -1
- 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 +400 -10
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +568 -33
- data/spec/mongoid/touchable_spec_models.rb +59 -0
- data/spec/mongoid/traversable_spec.rb +1145 -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 +159 -103
- data/spec/mongoid/validatable_spec.rb +5 -3
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +37 -9
- data/spec/rails/controller_extension/controller_runtime_spec.rb +5 -3
- data/spec/rails/mongoid_spec.rb +8 -18
- data/spec/shared/LICENSE +20 -0
- data/spec/shared/bin/get-mongodb-download-url +17 -0
- data/spec/shared/bin/s3-copy +45 -0
- data/spec/shared/bin/s3-upload +69 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/cluster_config.rb +231 -0
- data/spec/shared/lib/mrss/constraints.rb +378 -0
- data/spec/shared/lib/mrss/docker_runner.rb +298 -0
- data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +210 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +238 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +113 -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 +37 -0
- data/spec/shared/share/Dockerfile.erb +321 -0
- data/spec/shared/share/haproxy-1.conf +16 -0
- data/spec/shared/share/haproxy-2.conf +17 -0
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/distro.sh +74 -0
- data/spec/shared/shlib/server.sh +416 -0
- data/spec/shared/shlib/set_env.sh +169 -0
- data/spec/spec_helper.rb +44 -66
- data/spec/support/authorization.rb +2 -0
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +45 -69
- data/spec/support/expectations.rb +21 -3
- data/spec/support/helpers.rb +11 -0
- data/spec/support/immutable_ids.rb +118 -0
- data/spec/support/macros.rb +109 -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 -1
- 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/support/models/augmentation.rb +25 -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 +10 -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 +3 -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 +4 -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/support/models/catalog.rb +24 -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/support/models/circus.rb +12 -0
- data/spec/{app → support}/models/code.rb +4 -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/cover.rb +10 -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/support/models/fanatic.rb +8 -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 +11 -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 +6 -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 +3 -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 +22 -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 +22 -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 +4 -0
- data/spec/{app → support}/models/post.rb +2 -0
- data/spec/{app → support}/models/post_genre.rb +2 -0
- data/spec/support/models/powerup.rb +25 -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 +3 -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 +3 -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/school.rb +14 -0
- data/spec/support/models/scribe.rb +7 -0
- data/spec/support/models/sealer.rb +7 -0
- data/spec/support/models/seat.rb +24 -0
- data/spec/{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/support/models/shield.rb +18 -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/support/models/student.rb +14 -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/support/models/weapon.rb +25 -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/schema_maps/schema_map_aws.json +17 -0
- data/spec/support/schema_maps/schema_map_aws_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_azure.json +17 -0
- data/spec/support/schema_maps/schema_map_azure_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_gcp.json +17 -0
- data/spec/support/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_kmip.json +17 -0
- data/spec/support/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_local.json +18 -0
- data/spec/support/schema_maps/schema_map_local_key_alt_names.json +12 -0
- data/spec/support/shared/time.rb +53 -0
- data/spec/support/spec_config.rb +30 -5
- data.tar.gz.sig +0 -0
- metadata +1240 -742
- metadata.gz.sig +0 -0
- data/lib/mongoid/criteria/queryable/forwardable.rb +0 -65
- data/lib/mongoid/errors/eager_load.rb +0 -22
- data/lib/mongoid/errors/invalid_value.rb +0 -16
- 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/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/augmentation.rb +0 -11
- data/spec/app/models/bed.rb +0 -1
- data/spec/app/models/car.rb +0 -1
- data/spec/app/models/circus.rb +0 -7
- 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/powerup.rb +0 -11
- 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/app/models/weapon.rb +0 -11
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -58
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -58
- 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/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/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/changeable.rb
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
module Mongoid
|
|
3
4
|
|
|
4
|
-
# Defines
|
|
5
|
-
#
|
|
6
|
-
# @since 4.0.0
|
|
5
|
+
# Defines behavior for dirty tracking.
|
|
7
6
|
module Changeable
|
|
8
7
|
extend ActiveSupport::Concern
|
|
9
8
|
|
|
@@ -13,8 +12,6 @@ module Mongoid
|
|
|
13
12
|
# model.changed
|
|
14
13
|
#
|
|
15
14
|
# @return [ Array<String> ] The changed attributes.
|
|
16
|
-
#
|
|
17
|
-
# @since 2.4.0
|
|
18
15
|
def changed
|
|
19
16
|
changed_attributes.keys.select { |attr| attribute_change(attr) }
|
|
20
17
|
end
|
|
@@ -24,21 +21,16 @@ module Mongoid
|
|
|
24
21
|
# @example Has the document changed?
|
|
25
22
|
# model.changed?
|
|
26
23
|
#
|
|
27
|
-
# @return [ true
|
|
28
|
-
#
|
|
29
|
-
# @since 2.4.0
|
|
24
|
+
# @return [ true | false ] If the document is changed.
|
|
30
25
|
def changed?
|
|
31
26
|
changes.values.any? { |val| val } || children_changed?
|
|
32
27
|
end
|
|
33
28
|
|
|
34
29
|
# Have any children (embedded documents) of this document changed?
|
|
35
30
|
#
|
|
36
|
-
# @
|
|
37
|
-
# model.children_changed?
|
|
31
|
+
# @note This intentionally only considers children and not descendants.
|
|
38
32
|
#
|
|
39
|
-
# @return [ true
|
|
40
|
-
#
|
|
41
|
-
# @since 2.4.1
|
|
33
|
+
# @return [ true | false ] If any children have changed.
|
|
42
34
|
def children_changed?
|
|
43
35
|
_children.any?(&:changed?)
|
|
44
36
|
end
|
|
@@ -49,8 +41,6 @@ module Mongoid
|
|
|
49
41
|
# model.changed_attributes
|
|
50
42
|
#
|
|
51
43
|
# @return [ Hash<String, Object> ] The attribute changes.
|
|
52
|
-
#
|
|
53
|
-
# @since 2.4.0
|
|
54
44
|
def changed_attributes
|
|
55
45
|
@changed_attributes ||= {}
|
|
56
46
|
end
|
|
@@ -61,8 +51,6 @@ module Mongoid
|
|
|
61
51
|
# model.changes
|
|
62
52
|
#
|
|
63
53
|
# @return [ Hash<String, Array<Object, Object> ] The changes.
|
|
64
|
-
#
|
|
65
|
-
# @since 2.4.0
|
|
66
54
|
def changes
|
|
67
55
|
_changes = {}
|
|
68
56
|
changed.each do |attr|
|
|
@@ -74,15 +62,16 @@ module Mongoid
|
|
|
74
62
|
|
|
75
63
|
# Call this method after save, so the changes can be properly switched.
|
|
76
64
|
#
|
|
77
|
-
# This will unset the memoized children array, set new record to
|
|
65
|
+
# This will unset the memoized children array, set new record flag to
|
|
78
66
|
# false, set the document as validated, and move the dirty changes.
|
|
79
67
|
#
|
|
80
68
|
# @example Move the changes to previous.
|
|
81
69
|
# person.move_changes
|
|
82
|
-
#
|
|
83
|
-
# @since 2.1.0
|
|
84
70
|
def move_changes
|
|
71
|
+
@changes_before_last_save = @previous_changes
|
|
85
72
|
@previous_changes = changes
|
|
73
|
+
@attributes_before_last_save = @previous_attributes
|
|
74
|
+
@previous_attributes = attributes.dup
|
|
86
75
|
Atomic::UPDATES.each do |update|
|
|
87
76
|
send(update).clear
|
|
88
77
|
end
|
|
@@ -93,10 +82,9 @@ module Mongoid
|
|
|
93
82
|
#
|
|
94
83
|
# @example Handle post persistence.
|
|
95
84
|
# document.post_persist
|
|
96
|
-
#
|
|
97
|
-
# @since 3.0.0
|
|
98
85
|
def post_persist
|
|
99
|
-
|
|
86
|
+
reset_persisted_descendants
|
|
87
|
+
reset_attributes_before_type_cast
|
|
100
88
|
move_changes
|
|
101
89
|
end
|
|
102
90
|
|
|
@@ -106,21 +94,17 @@ module Mongoid
|
|
|
106
94
|
# model.previous_changes
|
|
107
95
|
#
|
|
108
96
|
# @return [ Hash<String, Array<Object, Object> ] The previous changes.
|
|
109
|
-
#
|
|
110
|
-
# @since 2.4.0
|
|
111
97
|
def previous_changes
|
|
112
98
|
@previous_changes ||= {}
|
|
113
99
|
end
|
|
114
100
|
|
|
115
101
|
# Remove a change from the dirty attributes hash. Used by the single field
|
|
116
|
-
# atomic
|
|
102
|
+
# atomic updaters.
|
|
117
103
|
#
|
|
118
104
|
# @example Remove a flagged change.
|
|
119
105
|
# model.remove_change(:field)
|
|
120
106
|
#
|
|
121
|
-
# @param [ Symbol
|
|
122
|
-
#
|
|
123
|
-
# @since 2.1.0
|
|
107
|
+
# @param [ Symbol | String ] name The name of the field.
|
|
124
108
|
def remove_change(name)
|
|
125
109
|
changed_attributes.delete(name.to_s)
|
|
126
110
|
end
|
|
@@ -134,8 +118,6 @@ module Mongoid
|
|
|
134
118
|
# person.setters # returns { "title" => "Madam" }
|
|
135
119
|
#
|
|
136
120
|
# @return [ Hash ] A +Hash+ of atomic setters.
|
|
137
|
-
#
|
|
138
|
-
# @since 2.0.0
|
|
139
121
|
def setters
|
|
140
122
|
mods = {}
|
|
141
123
|
changes.each_pair do |name, changes|
|
|
@@ -153,8 +135,89 @@ module Mongoid
|
|
|
153
135
|
mods
|
|
154
136
|
end
|
|
155
137
|
|
|
138
|
+
# Returns the original value of an attribute before the last save.
|
|
139
|
+
#
|
|
140
|
+
# This method is useful in after callbacks to get the original value of
|
|
141
|
+
# an attribute before the save that triggered the callbacks to run.
|
|
142
|
+
#
|
|
143
|
+
# @param [ Symbol | String ] attr The name of the attribute.
|
|
144
|
+
#
|
|
145
|
+
# @return [ Object ] Value of the attribute before the last save.
|
|
146
|
+
def attribute_before_last_save(attr)
|
|
147
|
+
attr = database_field_name(attr)
|
|
148
|
+
attributes_before_last_save[attr]
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# Returns the change to an attribute during the last save.
|
|
152
|
+
#
|
|
153
|
+
# @param [ Symbol | String ] attr The name of the attribute.
|
|
154
|
+
#
|
|
155
|
+
# @return [ Array<Object> | nil ] If the attribute was changed, returns
|
|
156
|
+
# an array containing the original value and the saved value, otherwise nil.
|
|
157
|
+
def saved_change_to_attribute(attr)
|
|
158
|
+
attr = database_field_name(attr)
|
|
159
|
+
previous_changes[attr]
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
# Returns whether this attribute changed during the last save.
|
|
163
|
+
#
|
|
164
|
+
# This method is useful in after callbacks, to see the change
|
|
165
|
+
# in an attribute during the save that triggered the callbacks to run.
|
|
166
|
+
#
|
|
167
|
+
# @param [ String ] attr The name of the attribute.
|
|
168
|
+
# @param **kwargs The optional keyword arguments.
|
|
169
|
+
#
|
|
170
|
+
# @option **kwargs [ Object ] :from The object the attribute was changed from.
|
|
171
|
+
# @option **kwargs [ Object ] :to The object the attribute was changed to.
|
|
172
|
+
#
|
|
173
|
+
# @return [ true | false ] Whether the attribute has changed during the last save.
|
|
174
|
+
def saved_change_to_attribute?(attr, **kwargs)
|
|
175
|
+
changes = saved_change_to_attribute(attr)
|
|
176
|
+
return false unless changes.is_a?(Array)
|
|
177
|
+
if kwargs.key?(:from) && kwargs.key?(:to)
|
|
178
|
+
changes.first == kwargs[:from] && changes.last == kwargs[:to]
|
|
179
|
+
elsif kwargs.key?(:from)
|
|
180
|
+
changes.first == kwargs[:from]
|
|
181
|
+
elsif kwargs.key?(:to)
|
|
182
|
+
changes.last == kwargs[:to]
|
|
183
|
+
else
|
|
184
|
+
true
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
# Returns whether this attribute change the next time we save.
|
|
189
|
+
#
|
|
190
|
+
# This method is useful in validations and before callbacks to determine
|
|
191
|
+
# if the next call to save will change a particular attribute.
|
|
192
|
+
#
|
|
193
|
+
# @param [ String ] attr The name of the attribute.
|
|
194
|
+
# @param **kwargs The optional keyword arguments.
|
|
195
|
+
#
|
|
196
|
+
# @option **kwargs [ Object ] :from The object the attribute was changed from.
|
|
197
|
+
# @option **kwargs [ Object ] :to The object the attribute was changed to.
|
|
198
|
+
#
|
|
199
|
+
# @return [ true | false ] Whether the attribute change the next time we save.
|
|
200
|
+
def will_save_change_to_attribute?(attr, **kwargs)
|
|
201
|
+
attribute_changed?(attr, **kwargs)
|
|
202
|
+
end
|
|
203
|
+
|
|
156
204
|
private
|
|
157
205
|
|
|
206
|
+
# Get attributes of the document before the document was saved.
|
|
207
|
+
#
|
|
208
|
+
# @return [ Hash ] Previous attributes
|
|
209
|
+
def previous_attributes
|
|
210
|
+
@previous_attributes ||= {}
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
def changes_before_last_save
|
|
214
|
+
@changes_before_last_save ||= {}
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
def attributes_before_last_save
|
|
218
|
+
@attributes_before_last_save ||= {}
|
|
219
|
+
end
|
|
220
|
+
|
|
158
221
|
# Get the old and new value for the provided attribute.
|
|
159
222
|
#
|
|
160
223
|
# @example Get the attribute change.
|
|
@@ -163,8 +226,6 @@ module Mongoid
|
|
|
163
226
|
# @param [ String ] attr The name of the attribute.
|
|
164
227
|
#
|
|
165
228
|
# @return [ Array<Object> ] The old and new values.
|
|
166
|
-
#
|
|
167
|
-
# @since 2.1.0
|
|
168
229
|
def attribute_change(attr)
|
|
169
230
|
attr = database_field_name(attr)
|
|
170
231
|
[changed_attributes[attr], attributes[attr]] if attribute_changed?(attr)
|
|
@@ -176,14 +237,24 @@ module Mongoid
|
|
|
176
237
|
# model.attribute_changed?("name")
|
|
177
238
|
#
|
|
178
239
|
# @param [ String ] attr The name of the attribute.
|
|
240
|
+
# @param **kwargs The optional keyword arguments.
|
|
179
241
|
#
|
|
180
|
-
# @
|
|
242
|
+
# @option **kwargs [ Object ] :from The object the attribute was changed from.
|
|
243
|
+
# @option **kwargs [ Object ] :to The object the attribute was changed to.
|
|
181
244
|
#
|
|
182
|
-
# @
|
|
183
|
-
def attribute_changed?(attr)
|
|
245
|
+
# @return [ true | false ] Whether the attribute has changed.
|
|
246
|
+
def attribute_changed?(attr, **kwargs)
|
|
184
247
|
attr = database_field_name(attr)
|
|
185
248
|
return false unless changed_attributes.key?(attr)
|
|
186
|
-
changed_attributes[attr]
|
|
249
|
+
return false if changed_attributes[attr] == attributes[attr]
|
|
250
|
+
if kwargs.key?(:from)
|
|
251
|
+
return false if changed_attributes[attr] != kwargs[:from]
|
|
252
|
+
end
|
|
253
|
+
if kwargs.key?(:to)
|
|
254
|
+
return false if attributes[attr] != kwargs[:to]
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
true
|
|
187
258
|
end
|
|
188
259
|
|
|
189
260
|
# Get whether or not the field has a different value from the default.
|
|
@@ -193,9 +264,7 @@ module Mongoid
|
|
|
193
264
|
#
|
|
194
265
|
# @param [ String ] attr The name of the attribute.
|
|
195
266
|
#
|
|
196
|
-
# @return [ true
|
|
197
|
-
#
|
|
198
|
-
# @since 3.0.0
|
|
267
|
+
# @return [ true | false ] If the attribute differs.
|
|
199
268
|
def attribute_changed_from_default?(attr)
|
|
200
269
|
field = fields[attr]
|
|
201
270
|
return false unless field
|
|
@@ -208,13 +277,30 @@ module Mongoid
|
|
|
208
277
|
# model.attribute_was("name")
|
|
209
278
|
#
|
|
210
279
|
# @param [ String ] attr The attribute name.
|
|
211
|
-
#
|
|
212
|
-
# @since 2.4.0
|
|
213
280
|
def attribute_was(attr)
|
|
214
281
|
attr = database_field_name(attr)
|
|
215
282
|
attribute_changed?(attr) ? changed_attributes[attr] : attributes[attr]
|
|
216
283
|
end
|
|
217
284
|
|
|
285
|
+
# Get the previous attribute value that was changed
|
|
286
|
+
# before the document was saved.
|
|
287
|
+
#
|
|
288
|
+
# It the document has not been saved yet, or was just loaded from database,
|
|
289
|
+
# this method returns nil for all attributes.
|
|
290
|
+
#
|
|
291
|
+
# @param [ String ] attr The attribute name.
|
|
292
|
+
#
|
|
293
|
+
# @return [ Object | nil ] Attribute value before the document was saved,
|
|
294
|
+
# or nil if the document has not been saved yet.
|
|
295
|
+
def attribute_previously_was(attr)
|
|
296
|
+
attr = database_field_name(attr)
|
|
297
|
+
if previous_changes.key?(attr)
|
|
298
|
+
previous_changes[attr].first
|
|
299
|
+
else
|
|
300
|
+
previous_attributes[attr]
|
|
301
|
+
end
|
|
302
|
+
end
|
|
303
|
+
|
|
218
304
|
# Flag an attribute as going to change.
|
|
219
305
|
#
|
|
220
306
|
# @example Flag the attribute.
|
|
@@ -223,8 +309,6 @@ module Mongoid
|
|
|
223
309
|
# @param [ String ] attr The name of the attribute.
|
|
224
310
|
#
|
|
225
311
|
# @return [ Object ] The old value.
|
|
226
|
-
#
|
|
227
|
-
# @since 2.3.0
|
|
228
312
|
def attribute_will_change!(attr)
|
|
229
313
|
unless changed_attributes.key?(attr)
|
|
230
314
|
changed_attributes[attr] = read_raw_attribute(attr).__deep_copy__
|
|
@@ -239,8 +323,6 @@ module Mongoid
|
|
|
239
323
|
# @param [ String ] attr The name of the attribute.
|
|
240
324
|
#
|
|
241
325
|
# @return [ Object ] The old value.
|
|
242
|
-
#
|
|
243
|
-
# @since 2.4.0
|
|
244
326
|
def reset_attribute!(attr)
|
|
245
327
|
attr = database_field_name(attr)
|
|
246
328
|
attributes[attr] = changed_attributes.delete(attr) if attribute_changed?(attr)
|
|
@@ -255,6 +337,10 @@ module Mongoid
|
|
|
255
337
|
end
|
|
256
338
|
end
|
|
257
339
|
|
|
340
|
+
def reset_attributes_before_type_cast
|
|
341
|
+
@attributes_before_type_cast = @attributes.dup
|
|
342
|
+
end
|
|
343
|
+
|
|
258
344
|
module ClassMethods
|
|
259
345
|
|
|
260
346
|
private
|
|
@@ -268,8 +354,6 @@ module Mongoid
|
|
|
268
354
|
# @param [ String ] meth The name of the accessor.
|
|
269
355
|
#
|
|
270
356
|
# @return [ Module ] The fields module.
|
|
271
|
-
#
|
|
272
|
-
# @since 2.4.0
|
|
273
357
|
def create_dirty_methods(name, meth)
|
|
274
358
|
create_dirty_change_accessor(name, meth)
|
|
275
359
|
create_dirty_change_check(name, meth)
|
|
@@ -289,8 +373,6 @@ module Mongoid
|
|
|
289
373
|
#
|
|
290
374
|
# @param [ String ] name The attribute name.
|
|
291
375
|
# @param [ String ] meth The name of the accessor.
|
|
292
|
-
#
|
|
293
|
-
# @since 3.0.0
|
|
294
376
|
def create_dirty_change_accessor(name, meth)
|
|
295
377
|
generated_methods.module_eval do
|
|
296
378
|
re_define_method("#{meth}_change") do
|
|
@@ -306,12 +388,13 @@ module Mongoid
|
|
|
306
388
|
#
|
|
307
389
|
# @param [ String ] name The attribute name.
|
|
308
390
|
# @param [ String ] meth The name of the accessor.
|
|
309
|
-
#
|
|
310
|
-
# @since 3.0.0
|
|
311
391
|
def create_dirty_change_check(name, meth)
|
|
312
392
|
generated_methods.module_eval do
|
|
313
|
-
re_define_method("#{meth}_changed?") do
|
|
314
|
-
attribute_changed?(name)
|
|
393
|
+
re_define_method("#{meth}_changed?") do |**kwargs|
|
|
394
|
+
attribute_changed?(name, **kwargs)
|
|
395
|
+
end
|
|
396
|
+
re_define_method("will_save_change_to_#{meth}?") do |**kwargs|
|
|
397
|
+
will_save_change_to_attribute?(name, **kwargs)
|
|
315
398
|
end
|
|
316
399
|
end
|
|
317
400
|
end
|
|
@@ -323,8 +406,6 @@ module Mongoid
|
|
|
323
406
|
#
|
|
324
407
|
# @param [ String ] name The attribute name.
|
|
325
408
|
# @param [ String ] meth The name of the accessor.
|
|
326
|
-
#
|
|
327
|
-
# @since 3.0.0
|
|
328
409
|
def create_dirty_default_change_check(name, meth)
|
|
329
410
|
generated_methods.module_eval do
|
|
330
411
|
re_define_method("#{meth}_changed_from_default?") do
|
|
@@ -333,20 +414,30 @@ module Mongoid
|
|
|
333
414
|
end
|
|
334
415
|
end
|
|
335
416
|
|
|
336
|
-
# Creates the dirty change previous value
|
|
417
|
+
# Creates the dirty change previous value accessors.
|
|
337
418
|
#
|
|
338
419
|
# @example Create the accessor.
|
|
339
420
|
# Model.create_dirty_previous_value_accessor("name", "alias")
|
|
340
421
|
#
|
|
341
422
|
# @param [ String ] name The attribute name.
|
|
342
423
|
# @param [ String ] meth The name of the accessor.
|
|
343
|
-
#
|
|
344
|
-
# @since 3.0.0
|
|
345
424
|
def create_dirty_previous_value_accessor(name, meth)
|
|
346
425
|
generated_methods.module_eval do
|
|
347
426
|
re_define_method("#{meth}_was") do
|
|
348
427
|
attribute_was(name)
|
|
349
428
|
end
|
|
429
|
+
re_define_method("#{meth}_previously_was") do
|
|
430
|
+
attribute_previously_was(name)
|
|
431
|
+
end
|
|
432
|
+
re_define_method("#{meth}_before_last_save") do
|
|
433
|
+
attribute_before_last_save(name)
|
|
434
|
+
end
|
|
435
|
+
re_define_method("saved_change_to_#{meth}") do
|
|
436
|
+
saved_change_to_attribute(name)
|
|
437
|
+
end
|
|
438
|
+
re_define_method("saved_change_to_#{meth}?") do |**kwargs|
|
|
439
|
+
saved_change_to_attribute?(name, **kwargs)
|
|
440
|
+
end
|
|
350
441
|
end
|
|
351
442
|
end
|
|
352
443
|
|
|
@@ -357,8 +448,6 @@ module Mongoid
|
|
|
357
448
|
#
|
|
358
449
|
# @param [ String ] name The attribute name.
|
|
359
450
|
# @param [ String ] meth The name of the accessor.
|
|
360
|
-
#
|
|
361
|
-
# @since 3.0.0
|
|
362
451
|
def create_dirty_change_flag(name, meth)
|
|
363
452
|
generated_methods.module_eval do
|
|
364
453
|
re_define_method("#{meth}_will_change!") do
|
|
@@ -374,8 +463,6 @@ module Mongoid
|
|
|
374
463
|
#
|
|
375
464
|
# @param [ String ] name The attribute name.
|
|
376
465
|
# @param [ String ] meth The name of the accessor.
|
|
377
|
-
#
|
|
378
|
-
# @since 3.0.0
|
|
379
466
|
def create_dirty_reset(name, meth)
|
|
380
467
|
generated_methods.module_eval do
|
|
381
468
|
re_define_method("reset_#{meth}!") do
|
|
@@ -391,8 +478,6 @@ module Mongoid
|
|
|
391
478
|
#
|
|
392
479
|
# @param [ String ] name The attribute name.
|
|
393
480
|
# @param [ String ] meth The name of the accessor.
|
|
394
|
-
#
|
|
395
|
-
# @since 3.0.0
|
|
396
481
|
def create_dirty_reset_to_default(name, meth)
|
|
397
482
|
generated_methods.module_eval do
|
|
398
483
|
re_define_method("reset_#{meth}_to_default!") do
|
|
@@ -408,8 +493,6 @@ module Mongoid
|
|
|
408
493
|
#
|
|
409
494
|
# @param [ String ] name The attribute name.
|
|
410
495
|
# @param [ String ] meth The name of the accessor.
|
|
411
|
-
#
|
|
412
|
-
# @since 6.0.0
|
|
413
496
|
def create_dirty_previously_changed?(name, meth)
|
|
414
497
|
generated_methods.module_eval do
|
|
415
498
|
re_define_method("#{meth}_previously_changed?") do
|
|
@@ -425,8 +508,6 @@ module Mongoid
|
|
|
425
508
|
#
|
|
426
509
|
# @param [ String ] name The attribute name.
|
|
427
510
|
# @param [ String ] meth The name of the accessor.
|
|
428
|
-
#
|
|
429
|
-
# @since 6.0.0
|
|
430
511
|
def create_dirty_previous_change(name, meth)
|
|
431
512
|
generated_methods.module_eval do
|
|
432
513
|
re_define_method("#{meth}_previous_change") do
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Mongoid
|
|
4
4
|
module Clients
|
|
5
5
|
module Factory
|
|
6
6
|
extend self
|
|
7
|
+
extend Loggable
|
|
7
8
|
|
|
8
9
|
# Create a new client given the named configuration. If no name is
|
|
9
10
|
# provided, return a new client with the default configuration. If a
|
|
@@ -11,15 +12,13 @@ module Mongoid
|
|
|
11
12
|
# raised.
|
|
12
13
|
#
|
|
13
14
|
# @example Create the client.
|
|
14
|
-
# Factory.create(:
|
|
15
|
+
# Factory.create(:analytics)
|
|
15
16
|
#
|
|
16
|
-
# @param [ String
|
|
17
|
+
# @param [ String | Symbol ] name The named client configuration.
|
|
17
18
|
#
|
|
18
19
|
# @raise [ Errors::NoClientConfig ] If no config could be found.
|
|
19
20
|
#
|
|
20
21
|
# @return [ Mongo::Client ] The new client.
|
|
21
|
-
#
|
|
22
|
-
# @since 3.0.0
|
|
23
22
|
def create(name = nil)
|
|
24
23
|
return default unless name
|
|
25
24
|
config = Mongoid.clients[name]
|
|
@@ -36,8 +35,6 @@ module Mongoid
|
|
|
36
35
|
# found.
|
|
37
36
|
#
|
|
38
37
|
# @return [ Mongo::Client ] The default client.
|
|
39
|
-
#
|
|
40
|
-
# @since 3.0.0
|
|
41
38
|
def default
|
|
42
39
|
create_client(Mongoid.clients[:default])
|
|
43
40
|
end
|
|
@@ -54,26 +51,54 @@ module Mongoid
|
|
|
54
51
|
# @param [ Hash ] configuration The client config.
|
|
55
52
|
#
|
|
56
53
|
# @return [ Mongo::Client ] The client.
|
|
57
|
-
#
|
|
58
|
-
# @since 3.0.0
|
|
59
54
|
def create_client(configuration)
|
|
60
55
|
raise Errors::NoClientsConfig.new unless configuration
|
|
61
|
-
|
|
62
|
-
|
|
56
|
+
config = configuration.dup
|
|
57
|
+
uri = config.delete(:uri)
|
|
58
|
+
database = config.delete(:database)
|
|
59
|
+
hosts = config.delete(:hosts)
|
|
60
|
+
opts = config.delete(:options) || {}
|
|
61
|
+
unless config.empty?
|
|
62
|
+
default_logger.warn("Unknown config options detected: #{config}.")
|
|
63
|
+
end
|
|
64
|
+
if uri
|
|
65
|
+
Mongo::Client.new(uri, options(opts))
|
|
63
66
|
else
|
|
64
67
|
Mongo::Client.new(
|
|
65
|
-
|
|
66
|
-
options(
|
|
68
|
+
hosts,
|
|
69
|
+
options(opts).merge(database: database)
|
|
67
70
|
)
|
|
68
71
|
end
|
|
69
72
|
end
|
|
70
73
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
+
MONGOID_WRAPPING_LIBRARY = {
|
|
75
|
+
name: 'Mongoid',
|
|
76
|
+
version: VERSION,
|
|
77
|
+
}.freeze
|
|
78
|
+
|
|
79
|
+
def driver_version
|
|
80
|
+
Mongo::VERSION.split('.')[0...2].map(&:to_i)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Prepare options for Mongo::Client based on Mongoid client configuration.
|
|
84
|
+
#
|
|
85
|
+
# @param [ Hash ] opts Parameters from options section of Mongoid client configuration.
|
|
86
|
+
# @return [ Hash ] Options that should be passed to Mongo::Client constructor.
|
|
87
|
+
#
|
|
88
|
+
# @api private
|
|
89
|
+
def options(opts)
|
|
90
|
+
options = opts.dup
|
|
74
91
|
options[:platform] = PLATFORM_DETAILS
|
|
75
92
|
options[:app_name] = Mongoid::Config.app_name if Mongoid::Config.app_name
|
|
76
|
-
|
|
93
|
+
if (driver_version <=> [2, 13]) >= 0
|
|
94
|
+
wrap_lib = if options[:wrapping_libraries]
|
|
95
|
+
[MONGOID_WRAPPING_LIBRARY] + options[:wrapping_libraries]
|
|
96
|
+
else
|
|
97
|
+
[MONGOID_WRAPPING_LIBRARY]
|
|
98
|
+
end
|
|
99
|
+
options[:wrapping_libraries] = wrap_lib
|
|
100
|
+
end
|
|
101
|
+
options.reject{ |k, _v| k == :hosts }.to_hash.symbolize_keys!
|
|
77
102
|
end
|
|
78
103
|
end
|
|
79
104
|
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
module Mongoid
|
|
3
4
|
module Clients
|
|
4
5
|
module Options
|
|
@@ -7,18 +8,16 @@ module Mongoid
|
|
|
7
8
|
# Change the persistence context for this object during the block.
|
|
8
9
|
#
|
|
9
10
|
# @example Save the current document to a different collection.
|
|
10
|
-
# model.with(collection: "
|
|
11
|
+
# model.with(collection: "bands") do |m|
|
|
11
12
|
# m.save
|
|
12
13
|
# end
|
|
13
14
|
#
|
|
14
|
-
# @param [ Hash
|
|
15
|
+
# @param [ Hash | Mongoid::PersistenceContext ] options_or_context
|
|
15
16
|
# The storage options or a persistence context.
|
|
16
17
|
#
|
|
17
|
-
# @option options [ String
|
|
18
|
-
# @option options [ String
|
|
19
|
-
# @option options [ String
|
|
20
|
-
#
|
|
21
|
-
# @since 6.0.0
|
|
18
|
+
# @option options [ String | Symbol ] :collection The collection name.
|
|
19
|
+
# @option options [ String | Symbol ] :database The database name.
|
|
20
|
+
# @option options [ String | Symbol ] :client The client name.
|
|
22
21
|
def with(options_or_context, &block)
|
|
23
22
|
original_context = PersistenceContext.get(self)
|
|
24
23
|
original_cluster = persistence_context.cluster
|
|
@@ -46,6 +45,10 @@ module Mongoid
|
|
|
46
45
|
PersistenceContext.new(self.class)
|
|
47
46
|
end
|
|
48
47
|
|
|
48
|
+
def persistence_context?
|
|
49
|
+
!!(PersistenceContext.get(self) || PersistenceContext.get(self.class))
|
|
50
|
+
end
|
|
51
|
+
|
|
49
52
|
private
|
|
50
53
|
|
|
51
54
|
def set_persistence_context(options_or_context)
|
|
@@ -81,17 +84,15 @@ module Mongoid
|
|
|
81
84
|
# Change the persistence context for this class during the block.
|
|
82
85
|
#
|
|
83
86
|
# @example Save the current document to a different collection.
|
|
84
|
-
# Model.with(collection: "
|
|
87
|
+
# Model.with(collection: "bands") do |m|
|
|
85
88
|
# m.create
|
|
86
89
|
# end
|
|
87
90
|
#
|
|
88
91
|
# @param [ Hash ] options The storage options.
|
|
89
92
|
#
|
|
90
|
-
# @option options [ String
|
|
91
|
-
# @option options [ String
|
|
92
|
-
# @option options [ String
|
|
93
|
-
#
|
|
94
|
-
# @since 6.0.0
|
|
93
|
+
# @option options [ String | Symbol ] :collection The collection name.
|
|
94
|
+
# @option options [ String | Symbol ] :database The database name.
|
|
95
|
+
# @option options [ String | Symbol ] :client The client name.
|
|
95
96
|
def with(options, &block)
|
|
96
97
|
original_context = PersistenceContext.get(self)
|
|
97
98
|
original_cluster = persistence_context.cluster
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Mongoid
|
|
2
4
|
module Clients
|
|
3
5
|
|
|
4
6
|
# Encapsulates behavior for getting a session from the client of a model class or instance,
|
|
5
7
|
# setting the session on the current thread, and yielding to a block.
|
|
6
8
|
# The session will be closed after the block completes or raises an error.
|
|
7
|
-
#
|
|
8
|
-
# @since 6.4.0
|
|
9
9
|
module Sessions
|
|
10
10
|
|
|
11
11
|
# Execute a block within the context of a session.
|
|
@@ -35,15 +35,15 @@ module Mongoid
|
|
|
35
35
|
# @return [ Object ] The result of calling the block.
|
|
36
36
|
#
|
|
37
37
|
# @yieldparam [ Mongo::Session ] The session being used for the block.
|
|
38
|
-
#
|
|
39
|
-
# @since 6.4.0
|
|
40
38
|
def with_session(options = {})
|
|
41
|
-
|
|
39
|
+
if Threaded.get_session
|
|
40
|
+
raise Mongoid::Errors::InvalidSessionUse.new(:invalid_session_nesting)
|
|
41
|
+
end
|
|
42
42
|
session = persistence_context.client.start_session(options)
|
|
43
43
|
Threaded.set_session(session)
|
|
44
44
|
yield(session)
|
|
45
45
|
rescue Mongo::Error::InvalidSession => ex
|
|
46
|
-
if
|
|
46
|
+
if Mongo::Error::SessionsNotSupported === ex
|
|
47
47
|
raise Mongoid::Errors::InvalidSessionUse.new(:sessions_not_supported)
|
|
48
48
|
end
|
|
49
49
|
raise Mongoid::Errors::InvalidSessionUse.new(:invalid_session_use)
|
|
@@ -86,15 +86,15 @@ module Mongoid
|
|
|
86
86
|
# @return [ Object ] The result of calling the block.
|
|
87
87
|
#
|
|
88
88
|
# @yieldparam [ Mongo::Session ] The session being used for the block.
|
|
89
|
-
#
|
|
90
|
-
# @since 6.4.0
|
|
91
89
|
def with_session(options = {})
|
|
92
|
-
|
|
90
|
+
if Threaded.get_session
|
|
91
|
+
raise Mongoid::Errors::InvalidSessionUse.new(:invalid_session_nesting)
|
|
92
|
+
end
|
|
93
93
|
session = persistence_context.client.start_session(options)
|
|
94
94
|
Threaded.set_session(session)
|
|
95
95
|
yield(session)
|
|
96
96
|
rescue Mongo::Error::InvalidSession => ex
|
|
97
|
-
if
|
|
97
|
+
if Mongo::Error::SessionsNotSupported === ex
|
|
98
98
|
raise Mongoid::Errors::InvalidSessionUse.new(:sessions_not_supported)
|
|
99
99
|
end
|
|
100
100
|
raise Mongoid::Errors::InvalidSessionUse.new(:invalid_session_use)
|