mongoid 7.0.10 → 7.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +30 -30
- data/README.md +32 -19
- data/Rakefile +51 -7
- data/lib/config/locales/en.yml +129 -70
- data/lib/mongoid/association/accessors.rb +143 -80
- data/lib/mongoid/association/bindable.rb +7 -26
- data/lib/mongoid/association/builders.rb +4 -12
- data/lib/mongoid/association/constrainable.rb +5 -6
- data/lib/mongoid/association/depending.rb +9 -18
- data/lib/mongoid/association/eager_loadable.rb +2 -3
- data/lib/mongoid/association/embedded/batchable.rb +16 -42
- data/lib/mongoid/association/embedded/cyclic.rb +10 -17
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +3 -7
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +7 -4
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +14 -24
- data/lib/mongoid/association/embedded/embedded_in.rb +6 -26
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +4 -8
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +8 -5
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +90 -93
- data/lib/mongoid/association/embedded/embeds_many.rb +6 -34
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +4 -8
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +9 -6
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +42 -27
- data/lib/mongoid/association/embedded/embeds_one.rb +6 -30
- data/lib/mongoid/association/embedded.rb +2 -0
- data/lib/mongoid/association/macros.rb +44 -41
- data/lib/mongoid/association/many.rb +16 -30
- data/lib/mongoid/association/marshalable.rb +3 -6
- data/lib/mongoid/association/nested/many.rb +18 -27
- data/lib/mongoid/association/nested/nested_buildable.rb +5 -11
- data/lib/mongoid/association/nested/one.rb +16 -27
- data/lib/mongoid/association/nested.rb +3 -3
- data/lib/mongoid/association/one.rb +4 -11
- data/lib/mongoid/association/options.rb +8 -38
- data/lib/mongoid/association/proxy.rb +37 -36
- data/lib/mongoid/association/referenced/auto_save.rb +5 -11
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +4 -9
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +11 -9
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +40 -3
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +16 -27
- data/lib/mongoid/association/referenced/belongs_to.rb +14 -36
- data/lib/mongoid/association/referenced/counter_cache.rb +4 -15
- data/lib/mongoid/association/referenced/eager.rb +39 -38
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +12 -11
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +37 -57
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +23 -43
- data/lib/mongoid/association/referenced/has_many/binding.rb +3 -6
- data/lib/mongoid/association/referenced/has_many/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +444 -456
- data/lib/mongoid/association/referenced/has_many/proxy.rb +74 -107
- data/lib/mongoid/association/referenced/has_many.rb +18 -42
- data/lib/mongoid/association/referenced/has_one/binding.rb +4 -9
- data/lib/mongoid/association/referenced/has_one/buildable.rb +20 -6
- data/lib/mongoid/association/referenced/has_one/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +13 -26
- data/lib/mongoid/association/referenced/has_one/proxy.rb +23 -25
- data/lib/mongoid/association/referenced/has_one.rb +13 -33
- data/lib/mongoid/association/referenced/syncable.rb +7 -22
- data/lib/mongoid/association/referenced.rb +2 -0
- data/lib/mongoid/association/reflections.rb +7 -6
- data/lib/mongoid/association/relatable.rb +18 -74
- data/lib/mongoid/association.rb +8 -22
- data/lib/mongoid/atomic/modifiers.rb +27 -51
- data/lib/mongoid/atomic/paths/embedded/many.rb +4 -7
- data/lib/mongoid/atomic/paths/embedded/one.rb +4 -7
- data/lib/mongoid/atomic/paths/embedded.rb +2 -3
- data/lib/mongoid/atomic/paths/root.rb +4 -7
- data/lib/mongoid/atomic/paths.rb +2 -1
- data/lib/mongoid/atomic.rb +29 -44
- data/lib/mongoid/attributes/dynamic.rb +3 -18
- data/lib/mongoid/attributes/nested.rb +7 -10
- data/lib/mongoid/attributes/processing.rb +9 -24
- data/lib/mongoid/attributes/projector.rb +119 -0
- data/lib/mongoid/attributes/readonly.rb +3 -6
- data/lib/mongoid/attributes.rb +46 -60
- data/lib/mongoid/cacheable.rb +6 -9
- data/lib/mongoid/changeable.rb +6 -60
- data/lib/mongoid/clients/factory.rb +42 -17
- data/lib/mongoid/clients/options.rb +10 -13
- data/lib/mongoid/clients/sessions.rb +2 -6
- data/lib/mongoid/clients/storage_options.rb +7 -12
- data/lib/mongoid/clients/validators/storage.rb +2 -9
- data/lib/mongoid/clients/validators.rb +2 -1
- data/lib/mongoid/clients.rb +3 -10
- data/lib/mongoid/composable.rb +5 -9
- data/lib/mongoid/config/environment.rb +15 -6
- data/lib/mongoid/config/options.rb +20 -23
- data/lib/mongoid/config/validators/client.rb +2 -17
- data/lib/mongoid/config/validators/option.rb +2 -3
- data/lib/mongoid/config/validators.rb +2 -1
- data/lib/mongoid/config.rb +112 -41
- data/lib/mongoid/contextual/aggregable/memory.rb +17 -12
- data/lib/mongoid/contextual/aggregable/mongo.rb +25 -26
- data/lib/mongoid/contextual/aggregable/none.rb +65 -0
- data/lib/mongoid/contextual/aggregable.rb +17 -0
- data/lib/mongoid/contextual/atomic.rb +29 -31
- data/lib/mongoid/contextual/command.rb +2 -5
- data/lib/mongoid/contextual/geo_near.rb +6 -37
- data/lib/mongoid/contextual/map_reduce.rb +5 -33
- data/lib/mongoid/contextual/memory.rb +8 -61
- data/lib/mongoid/contextual/mongo.rb +160 -82
- data/lib/mongoid/contextual/none.rb +44 -28
- data/lib/mongoid/contextual/queryable.rb +2 -3
- data/lib/mongoid/contextual.rb +7 -9
- data/lib/mongoid/copyable.rb +11 -10
- data/lib/mongoid/criteria/findable.rb +12 -15
- data/lib/mongoid/criteria/includable.rb +8 -15
- data/lib/mongoid/criteria/inspectable.rb +2 -3
- data/lib/mongoid/criteria/marshalable.rb +2 -5
- data/lib/mongoid/criteria/modifiable.rb +2 -19
- data/lib/mongoid/criteria/options.rb +2 -3
- data/lib/mongoid/criteria/permission.rb +2 -1
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -13
- data/lib/mongoid/criteria/queryable/expandable.rb +68 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +4 -27
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -4
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +3 -4
- data/lib/mongoid/criteria/queryable/extensions/date.rb +3 -8
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +5 -11
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +3 -26
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +3 -14
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +3 -12
- data/lib/mongoid/criteria/queryable/extensions/object.rb +4 -29
- data/lib/mongoid/criteria/queryable/extensions/range.rb +41 -17
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +6 -13
- data/lib/mongoid/criteria/queryable/extensions/set.rb +3 -4
- data/lib/mongoid/criteria/queryable/extensions/string.rb +3 -18
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -10
- data/lib/mongoid/criteria/queryable/extensions/time.rb +3 -8
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +3 -8
- data/lib/mongoid/criteria/queryable/extensions.rb +1 -4
- data/lib/mongoid/criteria/queryable/key.rb +36 -21
- data/lib/mongoid/criteria/queryable/macroable.rb +3 -4
- data/lib/mongoid/criteria/queryable/mergeable.rb +179 -40
- data/lib/mongoid/criteria/queryable/optional.rb +5 -48
- data/lib/mongoid/criteria/queryable/options.rb +2 -19
- data/lib/mongoid/criteria/queryable/pipeline.rb +5 -15
- data/lib/mongoid/criteria/queryable/selectable.rb +414 -162
- data/lib/mongoid/criteria/queryable/selector.rb +36 -24
- data/lib/mongoid/criteria/queryable/smash.rb +2 -11
- data/lib/mongoid/criteria/queryable/storable.rb +237 -0
- data/lib/mongoid/criteria/queryable.rb +7 -9
- data/lib/mongoid/criteria/scopable.rb +27 -19
- data/lib/mongoid/criteria.rb +79 -72
- data/lib/mongoid/document.rb +24 -73
- data/lib/mongoid/equality.rb +29 -12
- data/lib/mongoid/errors/ambiguous_relationship.rb +4 -5
- data/lib/mongoid/errors/callback.rb +2 -3
- data/lib/mongoid/errors/criteria_argument_required.rb +18 -0
- data/lib/mongoid/errors/delete_restriction.rb +10 -13
- data/lib/mongoid/errors/document_not_destroyed.rb +4 -7
- data/lib/mongoid/errors/document_not_found.rb +2 -9
- data/lib/mongoid/errors/eager_load.rb +6 -5
- data/lib/mongoid/errors/empty_config_file.rb +25 -0
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +2 -3
- data/lib/mongoid/errors/invalid_collection.rb +2 -1
- data/lib/mongoid/errors/invalid_config_file.rb +25 -0
- data/lib/mongoid/errors/invalid_config_option.rb +2 -3
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +2 -3
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +24 -0
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +25 -0
- data/lib/mongoid/errors/invalid_expression_operator.rb +27 -0
- data/lib/mongoid/errors/invalid_field.rb +2 -5
- data/lib/mongoid/errors/invalid_field_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_field_option.rb +2 -3
- data/lib/mongoid/errors/invalid_find.rb +2 -3
- data/lib/mongoid/errors/invalid_includes.rb +2 -3
- data/lib/mongoid/errors/invalid_index.rb +2 -3
- data/lib/mongoid/errors/invalid_options.rb +4 -5
- data/lib/mongoid/errors/invalid_path.rb +2 -3
- data/lib/mongoid/errors/invalid_persistence_option.rb +2 -5
- data/lib/mongoid/errors/invalid_query.rb +40 -0
- data/lib/mongoid/errors/invalid_relation.rb +4 -9
- data/lib/mongoid/errors/invalid_relation_option.rb +4 -5
- data/lib/mongoid/errors/invalid_scope.rb +2 -3
- data/lib/mongoid/errors/invalid_session_use.rb +3 -6
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +6 -5
- data/lib/mongoid/errors/invalid_storage_options.rb +2 -3
- data/lib/mongoid/errors/invalid_storage_parent.rb +2 -3
- data/lib/mongoid/errors/invalid_time.rb +2 -3
- data/lib/mongoid/errors/invalid_value.rb +2 -1
- data/lib/mongoid/errors/inverse_not_found.rb +3 -4
- data/lib/mongoid/errors/mixed_client_configuration.rb +2 -3
- data/lib/mongoid/errors/mixed_relations.rb +2 -3
- data/lib/mongoid/errors/mongoid_error.rb +3 -10
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +3 -4
- data/lib/mongoid/errors/no_client_config.rb +4 -5
- data/lib/mongoid/errors/no_client_database.rb +2 -3
- data/lib/mongoid/errors/no_client_hosts.rb +2 -3
- data/lib/mongoid/errors/no_clients_config.rb +2 -3
- data/lib/mongoid/errors/no_default_client.rb +3 -4
- data/lib/mongoid/errors/no_environment.rb +2 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +2 -3
- data/lib/mongoid/errors/no_metadata.rb +2 -3
- data/lib/mongoid/errors/no_parent.rb +2 -3
- data/lib/mongoid/errors/readonly_attribute.rb +2 -3
- data/lib/mongoid/errors/readonly_document.rb +3 -6
- data/lib/mongoid/errors/scope_overwrite.rb +2 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +2 -0
- data/lib/mongoid/errors/unknown_attribute.rb +2 -3
- data/lib/mongoid/errors/unknown_model.rb +2 -3
- data/lib/mongoid/errors/unsaved_document.rb +3 -2
- data/lib/mongoid/errors/unsupported_javascript.rb +2 -3
- data/lib/mongoid/errors/validations.rb +2 -1
- data/lib/mongoid/errors.rb +12 -1
- data/lib/mongoid/evolvable.rb +4 -5
- data/lib/mongoid/extensions/array.rb +28 -37
- data/lib/mongoid/extensions/big_decimal.rb +2 -11
- data/lib/mongoid/extensions/boolean.rb +3 -5
- data/lib/mongoid/extensions/date.rb +13 -12
- data/lib/mongoid/extensions/date_time.rb +4 -12
- data/lib/mongoid/extensions/decimal128.rb +2 -5
- data/lib/mongoid/extensions/false_class.rb +4 -7
- data/lib/mongoid/extensions/float.rb +5 -10
- data/lib/mongoid/extensions/hash.rb +47 -34
- data/lib/mongoid/extensions/integer.rb +5 -12
- data/lib/mongoid/extensions/module.rb +2 -3
- data/lib/mongoid/extensions/nil_class.rb +2 -5
- data/lib/mongoid/extensions/object.rb +17 -44
- data/lib/mongoid/extensions/object_id.rb +2 -7
- data/lib/mongoid/extensions/range.rb +2 -11
- data/lib/mongoid/extensions/regexp.rb +2 -3
- data/lib/mongoid/extensions/set.rb +2 -7
- data/lib/mongoid/extensions/string.rb +19 -39
- data/lib/mongoid/extensions/symbol.rb +2 -7
- data/lib/mongoid/extensions/time.rb +12 -9
- data/lib/mongoid/extensions/time_with_zone.rb +25 -7
- data/lib/mongoid/extensions/true_class.rb +4 -7
- data/lib/mongoid/extensions.rb +18 -3
- data/lib/mongoid/factory.rb +52 -13
- data/lib/mongoid/fields/foreign_key.rb +3 -22
- data/lib/mongoid/fields/localized.rb +2 -11
- data/lib/mongoid/fields/standard.rb +6 -36
- data/lib/mongoid/fields/validators/macro.rb +36 -18
- data/lib/mongoid/fields/validators.rb +2 -1
- data/lib/mongoid/fields.rb +113 -63
- data/lib/mongoid/findable.rb +59 -23
- data/lib/mongoid/indexable/specification.rb +3 -16
- data/lib/mongoid/indexable/validators/options.rb +2 -7
- data/lib/mongoid/indexable.rb +6 -21
- data/lib/mongoid/inspectable.rb +4 -11
- data/lib/mongoid/interceptable.rb +13 -30
- data/lib/mongoid/loggable.rb +13 -16
- data/lib/mongoid/matchable.rb +2 -153
- data/lib/mongoid/matcher/all.rb +22 -0
- data/lib/mongoid/matcher/and.rb +21 -0
- data/lib/mongoid/matcher/bits.rb +41 -0
- data/lib/mongoid/matcher/bits_all_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_all_set.rb +20 -0
- data/lib/mongoid/matcher/bits_any_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_any_set.rb +20 -0
- data/lib/mongoid/matcher/elem_match.rb +36 -0
- data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
- data/lib/mongoid/matcher/eq.rb +11 -0
- data/lib/mongoid/matcher/eq_impl.rb +67 -0
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +26 -0
- data/lib/mongoid/matcher/exists.rb +15 -0
- data/lib/mongoid/matcher/expression.rb +35 -0
- data/lib/mongoid/matcher/expression_operator.rb +19 -0
- data/lib/mongoid/matcher/field_expression.rb +62 -0
- data/lib/mongoid/matcher/field_operator.rb +54 -0
- data/lib/mongoid/matcher/gt.rb +17 -0
- data/lib/mongoid/matcher/gte.rb +17 -0
- data/lib/mongoid/matcher/in.rb +25 -0
- data/lib/mongoid/matcher/lt.rb +17 -0
- data/lib/mongoid/matcher/lte.rb +17 -0
- data/lib/mongoid/matcher/mod.rb +17 -0
- data/lib/mongoid/matcher/ne.rb +16 -0
- data/lib/mongoid/matcher/nin.rb +11 -0
- data/lib/mongoid/matcher/nor.rb +25 -0
- data/lib/mongoid/matcher/not.rb +29 -0
- data/lib/mongoid/matcher/or.rb +21 -0
- data/lib/mongoid/matcher/regex.rb +41 -0
- data/lib/mongoid/matcher/size.rb +26 -0
- data/lib/mongoid/matcher/type.rb +99 -0
- data/lib/mongoid/matcher.rb +110 -0
- data/lib/mongoid/persistable/creatable.rb +4 -21
- data/lib/mongoid/persistable/deletable.rb +5 -21
- data/lib/mongoid/persistable/destroyable.rb +11 -10
- data/lib/mongoid/persistable/incrementable.rb +6 -7
- data/lib/mongoid/persistable/logical.rb +4 -6
- data/lib/mongoid/persistable/poppable.rb +3 -6
- data/lib/mongoid/persistable/pullable.rb +3 -8
- data/lib/mongoid/persistable/pushable.rb +3 -8
- data/lib/mongoid/persistable/renamable.rb +10 -8
- data/lib/mongoid/persistable/savable.rb +3 -8
- data/lib/mongoid/persistable/settable.rb +3 -6
- data/lib/mongoid/persistable/unsettable.rb +8 -8
- data/lib/mongoid/persistable/updatable.rb +32 -20
- data/lib/mongoid/persistable/upsertable.rb +3 -8
- data/lib/mongoid/persistable.rb +133 -38
- data/lib/mongoid/persistence_context.rb +23 -36
- data/lib/mongoid/positional.rb +2 -5
- data/lib/mongoid/query_cache.rb +118 -103
- data/lib/mongoid/railtie.rb +3 -16
- data/lib/mongoid/railties/controller_runtime.rb +3 -1
- data/lib/mongoid/railties/database.rake +9 -0
- data/lib/mongoid/reloadable.rb +14 -19
- data/lib/mongoid/scopable.rb +8 -35
- data/lib/mongoid/selectable.rb +8 -17
- data/lib/mongoid/serializable.rb +24 -29
- data/lib/mongoid/shardable.rb +80 -17
- data/lib/mongoid/stateful.rb +3 -10
- data/lib/mongoid/stringified_symbol.rb +52 -0
- data/lib/mongoid/tasks/database.rake +12 -5
- data/lib/mongoid/tasks/database.rb +85 -5
- data/lib/mongoid/threaded/lifecycle.rb +2 -21
- data/lib/mongoid/threaded.rb +2 -55
- data/lib/mongoid/timestamps/created/short.rb +2 -1
- data/lib/mongoid/timestamps/created.rb +3 -2
- data/lib/mongoid/timestamps/short.rb +2 -1
- data/lib/mongoid/timestamps/timeless.rb +6 -9
- data/lib/mongoid/timestamps/updated/short.rb +2 -1
- data/lib/mongoid/timestamps/updated.rb +3 -4
- data/lib/mongoid/timestamps.rb +3 -2
- data/lib/mongoid/touchable.rb +53 -23
- data/lib/mongoid/traversable.rb +177 -57
- data/lib/mongoid/validatable/associated.rb +5 -6
- data/lib/mongoid/validatable/format.rb +2 -1
- data/lib/mongoid/validatable/length.rb +2 -1
- data/lib/mongoid/validatable/localizable.rb +2 -3
- data/lib/mongoid/validatable/macros.rb +2 -7
- data/lib/mongoid/validatable/presence.rb +8 -13
- data/lib/mongoid/validatable/queryable.rb +2 -3
- data/lib/mongoid/validatable/uniqueness.rb +20 -33
- data/lib/mongoid/validatable.rb +8 -27
- data/lib/mongoid/version.rb +2 -2
- data/lib/mongoid.rb +32 -15
- data/lib/rails/generators/mongoid/config/config_generator.rb +10 -2
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +45 -30
- data/lib/rails/generators/mongoid/model/model_generator.rb +3 -2
- data/lib/rails/generators/mongoid_generator.rb +2 -1
- data/lib/rails/mongoid.rb +4 -5
- data/spec/README.md +19 -4
- data/spec/config/mongoid.yml +1 -0
- data/spec/integration/app_spec.rb +246 -95
- data/spec/integration/associations/belongs_to_spec.rb +2 -0
- data/spec/integration/associations/embedded_dirty_spec.rb +29 -0
- data/spec/integration/associations/embedded_spec.rb +207 -1
- data/spec/integration/associations/embeds_many_spec.rb +206 -0
- data/spec/integration/associations/embeds_one_spec.rb +23 -0
- data/spec/integration/associations/foreign_key_spec.rb +98 -0
- data/spec/integration/associations/foreign_key_spec_models.rb +64 -0
- data/spec/integration/associations/has_many_spec.rb +128 -0
- data/spec/integration/associations/has_one_spec.rb +176 -0
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +115 -0
- data/spec/integration/associations/reverse_population_spec.rb +34 -0
- data/spec/integration/associations/reverse_population_spec_models.rb +36 -0
- data/spec/integration/associations/scope_option_spec.rb +101 -0
- data/spec/integration/atomic/modifiers_spec.rb +116 -0
- data/spec/integration/bson_regexp_raw_spec.rb +19 -0
- data/spec/integration/callbacks_models.rb +61 -0
- data/spec/integration/callbacks_spec.rb +228 -0
- data/spec/integration/contextual/empty_spec.rb +141 -0
- data/spec/integration/criteria/alias_query_spec.rb +161 -0
- data/spec/integration/criteria/date_field_spec.rb +1 -2
- data/spec/integration/criteria/default_scope_spec.rb +72 -0
- data/spec/integration/criteria/logical_spec.rb +124 -0
- data/spec/integration/criteria/range_spec.rb +265 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +125 -15
- data/spec/integration/discriminator_key_spec.rb +353 -0
- data/spec/integration/discriminator_value_spec.rb +206 -0
- data/spec/integration/document_spec.rb +30 -1
- data/spec/integration/i18n_fallbacks_spec.rb +89 -0
- data/spec/integration/{matchable_spec.rb → matcher_examples_spec.rb} +120 -42
- data/spec/integration/matcher_operator_data/all.yml +140 -0
- data/spec/integration/matcher_operator_data/and.yml +93 -0
- data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
- data/spec/integration/matcher_operator_data/comment.yml +22 -0
- data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
- data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
- data/spec/integration/matcher_operator_data/eq.yml +191 -0
- data/spec/integration/matcher_operator_data/exists.yml +213 -0
- data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
- data/spec/integration/matcher_operator_data/gt.yml +132 -0
- data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
- data/spec/integration/matcher_operator_data/gte.yml +132 -0
- data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/implicit.yml +331 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
- data/spec/integration/matcher_operator_data/in.yml +210 -0
- data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
- data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
- data/spec/integration/matcher_operator_data/lt.yml +132 -0
- data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
- data/spec/integration/matcher_operator_data/lte.yml +132 -0
- data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/mod.yml +55 -0
- data/spec/integration/matcher_operator_data/multiple.yml +29 -0
- data/spec/integration/matcher_operator_data/ne.yml +150 -0
- data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
- data/spec/integration/matcher_operator_data/nin.yml +114 -0
- data/spec/integration/matcher_operator_data/nor.yml +126 -0
- data/spec/integration/matcher_operator_data/not.yml +196 -0
- data/spec/integration/matcher_operator_data/or.yml +137 -0
- data/spec/integration/matcher_operator_data/regex.yml +174 -0
- data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
- data/spec/integration/matcher_operator_data/size.yml +174 -0
- data/spec/integration/matcher_operator_data/type.yml +70 -0
- data/spec/integration/matcher_operator_data/type_array.yml +16 -0
- data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
- data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
- data/spec/integration/matcher_operator_data/type_code.yml +26 -0
- data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
- data/spec/integration/matcher_operator_data/type_date.yml +39 -0
- data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
- data/spec/integration/matcher_operator_data/type_decimal.yml +40 -0
- data/spec/integration/matcher_operator_data/type_double.yml +15 -0
- data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
- data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
- data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_null.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
- data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
- data/spec/integration/matcher_operator_data/type_string.yml +15 -0
- data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
- data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
- data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
- data/spec/integration/matcher_operator_spec.rb +124 -0
- data/spec/integration/matcher_spec.rb +283 -0
- data/spec/integration/server_query_spec.rb +141 -0
- data/spec/integration/shardable_spec.rb +148 -0
- data/spec/integration/stringified_symbol_field_spec.rb +203 -0
- data/spec/lite_spec_helper.rb +22 -5
- data/spec/mongoid/association/accessors_spec.rb +284 -77
- data/spec/mongoid/association/auto_save_spec.rb +74 -33
- data/spec/mongoid/association/builders_spec.rb +3 -1
- data/spec/mongoid/association/constrainable_spec.rb +2 -0
- data/spec/mongoid/association/counter_cache_spec.rb +34 -32
- data/spec/mongoid/association/depending_spec.rb +426 -333
- data/spec/mongoid/association/eager_spec.rb +6 -4
- data/spec/mongoid/association/embedded/cyclic_spec.rb +4 -2
- data/spec/mongoid/association/embedded/dirty_spec.rb +4 -2
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +65 -13
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +3 -1
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +431 -133
- data/spec/mongoid/association/embedded/embeds_many_models.rb +17 -1
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +51 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +3 -1
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +23 -21
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +3 -0
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +28 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +3 -1
- data/spec/mongoid/association/macros_spec.rb +11 -9
- data/spec/mongoid/association/nested/many_spec.rb +2 -0
- data/spec/mongoid/association/nested/one_spec.rb +18 -12
- data/spec/mongoid/association/options_spec.rb +2 -0
- data/spec/mongoid/association/polymorphic_spec.rb +2 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -0
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +57 -16
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +242 -12
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +99 -58
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +57 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +24 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +3 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +28 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +46 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +25 -5
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +215 -167
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +43 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +39 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +46 -2
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +3 -1
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +23 -0
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +40 -9
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +306 -125
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +679 -339
- data/spec/mongoid/association/referenced/has_many_models.rb +58 -0
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +23 -0
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +2 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +53 -7
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +34 -4
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +28 -26
- data/spec/mongoid/association/referenced/has_one_models.rb +49 -0
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +24 -1
- data/spec/mongoid/association/reflections_spec.rb +2 -0
- data/spec/mongoid/association/syncable_spec.rb +33 -31
- data/spec/mongoid/association_spec.rb +2 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +49 -0
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +2 -0
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +2 -0
- data/spec/mongoid/atomic/paths/root_spec.rb +2 -0
- data/spec/mongoid/atomic/paths_spec.rb +107 -12
- data/spec/mongoid/atomic_spec.rb +31 -6
- data/spec/mongoid/attributes/dynamic_spec.rb +0 -1
- data/spec/mongoid/attributes/nested_spec.rb +69 -67
- data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
- data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
- data/spec/mongoid/attributes/projector_spec.rb +44 -0
- data/spec/mongoid/attributes/readonly_spec.rb +24 -22
- data/spec/mongoid/attributes_spec.rb +363 -28
- data/spec/mongoid/cacheable_spec.rb +3 -1
- data/spec/mongoid/changeable_spec.rb +60 -35
- data/spec/mongoid/clients/factory_spec.rb +136 -28
- data/spec/mongoid/clients/options_spec.rb +44 -26
- data/spec/mongoid/clients/sessions_spec.rb +25 -28
- data/spec/mongoid/clients/transactions_spec.rb +54 -29
- data/spec/mongoid/clients_spec.rb +8 -6
- data/spec/mongoid/composable_spec.rb +2 -0
- data/spec/mongoid/config/environment_spec.rb +88 -8
- data/spec/mongoid/config/options_spec.rb +22 -3
- data/spec/mongoid/config_spec.rb +277 -1
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +53 -11
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +122 -20
- data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
- data/spec/mongoid/contextual/atomic_spec.rb +222 -71
- data/spec/mongoid/contextual/geo_near_spec.rb +20 -18
- data/spec/mongoid/contextual/map_reduce_spec.rb +4 -2
- data/spec/mongoid/contextual/memory_spec.rb +25 -23
- data/spec/mongoid/contextual/mongo_spec.rb +413 -92
- data/spec/mongoid/contextual/none_spec.rb +9 -81
- data/spec/mongoid/copyable_spec.rb +207 -26
- data/spec/mongoid/copyable_spec_models.rb +30 -0
- data/spec/mongoid/criteria/findable_spec.rb +77 -20
- data/spec/mongoid/criteria/inspectable_spec.rb +2 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +2 -0
- data/spec/mongoid/criteria/modifiable_spec.rb +43 -40
- data/spec/mongoid/criteria/options_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +61 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +35 -17
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +239 -178
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +23 -16
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/key_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +145 -12
- data/spec/mongoid/criteria/queryable/optional_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/options_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +1593 -286
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +1010 -2736
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/smash_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/storable_spec.rb +226 -0
- data/spec/mongoid/criteria/scopable_spec.rb +129 -0
- data/spec/mongoid/criteria_projection_spec.rb +410 -0
- data/spec/mongoid/criteria_spec.rb +782 -459
- data/spec/mongoid/document_fields_spec.rb +26 -1
- data/spec/mongoid/document_persistence_context_spec.rb +0 -1
- data/spec/mongoid/document_query_spec.rb +89 -0
- data/spec/mongoid/document_spec.rb +123 -48
- data/spec/mongoid/equality_spec.rb +144 -41
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +5 -3
- data/spec/mongoid/errors/callback_spec.rb +2 -0
- data/spec/mongoid/errors/delete_restriction_spec.rb +4 -2
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +2 -0
- data/spec/mongoid/errors/document_not_found_spec.rb +2 -0
- data/spec/mongoid/errors/eager_load_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_collection_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_config_file_spec.rb +31 -0
- data/spec/mongoid/errors/invalid_config_option_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_field_option_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_field_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_includes_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_index_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_options_spec.rb +4 -2
- data/spec/mongoid/errors/invalid_path_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_relation_spec.rb +4 -2
- data/spec/mongoid/errors/invalid_scope_spec.rb +3 -1
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_time_spec.rb +2 -0
- data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +2 -0
- data/spec/mongoid/errors/mixed_relations_spec.rb +2 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +22 -8
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_config_spec.rb +4 -2
- data/spec/mongoid/errors/no_client_database_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_hosts_spec.rb +5 -3
- data/spec/mongoid/errors/no_clients_config_spec.rb +2 -0
- data/spec/mongoid/errors/no_environment_spec.rb +2 -0
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +2 -0
- data/spec/mongoid/errors/no_metadata_spec.rb +4 -2
- data/spec/mongoid/errors/no_parent_spec.rb +3 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +2 -0
- data/spec/mongoid/errors/readonly_document_spec.rb +2 -0
- data/spec/mongoid/errors/scope_overwrite_spec.rb +2 -0
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +2 -0
- data/spec/mongoid/errors/unknown_attribute_spec.rb +4 -2
- data/spec/mongoid/errors/unsaved_document_spec.rb +3 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +2 -0
- data/spec/mongoid/errors/validations_spec.rb +2 -0
- data/spec/mongoid/extensions/array_spec.rb +25 -43
- data/spec/mongoid/extensions/big_decimal_spec.rb +2 -0
- data/spec/mongoid/extensions/binary_spec.rb +2 -0
- data/spec/mongoid/extensions/boolean_spec.rb +2 -0
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +335 -0
- data/spec/mongoid/extensions/date_spec.rb +8 -160
- data/spec/mongoid/extensions/date_time_spec.rb +17 -60
- data/spec/mongoid/extensions/decimal128_spec.rb +2 -0
- data/spec/mongoid/extensions/false_class_spec.rb +3 -1
- data/spec/mongoid/extensions/float_spec.rb +17 -3
- data/spec/mongoid/extensions/hash_spec.rb +105 -0
- data/spec/mongoid/extensions/integer_spec.rb +14 -2
- data/spec/mongoid/extensions/module_spec.rb +2 -0
- data/spec/mongoid/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/extensions/object_id_spec.rb +2 -0
- data/spec/mongoid/extensions/object_spec.rb +13 -24
- data/spec/mongoid/extensions/range_spec.rb +2 -0
- data/spec/mongoid/extensions/regexp_spec.rb +2 -0
- data/spec/mongoid/extensions/set_spec.rb +2 -0
- data/spec/mongoid/extensions/string_spec.rb +60 -27
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
- data/spec/mongoid/extensions/symbol_spec.rb +2 -0
- data/spec/mongoid/extensions/time_spec.rb +29 -0
- data/spec/mongoid/extensions/time_with_zone_spec.rb +33 -0
- data/spec/mongoid/extensions/true_class_spec.rb +3 -1
- data/spec/mongoid/extensions_spec.rb +16 -2
- data/spec/mongoid/factory_spec.rb +287 -27
- data/spec/mongoid/fields/foreign_key_spec.rb +2 -0
- data/spec/mongoid/fields/localized_spec.rb +6 -4
- data/spec/mongoid/fields/standard_spec.rb +2 -0
- data/spec/mongoid/fields_spec.rb +418 -36
- data/spec/mongoid/findable_spec.rb +53 -19
- data/spec/mongoid/indexable/specification_spec.rb +2 -0
- data/spec/mongoid/indexable_spec.rb +30 -2
- data/spec/mongoid/inspectable_spec.rb +39 -2
- data/spec/mongoid/interceptable_spec.rb +168 -96
- data/spec/mongoid/interceptable_spec_models.rb +76 -0
- data/spec/mongoid/loggable_spec.rb +2 -0
- data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
- data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +239 -0
- data/spec/mongoid/matcher/extract_attribute_spec.rb +40 -0
- data/spec/mongoid/persistable/creatable_spec.rb +112 -27
- data/spec/mongoid/persistable/deletable_spec.rb +273 -11
- data/spec/mongoid/persistable/destroyable_spec.rb +201 -11
- data/spec/mongoid/persistable/incrementable_spec.rb +23 -7
- data/spec/mongoid/persistable/logical_spec.rb +19 -3
- data/spec/mongoid/persistable/poppable_spec.rb +19 -3
- data/spec/mongoid/persistable/pullable_spec.rb +36 -6
- data/spec/mongoid/persistable/pushable_spec.rb +36 -6
- data/spec/mongoid/persistable/renamable_spec.rb +18 -2
- data/spec/mongoid/persistable/savable_spec.rb +188 -25
- data/spec/mongoid/persistable/settable_spec.rb +54 -8
- data/spec/mongoid/persistable/unsettable_spec.rb +19 -3
- data/spec/mongoid/persistable/updatable_spec.rb +45 -23
- data/spec/mongoid/persistable/upsertable_spec.rb +4 -2
- data/spec/mongoid/persistable_spec.rb +85 -9
- data/spec/mongoid/persistence_context_spec.rb +2 -0
- data/spec/mongoid/positional_spec.rb +2 -0
- data/spec/mongoid/query_cache_middleware_spec.rb +68 -0
- data/spec/mongoid/query_cache_spec.rb +501 -81
- data/spec/mongoid/relations/proxy_spec.rb +8 -6
- data/spec/mongoid/reloadable_spec.rb +298 -20
- data/spec/mongoid/scopable_spec.rb +67 -21
- data/spec/mongoid/selectable_spec.rb +8 -6
- data/spec/mongoid/serializable_spec.rb +160 -29
- data/spec/mongoid/shardable_models.rb +61 -0
- data/spec/mongoid/shardable_spec.rb +116 -17
- data/spec/mongoid/stateful_spec.rb +3 -1
- data/spec/mongoid/tasks/database_rake_spec.rb +2 -0
- data/spec/mongoid/tasks/database_spec.rb +2 -0
- data/spec/mongoid/threaded_spec.rb +4 -2
- data/spec/mongoid/timestamps/created/short_spec.rb +3 -1
- data/spec/mongoid/timestamps/created_spec.rb +3 -1
- data/spec/mongoid/timestamps/timeless_spec.rb +4 -2
- data/spec/mongoid/timestamps/updated/short_spec.rb +5 -3
- data/spec/mongoid/timestamps/updated_spec.rb +5 -3
- data/spec/mongoid/timestamps_spec.rb +8 -6
- data/spec/mongoid/touchable_spec.rb +180 -33
- data/spec/mongoid/touchable_spec_models.rb +53 -0
- data/spec/mongoid/traversable_spec.rb +1167 -1
- data/spec/mongoid/validatable/associated_spec.rb +2 -0
- data/spec/mongoid/validatable/format_spec.rb +2 -0
- data/spec/mongoid/validatable/length_spec.rb +2 -0
- data/spec/mongoid/validatable/numericality_spec.rb +2 -0
- data/spec/mongoid/validatable/presence_spec.rb +28 -22
- data/spec/mongoid/validatable/uniqueness_spec.rb +69 -67
- data/spec/mongoid/validatable_spec.rb +5 -3
- data/spec/mongoid_spec.rb +2 -0
- data/spec/rails/controller_extension/controller_runtime_spec.rb +3 -1
- data/spec/rails/mongoid_spec.rb +4 -2
- data/spec/shared/LICENSE +20 -0
- data/spec/shared/bin/get-mongodb-download-url +17 -0
- data/spec/shared/bin/s3-copy +45 -0
- data/spec/shared/bin/s3-upload +69 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/cluster_config.rb +231 -0
- data/spec/shared/lib/mrss/constraints.rb +386 -0
- data/spec/shared/lib/mrss/docker_runner.rb +271 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +200 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +199 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +120 -0
- data/spec/shared/lib/mrss/session_registry.rb +69 -0
- data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
- data/spec/shared/lib/mrss/utils.rb +15 -0
- data/spec/shared/share/Dockerfile.erb +339 -0
- data/spec/shared/share/haproxy-1.conf +16 -0
- data/spec/shared/share/haproxy-2.conf +17 -0
- data/spec/shared/shlib/distro.sh +74 -0
- data/spec/shared/shlib/server.sh +379 -0
- data/spec/shared/shlib/set_env.sh +132 -0
- data/spec/spec_helper.rb +39 -35
- data/spec/support/authorization.rb +2 -0
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +15 -234
- data/spec/support/expectations.rb +5 -1
- data/spec/support/helpers.rb +11 -0
- data/spec/support/macros.rb +22 -0
- data/spec/{app → support}/models/account.rb +3 -1
- data/spec/{app → support}/models/acolyte.rb +2 -0
- data/spec/{app → support}/models/actor.rb +3 -1
- data/spec/support/models/actress.rb +4 -0
- data/spec/{app → support}/models/address.rb +6 -0
- data/spec/{app → support}/models/address_component.rb +2 -0
- data/spec/{app → support}/models/address_number.rb +2 -0
- data/spec/{app → support}/models/agency.rb +2 -0
- data/spec/{app → support}/models/agent.rb +2 -0
- data/spec/{app → support}/models/album.rb +2 -0
- data/spec/{app → support}/models/alert.rb +2 -0
- data/spec/{app → support}/models/animal.rb +2 -0
- data/spec/{app → support}/models/answer.rb +2 -0
- data/spec/{app → support}/models/appointment.rb +2 -0
- data/spec/support/models/armrest.rb +9 -0
- data/spec/{app → support}/models/article.rb +2 -0
- data/spec/{app → support}/models/artist.rb +4 -0
- data/spec/{app → support}/models/artwork.rb +2 -0
- data/spec/support/models/audible_sound.rb +3 -0
- data/spec/{app → support}/models/audio.rb +2 -0
- data/spec/{app → support}/models/augmentation.rb +2 -0
- data/spec/{app → support}/models/author.rb +2 -0
- data/spec/{app → support}/models/baby.rb +2 -0
- data/spec/{app → support}/models/band.rb +6 -0
- data/spec/{app → support}/models/bar.rb +2 -0
- data/spec/{app → support}/models/basic.rb +2 -0
- data/spec/support/models/bed.rb +3 -0
- data/spec/{app → support}/models/big_palette.rb +2 -0
- data/spec/{app → support}/models/birthday.rb +2 -0
- data/spec/support/models/bolt.rb +7 -0
- data/spec/{app → support}/models/bomb.rb +2 -0
- data/spec/{app → support}/models/book.rb +2 -0
- data/spec/{app → support}/models/breed.rb +2 -0
- data/spec/{app → support}/models/browser.rb +3 -1
- data/spec/{app → support}/models/building.rb +2 -0
- data/spec/{app → support}/models/building_address.rb +2 -0
- data/spec/{app → support}/models/bus.rb +2 -0
- data/spec/{app → support}/models/business.rb +2 -0
- data/spec/{app → support}/models/callback_test.rb +2 -0
- data/spec/{app → support}/models/canvas.rb +3 -1
- data/spec/support/models/car.rb +3 -0
- data/spec/{app → support}/models/cat.rb +2 -0
- data/spec/{app → support}/models/category.rb +2 -0
- data/spec/{app → support}/models/child.rb +2 -0
- data/spec/{app → support}/models/child_doc.rb +5 -3
- data/spec/{app → support}/models/church.rb +2 -0
- data/spec/{app → support}/models/circle.rb +2 -0
- data/spec/{app → support}/models/circuit.rb +2 -0
- data/spec/{app → support}/models/circus.rb +2 -0
- data/spec/{app → support}/models/code.rb +2 -0
- data/spec/support/models/coding/pull_request.rb +11 -0
- data/spec/support/models/coding.rb +3 -0
- data/spec/{app → support}/models/comment.rb +2 -0
- data/spec/{app → support}/models/company.rb +2 -0
- data/spec/{app → support}/models/consumption_period.rb +2 -0
- data/spec/{app → support}/models/contextable_item.rb +2 -0
- data/spec/{app → support}/models/contractor.rb +2 -0
- data/spec/{app → support}/models/cookie.rb +2 -0
- data/spec/{app → support}/models/country_code.rb +4 -0
- data/spec/{app → support}/models/courier_job.rb +2 -0
- data/spec/support/models/crate.rb +12 -0
- data/spec/support/models/customer.rb +10 -0
- data/spec/support/models/customer_address.rb +11 -0
- data/spec/support/models/deed.rb +7 -0
- data/spec/{app → support}/models/definition.rb +2 -0
- data/spec/{app → support}/models/delegating_patient.rb +0 -1
- data/spec/{app → support}/models/description.rb +2 -0
- data/spec/{app → support}/models/dictionary.rb +8 -0
- data/spec/{app → support}/models/division.rb +2 -0
- data/spec/{app → support}/models/doctor.rb +2 -0
- data/spec/{app → support}/models/dog.rb +2 -0
- data/spec/{app → support}/models/dokument.rb +2 -0
- data/spec/{app → support}/models/draft.rb +2 -0
- data/spec/{app → support}/models/dragon.rb +2 -0
- data/spec/{app → support}/models/driver.rb +3 -1
- data/spec/{app → support}/models/drug.rb +2 -0
- data/spec/{app → support}/models/dungeon.rb +2 -0
- data/spec/{app → support}/models/edit.rb +2 -0
- data/spec/{app → support}/models/email.rb +2 -0
- data/spec/{app → support}/models/employer.rb +2 -0
- data/spec/{app → support}/models/entry.rb +2 -0
- data/spec/support/models/eraser.rb +3 -0
- data/spec/{app → support}/models/even.rb +2 -0
- data/spec/{app → support}/models/event.rb +2 -0
- data/spec/{app → support}/models/exhibition.rb +2 -0
- data/spec/{app → support}/models/exhibitor.rb +2 -0
- data/spec/{app → support}/models/explosion.rb +2 -0
- data/spec/{app → support}/models/eye.rb +2 -0
- data/spec/{app → support}/models/eye_bowl.rb +2 -0
- data/spec/{app → support}/models/face.rb +2 -0
- data/spec/{app → support}/models/favorite.rb +2 -0
- data/spec/{app → support}/models/filesystem.rb +2 -0
- data/spec/{app → support}/models/fire_hydrant.rb +2 -0
- data/spec/{app → support}/models/firefox.rb +2 -0
- data/spec/{app → support}/models/fish.rb +2 -0
- data/spec/{app → support}/models/folder.rb +2 -0
- data/spec/{app → support}/models/folder_item.rb +2 -0
- data/spec/{app → support}/models/fruits.rb +2 -0
- data/spec/{app → support}/models/game.rb +2 -0
- data/spec/{app → support}/models/ghost.rb +2 -0
- data/spec/support/models/guitar.rb +4 -0
- data/spec/support/models/hole.rb +12 -0
- data/spec/{app → support}/models/home.rb +2 -0
- data/spec/{app → support}/models/house.rb +2 -0
- data/spec/{app → support}/models/html_writer.rb +2 -0
- data/spec/{app → support}/models/id_key.rb +2 -0
- data/spec/support/models/idnodef.rb +7 -0
- data/spec/{app → support}/models/image.rb +2 -0
- data/spec/{app → support}/models/implant.rb +2 -0
- data/spec/support/models/instrument.rb +8 -0
- data/spec/{app → support}/models/item.rb +3 -1
- data/spec/{app → support}/models/jar.rb +2 -0
- data/spec/{app → support}/models/kaleidoscope.rb +2 -0
- data/spec/{app → support}/models/kangaroo.rb +3 -1
- data/spec/{app → support}/models/label.rb +4 -1
- data/spec/{app → support}/models/language.rb +2 -0
- data/spec/{app → support}/models/lat_lng.rb +2 -0
- data/spec/{app → support}/models/league.rb +2 -0
- data/spec/support/models/learner.rb +4 -0
- data/spec/{app → support}/models/line_item.rb +2 -0
- data/spec/{app → support}/models/location.rb +2 -0
- data/spec/{app → support}/models/login.rb +2 -0
- data/spec/{app → support}/models/manufacturer.rb +2 -0
- data/spec/{app → support}/models/meat.rb +2 -0
- data/spec/{app → support}/models/membership.rb +2 -0
- data/spec/{app → support}/models/message.rb +2 -0
- data/spec/{app → support}/models/minim.rb +0 -1
- data/spec/{app → support}/models/mixed_drink.rb +2 -0
- data/spec/support/models/mop.rb +24 -0
- data/spec/{app → support}/models/movie.rb +2 -0
- data/spec/support/models/my_hash.rb +4 -0
- data/spec/{app → support}/models/name.rb +2 -0
- data/spec/support/models/name_only.rb +8 -0
- data/spec/{app → support}/models/node.rb +2 -0
- data/spec/{app → support}/models/note.rb +2 -0
- data/spec/support/models/nut.rb +7 -0
- data/spec/{app → support}/models/odd.rb +2 -0
- data/spec/support/models/order.rb +12 -0
- data/spec/{app → support}/models/ordered_post.rb +3 -1
- data/spec/{app → support}/models/ordered_preference.rb +2 -0
- data/spec/{app → support}/models/oscar.rb +2 -0
- data/spec/support/models/other_owner_object.rb +4 -0
- data/spec/{app → support}/models/override.rb +2 -0
- data/spec/{app → support}/models/ownable.rb +2 -0
- data/spec/{app → support}/models/owner.rb +4 -0
- data/spec/{app → support}/models/pack.rb +2 -0
- data/spec/{app → support}/models/page.rb +2 -0
- data/spec/{app → support}/models/page_question.rb +2 -0
- data/spec/{app → support}/models/palette.rb +3 -1
- data/spec/{app → support}/models/parent.rb +2 -0
- data/spec/{app → support}/models/parent_doc.rb +2 -0
- data/spec/support/models/passport.rb +13 -0
- data/spec/{app → support}/models/patient.rb +2 -0
- data/spec/{app → support}/models/pdf_writer.rb +2 -0
- data/spec/support/models/pencil.rb +3 -0
- data/spec/{app → support}/models/person.rb +21 -1
- data/spec/{app → support}/models/pet.rb +2 -0
- data/spec/{app → support}/models/pet_owner.rb +2 -0
- data/spec/{app → support}/models/phone.rb +5 -1
- data/spec/support/models/piano.rb +4 -0
- data/spec/{app → support}/models/pizza.rb +2 -0
- data/spec/{app → support}/models/player.rb +2 -0
- data/spec/{app → support}/models/post.rb +2 -0
- data/spec/{app → support}/models/post_genre.rb +2 -0
- data/spec/{app → support}/models/powerup.rb +2 -0
- data/spec/{app → support}/models/preference.rb +2 -0
- data/spec/{app → support}/models/princess.rb +2 -0
- data/spec/{app → support}/models/product.rb +2 -0
- data/spec/support/models/profile.rb +17 -0
- data/spec/{app → support}/models/pronunciation.rb +2 -0
- data/spec/{app → support}/models/pub.rb +2 -0
- data/spec/support/models/publication/encyclopedia.rb +11 -0
- data/spec/support/models/publication/review.rb +13 -0
- data/spec/support/models/publication.rb +4 -0
- data/spec/{app → support}/models/purchase.rb +2 -0
- data/spec/support/models/purchased_item.rb +10 -0
- data/spec/{app → support}/models/question.rb +2 -0
- data/spec/{app → support}/models/quiz.rb +2 -0
- data/spec/{app → support}/models/rating.rb +2 -0
- data/spec/{app → support}/models/record.rb +2 -0
- data/spec/{app → support}/models/registry.rb +2 -0
- data/spec/{app → support}/models/role.rb +2 -0
- data/spec/{app → support}/models/root_category.rb +2 -0
- data/spec/{app → support}/models/sandwich.rb +2 -0
- data/spec/{app → support}/models/scheduler.rb +2 -0
- data/spec/support/models/scribe.rb +7 -0
- data/spec/support/models/sealer.rb +7 -0
- data/spec/support/models/seat.rb +24 -0
- data/spec/{app → support}/models/seo.rb +2 -0
- data/spec/support/models/series.rb +7 -0
- data/spec/{app → support}/models/server.rb +2 -0
- data/spec/{app → support}/models/service.rb +2 -0
- data/spec/{app → support}/models/shape.rb +4 -2
- data/spec/{app → support}/models/shelf.rb +2 -0
- data/spec/{app → support}/models/shipment_address.rb +2 -0
- data/spec/{app → support}/models/shipping_container.rb +2 -0
- data/spec/{app → support}/models/shipping_pack.rb +2 -0
- data/spec/support/models/shirt.rb +11 -0
- data/spec/{app → support}/models/shop.rb +2 -0
- data/spec/{app → support}/models/short_agent.rb +2 -0
- data/spec/{app → support}/models/short_quiz.rb +2 -0
- data/spec/{app → support}/models/simple.rb +2 -0
- data/spec/{app → support}/models/slave.rb +2 -0
- data/spec/{app → support}/models/song.rb +2 -0
- data/spec/{app → support}/models/sound.rb +2 -0
- data/spec/support/models/spacer.rb +7 -0
- data/spec/{app → support}/models/square.rb +2 -0
- data/spec/{app → support}/models/staff.rb +2 -0
- data/spec/{app → support}/models/store_as_dup_test1.rb +2 -0
- data/spec/{app → support}/models/store_as_dup_test2.rb +2 -0
- data/spec/{app → support}/models/strategy.rb +2 -0
- data/spec/{app → support}/models/sub_item.rb +2 -0
- data/spec/{app → support}/models/subscription.rb +2 -0
- data/spec/{app → support}/models/survey.rb +2 -0
- data/spec/{app → support}/models/symptom.rb +2 -0
- data/spec/support/models/system_role.rb +7 -0
- data/spec/{app → support}/models/tag.rb +2 -0
- data/spec/{app → support}/models/target.rb +2 -0
- data/spec/{app → support}/models/template.rb +2 -0
- data/spec/{app → support}/models/thing.rb +2 -0
- data/spec/support/models/threadlocker.rb +7 -0
- data/spec/{app → support}/models/title.rb +2 -0
- data/spec/{app → support}/models/tool.rb +4 -2
- data/spec/{app → support}/models/topping.rb +2 -0
- data/spec/support/models/toy.rb +9 -0
- data/spec/{app → support}/models/track.rb +2 -0
- data/spec/{app → support}/models/translation.rb +2 -0
- data/spec/{app → support}/models/tree.rb +2 -0
- data/spec/support/models/truck.rb +7 -0
- data/spec/{app → support}/models/user.rb +2 -0
- data/spec/{app → support}/models/user_account.rb +2 -0
- data/spec/{app → support}/models/validation_callback.rb +2 -0
- data/spec/support/models/vehicle.rb +18 -0
- data/spec/{app → support}/models/version.rb +2 -0
- data/spec/{app → support}/models/vertex.rb +3 -1
- data/spec/{app → support}/models/vet_visit.rb +2 -0
- data/spec/{app → support}/models/video.rb +2 -0
- data/spec/support/models/video_game.rb +3 -0
- data/spec/support/models/washer.rb +7 -0
- data/spec/{app → support}/models/weapon.rb +2 -0
- data/spec/{app → support}/models/wiki_page.rb +3 -0
- data/spec/{app → support}/models/word.rb +2 -0
- data/spec/{app → support}/models/word_origin.rb +2 -0
- data/spec/{app → support}/models/writer.rb +4 -2
- data/spec/support/shared/time.rb +53 -0
- data/spec/support/spec_config.rb +16 -3
- data.tar.gz.sig +0 -0
- metadata +1100 -738
- metadata.gz.sig +0 -0
- data/lib/mongoid/criteria/queryable/forwardable.rb +0 -65
- data/lib/mongoid/matchable/all.rb +0 -28
- data/lib/mongoid/matchable/and.rb +0 -30
- data/lib/mongoid/matchable/default.rb +0 -119
- data/lib/mongoid/matchable/elem_match.rb +0 -34
- data/lib/mongoid/matchable/eq.rb +0 -22
- data/lib/mongoid/matchable/exists.rb +0 -23
- data/lib/mongoid/matchable/gt.rb +0 -23
- data/lib/mongoid/matchable/gte.rb +0 -23
- data/lib/mongoid/matchable/in.rb +0 -24
- data/lib/mongoid/matchable/lt.rb +0 -23
- data/lib/mongoid/matchable/lte.rb +0 -23
- data/lib/mongoid/matchable/ne.rb +0 -21
- data/lib/mongoid/matchable/nin.rb +0 -22
- data/lib/mongoid/matchable/nor.rb +0 -37
- data/lib/mongoid/matchable/or.rb +0 -33
- data/lib/mongoid/matchable/regexp.rb +0 -27
- data/lib/mongoid/matchable/size.rb +0 -21
- data/lib/support/ruby_version.rb +0 -26
- data/spec/app/models/actress.rb +0 -2
- data/spec/app/models/bed.rb +0 -1
- data/spec/app/models/car.rb +0 -1
- data/spec/app/models/eraser.rb +0 -1
- data/spec/app/models/learner.rb +0 -2
- data/spec/app/models/my_hash.rb +0 -2
- data/spec/app/models/other_owner_object.rb +0 -2
- data/spec/app/models/passport.rb +0 -5
- data/spec/app/models/pencil.rb +0 -1
- data/spec/app/models/profile.rb +0 -5
- data/spec/app/models/series.rb +0 -4
- data/spec/app/models/truck.rb +0 -3
- data/spec/app/models/vehicle.rb +0 -11
- data/spec/app/models/video_game.rb +0 -1
- data/spec/mongoid/criteria/queryable/forwardable_spec.rb +0 -87
- data/spec/mongoid/matchable/all_spec.rb +0 -31
- data/spec/mongoid/matchable/and_spec.rb +0 -187
- data/spec/mongoid/matchable/default_spec.rb +0 -137
- data/spec/mongoid/matchable/elem_match_spec.rb +0 -106
- data/spec/mongoid/matchable/eq_spec.rb +0 -48
- data/spec/mongoid/matchable/exists_spec.rb +0 -57
- data/spec/mongoid/matchable/gt_spec.rb +0 -86
- data/spec/mongoid/matchable/gte_spec.rb +0 -84
- data/spec/mongoid/matchable/in_spec.rb +0 -49
- data/spec/mongoid/matchable/lt_spec.rb +0 -85
- data/spec/mongoid/matchable/lte_spec.rb +0 -85
- data/spec/mongoid/matchable/ne_spec.rb +0 -46
- data/spec/mongoid/matchable/nin_spec.rb +0 -48
- data/spec/mongoid/matchable/nor_spec.rb +0 -209
- data/spec/mongoid/matchable/or_spec.rb +0 -131
- data/spec/mongoid/matchable/regexp_spec.rb +0 -59
- data/spec/mongoid/matchable/size_spec.rb +0 -25
- data/spec/mongoid/matchable_spec.rb +0 -853
- data/spec/support/child_process_helper.rb +0 -76
- data/spec/support/cluster_config.rb +0 -158
- /data/spec/{app → support}/models/array_field.rb +0 -0
- /data/spec/{app → support}/models/store_as_dup_test3.rb +0 -0
- /data/spec/{app → support}/models/store_as_dup_test4.rb +0 -0
- /data/spec/{app → support}/models/updatable.rb +0 -0
data/lib/mongoid/attributes.rb
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
require "active_model/attribute_methods"
|
|
3
4
|
require "mongoid/attributes/dynamic"
|
|
4
5
|
require "mongoid/attributes/nested"
|
|
5
6
|
require "mongoid/attributes/processing"
|
|
7
|
+
require "mongoid/attributes/projector"
|
|
6
8
|
require "mongoid/attributes/readonly"
|
|
7
9
|
|
|
8
10
|
module Mongoid
|
|
@@ -26,8 +28,6 @@ module Mongoid
|
|
|
26
28
|
# @param [ String, Symbol ] name The name of the attribute.
|
|
27
29
|
#
|
|
28
30
|
# @return [ true, false ] True if present, false if not.
|
|
29
|
-
#
|
|
30
|
-
# @since 1.0.0
|
|
31
31
|
def attribute_present?(name)
|
|
32
32
|
attribute = read_raw_attribute(name)
|
|
33
33
|
!attribute.blank? || attribute == false
|
|
@@ -41,8 +41,6 @@ module Mongoid
|
|
|
41
41
|
# document.attributes_before_type_cast
|
|
42
42
|
#
|
|
43
43
|
# @return [ Hash ] The uncast attributes.
|
|
44
|
-
#
|
|
45
|
-
# @since 3.1.0
|
|
46
44
|
def attributes_before_type_cast
|
|
47
45
|
@attributes_before_type_cast ||= {}
|
|
48
46
|
end
|
|
@@ -55,8 +53,6 @@ module Mongoid
|
|
|
55
53
|
# @param [ String, Symbol ] name The name of the attribute.
|
|
56
54
|
#
|
|
57
55
|
# @return [ true, false ] If the key is present in the attributes.
|
|
58
|
-
#
|
|
59
|
-
# @since 3.0.0
|
|
60
56
|
def has_attribute?(name)
|
|
61
57
|
attributes.key?(name.to_s)
|
|
62
58
|
end
|
|
@@ -71,8 +67,6 @@ module Mongoid
|
|
|
71
67
|
#
|
|
72
68
|
# @return [ true, false ] If the key is present in the
|
|
73
69
|
# attributes_before_type_cast.
|
|
74
|
-
#
|
|
75
|
-
# @since 3.1.0
|
|
76
70
|
def has_attribute_before_type_cast?(name)
|
|
77
71
|
attributes_before_type_cast.key?(name.to_s)
|
|
78
72
|
end
|
|
@@ -89,8 +83,6 @@ module Mongoid
|
|
|
89
83
|
# @param [ String, Symbol ] name The name of the attribute to get.
|
|
90
84
|
#
|
|
91
85
|
# @return [ Object ] The value of the attribute.
|
|
92
|
-
#
|
|
93
|
-
# @since 1.0.0
|
|
94
86
|
def read_attribute(name)
|
|
95
87
|
field = fields[name.to_s]
|
|
96
88
|
raw = read_raw_attribute(name)
|
|
@@ -109,8 +101,6 @@ module Mongoid
|
|
|
109
101
|
#
|
|
110
102
|
# @return [ Object ] The value of the attribute before type cast, if
|
|
111
103
|
# available. Otherwise, the value of the attribute.
|
|
112
|
-
#
|
|
113
|
-
# @since 3.1.0
|
|
114
104
|
def read_attribute_before_type_cast(name)
|
|
115
105
|
attr = name.to_s
|
|
116
106
|
if attributes_before_type_cast.key?(attr)
|
|
@@ -130,8 +120,6 @@ module Mongoid
|
|
|
130
120
|
#
|
|
131
121
|
# @raise [ Errors::ReadonlyAttribute ] If the field cannot be removed due
|
|
132
122
|
# to being flagged as reaodnly.
|
|
133
|
-
#
|
|
134
|
-
# @since 1.0.0
|
|
135
123
|
def remove_attribute(name)
|
|
136
124
|
as_writable_attribute!(name) do |access|
|
|
137
125
|
_assigning do
|
|
@@ -154,10 +142,13 @@ module Mongoid
|
|
|
154
142
|
#
|
|
155
143
|
# @param [ String, Symbol ] name The name of the attribute to update.
|
|
156
144
|
# @param [ Object ] value The value to set for the attribute.
|
|
157
|
-
#
|
|
158
|
-
# @since 1.0.0
|
|
159
145
|
def write_attribute(name, value)
|
|
160
146
|
field_name = database_field_name(name)
|
|
147
|
+
|
|
148
|
+
if attribute_missing?(field_name)
|
|
149
|
+
raise ActiveModel::MissingAttributeError, "Missing attribute: '#{name}'"
|
|
150
|
+
end
|
|
151
|
+
|
|
161
152
|
if attribute_writable?(field_name)
|
|
162
153
|
_assigning do
|
|
163
154
|
validate_attribute_value(field_name, value)
|
|
@@ -175,6 +166,8 @@ module Mongoid
|
|
|
175
166
|
end
|
|
176
167
|
typed_value
|
|
177
168
|
end
|
|
169
|
+
else
|
|
170
|
+
# TODO: MONGOID-5072
|
|
178
171
|
end
|
|
179
172
|
end
|
|
180
173
|
alias :[]= :write_attribute
|
|
@@ -191,8 +184,6 @@ module Mongoid
|
|
|
191
184
|
# person.assign_attributes({ :title => "Mr." }, :as => :admin)
|
|
192
185
|
#
|
|
193
186
|
# @param [ Hash ] attrs The new attributes to set.
|
|
194
|
-
#
|
|
195
|
-
# @since 2.2.1
|
|
196
187
|
def assign_attributes(attrs = nil)
|
|
197
188
|
_assigning do
|
|
198
189
|
process_attributes(attrs)
|
|
@@ -210,8 +201,6 @@ module Mongoid
|
|
|
210
201
|
# person.attributes = { :title => "Mr." }
|
|
211
202
|
#
|
|
212
203
|
# @param [ Hash ] attrs The new attributes to set.
|
|
213
|
-
#
|
|
214
|
-
# @since 1.0.0
|
|
215
204
|
def write_attributes(attrs = nil)
|
|
216
205
|
assign_attributes(attrs)
|
|
217
206
|
end
|
|
@@ -226,14 +215,8 @@ module Mongoid
|
|
|
226
215
|
# @param [ String ] name The name of the attribute.
|
|
227
216
|
#
|
|
228
217
|
# @return [ true, false ] If the attribute is missing.
|
|
229
|
-
#
|
|
230
|
-
# @since 4.0.0
|
|
231
218
|
def attribute_missing?(name)
|
|
232
|
-
|
|
233
|
-
return false unless selection
|
|
234
|
-
field = fields[name]
|
|
235
|
-
(selection.values.first == 0 && selection_excluded?(name, selection, field)) ||
|
|
236
|
-
(selection.values.first == 1 && !selection_included?(name, selection, field))
|
|
219
|
+
!Projector.new(__selected_fields).attribute_or_path_allowed?(name)
|
|
237
220
|
end
|
|
238
221
|
|
|
239
222
|
# Return type-casted attributes.
|
|
@@ -242,22 +225,12 @@ module Mongoid
|
|
|
242
225
|
# document.typed_attributes
|
|
243
226
|
#
|
|
244
227
|
# @return [ Object ] The hash with keys and values of the type-casted attributes.
|
|
245
|
-
#
|
|
246
|
-
# @since 6.1.0
|
|
247
228
|
def typed_attributes
|
|
248
229
|
attribute_names.map { |name| [name, send(name)] }.to_h
|
|
249
230
|
end
|
|
250
231
|
|
|
251
232
|
private
|
|
252
233
|
|
|
253
|
-
def selection_excluded?(name, selection, field)
|
|
254
|
-
selection[name] == 0
|
|
255
|
-
end
|
|
256
|
-
|
|
257
|
-
def selection_included?(name, selection, field)
|
|
258
|
-
selection.key?(name) || selection.keys.collect { |k| k.partition('.').first }.include?(name)
|
|
259
|
-
end
|
|
260
|
-
|
|
261
234
|
# Does the string contain dot syntax for accessing hashes?
|
|
262
235
|
#
|
|
263
236
|
# @api private
|
|
@@ -266,10 +239,8 @@ module Mongoid
|
|
|
266
239
|
# model.hash_dot_syntax?
|
|
267
240
|
#
|
|
268
241
|
# @return [ true, false ] If the string contains a "."
|
|
269
|
-
#
|
|
270
|
-
# @since 3.0.15
|
|
271
242
|
def hash_dot_syntax?(string)
|
|
272
|
-
string.include?("."
|
|
243
|
+
string.include?(".")
|
|
273
244
|
end
|
|
274
245
|
|
|
275
246
|
# Return the typecasted value for a field.
|
|
@@ -281,8 +252,6 @@ module Mongoid
|
|
|
281
252
|
# @param [ Object ] value The uncast value.
|
|
282
253
|
#
|
|
283
254
|
# @return [ Object ] The cast value.
|
|
284
|
-
#
|
|
285
|
-
# @since 1.0.0
|
|
286
255
|
def typed_value_for(key, value)
|
|
287
256
|
fields.key?(key) ? fields[key].mongoize(value) : value.mongoize
|
|
288
257
|
end
|
|
@@ -291,9 +260,11 @@ module Mongoid
|
|
|
291
260
|
|
|
292
261
|
def read_raw_attribute(name)
|
|
293
262
|
normalized = database_field_name(name.to_s)
|
|
263
|
+
|
|
294
264
|
if attribute_missing?(normalized)
|
|
295
|
-
raise ActiveModel::MissingAttributeError, "Missing attribute: '#{name}'
|
|
265
|
+
raise ActiveModel::MissingAttributeError, "Missing attribute: '#{name}'"
|
|
296
266
|
end
|
|
267
|
+
|
|
297
268
|
if hash_dot_syntax?(normalized)
|
|
298
269
|
attributes.__nested__(normalized)
|
|
299
270
|
else
|
|
@@ -316,22 +287,39 @@ module Mongoid
|
|
|
316
287
|
#
|
|
317
288
|
# @param [ Symbol ] name The new name.
|
|
318
289
|
# @param [ Symbol ] original The original name.
|
|
319
|
-
#
|
|
320
|
-
# @since 2.3.0
|
|
321
290
|
def alias_attribute(name, original)
|
|
322
291
|
aliased_fields[name.to_s] = original.to_s
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
292
|
+
|
|
293
|
+
alias_method name, original
|
|
294
|
+
alias_method "#{name}=", "#{original}="
|
|
295
|
+
alias_method "#{name}?", "#{original}?"
|
|
296
|
+
alias_method "#{name}_change", "#{original}_change"
|
|
297
|
+
alias_method "#{name}_changed?", "#{original}_changed?"
|
|
298
|
+
alias_method "reset_#{name}!", "reset_#{original}!"
|
|
299
|
+
alias_method "reset_#{name}_to_default!", "reset_#{original}_to_default!"
|
|
300
|
+
alias_method "#{name}_was", "#{original}_was"
|
|
301
|
+
alias_method "#{name}_will_change!", "#{original}_will_change!"
|
|
302
|
+
alias_method "#{name}_before_type_cast", "#{original}_before_type_cast"
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
# Removes a field alias.
|
|
306
|
+
#
|
|
307
|
+
# @param [ Symbol ] name The aliased field name to remove.
|
|
308
|
+
def unalias_attribute(name)
|
|
309
|
+
unless aliased_fields.delete(name.to_s)
|
|
310
|
+
raise AttributeError, "Field #{name} is not an aliased field"
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
remove_method name
|
|
314
|
+
remove_method "#{name}="
|
|
315
|
+
remove_method "#{name}?"
|
|
316
|
+
remove_method "#{name}_change"
|
|
317
|
+
remove_method "#{name}_changed?"
|
|
318
|
+
remove_method "reset_#{name}!"
|
|
319
|
+
remove_method "reset_#{name}_to_default!"
|
|
320
|
+
remove_method "#{name}_was"
|
|
321
|
+
remove_method "#{name}_will_change!"
|
|
322
|
+
remove_method "#{name}_before_type_cast"
|
|
335
323
|
end
|
|
336
324
|
end
|
|
337
325
|
|
|
@@ -349,8 +337,6 @@ module Mongoid
|
|
|
349
337
|
#
|
|
350
338
|
# @param [ String, Symbol ] field_name The name of the field.
|
|
351
339
|
# @param [ Object ] value The value to be validated.
|
|
352
|
-
#
|
|
353
|
-
# @since 3.0.10
|
|
354
340
|
def validate_attribute_value(field_name, value)
|
|
355
341
|
return if value.nil?
|
|
356
342
|
field = fields[field_name]
|
data/lib/mongoid/cacheable.rb
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
module Mongoid
|
|
3
4
|
|
|
4
|
-
# Encapsulates
|
|
5
|
-
#
|
|
6
|
-
# @since 6.0.0
|
|
5
|
+
# Encapsulates behavior around caching.
|
|
7
6
|
module Cacheable
|
|
8
7
|
extend ActiveSupport::Concern
|
|
9
8
|
|
|
@@ -19,18 +18,16 @@ module Mongoid
|
|
|
19
18
|
# If not - will append /id-updated_at.to_s(cache_timestamp_format)
|
|
20
19
|
# Without updated_at - will append /id
|
|
21
20
|
#
|
|
22
|
-
# This is usually called
|
|
21
|
+
# This is usually called inside a cache() block
|
|
23
22
|
#
|
|
24
23
|
# @example Returns the cache key
|
|
25
24
|
# document.cache_key
|
|
26
25
|
#
|
|
27
26
|
# @return [ String ] the string with or without updated_at
|
|
28
|
-
#
|
|
29
|
-
# @since 2.4.0
|
|
30
27
|
def cache_key
|
|
31
28
|
return "#{model_key}/new" if new_record?
|
|
32
|
-
return "#{model_key}/#{
|
|
33
|
-
"#{model_key}/#{
|
|
29
|
+
return "#{model_key}/#{_id}-#{updated_at.utc.to_s(cache_timestamp_format)}" if do_or_do_not(:updated_at)
|
|
30
|
+
"#{model_key}/#{_id}"
|
|
34
31
|
end
|
|
35
32
|
end
|
|
36
33
|
end
|
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
|
|
@@ -25,20 +22,15 @@ module Mongoid
|
|
|
25
22
|
# model.changed?
|
|
26
23
|
#
|
|
27
24
|
# @return [ true, false ] If the document is changed.
|
|
28
|
-
#
|
|
29
|
-
# @since 2.4.0
|
|
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
33
|
# @return [ true, false ] If any children have changed.
|
|
40
|
-
#
|
|
41
|
-
# @since 2.4.1
|
|
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|
|
|
@@ -79,8 +67,6 @@ module Mongoid
|
|
|
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
|
|
85
71
|
@previous_changes = changes
|
|
86
72
|
Atomic::UPDATES.each do |update|
|
|
@@ -93,10 +79,8 @@ module Mongoid
|
|
|
93
79
|
#
|
|
94
80
|
# @example Handle post persistence.
|
|
95
81
|
# document.post_persist
|
|
96
|
-
#
|
|
97
|
-
# @since 3.0.0
|
|
98
82
|
def post_persist
|
|
99
|
-
|
|
83
|
+
reset_persisted_descendants
|
|
100
84
|
move_changes
|
|
101
85
|
end
|
|
102
86
|
|
|
@@ -106,21 +90,17 @@ module Mongoid
|
|
|
106
90
|
# model.previous_changes
|
|
107
91
|
#
|
|
108
92
|
# @return [ Hash<String, Array<Object, Object> ] The previous changes.
|
|
109
|
-
#
|
|
110
|
-
# @since 2.4.0
|
|
111
93
|
def previous_changes
|
|
112
94
|
@previous_changes ||= {}
|
|
113
95
|
end
|
|
114
96
|
|
|
115
97
|
# Remove a change from the dirty attributes hash. Used by the single field
|
|
116
|
-
# atomic
|
|
98
|
+
# atomic updaters.
|
|
117
99
|
#
|
|
118
100
|
# @example Remove a flagged change.
|
|
119
101
|
# model.remove_change(:field)
|
|
120
102
|
#
|
|
121
103
|
# @param [ Symbol, String ] name The name of the field.
|
|
122
|
-
#
|
|
123
|
-
# @since 2.1.0
|
|
124
104
|
def remove_change(name)
|
|
125
105
|
changed_attributes.delete(name.to_s)
|
|
126
106
|
end
|
|
@@ -134,8 +114,6 @@ module Mongoid
|
|
|
134
114
|
# person.setters # returns { "title" => "Madam" }
|
|
135
115
|
#
|
|
136
116
|
# @return [ Hash ] A +Hash+ of atomic setters.
|
|
137
|
-
#
|
|
138
|
-
# @since 2.0.0
|
|
139
117
|
def setters
|
|
140
118
|
mods = {}
|
|
141
119
|
changes.each_pair do |name, changes|
|
|
@@ -163,8 +141,6 @@ module Mongoid
|
|
|
163
141
|
# @param [ String ] attr The name of the attribute.
|
|
164
142
|
#
|
|
165
143
|
# @return [ Array<Object> ] The old and new values.
|
|
166
|
-
#
|
|
167
|
-
# @since 2.1.0
|
|
168
144
|
def attribute_change(attr)
|
|
169
145
|
attr = database_field_name(attr)
|
|
170
146
|
[changed_attributes[attr], attributes[attr]] if attribute_changed?(attr)
|
|
@@ -178,8 +154,6 @@ module Mongoid
|
|
|
178
154
|
# @param [ String ] attr The name of the attribute.
|
|
179
155
|
#
|
|
180
156
|
# @return [ true, false ] Whether the attribute has changed.
|
|
181
|
-
#
|
|
182
|
-
# @since 2.1.6
|
|
183
157
|
def attribute_changed?(attr)
|
|
184
158
|
attr = database_field_name(attr)
|
|
185
159
|
return false unless changed_attributes.key?(attr)
|
|
@@ -194,8 +168,6 @@ module Mongoid
|
|
|
194
168
|
# @param [ String ] attr The name of the attribute.
|
|
195
169
|
#
|
|
196
170
|
# @return [ true, false ] If the attribute differs.
|
|
197
|
-
#
|
|
198
|
-
# @since 3.0.0
|
|
199
171
|
def attribute_changed_from_default?(attr)
|
|
200
172
|
field = fields[attr]
|
|
201
173
|
return false unless field
|
|
@@ -208,8 +180,6 @@ module Mongoid
|
|
|
208
180
|
# model.attribute_was("name")
|
|
209
181
|
#
|
|
210
182
|
# @param [ String ] attr The attribute name.
|
|
211
|
-
#
|
|
212
|
-
# @since 2.4.0
|
|
213
183
|
def attribute_was(attr)
|
|
214
184
|
attr = database_field_name(attr)
|
|
215
185
|
attribute_changed?(attr) ? changed_attributes[attr] : attributes[attr]
|
|
@@ -223,8 +193,6 @@ module Mongoid
|
|
|
223
193
|
# @param [ String ] attr The name of the attribute.
|
|
224
194
|
#
|
|
225
195
|
# @return [ Object ] The old value.
|
|
226
|
-
#
|
|
227
|
-
# @since 2.3.0
|
|
228
196
|
def attribute_will_change!(attr)
|
|
229
197
|
unless changed_attributes.key?(attr)
|
|
230
198
|
changed_attributes[attr] = read_raw_attribute(attr).__deep_copy__
|
|
@@ -239,8 +207,6 @@ module Mongoid
|
|
|
239
207
|
# @param [ String ] attr The name of the attribute.
|
|
240
208
|
#
|
|
241
209
|
# @return [ Object ] The old value.
|
|
242
|
-
#
|
|
243
|
-
# @since 2.4.0
|
|
244
210
|
def reset_attribute!(attr)
|
|
245
211
|
attr = database_field_name(attr)
|
|
246
212
|
attributes[attr] = changed_attributes.delete(attr) if attribute_changed?(attr)
|
|
@@ -268,8 +234,6 @@ module Mongoid
|
|
|
268
234
|
# @param [ String ] meth The name of the accessor.
|
|
269
235
|
#
|
|
270
236
|
# @return [ Module ] The fields module.
|
|
271
|
-
#
|
|
272
|
-
# @since 2.4.0
|
|
273
237
|
def create_dirty_methods(name, meth)
|
|
274
238
|
create_dirty_change_accessor(name, meth)
|
|
275
239
|
create_dirty_change_check(name, meth)
|
|
@@ -289,8 +253,6 @@ module Mongoid
|
|
|
289
253
|
#
|
|
290
254
|
# @param [ String ] name The attribute name.
|
|
291
255
|
# @param [ String ] meth The name of the accessor.
|
|
292
|
-
#
|
|
293
|
-
# @since 3.0.0
|
|
294
256
|
def create_dirty_change_accessor(name, meth)
|
|
295
257
|
generated_methods.module_eval do
|
|
296
258
|
re_define_method("#{meth}_change") do
|
|
@@ -306,8 +268,6 @@ module Mongoid
|
|
|
306
268
|
#
|
|
307
269
|
# @param [ String ] name The attribute name.
|
|
308
270
|
# @param [ String ] meth The name of the accessor.
|
|
309
|
-
#
|
|
310
|
-
# @since 3.0.0
|
|
311
271
|
def create_dirty_change_check(name, meth)
|
|
312
272
|
generated_methods.module_eval do
|
|
313
273
|
re_define_method("#{meth}_changed?") do
|
|
@@ -323,8 +283,6 @@ module Mongoid
|
|
|
323
283
|
#
|
|
324
284
|
# @param [ String ] name The attribute name.
|
|
325
285
|
# @param [ String ] meth The name of the accessor.
|
|
326
|
-
#
|
|
327
|
-
# @since 3.0.0
|
|
328
286
|
def create_dirty_default_change_check(name, meth)
|
|
329
287
|
generated_methods.module_eval do
|
|
330
288
|
re_define_method("#{meth}_changed_from_default?") do
|
|
@@ -340,8 +298,6 @@ module Mongoid
|
|
|
340
298
|
#
|
|
341
299
|
# @param [ String ] name The attribute name.
|
|
342
300
|
# @param [ String ] meth The name of the accessor.
|
|
343
|
-
#
|
|
344
|
-
# @since 3.0.0
|
|
345
301
|
def create_dirty_previous_value_accessor(name, meth)
|
|
346
302
|
generated_methods.module_eval do
|
|
347
303
|
re_define_method("#{meth}_was") do
|
|
@@ -357,8 +313,6 @@ module Mongoid
|
|
|
357
313
|
#
|
|
358
314
|
# @param [ String ] name The attribute name.
|
|
359
315
|
# @param [ String ] meth The name of the accessor.
|
|
360
|
-
#
|
|
361
|
-
# @since 3.0.0
|
|
362
316
|
def create_dirty_change_flag(name, meth)
|
|
363
317
|
generated_methods.module_eval do
|
|
364
318
|
re_define_method("#{meth}_will_change!") do
|
|
@@ -374,8 +328,6 @@ module Mongoid
|
|
|
374
328
|
#
|
|
375
329
|
# @param [ String ] name The attribute name.
|
|
376
330
|
# @param [ String ] meth The name of the accessor.
|
|
377
|
-
#
|
|
378
|
-
# @since 3.0.0
|
|
379
331
|
def create_dirty_reset(name, meth)
|
|
380
332
|
generated_methods.module_eval do
|
|
381
333
|
re_define_method("reset_#{meth}!") do
|
|
@@ -391,8 +343,6 @@ module Mongoid
|
|
|
391
343
|
#
|
|
392
344
|
# @param [ String ] name The attribute name.
|
|
393
345
|
# @param [ String ] meth The name of the accessor.
|
|
394
|
-
#
|
|
395
|
-
# @since 3.0.0
|
|
396
346
|
def create_dirty_reset_to_default(name, meth)
|
|
397
347
|
generated_methods.module_eval do
|
|
398
348
|
re_define_method("reset_#{meth}_to_default!") do
|
|
@@ -408,8 +358,6 @@ module Mongoid
|
|
|
408
358
|
#
|
|
409
359
|
# @param [ String ] name The attribute name.
|
|
410
360
|
# @param [ String ] meth The name of the accessor.
|
|
411
|
-
#
|
|
412
|
-
# @since 6.0.0
|
|
413
361
|
def create_dirty_previously_changed?(name, meth)
|
|
414
362
|
generated_methods.module_eval do
|
|
415
363
|
re_define_method("#{meth}_previously_changed?") do
|
|
@@ -425,8 +373,6 @@ module Mongoid
|
|
|
425
373
|
#
|
|
426
374
|
# @param [ String ] name The attribute name.
|
|
427
375
|
# @param [ String ] meth The name of the accessor.
|
|
428
|
-
#
|
|
429
|
-
# @since 6.0.0
|
|
430
376
|
def create_dirty_previous_change(name, meth)
|
|
431
377
|
generated_methods.module_eval do
|
|
432
378
|
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
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
|
|
@@ -81,17 +80,15 @@ module Mongoid
|
|
|
81
80
|
# Change the persistence context for this class during the block.
|
|
82
81
|
#
|
|
83
82
|
# @example Save the current document to a different collection.
|
|
84
|
-
# Model.with(collection: "
|
|
83
|
+
# Model.with(collection: "bands") do |m|
|
|
85
84
|
# m.create
|
|
86
85
|
# end
|
|
87
86
|
#
|
|
88
87
|
# @param [ Hash ] options The storage options.
|
|
89
88
|
#
|
|
90
|
-
# @option options [ String
|
|
91
|
-
# @option options [ String
|
|
92
|
-
# @option options [ String
|
|
93
|
-
#
|
|
94
|
-
# @since 6.0.0
|
|
89
|
+
# @option options [ String | Symbol ] :collection The collection name.
|
|
90
|
+
# @option options [ String | Symbol ] :database The database name.
|
|
91
|
+
# @option options [ String | Symbol ] :client The client name.
|
|
95
92
|
def with(options, &block)
|
|
96
93
|
original_context = PersistenceContext.get(self)
|
|
97
94
|
original_cluster = persistence_context.cluster
|