mongoid 7.0.13 → 8.0.8
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 +43 -0
- data/lib/config/locales/en.yml +178 -95
- data/lib/mongoid/association/accessors.rb +175 -83
- data/lib/mongoid/association/bindable.rb +57 -28
- data/lib/mongoid/association/builders.rb +8 -14
- 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 +67 -53
- 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 +7 -4
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +14 -24
- 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 +8 -5
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +143 -122
- data/lib/mongoid/association/embedded/embeds_many.rb +8 -36
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +4 -8
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +26 -9
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +63 -29
- data/lib/mongoid/association/embedded/embeds_one.rb +9 -33
- data/lib/mongoid/association/embedded.rb +2 -0
- data/lib/mongoid/association/macros.rb +71 -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 +19 -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 +37 -38
- data/lib/mongoid/association/referenced/auto_save.rb +9 -14
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +5 -9
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +11 -9
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +40 -3
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +19 -31
- data/lib/mongoid/association/referenced/belongs_to.rb +16 -38
- data/lib/mongoid/association/referenced/counter_cache.rb +14 -25
- data/lib/mongoid/association/referenced/eager.rb +41 -40
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +12 -11
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +105 -68
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +29 -46
- data/lib/mongoid/association/referenced/has_many/binding.rb +3 -6
- data/lib/mongoid/association/referenced/has_many/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +440 -456
- data/lib/mongoid/association/referenced/has_many/proxy.rb +101 -124
- data/lib/mongoid/association/referenced/has_many.rb +21 -45
- data/lib/mongoid/association/referenced/has_one/binding.rb +4 -9
- data/lib/mongoid/association/referenced/has_one/buildable.rb +20 -6
- data/lib/mongoid/association/referenced/has_one/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +16 -29
- data/lib/mongoid/association/referenced/has_one/proxy.rb +25 -30
- data/lib/mongoid/association/referenced/has_one.rb +16 -36
- data/lib/mongoid/association/referenced/syncable.rb +11 -26
- data/lib/mongoid/association/referenced.rb +2 -0
- data/lib/mongoid/association/reflections.rb +7 -6
- data/lib/mongoid/association/relatable.rb +62 -84
- data/lib/mongoid/association.rb +13 -27
- data/lib/mongoid/atomic/modifiers.rb +29 -53
- data/lib/mongoid/atomic/paths/embedded/many.rb +23 -7
- data/lib/mongoid/atomic/paths/embedded/one.rb +4 -7
- data/lib/mongoid/atomic/paths/embedded.rb +2 -3
- data/lib/mongoid/atomic/paths/root.rb +4 -7
- data/lib/mongoid/atomic/paths.rb +2 -1
- data/lib/mongoid/atomic.rb +45 -51
- data/lib/mongoid/attributes/dynamic.rb +6 -21
- data/lib/mongoid/attributes/nested.rb +11 -14
- data/lib/mongoid/attributes/processing.rb +46 -30
- data/lib/mongoid/attributes/projector.rb +119 -0
- data/lib/mongoid/attributes/readonly.rb +5 -8
- data/lib/mongoid/attributes.rb +80 -98
- data/lib/mongoid/cacheable.rb +7 -10
- data/lib/mongoid/changeable.rb +49 -70
- data/lib/mongoid/clients/factory.rb +42 -17
- data/lib/mongoid/clients/options.rb +15 -14
- data/lib/mongoid/clients/sessions.rb +4 -20
- data/lib/mongoid/clients/storage_options.rb +7 -12
- data/lib/mongoid/clients/validators/storage.rb +5 -12
- 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 +30 -5
- data/lib/mongoid/config/options.rb +23 -23
- data/lib/mongoid/config/validators/client.rb +8 -23
- data/lib/mongoid/config/validators/option.rb +2 -3
- data/lib/mongoid/config/validators.rb +2 -1
- data/lib/mongoid/config.rb +164 -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 +187 -81
- data/lib/mongoid/contextual/mongo.rb +360 -239
- data/lib/mongoid/contextual/none.rb +109 -31
- data/lib/mongoid/contextual/queryable.rb +3 -4
- data/lib/mongoid/contextual.rb +9 -11
- data/lib/mongoid/copyable.rb +42 -17
- data/lib/mongoid/criteria/findable.rb +19 -19
- data/lib/mongoid/criteria/includable.rb +30 -33
- data/lib/mongoid/criteria/inspectable.rb +2 -3
- data/lib/mongoid/criteria/marshalable.rb +12 -7
- data/lib/mongoid/criteria/modifiable.rb +2 -19
- data/lib/mongoid/criteria/options.rb +2 -3
- data/lib/mongoid/criteria/permission.rb +3 -2
- data/lib/mongoid/criteria/queryable/aggregable.rb +4 -15
- data/lib/mongoid/criteria/queryable/expandable.rb +68 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +7 -41
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +28 -8
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +5 -6
- data/lib/mongoid/criteria/queryable/extensions/date.rb +9 -9
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +11 -12
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +4 -41
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +3 -14
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +4 -21
- data/lib/mongoid/criteria/queryable/extensions/object.rb +6 -30
- data/lib/mongoid/criteria/queryable/extensions/range.rb +49 -17
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +9 -16
- 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 +9 -9
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +9 -9
- data/lib/mongoid/criteria/queryable/extensions.rb +1 -4
- data/lib/mongoid/criteria/queryable/key.rb +39 -24
- data/lib/mongoid/criteria/queryable/macroable.rb +3 -4
- data/lib/mongoid/criteria/queryable/mergeable.rb +200 -40
- data/lib/mongoid/criteria/queryable/optional.rb +10 -59
- 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 +417 -171
- data/lib/mongoid/criteria/queryable/selector.rb +127 -30
- 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 +95 -107
- data/lib/mongoid/deprecable.rb +37 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +148 -97
- 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/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/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 +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_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 +2 -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 +14 -3
- 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 +87 -45
- 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 +25 -50
- data/lib/mongoid/extensions/object_id.rb +2 -7
- data/lib/mongoid/extensions/range.rb +42 -20
- data/lib/mongoid/extensions/regexp.rb +13 -7
- data/lib/mongoid/extensions/set.rb +13 -11
- data/lib/mongoid/extensions/string.rb +30 -61
- data/lib/mongoid/extensions/symbol.rb +6 -22
- data/lib/mongoid/extensions/time.rb +37 -23
- 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 +11 -15
- data/lib/mongoid/fields/standard.rb +13 -43
- data/lib/mongoid/fields/validators/macro.rb +32 -20
- data/lib/mongoid/fields/validators.rb +2 -1
- data/lib/mongoid/fields.rb +328 -85
- data/lib/mongoid/findable.rb +90 -33
- 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 +191 -41
- data/lib/mongoid/loggable.rb +13 -16
- data/lib/mongoid/matchable.rb +3 -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 +22 -30
- data/lib/mongoid/persistable/deletable.rb +6 -22
- 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 +3 -8
- data/lib/mongoid/persistable/renamable.rb +10 -8
- data/lib/mongoid/persistable/savable.rb +5 -10
- data/lib/mongoid/persistable/settable.rb +3 -6
- data/lib/mongoid/persistable/unsettable.rb +9 -9
- data/lib/mongoid/persistable/updatable.rb +50 -31
- data/lib/mongoid/persistable/upsertable.rb +5 -10
- data/lib/mongoid/persistable.rb +135 -40
- data/lib/mongoid/persistence_context.rb +85 -45
- data/lib/mongoid/positional.rb +2 -5
- data/lib/mongoid/query_cache.rb +13 -280
- data/lib/mongoid/railtie.rb +3 -16
- data/lib/mongoid/railties/controller_runtime.rb +4 -2
- data/lib/mongoid/railties/database.rake +9 -0
- data/lib/mongoid/reloadable.rb +19 -22
- data/lib/mongoid/scopable.rb +34 -57
- data/lib/mongoid/selectable.rb +8 -18
- data/lib/mongoid/serializable.rb +33 -34
- data/lib/mongoid/shardable.rb +108 -21
- data/lib/mongoid/stateful.rb +38 -19
- data/lib/mongoid/stringified_symbol.rb +52 -0
- data/lib/mongoid/tasks/database.rake +12 -5
- data/lib/mongoid/tasks/database.rb +85 -7
- data/lib/mongoid/threaded/lifecycle.rb +7 -26
- data/lib/mongoid/threaded.rb +44 -67
- data/lib/mongoid/timestamps/created/short.rb +2 -1
- data/lib/mongoid/timestamps/created.rb +4 -3
- data/lib/mongoid/timestamps/short.rb +2 -1
- data/lib/mongoid/timestamps/timeless.rb +6 -9
- data/lib/mongoid/timestamps/updated/short.rb +2 -1
- data/lib/mongoid/timestamps/updated.rb +5 -6
- data/lib/mongoid/timestamps.rb +3 -2
- data/lib/mongoid/touchable.rb +54 -25
- data/lib/mongoid/traversable.rb +185 -61
- data/lib/mongoid/validatable/associated.rb +99 -22
- 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 +2 -9
- data/lib/mongoid/validatable/presence.rb +10 -15
- data/lib/mongoid/validatable/queryable.rb +2 -3
- data/lib/mongoid/validatable/uniqueness.rb +29 -41
- data/lib/mongoid/validatable.rb +22 -33
- data/lib/mongoid/version.rb +2 -2
- data/lib/mongoid/warnings.rb +28 -0
- data/lib/mongoid.rb +34 -15
- data/lib/rails/generators/mongoid/config/config_generator.rb +2 -1
- 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_generator.rb +2 -1
- data/lib/rails/mongoid.rb +4 -5
- data/spec/README.md +19 -4
- data/spec/config/mongoid.yml +17 -0
- data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
- data/spec/integration/app_spec.rb +31 -27
- data/spec/integration/associations/belongs_to_spec.rb +20 -0
- data/spec/integration/associations/embedded_dirty_spec.rb +57 -0
- data/spec/integration/associations/embedded_spec.rb +162 -55
- 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 +61 -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 +107 -1
- data/spec/integration/callbacks_spec.rb +262 -8
- 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 +359 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +125 -15
- data/spec/integration/discriminator_key_spec.rb +392 -0
- data/spec/integration/discriminator_value_spec.rb +206 -0
- data/spec/integration/document_spec.rb +30 -1
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +73 -0
- data/spec/integration/{matchable_spec.rb → matcher_examples_spec.rb} +130 -45
- 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 +18 -6
- 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 +84 -22
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +3 -1
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +114 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +687 -173
- data/spec/mongoid/association/embedded/embeds_many_models.rb +174 -1
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +63 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +71 -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 +23 -21
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +22 -0
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +28 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +31 -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 +242 -12
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +114 -58
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +57 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +26 -3
- 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 +418 -361
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +68 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +39 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +81 -4
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +3 -1
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +132 -0
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +40 -9
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +314 -133
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +848 -451
- data/spec/mongoid/association/referenced/has_many_models.rb +61 -1
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +48 -0
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +2 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +55 -9
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +34 -4
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +135 -27
- data/spec/mongoid/association/referenced/has_one_models.rb +65 -0
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +24 -1
- data/spec/mongoid/association/reflections_spec.rb +2 -0
- data/spec/mongoid/association/syncable_spec.rb +47 -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 +66 -26
- data/spec/mongoid/atomic_spec.rb +53 -6
- data/spec/mongoid/attributes/dynamic_spec.rb +0 -1
- 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 +683 -65
- data/spec/mongoid/cacheable_spec.rb +6 -4
- data/spec/mongoid/changeable_spec.rb +185 -43
- data/spec/mongoid/clients/factory_spec.rb +128 -28
- data/spec/mongoid/clients/options_spec.rb +45 -26
- data/spec/mongoid/clients/sessions_spec.rb +25 -66
- data/spec/mongoid/clients/transactions_spec.rb +54 -29
- data/spec/mongoid/clients_spec.rb +65 -8
- data/spec/mongoid/composable_spec.rb +2 -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 +377 -1
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +433 -153
- data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +122 -20
- data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
- data/spec/mongoid/contextual/atomic_spec.rb +205 -67
- data/spec/mongoid/contextual/geo_near_spec.rb +20 -18
- data/spec/mongoid/contextual/map_reduce_spec.rb +6 -18
- data/spec/mongoid/contextual/memory_spec.rb +1360 -91
- data/spec/mongoid/contextual/mongo_spec.rb +1871 -544
- data/spec/mongoid/contextual/none_spec.rb +39 -73
- data/spec/mongoid/copyable_spec.rb +657 -26
- data/spec/mongoid/copyable_spec_models.rb +30 -0
- data/spec/mongoid/criteria/findable_spec.rb +161 -228
- data/spec/mongoid/criteria/includable_spec.rb +1492 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
- data/spec/mongoid/criteria/inspectable_spec.rb +2 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +20 -1
- data/spec/mongoid/criteria/modifiable_spec.rb +43 -40
- data/spec/mongoid/criteria/options_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +61 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +9 -19
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +136 -26
- data/spec/mongoid/criteria/queryable/extensions/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 +13 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +46 -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 -15
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -8
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +239 -178
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +2 -59
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +2 -59
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +34 -16
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +13 -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 +18 -485
- 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 +1643 -286
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +1191 -2752
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +91 -4
- data/spec/mongoid/criteria/queryable/smash_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/storable_spec.rb +298 -0
- data/spec/mongoid/criteria/scopable_spec.rb +129 -0
- data/spec/mongoid/criteria/translator_spec.rb +132 -0
- data/spec/mongoid/criteria_projection_spec.rb +409 -0
- data/spec/mongoid/criteria_spec.rb +1322 -1723
- data/spec/mongoid/document_fields_spec.rb +179 -5
- 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 +153 -87
- data/spec/mongoid/equality_spec.rb +144 -41
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +5 -3
- data/spec/mongoid/errors/callback_spec.rb +2 -0
- data/spec/mongoid/errors/delete_restriction_spec.rb +4 -2
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +2 -0
- data/spec/mongoid/errors/document_not_found_spec.rb +78 -0
- data/spec/mongoid/errors/invalid_collection_spec.rb +2 -0
- data/spec/mongoid/errors/{eager_load_spec.rb → invalid_config_file_spec.rb} +7 -5
- data/spec/mongoid/errors/invalid_config_option_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_field_option_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_field_spec.rb +3 -1
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_includes_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_index_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_options_spec.rb +4 -2
- data/spec/mongoid/errors/invalid_path_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_relation_spec.rb +4 -2
- data/spec/mongoid/errors/invalid_scope_spec.rb +3 -1
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_time_spec.rb +2 -0
- data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +2 -0
- data/spec/mongoid/errors/mixed_relations_spec.rb +2 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +24 -8
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_config_spec.rb +4 -2
- data/spec/mongoid/errors/no_client_database_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_hosts_spec.rb +5 -3
- data/spec/mongoid/errors/no_clients_config_spec.rb +2 -0
- data/spec/mongoid/errors/no_environment_spec.rb +5 -3
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +2 -0
- data/spec/mongoid/errors/no_metadata_spec.rb +4 -2
- data/spec/mongoid/errors/no_parent_spec.rb +3 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +2 -0
- data/spec/mongoid/errors/readonly_document_spec.rb +2 -0
- data/spec/mongoid/errors/scope_overwrite_spec.rb +2 -0
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -1
- data/spec/mongoid/errors/unknown_attribute_spec.rb +4 -2
- data/spec/mongoid/errors/unsaved_document_spec.rb +3 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +2 -0
- data/spec/mongoid/errors/validations_spec.rb +2 -0
- data/spec/mongoid/extensions/array_spec.rb +41 -45
- data/spec/mongoid/extensions/big_decimal_spec.rb +714 -212
- data/spec/mongoid/extensions/binary_spec.rb +46 -9
- data/spec/mongoid/extensions/boolean_spec.rb +70 -82
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +339 -0
- data/spec/mongoid/extensions/date_spec.rb +58 -140
- data/spec/mongoid/extensions/date_time_spec.rb +32 -69
- data/spec/mongoid/extensions/decimal128_spec.rb +2 -0
- data/spec/mongoid/extensions/false_class_spec.rb +3 -1
- data/spec/mongoid/extensions/float_spec.rb +66 -73
- data/spec/mongoid/extensions/hash_spec.rb +138 -3
- data/spec/mongoid/extensions/integer_spec.rb +61 -63
- data/spec/mongoid/extensions/module_spec.rb +2 -0
- data/spec/mongoid/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/extensions/object_id_spec.rb +2 -0
- data/spec/mongoid/extensions/object_spec.rb +13 -24
- data/spec/mongoid/extensions/range_spec.rb +257 -54
- data/spec/mongoid/extensions/regexp_spec.rb +60 -33
- data/spec/mongoid/extensions/set_spec.rb +108 -0
- data/spec/mongoid/extensions/string_spec.rb +111 -50
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
- data/spec/mongoid/extensions/symbol_spec.rb +20 -25
- data/spec/mongoid/extensions/time_spec.rb +663 -66
- data/spec/mongoid/extensions/time_with_zone_spec.rb +50 -31
- 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 +43 -16
- data/spec/mongoid/fields/standard_spec.rb +2 -0
- data/spec/mongoid/fields_spec.rb +776 -80
- data/spec/mongoid/findable_spec.rb +133 -34
- data/spec/mongoid/indexable/specification_spec.rb +4 -2
- data/spec/mongoid/indexable_spec.rb +65 -18
- data/spec/mongoid/inspectable_spec.rb +39 -2
- data/spec/mongoid/interceptable_spec.rb +955 -103
- 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 +274 -12
- data/spec/mongoid/persistable/destroyable_spec.rb +202 -12
- 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 +24 -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 +18 -2
- data/spec/mongoid/persistable_spec.rb +85 -9
- data/spec/mongoid/persistence_context_spec.rb +52 -1
- 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 +339 -87
- data/spec/mongoid/relations/proxy_spec.rb +8 -6
- data/spec/mongoid/reloadable_spec.rb +357 -22
- data/spec/mongoid/scopable_spec.rb +121 -37
- data/spec/mongoid/selectable_spec.rb +8 -6
- data/spec/mongoid/serializable_spec.rb +160 -29
- data/spec/mongoid/shardable_models.rb +75 -0
- data/spec/mongoid/shardable_spec.rb +239 -34
- data/spec/mongoid/stateful_spec.rb +31 -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 +398 -6
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +296 -33
- data/spec/mongoid/touchable_spec_models.rb +57 -0
- data/spec/mongoid/traversable_spec.rb +1160 -1
- data/spec/mongoid/validatable/associated_spec.rb +15 -30
- 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 +128 -98
- data/spec/mongoid/validatable_spec.rb +5 -3
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +3 -1
- data/spec/rails/controller_extension/controller_runtime_spec.rb +5 -3
- data/spec/rails/mongoid_spec.rb +8 -18
- data/spec/shared/bin/s3-copy +45 -0
- data/spec/shared/bin/s3-upload +69 -0
- data/spec/shared/lib/mrss/cluster_config.rb +14 -4
- data/spec/shared/lib/mrss/constraints.rb +51 -27
- data/spec/shared/lib/mrss/docker_runner.rb +37 -4
- 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 +48 -1
- data/spec/shared/lib/mrss/server_version_registry.rb +16 -18
- 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 +18 -1
- data/spec/shared/lib/mrss/utils.rb +28 -6
- data/spec/shared/share/Dockerfile.erb +156 -66
- 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 +2 -1
- data/spec/shared/shlib/server.sh +171 -45
- data/spec/shared/shlib/set_env.sh +47 -6
- data/spec/spec_helper.rb +38 -36
- data/spec/support/authorization.rb +2 -0
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +39 -8
- data/spec/support/expectations.rb +5 -1
- data/spec/support/helpers.rb +11 -0
- data/spec/support/macros.rb +77 -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/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 +9 -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/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/crate.rb +12 -0
- data/spec/{app → support}/models/customer.rb +0 -1
- data/spec/{app → support}/models/customer_address.rb +0 -1
- 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/support/models/fanatic.rb +8 -0
- data/spec/{app → support}/models/favorite.rb +2 -0
- data/spec/{app → support}/models/filesystem.rb +2 -0
- data/spec/{app → support}/models/fire_hydrant.rb +2 -0
- data/spec/{app → support}/models/firefox.rb +2 -0
- data/spec/{app → support}/models/fish.rb +2 -0
- data/spec/{app → support}/models/folder.rb +2 -0
- data/spec/{app → support}/models/folder_item.rb +2 -0
- data/spec/{app → support}/models/fruits.rb +2 -0
- data/spec/{app → support}/models/game.rb +2 -0
- data/spec/{app → support}/models/ghost.rb +2 -0
- data/spec/support/models/guitar.rb +4 -0
- data/spec/support/models/hole.rb +12 -0
- data/spec/{app → support}/models/home.rb +2 -0
- data/spec/{app → support}/models/house.rb +2 -0
- data/spec/{app → support}/models/html_writer.rb +2 -0
- data/spec/{app → support}/models/id_key.rb +2 -0
- data/spec/support/models/idnodef.rb +7 -0
- data/spec/{app → support}/models/image.rb +2 -0
- data/spec/{app → support}/models/implant.rb +11 -0
- data/spec/support/models/instrument.rb +8 -0
- data/spec/{app → support}/models/item.rb +3 -1
- data/spec/{app → support}/models/jar.rb +2 -0
- data/spec/{app → support}/models/kaleidoscope.rb +2 -0
- data/spec/{app → support}/models/kangaroo.rb +3 -1
- data/spec/{app → support}/models/label.rb +6 -1
- data/spec/{app → support}/models/language.rb +2 -0
- data/spec/{app → support}/models/lat_lng.rb +2 -0
- data/spec/{app → support}/models/league.rb +2 -0
- data/spec/support/models/learner.rb +4 -0
- data/spec/{app → support}/models/line_item.rb +2 -0
- data/spec/{app → support}/models/location.rb +2 -0
- data/spec/{app → support}/models/login.rb +2 -0
- data/spec/{app → support}/models/manufacturer.rb +2 -0
- data/spec/{app → support}/models/meat.rb +2 -0
- data/spec/{app → support}/models/membership.rb +3 -0
- data/spec/{app → support}/models/message.rb +2 -0
- data/spec/{app → support}/models/minim.rb +0 -1
- data/spec/{app → support}/models/mixed_drink.rb +2 -0
- data/spec/support/models/mop.rb +24 -0
- data/spec/{app → support}/models/movie.rb +2 -0
- data/spec/support/models/my_hash.rb +4 -0
- data/spec/{app → support}/models/name.rb +12 -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 +23 -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 +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/support/models/purse.rb +9 -0
- data/spec/{app → support}/models/question.rb +2 -0
- data/spec/{app → support}/models/quiz.rb +2 -0
- data/spec/{app → support}/models/rating.rb +2 -0
- data/spec/{app → support}/models/record.rb +2 -0
- data/spec/{app → support}/models/registry.rb +3 -0
- data/spec/{app → support}/models/role.rb +2 -0
- data/spec/{app → support}/models/root_category.rb +2 -0
- data/spec/{app → support}/models/sandwich.rb +2 -0
- data/spec/{app → support}/models/scheduler.rb +2 -0
- data/spec/support/models/school.rb +14 -0
- data/spec/support/models/scribe.rb +7 -0
- data/spec/support/models/sealer.rb +7 -0
- data/spec/support/models/seat.rb +24 -0
- data/spec/{app → support}/models/seo.rb +2 -0
- data/spec/support/models/series.rb +7 -0
- data/spec/{app → support}/models/server.rb +2 -0
- data/spec/{app → support}/models/service.rb +2 -0
- data/spec/{app → support}/models/shape.rb +4 -2
- data/spec/{app → support}/models/shelf.rb +2 -0
- data/spec/support/models/shield.rb +18 -0
- data/spec/{app → support}/models/shipment_address.rb +2 -0
- data/spec/{app → support}/models/shipping_container.rb +2 -0
- data/spec/{app → support}/models/shipping_pack.rb +2 -0
- data/spec/support/models/shirt.rb +11 -0
- data/spec/{app → support}/models/shop.rb +2 -0
- data/spec/{app → support}/models/short_agent.rb +2 -0
- data/spec/{app → support}/models/short_quiz.rb +2 -0
- data/spec/{app → support}/models/simple.rb +2 -0
- data/spec/{app → support}/models/slave.rb +2 -0
- data/spec/{app → support}/models/song.rb +2 -0
- data/spec/{app → support}/models/sound.rb +2 -0
- data/spec/support/models/spacer.rb +7 -0
- data/spec/{app → support}/models/square.rb +2 -0
- data/spec/{app → support}/models/staff.rb +2 -0
- data/spec/{app → support}/models/store_as_dup_test1.rb +2 -0
- data/spec/{app → support}/models/store_as_dup_test2.rb +2 -0
- data/spec/{app → support}/models/strategy.rb +2 -0
- data/spec/support/models/student.rb +14 -0
- data/spec/{app → support}/models/sub_item.rb +2 -0
- data/spec/{app → support}/models/subscription.rb +2 -0
- data/spec/{app → support}/models/survey.rb +2 -0
- data/spec/{app → support}/models/symptom.rb +2 -0
- data/spec/support/models/system_role.rb +7 -0
- data/spec/{app → support}/models/tag.rb +2 -0
- data/spec/{app → support}/models/target.rb +2 -0
- data/spec/{app → support}/models/template.rb +2 -0
- data/spec/{app → support}/models/thing.rb +2 -0
- data/spec/support/models/threadlocker.rb +7 -0
- data/spec/{app → support}/models/title.rb +2 -0
- data/spec/{app → support}/models/tool.rb +4 -2
- data/spec/{app → support}/models/topping.rb +2 -0
- data/spec/support/models/toy.rb +9 -0
- data/spec/{app → support}/models/track.rb +2 -0
- data/spec/{app → support}/models/translation.rb +2 -0
- data/spec/{app → support}/models/tree.rb +2 -0
- data/spec/support/models/truck.rb +7 -0
- data/spec/{app → support}/models/user.rb +2 -0
- data/spec/{app → support}/models/user_account.rb +2 -0
- data/spec/{app → support}/models/validation_callback.rb +2 -0
- data/spec/support/models/vehicle.rb +18 -0
- data/spec/{app → support}/models/version.rb +2 -0
- data/spec/{app → support}/models/vertex.rb +3 -1
- data/spec/{app → support}/models/vet_visit.rb +2 -0
- data/spec/{app → support}/models/video.rb +2 -0
- data/spec/support/models/video_game.rb +3 -0
- data/spec/support/models/washer.rb +7 -0
- data/spec/support/models/weapon.rb +25 -0
- data/spec/{app → support}/models/wiki_page.rb +3 -0
- data/spec/{app → support}/models/word.rb +2 -0
- data/spec/{app → support}/models/word_origin.rb +2 -0
- data/spec/{app → support}/models/writer.rb +4 -2
- data/spec/support/schema_maps/schema_map_aws.json +17 -0
- data/spec/support/schema_maps/schema_map_aws_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_azure.json +17 -0
- data/spec/support/schema_maps/schema_map_azure_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_gcp.json +17 -0
- data/spec/support/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_kmip.json +17 -0
- data/spec/support/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_local.json +18 -0
- data/spec/support/schema_maps/schema_map_local_key_alt_names.json +12 -0
- data/spec/support/shared/time.rb +53 -0
- data/spec/support/spec_config.rb +12 -3
- data.tar.gz.sig +0 -0
- metadata +1162 -764
- 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 -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/augmentation.rb +0 -11
- data/spec/app/models/bed.rb +0 -1
- data/spec/app/models/car.rb +0 -1
- data/spec/app/models/circus.rb +0 -7
- data/spec/app/models/eraser.rb +0 -1
- data/spec/app/models/learner.rb +0 -2
- data/spec/app/models/my_hash.rb +0 -2
- data/spec/app/models/other_owner_object.rb +0 -2
- data/spec/app/models/passport.rb +0 -5
- data/spec/app/models/pencil.rb +0 -1
- data/spec/app/models/powerup.rb +0 -11
- data/spec/app/models/profile.rb +0 -5
- data/spec/app/models/series.rb +0 -4
- data/spec/app/models/truck.rb +0 -3
- data/spec/app/models/vehicle.rb +0 -11
- data/spec/app/models/video_game.rb +0 -1
- data/spec/app/models/weapon.rb +0 -11
- data/spec/mongoid/criteria/queryable/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/cluster_config.rb +0 -158
- data/spec/support/session_registry.rb +0 -50
- /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
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'mongoid/association/referenced/has_one/binding'
|
|
2
4
|
require 'mongoid/association/referenced/has_one/buildable'
|
|
3
5
|
require 'mongoid/association/referenced/has_one/proxy'
|
|
@@ -8,8 +10,6 @@ module Mongoid
|
|
|
8
10
|
module Referenced
|
|
9
11
|
|
|
10
12
|
# The has_one association.
|
|
11
|
-
#
|
|
12
|
-
# @since 7.0
|
|
13
13
|
class HasOne
|
|
14
14
|
include Relatable
|
|
15
15
|
include Buildable
|
|
@@ -18,37 +18,30 @@ module Mongoid
|
|
|
18
18
|
# common ones.
|
|
19
19
|
#
|
|
20
20
|
# @return [ Array<Symbol> ] The extra valid options.
|
|
21
|
-
#
|
|
22
|
-
# @since 7.0
|
|
23
21
|
ASSOCIATION_OPTIONS = [
|
|
24
22
|
:as,
|
|
25
23
|
:autobuild,
|
|
26
24
|
:autosave,
|
|
27
25
|
:dependent,
|
|
28
26
|
:foreign_key,
|
|
29
|
-
:primary_key
|
|
27
|
+
:primary_key,
|
|
28
|
+
:scope,
|
|
30
29
|
].freeze
|
|
31
30
|
|
|
32
31
|
# The complete list of valid options for this association, including
|
|
33
32
|
# the shared ones.
|
|
34
33
|
#
|
|
35
34
|
# @return [ Array<Symbol> ] The valid options.
|
|
36
|
-
#
|
|
37
|
-
# @since 7.0
|
|
38
35
|
VALID_OPTIONS = (ASSOCIATION_OPTIONS + SHARED_OPTIONS).freeze
|
|
39
36
|
|
|
40
37
|
# The default foreign key suffix.
|
|
41
38
|
#
|
|
42
39
|
# @return [ String ] '_id'
|
|
43
|
-
#
|
|
44
|
-
# @since 7.0
|
|
45
40
|
FOREIGN_KEY_SUFFIX = '_id'.freeze
|
|
46
41
|
|
|
47
42
|
# The list of association complements.
|
|
48
43
|
#
|
|
49
44
|
# @return [ Array<Association> ] The association complements.
|
|
50
|
-
#
|
|
51
|
-
# @since 7.0
|
|
52
45
|
def relation_complements
|
|
53
46
|
@relation_complements ||= [ Referenced::BelongsTo ].freeze
|
|
54
47
|
end
|
|
@@ -56,8 +49,6 @@ module Mongoid
|
|
|
56
49
|
# Setup the instance methods, fields, etc. on the association owning class.
|
|
57
50
|
#
|
|
58
51
|
# @return [ self ]
|
|
59
|
-
#
|
|
60
|
-
# @since 7.0
|
|
61
52
|
def setup!
|
|
62
53
|
setup_instance_methods!
|
|
63
54
|
self
|
|
@@ -67,8 +58,6 @@ module Mongoid
|
|
|
67
58
|
#
|
|
68
59
|
# @return [ String ] The foreign key field for saving the
|
|
69
60
|
# association reference.
|
|
70
|
-
#
|
|
71
|
-
# @since 7.0
|
|
72
61
|
def foreign_key
|
|
73
62
|
@foreign_key ||= @options[:foreign_key] ? @options[:foreign_key].to_s :
|
|
74
63
|
default_foreign_key_field
|
|
@@ -77,22 +66,16 @@ module Mongoid
|
|
|
77
66
|
# Is this association type embedded?
|
|
78
67
|
#
|
|
79
68
|
# @return [ false ] Always false.
|
|
80
|
-
#
|
|
81
|
-
# @since 7.0
|
|
82
69
|
def embedded?; false; end
|
|
83
70
|
|
|
84
71
|
# The default for validation the association object.
|
|
85
72
|
#
|
|
86
73
|
# @return [ true ] Always true.
|
|
87
|
-
#
|
|
88
|
-
# @since 7.0
|
|
89
74
|
def validation_default; true; end
|
|
90
75
|
|
|
91
|
-
# Get the
|
|
76
|
+
# Get the association proxy class for this association type.
|
|
92
77
|
#
|
|
93
78
|
# @return [ Association::HasOne::Proxy ] The proxy class.
|
|
94
|
-
#
|
|
95
|
-
# @since 7.0
|
|
96
79
|
def relation
|
|
97
80
|
Proxy
|
|
98
81
|
end
|
|
@@ -103,28 +86,22 @@ module Mongoid
|
|
|
103
86
|
# @param [ Hash ] options The options for the association.
|
|
104
87
|
#
|
|
105
88
|
# @return [ Association::Nested::Many ] The Nested Builder object.
|
|
106
|
-
#
|
|
107
|
-
# @since 7.0
|
|
108
89
|
def nested_builder(attributes, options)
|
|
109
90
|
Nested::One.new(self, attributes, options)
|
|
110
91
|
end
|
|
111
92
|
|
|
112
93
|
# Is this association polymorphic?
|
|
113
94
|
#
|
|
114
|
-
# @return [ true
|
|
115
|
-
#
|
|
116
|
-
# @since 7.0
|
|
95
|
+
# @return [ true | false ] Whether this association is polymorphic.
|
|
117
96
|
def polymorphic?
|
|
118
97
|
@polymorphic ||= !!as
|
|
119
98
|
end
|
|
120
99
|
|
|
121
100
|
# The type of this association if it's polymorphic.
|
|
122
101
|
#
|
|
123
|
-
# @note Only relevant for polymorphic
|
|
102
|
+
# @note Only relevant for polymorphic associations.
|
|
124
103
|
#
|
|
125
|
-
# @return [ String
|
|
126
|
-
#
|
|
127
|
-
# @since 7.0
|
|
104
|
+
# @return [ String | nil ] The type field.
|
|
128
105
|
def type
|
|
129
106
|
@type ||= "#{as}_type" if polymorphic?
|
|
130
107
|
end
|
|
@@ -134,7 +111,7 @@ module Mongoid
|
|
|
134
111
|
#
|
|
135
112
|
# @param [ Document ] doc The document to be bound.
|
|
136
113
|
#
|
|
137
|
-
# @return [ true
|
|
114
|
+
# @return [ true | false ] Whether the document can be bound.
|
|
138
115
|
def bindable?(doc)
|
|
139
116
|
forced_nil_inverse? || (!!inverse && doc.fields.keys.include?(foreign_key))
|
|
140
117
|
end
|
|
@@ -149,19 +126,22 @@ module Mongoid
|
|
|
149
126
|
# @param [ Document ] document The document to calculate on.
|
|
150
127
|
#
|
|
151
128
|
# @return [ Root ] The root atomic path calculator.
|
|
152
|
-
#
|
|
153
|
-
# @since 2.1.0
|
|
154
129
|
def path(document)
|
|
155
130
|
Mongoid::Atomic::Paths::Root.new(document)
|
|
156
131
|
end
|
|
157
132
|
|
|
133
|
+
# Get the scope to be applied when querying the association.
|
|
134
|
+
#
|
|
135
|
+
# @return [ Proc | Symbol | nil ] The association scope, if any.
|
|
136
|
+
def scope
|
|
137
|
+
@options[:scope]
|
|
138
|
+
end
|
|
139
|
+
|
|
158
140
|
private
|
|
159
141
|
|
|
160
142
|
# Setup the instance methods on the class having this association type.
|
|
161
143
|
#
|
|
162
144
|
# @return [ self ]
|
|
163
|
-
#
|
|
164
|
-
# @since 7.0
|
|
165
145
|
def setup_instance_methods!
|
|
166
146
|
define_getter!
|
|
167
147
|
define_setter!
|
|
@@ -1,23 +1,22 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
module Mongoid
|
|
3
4
|
module Association
|
|
4
5
|
module Referenced
|
|
5
6
|
|
|
6
|
-
# This module handles the
|
|
7
|
-
# both sides of a many to many
|
|
7
|
+
# This module handles the behavior for synchronizing foreign keys between
|
|
8
|
+
# both sides of a many to many associations.
|
|
8
9
|
module Syncable
|
|
9
10
|
|
|
10
11
|
# Is the document able to be synced on the inverse side? This is only if
|
|
11
|
-
# the key has changed and the
|
|
12
|
+
# the key has changed and the association bindings have not been run.
|
|
12
13
|
#
|
|
13
14
|
# @example Are the foreign keys syncable?
|
|
14
15
|
# document._syncable?(association)
|
|
15
16
|
#
|
|
16
17
|
# @param [ Association ] association The association metadata.
|
|
17
18
|
#
|
|
18
|
-
# @return [ true
|
|
19
|
-
#
|
|
20
|
-
# @since 2.1.0
|
|
19
|
+
# @return [ true | false ] If we can sync.
|
|
21
20
|
def _syncable?(association)
|
|
22
21
|
!_synced?(association.foreign_key) && send(association.foreign_key_check)
|
|
23
22
|
end
|
|
@@ -28,8 +27,6 @@ module Mongoid
|
|
|
28
27
|
# document._synced
|
|
29
28
|
#
|
|
30
29
|
# @return [ Hash ] The synced foreign keys.
|
|
31
|
-
#
|
|
32
|
-
# @since 2.1.0
|
|
33
30
|
def _synced
|
|
34
31
|
@_synced ||= {}
|
|
35
32
|
end
|
|
@@ -41,9 +38,7 @@ module Mongoid
|
|
|
41
38
|
#
|
|
42
39
|
# @param [ String ] foreign_key The foreign key.
|
|
43
40
|
#
|
|
44
|
-
# @return [ true
|
|
45
|
-
#
|
|
46
|
-
# @since 2.1.0
|
|
41
|
+
# @return [ true | false ] If we can sync.
|
|
47
42
|
def _synced?(foreign_key)
|
|
48
43
|
!!_synced[foreign_key]
|
|
49
44
|
end
|
|
@@ -56,8 +51,6 @@ module Mongoid
|
|
|
56
51
|
# @param [ Association ] association The association.
|
|
57
52
|
#
|
|
58
53
|
# @return [ Object ] The updated values.
|
|
59
|
-
#
|
|
60
|
-
# @since 2.2.1
|
|
61
54
|
def remove_inverse_keys(association)
|
|
62
55
|
foreign_keys = send(association.foreign_key)
|
|
63
56
|
unless foreign_keys.nil? || foreign_keys.empty?
|
|
@@ -65,7 +58,7 @@ module Mongoid
|
|
|
65
58
|
end
|
|
66
59
|
end
|
|
67
60
|
|
|
68
|
-
# Update the inverse keys for the
|
|
61
|
+
# Update the inverse keys for the association.
|
|
69
62
|
#
|
|
70
63
|
# @example Update the inverse keys
|
|
71
64
|
# document.update_inverse_keys(association)
|
|
@@ -73,11 +66,9 @@ module Mongoid
|
|
|
73
66
|
# @param [ Association ] association The document association.
|
|
74
67
|
#
|
|
75
68
|
# @return [ Object ] The updated values.
|
|
76
|
-
#
|
|
77
|
-
# @since 2.1.0
|
|
78
69
|
def update_inverse_keys(association)
|
|
79
|
-
if
|
|
80
|
-
old, new =
|
|
70
|
+
if previous_changes.has_key?(association.foreign_key)
|
|
71
|
+
old, new = previous_changes[association.foreign_key]
|
|
81
72
|
adds, subs = new - (old || []), (old || []) - new
|
|
82
73
|
|
|
83
74
|
# If we are autosaving we don't want a duplicate to get added - the
|
|
@@ -108,8 +99,6 @@ module Mongoid
|
|
|
108
99
|
# Person._synced(association)
|
|
109
100
|
#
|
|
110
101
|
# @param [ Association ] association The association metadata.
|
|
111
|
-
#
|
|
112
|
-
# @since 2.1.0
|
|
113
102
|
def _synced(association)
|
|
114
103
|
unless association.forced_nil_inverse?
|
|
115
104
|
synced_save(association)
|
|
@@ -128,11 +117,9 @@ module Mongoid
|
|
|
128
117
|
# @example Set up the save syncing.
|
|
129
118
|
# Person.synced_save(association)
|
|
130
119
|
#
|
|
131
|
-
# @param [ Association ] association The
|
|
120
|
+
# @param [ Association ] association The association metadata.
|
|
132
121
|
#
|
|
133
122
|
# @return [ Class ] The class getting set up.
|
|
134
|
-
#
|
|
135
|
-
# @since 2.1.0
|
|
136
123
|
def synced_save(association)
|
|
137
124
|
set_callback(
|
|
138
125
|
:save,
|
|
@@ -152,8 +139,6 @@ module Mongoid
|
|
|
152
139
|
# @param [ Association ] association The association metadata.
|
|
153
140
|
#
|
|
154
141
|
# @return [ Class ] The class getting set up.
|
|
155
|
-
#
|
|
156
|
-
# @since 2.2.1
|
|
157
142
|
def synced_destroy(association)
|
|
158
143
|
set_callback(
|
|
159
144
|
:destroy,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
module Mongoid
|
|
3
4
|
module Association
|
|
4
5
|
|
|
@@ -9,10 +10,10 @@ module Mongoid
|
|
|
9
10
|
|
|
10
11
|
# Returns the association metadata for the supplied name.
|
|
11
12
|
#
|
|
12
|
-
# @example Find
|
|
13
|
+
# @example Find association metadata by name.
|
|
13
14
|
# person.reflect_on_association(:addresses)
|
|
14
15
|
#
|
|
15
|
-
# @param [ String
|
|
16
|
+
# @param [ String | Symbol ] name The name of the association to find.
|
|
16
17
|
#
|
|
17
18
|
# @return [ Association ] The matching association metadata.
|
|
18
19
|
def reflect_on_association(name)
|
|
@@ -24,7 +25,7 @@ module Mongoid
|
|
|
24
25
|
# @example Find multiple association metadata by macro.
|
|
25
26
|
# person.reflect_on_all_associations(:embeds_many)
|
|
26
27
|
#
|
|
27
|
-
# @param [ Array<Symbol> ] macros The
|
|
28
|
+
# @param [ Array<Symbol> ] macros The association macros.
|
|
28
29
|
#
|
|
29
30
|
# @return [ Array<Association> ] The matching association metadata.
|
|
30
31
|
def reflect_on_all_association(*macros)
|
|
@@ -38,7 +39,7 @@ module Mongoid
|
|
|
38
39
|
# @example Find association metadata by name.
|
|
39
40
|
# Person.reflect_on_association(:addresses)
|
|
40
41
|
#
|
|
41
|
-
# @param [ String
|
|
42
|
+
# @param [ String | Symbol ] name The name of the association to find.
|
|
42
43
|
#
|
|
43
44
|
# @return [ Association ] The matching association metadata.
|
|
44
45
|
def reflect_on_association(name)
|
|
@@ -50,7 +51,7 @@ module Mongoid
|
|
|
50
51
|
# @example Find multiple association metadata by macro.
|
|
51
52
|
# Person.reflect_on_all_associations(:embeds_many)
|
|
52
53
|
#
|
|
53
|
-
# @param [ Array<Symbol> ] macros The
|
|
54
|
+
# @param [ Array<Symbol> ] macros The association macros.
|
|
54
55
|
#
|
|
55
56
|
# @return [ Array<Association> ] The matching association metadata.
|
|
56
57
|
def reflect_on_all_associations(*macros)
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'mongoid/association/constrainable'
|
|
2
4
|
require 'mongoid/association/options'
|
|
3
5
|
|
|
@@ -5,8 +7,6 @@ module Mongoid
|
|
|
5
7
|
module Association
|
|
6
8
|
|
|
7
9
|
# This module provides behaviors shared between Association types.
|
|
8
|
-
#
|
|
9
|
-
# @since 7.0
|
|
10
10
|
module Relatable
|
|
11
11
|
include Constrainable
|
|
12
12
|
include Options
|
|
@@ -14,8 +14,6 @@ module Mongoid
|
|
|
14
14
|
# The options shared between all association types.
|
|
15
15
|
#
|
|
16
16
|
# @return [ Array<Symbol> ] The shared options.
|
|
17
|
-
#
|
|
18
|
-
# @since 7.0
|
|
19
17
|
SHARED_OPTIONS = [
|
|
20
18
|
:class_name,
|
|
21
19
|
:inverse_of,
|
|
@@ -26,32 +24,24 @@ module Mongoid
|
|
|
26
24
|
# The primary key default.
|
|
27
25
|
#
|
|
28
26
|
# @return [ String ] The primary key field default.
|
|
29
|
-
#
|
|
30
|
-
# @since 7.0
|
|
31
27
|
PRIMARY_KEY_DEFAULT = '_id'.freeze
|
|
32
28
|
|
|
33
29
|
# The name of the association.
|
|
34
30
|
#
|
|
35
|
-
# @return [ Symbol ] The name of the
|
|
36
|
-
#
|
|
37
|
-
# @since 7.0
|
|
31
|
+
# @return [ Symbol ] The name of the association.
|
|
38
32
|
attr_reader :name
|
|
39
33
|
|
|
40
34
|
# The options on this association.
|
|
41
35
|
#
|
|
42
36
|
# @return [ Hash ] The options.
|
|
43
|
-
#
|
|
44
|
-
# @since 7.0
|
|
45
37
|
attr_reader :options
|
|
46
38
|
|
|
47
39
|
# Initialize the Association.
|
|
48
40
|
#
|
|
49
|
-
# @param [ Class ] _class The class of the model who owns this
|
|
41
|
+
# @param [ Class ] _class The class of the model who owns this association.
|
|
50
42
|
# @param [ Symbol ] name The name of the association.
|
|
51
|
-
# @param [ Hash ] opts The
|
|
43
|
+
# @param [ Hash ] opts The association options.
|
|
52
44
|
# @param [ Block ] block The optional block.
|
|
53
|
-
#
|
|
54
|
-
# @since 7.0
|
|
55
45
|
def initialize(_class, name, opts = {}, &block)
|
|
56
46
|
@owner_class = _class
|
|
57
47
|
@name = name
|
|
@@ -68,8 +58,6 @@ module Mongoid
|
|
|
68
58
|
# Compare this association to another.
|
|
69
59
|
#
|
|
70
60
|
# @return [ Object ] The object to compare to this association.
|
|
71
|
-
#
|
|
72
|
-
# @since 7.0
|
|
73
61
|
def ==(other)
|
|
74
62
|
relation_class_name == other.relation_class_name &&
|
|
75
63
|
inverse_class_name == other.inverse_class_name &&
|
|
@@ -81,20 +69,16 @@ module Mongoid
|
|
|
81
69
|
#
|
|
82
70
|
# @param [ Symbol ] callback_type The type of callback type.
|
|
83
71
|
#
|
|
84
|
-
# @return [ Array<Proc
|
|
72
|
+
# @return [ Array<Proc | Symbol> ] A list of the callbacks, either method
|
|
85
73
|
# names or Procs.
|
|
86
|
-
#
|
|
87
|
-
# @since 7.0
|
|
88
74
|
def get_callbacks(callback_type)
|
|
89
75
|
Array(options[callback_type])
|
|
90
76
|
end
|
|
91
77
|
|
|
92
78
|
# Get the type setter.
|
|
93
|
-
# @note Only relevant for polymorphic
|
|
79
|
+
# @note Only relevant for polymorphic associations that take the :as option.
|
|
94
80
|
#
|
|
95
81
|
# @return [ String ] The type setter method.
|
|
96
|
-
#
|
|
97
|
-
# @since 7.0
|
|
98
82
|
def type_setter
|
|
99
83
|
@type_setter ||= type.__setter__
|
|
100
84
|
end
|
|
@@ -104,9 +88,7 @@ module Mongoid
|
|
|
104
88
|
#
|
|
105
89
|
# @param [ Document ] doc The document to be bound.
|
|
106
90
|
#
|
|
107
|
-
# @return [ true
|
|
108
|
-
#
|
|
109
|
-
# @since 7.0
|
|
91
|
+
# @return [ true | false ] Whether the document can be bound.
|
|
110
92
|
def bindable?(doc); false; end
|
|
111
93
|
|
|
112
94
|
# Get the inverse names.
|
|
@@ -115,10 +97,10 @@ module Mongoid
|
|
|
115
97
|
# determining inverses.
|
|
116
98
|
#
|
|
117
99
|
# @return [ Array<Symbol> ] The list of inverse names.
|
|
118
|
-
#
|
|
119
|
-
# @since 7.0
|
|
120
100
|
def inverses(other = nil)
|
|
121
101
|
return [ inverse_of ] if inverse_of
|
|
102
|
+
return [] if @options.key?(:inverse_of) && !inverse_of
|
|
103
|
+
|
|
122
104
|
if polymorphic?
|
|
123
105
|
polymorphic_inverses(other)
|
|
124
106
|
else
|
|
@@ -132,8 +114,6 @@ module Mongoid
|
|
|
132
114
|
# determining inverses.
|
|
133
115
|
#
|
|
134
116
|
# @return [ Association ] The inverse's association metadata.
|
|
135
|
-
#
|
|
136
|
-
# @since 7.0
|
|
137
117
|
def inverse_association(other = nil)
|
|
138
118
|
(other || relation_class).relations[inverse(other)]
|
|
139
119
|
end
|
|
@@ -141,8 +121,6 @@ module Mongoid
|
|
|
141
121
|
# Get the inverse type.
|
|
142
122
|
#
|
|
143
123
|
# @return [ nil ] Default is nil for an association.
|
|
144
|
-
#
|
|
145
|
-
# @since 7.0
|
|
146
124
|
def inverse_type; end
|
|
147
125
|
|
|
148
126
|
# The class name, possibly unqualified or :: prefixed, of the association
|
|
@@ -166,14 +144,12 @@ module Mongoid
|
|
|
166
144
|
# the +relation_class+ method.
|
|
167
145
|
#
|
|
168
146
|
# @return [ String ] The association objects' class name.
|
|
169
|
-
#
|
|
170
|
-
# @since 7.0
|
|
171
147
|
def relation_class_name
|
|
172
148
|
@class_name ||= @options[:class_name] || ActiveSupport::Inflector.classify(name)
|
|
173
149
|
end
|
|
174
150
|
alias :class_name :relation_class_name
|
|
175
151
|
|
|
176
|
-
# The class of the
|
|
152
|
+
# The class of the association object(s).
|
|
177
153
|
#
|
|
178
154
|
# This method returns the class instance corresponding to
|
|
179
155
|
# +relation_class_name+, resolved relative to the host document class.
|
|
@@ -187,8 +163,6 @@ module Mongoid
|
|
|
187
163
|
# happen to be defined with the same name as the association name).
|
|
188
164
|
#
|
|
189
165
|
# @return [ String ] The association objects' class.
|
|
190
|
-
#
|
|
191
|
-
# @since 7.0
|
|
192
166
|
def relation_class
|
|
193
167
|
@klass ||= begin
|
|
194
168
|
cls_name = @options[:class_name] || ActiveSupport::Inflector.classify(name)
|
|
@@ -197,31 +171,25 @@ module Mongoid
|
|
|
197
171
|
end
|
|
198
172
|
alias :klass :relation_class
|
|
199
173
|
|
|
200
|
-
# The class name of the object owning this
|
|
174
|
+
# The class name of the object owning this association.
|
|
201
175
|
#
|
|
202
176
|
# @return [ String ] The owning objects' class name.
|
|
203
|
-
#
|
|
204
|
-
# @since 7.0
|
|
205
177
|
def inverse_class_name
|
|
206
178
|
@inverse_class_name ||= @owner_class.name
|
|
207
179
|
end
|
|
208
180
|
|
|
209
|
-
# The class of the object owning this
|
|
181
|
+
# The class of the object owning this association.
|
|
210
182
|
#
|
|
211
183
|
# @return [ String ] The owning objects' class.
|
|
212
|
-
#
|
|
213
|
-
# @since 7.0
|
|
214
184
|
def inverse_class
|
|
215
185
|
@owner_class
|
|
216
186
|
end
|
|
217
187
|
alias :inverse_klass :inverse_class
|
|
218
188
|
|
|
219
|
-
# The foreign key field if this
|
|
189
|
+
# The foreign key field if this association stores a foreign key.
|
|
220
190
|
# Otherwise, the primary key.
|
|
221
191
|
#
|
|
222
|
-
# @return [ Symbol
|
|
223
|
-
#
|
|
224
|
-
# @since 7.0
|
|
192
|
+
# @return [ Symbol | String ] The primary key.
|
|
225
193
|
def key
|
|
226
194
|
stores_foreign_key? ? foreign_key : primary_key
|
|
227
195
|
end
|
|
@@ -229,8 +197,6 @@ module Mongoid
|
|
|
229
197
|
# The name of the setter on this object for assigning an associated object.
|
|
230
198
|
#
|
|
231
199
|
# @return [ String ] The setter name.
|
|
232
|
-
#
|
|
233
|
-
# @since 7.0
|
|
234
200
|
def setter
|
|
235
201
|
@setter ||= "#{name}="
|
|
236
202
|
end
|
|
@@ -238,8 +204,6 @@ module Mongoid
|
|
|
238
204
|
# The name of the inverse setter method.
|
|
239
205
|
#
|
|
240
206
|
# @return [ String ] The name of the inverse setter.
|
|
241
|
-
#
|
|
242
|
-
# @since 7.0
|
|
243
207
|
def inverse_setter(other = nil)
|
|
244
208
|
@inverse_setter ||= "#{inverses(other).first}=" unless inverses(other).blank?
|
|
245
209
|
end
|
|
@@ -247,32 +211,26 @@ module Mongoid
|
|
|
247
211
|
# The name of the foreign key setter method.
|
|
248
212
|
#
|
|
249
213
|
# @return [ String ] The name of the foreign key setter.
|
|
250
|
-
#
|
|
251
|
-
# @since 7.0
|
|
252
214
|
def foreign_key_setter
|
|
253
215
|
# note: You can't check if this association stores foreign key
|
|
254
216
|
# See HasOne and HasMany binding, they referenced foreign_key_setter
|
|
255
217
|
@foreign_key_setter ||= "#{foreign_key}=" if foreign_key
|
|
256
218
|
end
|
|
257
219
|
|
|
258
|
-
# The atomic path for this
|
|
220
|
+
# The atomic path for this association.
|
|
259
221
|
#
|
|
260
222
|
# @return [ Mongoid::Atomic::Paths::Root ] The atomic path object.
|
|
261
|
-
#
|
|
262
|
-
# @since 7.0
|
|
263
223
|
def path(document)
|
|
264
224
|
relation.path(document)
|
|
265
225
|
end
|
|
266
226
|
|
|
267
227
|
# Gets the setter for the field that sets the type of document on a
|
|
268
|
-
# polymorphic
|
|
228
|
+
# polymorphic association.
|
|
269
229
|
#
|
|
270
230
|
# @example Get the inverse type setter.
|
|
271
231
|
# association.inverse_type_setter
|
|
272
232
|
#
|
|
273
233
|
# @return [ String ] The name of the setter.
|
|
274
|
-
#
|
|
275
|
-
# @since 7.0
|
|
276
234
|
def inverse_type_setter
|
|
277
235
|
@inverse_type_setter ||= inverse_type.__setter__
|
|
278
236
|
end
|
|
@@ -283,30 +241,24 @@ module Mongoid
|
|
|
283
241
|
# association.foreign_key_check
|
|
284
242
|
#
|
|
285
243
|
# @return [ String ] The foreign key check.
|
|
286
|
-
#
|
|
287
|
-
# @since 7.0
|
|
288
244
|
def foreign_key_check
|
|
289
|
-
@foreign_key_check ||= "#{foreign_key}
|
|
245
|
+
@foreign_key_check ||= "#{foreign_key}_previously_changed?" if (stores_foreign_key? && foreign_key)
|
|
290
246
|
end
|
|
291
247
|
|
|
292
|
-
# Create
|
|
248
|
+
# Create an association proxy object using the owner and target.
|
|
293
249
|
#
|
|
294
|
-
# @param [ Document ] owner The document this
|
|
295
|
-
# @param [ Document
|
|
296
|
-
#
|
|
250
|
+
# @param [ Document ] owner The document this association hangs off of.
|
|
251
|
+
# @param [ Document | Array<Document> ] target The target (parent) of the
|
|
252
|
+
# association.
|
|
297
253
|
#
|
|
298
254
|
# @return [ Proxy ]
|
|
299
|
-
#
|
|
300
|
-
# @since 7.0
|
|
301
255
|
def create_relation(owner, target)
|
|
302
256
|
relation.new(owner, target, self)
|
|
303
257
|
end
|
|
304
258
|
|
|
305
259
|
# Whether the dependent method is destructive.
|
|
306
260
|
#
|
|
307
|
-
# @return [ true
|
|
308
|
-
#
|
|
309
|
-
# @since 7.0
|
|
261
|
+
# @return [ true | false ] If the dependent method is destructive.
|
|
310
262
|
def destructive?
|
|
311
263
|
@destructive ||= !!(dependent && (dependent == :delete_all || dependent == :destroy))
|
|
312
264
|
end
|
|
@@ -314,8 +266,6 @@ module Mongoid
|
|
|
314
266
|
# Get the counter cache column name.
|
|
315
267
|
#
|
|
316
268
|
# @return [ String ] The counter cache column name.
|
|
317
|
-
#
|
|
318
|
-
# @since 7.0
|
|
319
269
|
def counter_cache_column_name
|
|
320
270
|
@counter_cache_column_name ||= (@options[:counter_cache].is_a?(String) ||
|
|
321
271
|
@options[:counter_cache].is_a?(Symbol)) ?
|
|
@@ -325,8 +275,6 @@ module Mongoid
|
|
|
325
275
|
# Get the extension.
|
|
326
276
|
#
|
|
327
277
|
# @return [ Module ] The extension module, if one has been defined.
|
|
328
|
-
#
|
|
329
|
-
# @since 7.0
|
|
330
278
|
def extension
|
|
331
279
|
@extension ||= @options[:extend]
|
|
332
280
|
end
|
|
@@ -334,8 +282,6 @@ module Mongoid
|
|
|
334
282
|
# Get the inverse name.
|
|
335
283
|
#
|
|
336
284
|
# @return [ Symbol ] The inverse name.
|
|
337
|
-
#
|
|
338
|
-
# @since 7.0
|
|
339
285
|
def inverse(other = nil)
|
|
340
286
|
candidates = inverses(other)
|
|
341
287
|
candidates.detect { |c| c } if candidates
|
|
@@ -343,10 +289,8 @@ module Mongoid
|
|
|
343
289
|
|
|
344
290
|
# Whether the associated object(s) should be validated.
|
|
345
291
|
#
|
|
346
|
-
# @return [ true
|
|
292
|
+
# @return [ true | false ] If the associated object(s)
|
|
347
293
|
# should be validated.
|
|
348
|
-
#
|
|
349
|
-
# @since 7.0
|
|
350
294
|
def validate?
|
|
351
295
|
@validate ||= if @options[:validate].nil?
|
|
352
296
|
validation_default
|
|
@@ -355,10 +299,39 @@ module Mongoid
|
|
|
355
299
|
end
|
|
356
300
|
end
|
|
357
301
|
|
|
302
|
+
# @return [ Array<String> ] The associations above this one in the inclusion tree.
|
|
303
|
+
attr_accessor :parent_inclusions
|
|
304
|
+
|
|
305
|
+
def parent_inclusions
|
|
306
|
+
@parent_inclusions ||= []
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
# Is this association an embeds_many or has_many association?
|
|
310
|
+
#
|
|
311
|
+
# @return [ true | false ] true if it is a *_many association, false if not.
|
|
312
|
+
def many?
|
|
313
|
+
[Referenced::HasMany, Embedded::EmbedsMany].any? { |a| self.is_a?(a) }
|
|
314
|
+
end
|
|
315
|
+
|
|
316
|
+
# Is this association an embeds_one or has_one association?
|
|
317
|
+
#
|
|
318
|
+
# @return [ true | false ] true if it is a *_one association, false if not.
|
|
319
|
+
def one?
|
|
320
|
+
[Referenced::HasOne, Embedded::EmbedsOne].any? { |a| self.is_a?(a) }
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
# Is this association an embedded_in or belongs_to association?
|
|
324
|
+
#
|
|
325
|
+
# @return [ true | false ] true if it is an embedded_in or belongs_to
|
|
326
|
+
# association, false if not.
|
|
327
|
+
def in_to?
|
|
328
|
+
[Referenced::BelongsTo, Embedded::EmbeddedIn].any? { |a| self.is_a?(a) }
|
|
329
|
+
end
|
|
330
|
+
|
|
358
331
|
private
|
|
359
332
|
|
|
360
333
|
# Gets the model classes with inverse associations of this model. This is used to determine
|
|
361
|
-
# the classes on the other end of polymorphic
|
|
334
|
+
# the classes on the other end of polymorphic associations with models.
|
|
362
335
|
def inverse_association_classes
|
|
363
336
|
Mongoid::Config.models.map { |m| inverse_association(m) }.compact.map(&:inverse_class)
|
|
364
337
|
end
|
|
@@ -460,10 +433,15 @@ module Mongoid
|
|
|
460
433
|
def namespace_hierarchy(mod)
|
|
461
434
|
parent = Object
|
|
462
435
|
hier = [parent]
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
436
|
+
|
|
437
|
+
# name is not present on anonymous modules
|
|
438
|
+
if mod.name
|
|
439
|
+
mod.name.split('::').each do |part|
|
|
440
|
+
parent = parent.const_get(part)
|
|
441
|
+
hier << parent
|
|
442
|
+
end
|
|
466
443
|
end
|
|
444
|
+
|
|
467
445
|
hier.reverse
|
|
468
446
|
end
|
|
469
447
|
|