mongoid 7.0.2 → 8.1.1
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 +100 -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 +42 -38
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +12 -11
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +106 -67
- 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 +104 -127
- 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 +149 -89
- 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 +3 -4
- data/lib/mongoid/atomic/paths/root.rb +4 -7
- data/lib/mongoid/atomic/paths.rb +2 -1
- data/lib/mongoid/atomic.rb +49 -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 +152 -73
- data/lib/mongoid/clients/factory.rb +42 -17
- data/lib/mongoid/clients/options.rb +21 -18
- 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 +46 -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 +15 -21
- data/lib/mongoid/criteria/options.rb +4 -5
- 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 +105 -31
- 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 +471 -168
- data/lib/mongoid/criteria/queryable/selector.rb +133 -58
- 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 +162 -103
- 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 -7
- data/lib/mongoid/extensions/set.rb +13 -11
- data/lib/mongoid/extensions/string.rb +35 -64
- 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 -154
- 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 +107 -52
- data/lib/mongoid/positional.rb +3 -6
- data/lib/mongoid/query_cache.rb +18 -234
- data/lib/mongoid/railtie.rb +20 -16
- data/lib/mongoid/railties/controller_runtime.rb +88 -0
- data/lib/mongoid/railties/database.rake +16 -2
- data/lib/mongoid/reloadable.rb +19 -22
- data/lib/mongoid/scopable.rb +37 -60
- 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 +80 -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 +8 -15
- 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 +33 -0
- data/spec/config/mongoid.yml +29 -3
- 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 +33 -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 +83 -0
- 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 +61 -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 +8 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +73 -0
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +28 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +77 -1
- data/spec/mongoid/association/macros_spec.rb +11 -9
- data/spec/mongoid/association/nested/many_spec.rb +2 -0
- data/spec/mongoid/association/nested/one_spec.rb +18 -12
- data/spec/mongoid/association/options_spec.rb +2 -0
- data/spec/mongoid/association/polymorphic_spec.rb +2 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +4 -1
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +111 -16
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +266 -17
- 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 +96 -29
- 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 +559 -385
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +92 -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 +84 -7
- 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_query_spec.rb +23 -0
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +859 -502
- data/spec/mongoid/association/referenced/has_many_models.rb +97 -0
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +51 -3
- 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 +113 -0
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +87 -7
- 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 +139 -33
- data/spec/mongoid/clients/options_spec.rb +76 -54
- data/spec/mongoid/clients/sessions_spec.rb +35 -63
- data/spec/mongoid/clients/transactions_spec.rb +87 -41
- data/spec/mongoid/clients_spec.rb +257 -31
- 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 +507 -2
- 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 +31 -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 +3505 -1268
- data/spec/mongoid/contextual/none_spec.rb +80 -67
- data/spec/mongoid/copyable_spec.rb +697 -40
- data/spec/mongoid/copyable_spec_models.rb +47 -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 +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 +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 +119 -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 +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 +50 -6
- 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 +1193 -2934
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +56 -5
- 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/translator_spec.rb +132 -0
- data/spec/mongoid/criteria_projection_spec.rb +406 -0
- data/spec/mongoid/criteria_spec.rb +1334 -1719
- 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 +212 -67
- 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 +715 -213
- 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 +70 -20
- data/spec/mongoid/extensions/set_spec.rb +108 -0
- data/spec/mongoid/extensions/string_spec.rb +146 -57
- 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 +521 -65
- 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 +66 -13
- 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 +60 -59
- 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 +446 -78
- data/spec/mongoid/relations/proxy_spec.rb +9 -7
- data/spec/mongoid/reloadable_spec.rb +381 -26
- data/spec/mongoid/scopable_spec.rb +206 -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 +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 +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 +36 -10
- data/spec/rails/controller_extension/controller_runtime_spec.rb +112 -0
- 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 +74 -88
- data/spec/support/authorization.rb +2 -0
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +77 -0
- 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 +129 -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/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 +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/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/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 +64 -0
- data.tar.gz.sig +1 -2
- metadata +1158 -615
- 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/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/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/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/{app → support}/models/array_field.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,18 +62,17 @@ 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
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
73
|
+
@attributes_before_last_save = @previous_attributes
|
|
74
|
+
@previous_attributes = attributes.dup
|
|
75
|
+
reset_atomic_updates!
|
|
89
76
|
changed_attributes.clear
|
|
90
77
|
end
|
|
91
78
|
|
|
@@ -93,10 +80,9 @@ module Mongoid
|
|
|
93
80
|
#
|
|
94
81
|
# @example Handle post persistence.
|
|
95
82
|
# document.post_persist
|
|
96
|
-
#
|
|
97
|
-
# @since 3.0.0
|
|
98
83
|
def post_persist
|
|
99
|
-
|
|
84
|
+
reset_persisted_descendants
|
|
85
|
+
reset_attributes_before_type_cast
|
|
100
86
|
move_changes
|
|
101
87
|
end
|
|
102
88
|
|
|
@@ -106,21 +92,17 @@ module Mongoid
|
|
|
106
92
|
# model.previous_changes
|
|
107
93
|
#
|
|
108
94
|
# @return [ Hash<String, Array<Object, Object> ] The previous changes.
|
|
109
|
-
#
|
|
110
|
-
# @since 2.4.0
|
|
111
95
|
def previous_changes
|
|
112
96
|
@previous_changes ||= {}
|
|
113
97
|
end
|
|
114
98
|
|
|
115
99
|
# Remove a change from the dirty attributes hash. Used by the single field
|
|
116
|
-
# atomic
|
|
100
|
+
# atomic updaters.
|
|
117
101
|
#
|
|
118
102
|
# @example Remove a flagged change.
|
|
119
103
|
# model.remove_change(:field)
|
|
120
104
|
#
|
|
121
|
-
# @param [ Symbol
|
|
122
|
-
#
|
|
123
|
-
# @since 2.1.0
|
|
105
|
+
# @param [ Symbol | String ] name The name of the field.
|
|
124
106
|
def remove_change(name)
|
|
125
107
|
changed_attributes.delete(name.to_s)
|
|
126
108
|
end
|
|
@@ -134,8 +116,6 @@ module Mongoid
|
|
|
134
116
|
# person.setters # returns { "title" => "Madam" }
|
|
135
117
|
#
|
|
136
118
|
# @return [ Hash ] A +Hash+ of atomic setters.
|
|
137
|
-
#
|
|
138
|
-
# @since 2.0.0
|
|
139
119
|
def setters
|
|
140
120
|
mods = {}
|
|
141
121
|
changes.each_pair do |name, changes|
|
|
@@ -153,8 +133,89 @@ module Mongoid
|
|
|
153
133
|
mods
|
|
154
134
|
end
|
|
155
135
|
|
|
136
|
+
# Returns the original value of an attribute before the last save.
|
|
137
|
+
#
|
|
138
|
+
# This method is useful in after callbacks to get the original value of
|
|
139
|
+
# an attribute before the save that triggered the callbacks to run.
|
|
140
|
+
#
|
|
141
|
+
# @param [ Symbol | String ] attr The name of the attribute.
|
|
142
|
+
#
|
|
143
|
+
# @return [ Object ] Value of the attribute before the last save.
|
|
144
|
+
def attribute_before_last_save(attr)
|
|
145
|
+
attr = database_field_name(attr)
|
|
146
|
+
attributes_before_last_save[attr]
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# Returns the change to an attribute during the last save.
|
|
150
|
+
#
|
|
151
|
+
# @param [ Symbol | String ] attr The name of the attribute.
|
|
152
|
+
#
|
|
153
|
+
# @return [ Array<Object> | nil ] If the attribute was changed, returns
|
|
154
|
+
# an array containing the original value and the saved value, otherwise nil.
|
|
155
|
+
def saved_change_to_attribute(attr)
|
|
156
|
+
attr = database_field_name(attr)
|
|
157
|
+
previous_changes[attr]
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
# Returns whether this attribute changed during the last save.
|
|
161
|
+
#
|
|
162
|
+
# This method is useful in after callbacks, to see the change
|
|
163
|
+
# in an attribute during the save that triggered the callbacks to run.
|
|
164
|
+
#
|
|
165
|
+
# @param [ String ] attr The name of the attribute.
|
|
166
|
+
# @param **kwargs The optional keyword arguments.
|
|
167
|
+
#
|
|
168
|
+
# @option **kwargs [ Object ] :from The object the attribute was changed from.
|
|
169
|
+
# @option **kwargs [ Object ] :to The object the attribute was changed to.
|
|
170
|
+
#
|
|
171
|
+
# @return [ true | false ] Whether the attribute has changed during the last save.
|
|
172
|
+
def saved_change_to_attribute?(attr, **kwargs)
|
|
173
|
+
changes = saved_change_to_attribute(attr)
|
|
174
|
+
return false unless changes.is_a?(Array)
|
|
175
|
+
if kwargs.key?(:from) && kwargs.key?(:to)
|
|
176
|
+
changes.first == kwargs[:from] && changes.last == kwargs[:to]
|
|
177
|
+
elsif kwargs.key?(:from)
|
|
178
|
+
changes.first == kwargs[:from]
|
|
179
|
+
elsif kwargs.key?(:to)
|
|
180
|
+
changes.last == kwargs[:to]
|
|
181
|
+
else
|
|
182
|
+
true
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
# Returns whether this attribute change the next time we save.
|
|
187
|
+
#
|
|
188
|
+
# This method is useful in validations and before callbacks to determine
|
|
189
|
+
# if the next call to save will change a particular attribute.
|
|
190
|
+
#
|
|
191
|
+
# @param [ String ] attr The name of the attribute.
|
|
192
|
+
# @param **kwargs The optional keyword arguments.
|
|
193
|
+
#
|
|
194
|
+
# @option **kwargs [ Object ] :from The object the attribute was changed from.
|
|
195
|
+
# @option **kwargs [ Object ] :to The object the attribute was changed to.
|
|
196
|
+
#
|
|
197
|
+
# @return [ true | false ] Whether the attribute change the next time we save.
|
|
198
|
+
def will_save_change_to_attribute?(attr, **kwargs)
|
|
199
|
+
attribute_changed?(attr, **kwargs)
|
|
200
|
+
end
|
|
201
|
+
|
|
156
202
|
private
|
|
157
203
|
|
|
204
|
+
# Get attributes of the document before the document was saved.
|
|
205
|
+
#
|
|
206
|
+
# @return [ Hash ] Previous attributes
|
|
207
|
+
def previous_attributes
|
|
208
|
+
@previous_attributes ||= {}
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
def changes_before_last_save
|
|
212
|
+
@changes_before_last_save ||= {}
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
def attributes_before_last_save
|
|
216
|
+
@attributes_before_last_save ||= {}
|
|
217
|
+
end
|
|
218
|
+
|
|
158
219
|
# Get the old and new value for the provided attribute.
|
|
159
220
|
#
|
|
160
221
|
# @example Get the attribute change.
|
|
@@ -163,8 +224,6 @@ module Mongoid
|
|
|
163
224
|
# @param [ String ] attr The name of the attribute.
|
|
164
225
|
#
|
|
165
226
|
# @return [ Array<Object> ] The old and new values.
|
|
166
|
-
#
|
|
167
|
-
# @since 2.1.0
|
|
168
227
|
def attribute_change(attr)
|
|
169
228
|
attr = database_field_name(attr)
|
|
170
229
|
[changed_attributes[attr], attributes[attr]] if attribute_changed?(attr)
|
|
@@ -176,14 +235,24 @@ module Mongoid
|
|
|
176
235
|
# model.attribute_changed?("name")
|
|
177
236
|
#
|
|
178
237
|
# @param [ String ] attr The name of the attribute.
|
|
238
|
+
# @param **kwargs The optional keyword arguments.
|
|
179
239
|
#
|
|
180
|
-
# @
|
|
240
|
+
# @option **kwargs [ Object ] :from The object the attribute was changed from.
|
|
241
|
+
# @option **kwargs [ Object ] :to The object the attribute was changed to.
|
|
181
242
|
#
|
|
182
|
-
# @
|
|
183
|
-
def attribute_changed?(attr)
|
|
243
|
+
# @return [ true | false ] Whether the attribute has changed.
|
|
244
|
+
def attribute_changed?(attr, **kwargs)
|
|
184
245
|
attr = database_field_name(attr)
|
|
185
246
|
return false unless changed_attributes.key?(attr)
|
|
186
|
-
changed_attributes[attr]
|
|
247
|
+
return false if changed_attributes[attr] == attributes[attr]
|
|
248
|
+
if kwargs.key?(:from)
|
|
249
|
+
return false if changed_attributes[attr] != kwargs[:from]
|
|
250
|
+
end
|
|
251
|
+
if kwargs.key?(:to)
|
|
252
|
+
return false if attributes[attr] != kwargs[:to]
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
true
|
|
187
256
|
end
|
|
188
257
|
|
|
189
258
|
# Get whether or not the field has a different value from the default.
|
|
@@ -193,9 +262,7 @@ module Mongoid
|
|
|
193
262
|
#
|
|
194
263
|
# @param [ String ] attr The name of the attribute.
|
|
195
264
|
#
|
|
196
|
-
# @return [ true
|
|
197
|
-
#
|
|
198
|
-
# @since 3.0.0
|
|
265
|
+
# @return [ true | false ] If the attribute differs.
|
|
199
266
|
def attribute_changed_from_default?(attr)
|
|
200
267
|
field = fields[attr]
|
|
201
268
|
return false unless field
|
|
@@ -208,13 +275,30 @@ module Mongoid
|
|
|
208
275
|
# model.attribute_was("name")
|
|
209
276
|
#
|
|
210
277
|
# @param [ String ] attr The attribute name.
|
|
211
|
-
#
|
|
212
|
-
# @since 2.4.0
|
|
213
278
|
def attribute_was(attr)
|
|
214
279
|
attr = database_field_name(attr)
|
|
215
280
|
attribute_changed?(attr) ? changed_attributes[attr] : attributes[attr]
|
|
216
281
|
end
|
|
217
282
|
|
|
283
|
+
# Get the previous attribute value that was changed
|
|
284
|
+
# before the document was saved.
|
|
285
|
+
#
|
|
286
|
+
# It the document has not been saved yet, or was just loaded from database,
|
|
287
|
+
# this method returns nil for all attributes.
|
|
288
|
+
#
|
|
289
|
+
# @param [ String ] attr The attribute name.
|
|
290
|
+
#
|
|
291
|
+
# @return [ Object | nil ] Attribute value before the document was saved,
|
|
292
|
+
# or nil if the document has not been saved yet.
|
|
293
|
+
def attribute_previously_was(attr)
|
|
294
|
+
attr = database_field_name(attr)
|
|
295
|
+
if previous_changes.key?(attr)
|
|
296
|
+
previous_changes[attr].first
|
|
297
|
+
else
|
|
298
|
+
previous_attributes[attr]
|
|
299
|
+
end
|
|
300
|
+
end
|
|
301
|
+
|
|
218
302
|
# Flag an attribute as going to change.
|
|
219
303
|
#
|
|
220
304
|
# @example Flag the attribute.
|
|
@@ -223,8 +307,6 @@ module Mongoid
|
|
|
223
307
|
# @param [ String ] attr The name of the attribute.
|
|
224
308
|
#
|
|
225
309
|
# @return [ Object ] The old value.
|
|
226
|
-
#
|
|
227
|
-
# @since 2.3.0
|
|
228
310
|
def attribute_will_change!(attr)
|
|
229
311
|
unless changed_attributes.key?(attr)
|
|
230
312
|
changed_attributes[attr] = read_raw_attribute(attr).__deep_copy__
|
|
@@ -239,8 +321,6 @@ module Mongoid
|
|
|
239
321
|
# @param [ String ] attr The name of the attribute.
|
|
240
322
|
#
|
|
241
323
|
# @return [ Object ] The old value.
|
|
242
|
-
#
|
|
243
|
-
# @since 2.4.0
|
|
244
324
|
def reset_attribute!(attr)
|
|
245
325
|
attr = database_field_name(attr)
|
|
246
326
|
attributes[attr] = changed_attributes.delete(attr) if attribute_changed?(attr)
|
|
@@ -255,6 +335,10 @@ module Mongoid
|
|
|
255
335
|
end
|
|
256
336
|
end
|
|
257
337
|
|
|
338
|
+
def reset_attributes_before_type_cast
|
|
339
|
+
@attributes_before_type_cast = @attributes.dup
|
|
340
|
+
end
|
|
341
|
+
|
|
258
342
|
module ClassMethods
|
|
259
343
|
|
|
260
344
|
private
|
|
@@ -268,8 +352,6 @@ module Mongoid
|
|
|
268
352
|
# @param [ String ] meth The name of the accessor.
|
|
269
353
|
#
|
|
270
354
|
# @return [ Module ] The fields module.
|
|
271
|
-
#
|
|
272
|
-
# @since 2.4.0
|
|
273
355
|
def create_dirty_methods(name, meth)
|
|
274
356
|
create_dirty_change_accessor(name, meth)
|
|
275
357
|
create_dirty_change_check(name, meth)
|
|
@@ -289,8 +371,6 @@ module Mongoid
|
|
|
289
371
|
#
|
|
290
372
|
# @param [ String ] name The attribute name.
|
|
291
373
|
# @param [ String ] meth The name of the accessor.
|
|
292
|
-
#
|
|
293
|
-
# @since 3.0.0
|
|
294
374
|
def create_dirty_change_accessor(name, meth)
|
|
295
375
|
generated_methods.module_eval do
|
|
296
376
|
re_define_method("#{meth}_change") do
|
|
@@ -306,12 +386,13 @@ module Mongoid
|
|
|
306
386
|
#
|
|
307
387
|
# @param [ String ] name The attribute name.
|
|
308
388
|
# @param [ String ] meth The name of the accessor.
|
|
309
|
-
#
|
|
310
|
-
# @since 3.0.0
|
|
311
389
|
def create_dirty_change_check(name, meth)
|
|
312
390
|
generated_methods.module_eval do
|
|
313
|
-
re_define_method("#{meth}_changed?") do
|
|
314
|
-
attribute_changed?(name)
|
|
391
|
+
re_define_method("#{meth}_changed?") do |**kwargs|
|
|
392
|
+
attribute_changed?(name, **kwargs)
|
|
393
|
+
end
|
|
394
|
+
re_define_method("will_save_change_to_#{meth}?") do |**kwargs|
|
|
395
|
+
will_save_change_to_attribute?(name, **kwargs)
|
|
315
396
|
end
|
|
316
397
|
end
|
|
317
398
|
end
|
|
@@ -323,8 +404,6 @@ module Mongoid
|
|
|
323
404
|
#
|
|
324
405
|
# @param [ String ] name The attribute name.
|
|
325
406
|
# @param [ String ] meth The name of the accessor.
|
|
326
|
-
#
|
|
327
|
-
# @since 3.0.0
|
|
328
407
|
def create_dirty_default_change_check(name, meth)
|
|
329
408
|
generated_methods.module_eval do
|
|
330
409
|
re_define_method("#{meth}_changed_from_default?") do
|
|
@@ -333,20 +412,30 @@ module Mongoid
|
|
|
333
412
|
end
|
|
334
413
|
end
|
|
335
414
|
|
|
336
|
-
# Creates the dirty change previous value
|
|
415
|
+
# Creates the dirty change previous value accessors.
|
|
337
416
|
#
|
|
338
417
|
# @example Create the accessor.
|
|
339
418
|
# Model.create_dirty_previous_value_accessor("name", "alias")
|
|
340
419
|
#
|
|
341
420
|
# @param [ String ] name The attribute name.
|
|
342
421
|
# @param [ String ] meth The name of the accessor.
|
|
343
|
-
#
|
|
344
|
-
# @since 3.0.0
|
|
345
422
|
def create_dirty_previous_value_accessor(name, meth)
|
|
346
423
|
generated_methods.module_eval do
|
|
347
424
|
re_define_method("#{meth}_was") do
|
|
348
425
|
attribute_was(name)
|
|
349
426
|
end
|
|
427
|
+
re_define_method("#{meth}_previously_was") do
|
|
428
|
+
attribute_previously_was(name)
|
|
429
|
+
end
|
|
430
|
+
re_define_method("#{meth}_before_last_save") do
|
|
431
|
+
attribute_before_last_save(name)
|
|
432
|
+
end
|
|
433
|
+
re_define_method("saved_change_to_#{meth}") do
|
|
434
|
+
saved_change_to_attribute(name)
|
|
435
|
+
end
|
|
436
|
+
re_define_method("saved_change_to_#{meth}?") do |**kwargs|
|
|
437
|
+
saved_change_to_attribute?(name, **kwargs)
|
|
438
|
+
end
|
|
350
439
|
end
|
|
351
440
|
end
|
|
352
441
|
|
|
@@ -357,8 +446,6 @@ module Mongoid
|
|
|
357
446
|
#
|
|
358
447
|
# @param [ String ] name The attribute name.
|
|
359
448
|
# @param [ String ] meth The name of the accessor.
|
|
360
|
-
#
|
|
361
|
-
# @since 3.0.0
|
|
362
449
|
def create_dirty_change_flag(name, meth)
|
|
363
450
|
generated_methods.module_eval do
|
|
364
451
|
re_define_method("#{meth}_will_change!") do
|
|
@@ -374,8 +461,6 @@ module Mongoid
|
|
|
374
461
|
#
|
|
375
462
|
# @param [ String ] name The attribute name.
|
|
376
463
|
# @param [ String ] meth The name of the accessor.
|
|
377
|
-
#
|
|
378
|
-
# @since 3.0.0
|
|
379
464
|
def create_dirty_reset(name, meth)
|
|
380
465
|
generated_methods.module_eval do
|
|
381
466
|
re_define_method("reset_#{meth}!") do
|
|
@@ -391,8 +476,6 @@ module Mongoid
|
|
|
391
476
|
#
|
|
392
477
|
# @param [ String ] name The attribute name.
|
|
393
478
|
# @param [ String ] meth The name of the accessor.
|
|
394
|
-
#
|
|
395
|
-
# @since 3.0.0
|
|
396
479
|
def create_dirty_reset_to_default(name, meth)
|
|
397
480
|
generated_methods.module_eval do
|
|
398
481
|
re_define_method("reset_#{meth}_to_default!") do
|
|
@@ -408,8 +491,6 @@ module Mongoid
|
|
|
408
491
|
#
|
|
409
492
|
# @param [ String ] name The attribute name.
|
|
410
493
|
# @param [ String ] meth The name of the accessor.
|
|
411
|
-
#
|
|
412
|
-
# @since 6.0.0
|
|
413
494
|
def create_dirty_previously_changed?(name, meth)
|
|
414
495
|
generated_methods.module_eval do
|
|
415
496
|
re_define_method("#{meth}_previously_changed?") do
|
|
@@ -425,8 +506,6 @@ module Mongoid
|
|
|
425
506
|
#
|
|
426
507
|
# @param [ String ] name The attribute name.
|
|
427
508
|
# @param [ String ] meth The name of the accessor.
|
|
428
|
-
#
|
|
429
|
-
# @since 6.0.0
|
|
430
509
|
def create_dirty_previous_change(name, meth)
|
|
431
510
|
generated_methods.module_eval do
|
|
432
511
|
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,24 +8,23 @@ 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)
|
|
22
|
+
original_context = PersistenceContext.get(self)
|
|
23
23
|
original_cluster = persistence_context.cluster
|
|
24
24
|
set_persistence_context(options_or_context)
|
|
25
25
|
yield self
|
|
26
26
|
ensure
|
|
27
|
-
clear_persistence_context(original_cluster)
|
|
27
|
+
clear_persistence_context(original_cluster, original_context)
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
def collection(parent = nil)
|
|
@@ -45,14 +45,18 @@ module Mongoid
|
|
|
45
45
|
PersistenceContext.new(self.class)
|
|
46
46
|
end
|
|
47
47
|
|
|
48
|
+
def persistence_context?
|
|
49
|
+
!!(PersistenceContext.get(self) || PersistenceContext.get(self.class))
|
|
50
|
+
end
|
|
51
|
+
|
|
48
52
|
private
|
|
49
53
|
|
|
50
54
|
def set_persistence_context(options_or_context)
|
|
51
55
|
PersistenceContext.set(self, options_or_context)
|
|
52
56
|
end
|
|
53
57
|
|
|
54
|
-
def clear_persistence_context(original_cluster = nil)
|
|
55
|
-
PersistenceContext.clear(self, original_cluster)
|
|
58
|
+
def clear_persistence_context(original_cluster = nil, context = nil)
|
|
59
|
+
PersistenceContext.clear(self, original_cluster, context)
|
|
56
60
|
end
|
|
57
61
|
|
|
58
62
|
module ClassMethods
|
|
@@ -80,23 +84,22 @@ module Mongoid
|
|
|
80
84
|
# Change the persistence context for this class during the block.
|
|
81
85
|
#
|
|
82
86
|
# @example Save the current document to a different collection.
|
|
83
|
-
# Model.with(collection: "
|
|
87
|
+
# Model.with(collection: "bands") do |m|
|
|
84
88
|
# m.create
|
|
85
89
|
# end
|
|
86
90
|
#
|
|
87
91
|
# @param [ Hash ] options The storage options.
|
|
88
92
|
#
|
|
89
|
-
# @option options [ String
|
|
90
|
-
# @option options [ String
|
|
91
|
-
# @option options [ String
|
|
92
|
-
#
|
|
93
|
-
# @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.
|
|
94
96
|
def with(options, &block)
|
|
97
|
+
original_context = PersistenceContext.get(self)
|
|
95
98
|
original_cluster = persistence_context.cluster
|
|
96
99
|
PersistenceContext.set(self, options)
|
|
97
100
|
yield self
|
|
98
101
|
ensure
|
|
99
|
-
PersistenceContext.clear(self, original_cluster)
|
|
102
|
+
PersistenceContext.clear(self, original_cluster, original_context)
|
|
100
103
|
end
|
|
101
104
|
|
|
102
105
|
def persistence_context
|
|
@@ -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)
|