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/fields.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
require "mongoid/fields/standard"
|
|
3
4
|
require "mongoid/fields/foreign_key"
|
|
4
5
|
require "mongoid/fields/localized"
|
|
@@ -6,13 +7,14 @@ require "mongoid/fields/validators"
|
|
|
6
7
|
|
|
7
8
|
module Mongoid
|
|
8
9
|
|
|
9
|
-
# This module defines
|
|
10
|
+
# This module defines behavior for fields.
|
|
10
11
|
module Fields
|
|
11
12
|
extend ActiveSupport::Concern
|
|
12
13
|
|
|
14
|
+
StringifiedSymbol = Mongoid::StringifiedSymbol
|
|
15
|
+
Boolean = Mongoid::Boolean
|
|
16
|
+
|
|
13
17
|
# For fields defined with symbols use the correct class.
|
|
14
|
-
#
|
|
15
|
-
# @since 4.0.0
|
|
16
18
|
TYPE_MAPPINGS = {
|
|
17
19
|
array: Array,
|
|
18
20
|
big_decimal: BigDecimal,
|
|
@@ -28,14 +30,89 @@ module Mongoid
|
|
|
28
30
|
regexp: Regexp,
|
|
29
31
|
set: Set,
|
|
30
32
|
string: String,
|
|
33
|
+
stringified_symbol: StringifiedSymbol,
|
|
31
34
|
symbol: Symbol,
|
|
32
35
|
time: Time
|
|
33
36
|
}.with_indifferent_access
|
|
34
37
|
|
|
35
|
-
# Constant for all names of the
|
|
38
|
+
# Constant for all names of the _id field in a document.
|
|
39
|
+
#
|
|
40
|
+
# This does not include aliases of _id field.
|
|
36
41
|
#
|
|
37
|
-
# @
|
|
38
|
-
IDS = [ :_id,
|
|
42
|
+
# @api private
|
|
43
|
+
IDS = [ :_id, '_id', ].freeze
|
|
44
|
+
|
|
45
|
+
module ClassMethods
|
|
46
|
+
# Returns the list of id fields for this model class, as both strings
|
|
47
|
+
# and symbols.
|
|
48
|
+
#
|
|
49
|
+
# @return [ Array<Symbol | String> ] List of id fields.
|
|
50
|
+
#
|
|
51
|
+
# @api private
|
|
52
|
+
def id_fields
|
|
53
|
+
IDS.dup.tap do |id_fields|
|
|
54
|
+
aliased_fields.each do |k, v|
|
|
55
|
+
if v == '_id'
|
|
56
|
+
id_fields << k.to_sym
|
|
57
|
+
id_fields << k
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Extracts the id field from the specified attributes hash based on
|
|
64
|
+
# aliases defined in this class.
|
|
65
|
+
#
|
|
66
|
+
# @param [ Hash ] attributes The attributes to inspect.
|
|
67
|
+
#
|
|
68
|
+
# @return [ Object ] The id value.
|
|
69
|
+
#
|
|
70
|
+
# @api private
|
|
71
|
+
def extract_id_field(attributes)
|
|
72
|
+
id_fields.each do |k|
|
|
73
|
+
if v = attributes[k]
|
|
74
|
+
return v
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
nil
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Removes the _translations from the given field name. This is done only
|
|
81
|
+
# when there doesn't already exist a field name or relation with the
|
|
82
|
+
# same name (i.e. with the _translations suffix). This check for an
|
|
83
|
+
# existing field is done recursively
|
|
84
|
+
#
|
|
85
|
+
# @param [ String | Symbol ] name The name of the field to cleanse.
|
|
86
|
+
#
|
|
87
|
+
# @return [ Field ] The field name without _translations
|
|
88
|
+
def cleanse_localized_field_names(name)
|
|
89
|
+
name = database_field_name(name.to_s)
|
|
90
|
+
|
|
91
|
+
klass = self
|
|
92
|
+
[].tap do |res|
|
|
93
|
+
ar = name.split('.')
|
|
94
|
+
ar.each_with_index do |fn, i|
|
|
95
|
+
key = fn
|
|
96
|
+
unless klass.fields.key?(fn) || klass.relations.key?(fn)
|
|
97
|
+
if tr = fn.match(/(.*)_translations\z/)&.captures&.first
|
|
98
|
+
key = tr
|
|
99
|
+
else
|
|
100
|
+
key = fn
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
end
|
|
104
|
+
res.push(key)
|
|
105
|
+
|
|
106
|
+
if klass.fields.key?(fn)
|
|
107
|
+
res.push(ar.drop(i+1).join('.')) unless i == ar.length - 1
|
|
108
|
+
break
|
|
109
|
+
elsif klass.relations.key?(fn)
|
|
110
|
+
klass = klass.relations[key].klass
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end.join('.')
|
|
114
|
+
end
|
|
115
|
+
end
|
|
39
116
|
|
|
40
117
|
included do
|
|
41
118
|
class_attribute :aliased_fields
|
|
@@ -57,8 +134,7 @@ module Mongoid
|
|
|
57
134
|
type: BSON::ObjectId
|
|
58
135
|
)
|
|
59
136
|
|
|
60
|
-
|
|
61
|
-
alias :id= :_id=
|
|
137
|
+
alias_attribute(:id, :_id)
|
|
62
138
|
end
|
|
63
139
|
|
|
64
140
|
# Apply all default values to the document which are not procs.
|
|
@@ -67,8 +143,6 @@ module Mongoid
|
|
|
67
143
|
# model.apply_pre_processed_defaults
|
|
68
144
|
#
|
|
69
145
|
# @return [ Array<String ] The names of the non-proc defaults.
|
|
70
|
-
#
|
|
71
|
-
# @since 2.4.0
|
|
72
146
|
def apply_pre_processed_defaults
|
|
73
147
|
pre_processed_defaults.each do |name|
|
|
74
148
|
apply_default(name)
|
|
@@ -81,8 +155,6 @@ module Mongoid
|
|
|
81
155
|
# model.apply_post_processed_defaults
|
|
82
156
|
#
|
|
83
157
|
# @return [ Array<String ] The names of the proc defaults.
|
|
84
|
-
#
|
|
85
|
-
# @since 2.4.0
|
|
86
158
|
def apply_post_processed_defaults
|
|
87
159
|
post_processed_defaults.each do |name|
|
|
88
160
|
apply_default(name)
|
|
@@ -95,8 +167,6 @@ module Mongoid
|
|
|
95
167
|
# model.apply_default("name")
|
|
96
168
|
#
|
|
97
169
|
# @param [ String ] name The name of the field.
|
|
98
|
-
#
|
|
99
|
-
# @since 2.4.0
|
|
100
170
|
def apply_default(name)
|
|
101
171
|
unless attributes.key?(name)
|
|
102
172
|
if field = fields[name]
|
|
@@ -113,8 +183,6 @@ module Mongoid
|
|
|
113
183
|
#
|
|
114
184
|
# @example Apply all the defaults.
|
|
115
185
|
# model.apply_defaults
|
|
116
|
-
#
|
|
117
|
-
# @since 2.4.0
|
|
118
186
|
def apply_defaults
|
|
119
187
|
apply_pre_processed_defaults
|
|
120
188
|
apply_post_processed_defaults
|
|
@@ -126,11 +194,9 @@ module Mongoid
|
|
|
126
194
|
# method to automatically wrap params in JSON requests.
|
|
127
195
|
#
|
|
128
196
|
# @example Get the field names
|
|
129
|
-
#
|
|
197
|
+
# document.attribute_names
|
|
130
198
|
#
|
|
131
199
|
# @return [ Array<String> ] The field names
|
|
132
|
-
#
|
|
133
|
-
# @since 3.0.0
|
|
134
200
|
def attribute_names
|
|
135
201
|
self.class.attribute_names
|
|
136
202
|
end
|
|
@@ -144,8 +210,6 @@ module Mongoid
|
|
|
144
210
|
# @param [ String, Symbol ] name The name to get.
|
|
145
211
|
#
|
|
146
212
|
# @return [ String ] The name of the field as it's stored in the db.
|
|
147
|
-
#
|
|
148
|
-
# @since 3.0.7
|
|
149
213
|
def database_field_name(name)
|
|
150
214
|
self.class.database_field_name(name)
|
|
151
215
|
end
|
|
@@ -159,8 +223,6 @@ module Mongoid
|
|
|
159
223
|
# @param [ Object ] value The current value.
|
|
160
224
|
#
|
|
161
225
|
# @return [ true, false ] If we set the field lazily.
|
|
162
|
-
#
|
|
163
|
-
# @since 3.1.0
|
|
164
226
|
def lazy_settable?(field, value)
|
|
165
227
|
!frozen? && value.nil? && field.lazy?
|
|
166
228
|
end
|
|
@@ -182,7 +244,7 @@ module Mongoid
|
|
|
182
244
|
# Stores the provided block to be run when the option name specified is
|
|
183
245
|
# defined on a field.
|
|
184
246
|
#
|
|
185
|
-
# No assumptions are made about what
|
|
247
|
+
# No assumptions are made about what functionality the handler might
|
|
186
248
|
# perform, so it will always be called if the `option_name` key is
|
|
187
249
|
# provided in the field definition -- even if it is false or nil.
|
|
188
250
|
#
|
|
@@ -194,8 +256,6 @@ module Mongoid
|
|
|
194
256
|
# @param [ Symbol ] option_name the option name to match against
|
|
195
257
|
# @param [ Proc ] block the handler to execute when the option is
|
|
196
258
|
# provided.
|
|
197
|
-
#
|
|
198
|
-
# @since 2.1.0
|
|
199
259
|
def option(option_name, &block)
|
|
200
260
|
options[option_name] = block
|
|
201
261
|
end
|
|
@@ -207,8 +267,6 @@ module Mongoid
|
|
|
207
267
|
# # => { :required => #<Proc:0x00000100976b38> }
|
|
208
268
|
#
|
|
209
269
|
# @return [ Hash ] the option map
|
|
210
|
-
#
|
|
211
|
-
# @since 2.1.0
|
|
212
270
|
def options
|
|
213
271
|
@options ||= {}
|
|
214
272
|
end
|
|
@@ -225,27 +283,43 @@ module Mongoid
|
|
|
225
283
|
# Model.attribute_names
|
|
226
284
|
#
|
|
227
285
|
# @return [ Array<String> ] The field names
|
|
228
|
-
#
|
|
229
|
-
# @since 3.0.0
|
|
230
286
|
def attribute_names
|
|
231
287
|
fields.keys
|
|
232
288
|
end
|
|
233
289
|
|
|
234
290
|
# Get the name of the provided field as it is stored in the database.
|
|
235
|
-
# Used in determining if the field is aliased or not.
|
|
291
|
+
# Used in determining if the field is aliased or not. Recursively
|
|
292
|
+
# finds aliases for embedded documents and fields, delimited with
|
|
293
|
+
# period "." character.
|
|
236
294
|
#
|
|
237
|
-
# @example Get the database field name.
|
|
295
|
+
# @example Get the database field name of a field.
|
|
238
296
|
# Model.database_field_name(:authorization)
|
|
239
297
|
#
|
|
240
|
-
# @
|
|
298
|
+
# @example Get the database field name of an embedded field.
|
|
299
|
+
# Model.database_field_name('customers.addresses.city')
|
|
241
300
|
#
|
|
242
|
-
# @
|
|
301
|
+
# @param [ String, Symbol ] name The name to get.
|
|
243
302
|
#
|
|
244
|
-
# @
|
|
303
|
+
# @return [ String ] The name of the field as stored in the database.
|
|
245
304
|
def database_field_name(name)
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
305
|
+
if Mongoid.broken_alias_handling
|
|
306
|
+
return nil unless name
|
|
307
|
+
normalized = name.to_s
|
|
308
|
+
aliased_fields[normalized] || normalized
|
|
309
|
+
else
|
|
310
|
+
return nil unless name.present?
|
|
311
|
+
key = name.to_s
|
|
312
|
+
segment, remaining = key.split('.', 2)
|
|
313
|
+
segment = aliased_fields[segment]&.dup || segment
|
|
314
|
+
return segment unless remaining
|
|
315
|
+
|
|
316
|
+
relation = relations[aliased_associations[segment] || segment]
|
|
317
|
+
if relation
|
|
318
|
+
"#{segment}.#{relation.klass.database_field_name(remaining)}"
|
|
319
|
+
else
|
|
320
|
+
"#{segment}.#{remaining}"
|
|
321
|
+
end
|
|
322
|
+
end
|
|
249
323
|
end
|
|
250
324
|
|
|
251
325
|
# Defines all the fields that are accessible on the Document
|
|
@@ -282,8 +356,6 @@ module Mongoid
|
|
|
282
356
|
# @param [ Class ] type The new type of field.
|
|
283
357
|
#
|
|
284
358
|
# @return [ Serializable ] The new field.
|
|
285
|
-
#
|
|
286
|
-
# @since 2.1.0
|
|
287
359
|
def replace_field(name, type)
|
|
288
360
|
remove_defaults(name)
|
|
289
361
|
add_field(name, fields[name].options.merge(type: type))
|
|
@@ -296,8 +368,6 @@ module Mongoid
|
|
|
296
368
|
# person.using_object_ids?
|
|
297
369
|
#
|
|
298
370
|
# @return [ true, false ] If the class uses BSON::ObjectIds for the id.
|
|
299
|
-
#
|
|
300
|
-
# @since 1.0.0
|
|
301
371
|
def using_object_ids?
|
|
302
372
|
fields["_id"].object_id_field?
|
|
303
373
|
end
|
|
@@ -311,8 +381,6 @@ module Mongoid
|
|
|
311
381
|
# Model.add_defaults(field)
|
|
312
382
|
#
|
|
313
383
|
# @param [ Field ] field The field to add for.
|
|
314
|
-
#
|
|
315
|
-
# @since 2.4.0
|
|
316
384
|
def add_defaults(field)
|
|
317
385
|
default, name = field.default_val, field.name.to_s
|
|
318
386
|
remove_defaults(name)
|
|
@@ -381,8 +449,6 @@ module Mongoid
|
|
|
381
449
|
# @param [ Symbol ] name The name of the field.
|
|
382
450
|
# @param [ Symbol ] meth The name of the accessor.
|
|
383
451
|
# @param [ Hash ] options The options.
|
|
384
|
-
#
|
|
385
|
-
# @since 2.0.0
|
|
386
452
|
def create_accessors(name, meth, options = {})
|
|
387
453
|
field = fields[name]
|
|
388
454
|
|
|
@@ -406,8 +472,6 @@ module Mongoid
|
|
|
406
472
|
# @param [ String ] name The name of the attribute.
|
|
407
473
|
# @param [ String ] meth The name of the method.
|
|
408
474
|
# @param [ Field ] field The field.
|
|
409
|
-
#
|
|
410
|
-
# @since 2.4.0
|
|
411
475
|
def create_field_getter(name, meth, field)
|
|
412
476
|
generated_methods.module_eval do
|
|
413
477
|
re_define_method(meth) do
|
|
@@ -432,8 +496,6 @@ module Mongoid
|
|
|
432
496
|
#
|
|
433
497
|
# @param [ String ] name The name of the attribute.
|
|
434
498
|
# @param [ String ] meth The name of the method.
|
|
435
|
-
#
|
|
436
|
-
# @since 3.1.0
|
|
437
499
|
def create_field_getter_before_type_cast(name, meth)
|
|
438
500
|
generated_methods.module_eval do
|
|
439
501
|
re_define_method("#{meth}_before_type_cast") do
|
|
@@ -454,8 +516,6 @@ module Mongoid
|
|
|
454
516
|
# @param [ String ] name The name of the attribute.
|
|
455
517
|
# @param [ String ] meth The name of the method.
|
|
456
518
|
# @param [ Field ] field The field.
|
|
457
|
-
#
|
|
458
|
-
# @since 2.4.0
|
|
459
519
|
def create_field_setter(name, meth, field)
|
|
460
520
|
generated_methods.module_eval do
|
|
461
521
|
re_define_method("#{meth}=") do |value|
|
|
@@ -475,8 +535,6 @@ module Mongoid
|
|
|
475
535
|
#
|
|
476
536
|
# @param [ String ] name The name of the attribute.
|
|
477
537
|
# @param [ String ] meth The name of the method.
|
|
478
|
-
#
|
|
479
|
-
# @since 2.4.0
|
|
480
538
|
def create_field_check(name, meth)
|
|
481
539
|
generated_methods.module_eval do
|
|
482
540
|
re_define_method("#{meth}?") do
|
|
@@ -493,8 +551,6 @@ module Mongoid
|
|
|
493
551
|
#
|
|
494
552
|
# @param [ String ] name The name of the attribute.
|
|
495
553
|
# @param [ String ] meth The name of the method.
|
|
496
|
-
#
|
|
497
|
-
# @since 2.4.0
|
|
498
554
|
def create_translations_getter(name, meth)
|
|
499
555
|
generated_methods.module_eval do
|
|
500
556
|
re_define_method("#{meth}_translations") do
|
|
@@ -513,8 +569,6 @@ module Mongoid
|
|
|
513
569
|
# @param [ String ] name The name of the attribute.
|
|
514
570
|
# @param [ String ] meth The name of the method.
|
|
515
571
|
# @param [ Field ] field The field.
|
|
516
|
-
#
|
|
517
|
-
# @since 2.4.0
|
|
518
572
|
def create_translations_setter(name, meth, field)
|
|
519
573
|
generated_methods.module_eval do
|
|
520
574
|
re_define_method("#{meth}_translations=") do |value|
|
|
@@ -536,8 +590,6 @@ module Mongoid
|
|
|
536
590
|
# Person.generated_methods
|
|
537
591
|
#
|
|
538
592
|
# @return [ Module ] The module of generated methods.
|
|
539
|
-
#
|
|
540
|
-
# @since 2.0.0
|
|
541
593
|
def generated_methods
|
|
542
594
|
@generated_methods ||= begin
|
|
543
595
|
mod = Module.new
|
|
@@ -552,8 +604,6 @@ module Mongoid
|
|
|
552
604
|
# Model.remove_defaults(name)
|
|
553
605
|
#
|
|
554
606
|
# @param [ String ] name The field name.
|
|
555
|
-
#
|
|
556
|
-
# @since 2.4.0
|
|
557
607
|
def remove_defaults(name)
|
|
558
608
|
pre_processed_defaults.delete_one(name)
|
|
559
609
|
post_processed_defaults.delete_one(name)
|
data/lib/mongoid/findable.rb
CHANGED
|
@@ -1,18 +1,20 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
module Mongoid
|
|
3
4
|
|
|
4
5
|
# This module defines the finder methods that hang off the document at the
|
|
5
6
|
# class level.
|
|
6
|
-
#
|
|
7
|
-
# @since 4.0.0
|
|
8
7
|
module Findable
|
|
9
|
-
extend
|
|
8
|
+
extend Forwardable
|
|
10
9
|
|
|
11
|
-
|
|
10
|
+
def_delegators :with_default_scope, *(
|
|
11
|
+
Criteria::Queryable::Selectable.forwardables +
|
|
12
|
+
Criteria::Queryable::Optional.forwardables
|
|
13
|
+
)
|
|
12
14
|
|
|
13
15
|
# These are methods defined on the criteria that should also be accessible
|
|
14
16
|
# directly from the class level.
|
|
15
|
-
|
|
17
|
+
def_delegators :with_default_scope,
|
|
16
18
|
:aggregates,
|
|
17
19
|
:avg,
|
|
18
20
|
:create_with,
|
|
@@ -41,7 +43,7 @@ module Mongoid
|
|
|
41
43
|
:sum,
|
|
42
44
|
:text_search,
|
|
43
45
|
:update,
|
|
44
|
-
:update_all
|
|
46
|
+
:update_all
|
|
45
47
|
|
|
46
48
|
# Returns a count of records in the database.
|
|
47
49
|
# If you want to specify conditions use where.
|
|
@@ -55,6 +57,16 @@ module Mongoid
|
|
|
55
57
|
with_default_scope.count
|
|
56
58
|
end
|
|
57
59
|
|
|
60
|
+
# Returns an estimated count of records in the database.
|
|
61
|
+
#
|
|
62
|
+
# @example Get the count of matching documents.
|
|
63
|
+
# Person.estimated_count
|
|
64
|
+
#
|
|
65
|
+
# @return [ Integer ] The number of matching documents.
|
|
66
|
+
def estimated_count
|
|
67
|
+
with_default_scope.estimated_count
|
|
68
|
+
end
|
|
69
|
+
|
|
58
70
|
# Returns true if count is zero
|
|
59
71
|
#
|
|
60
72
|
# @example Are there no saved documents for this model?
|
|
@@ -76,20 +88,46 @@ module Mongoid
|
|
|
76
88
|
with_default_scope.exists?
|
|
77
89
|
end
|
|
78
90
|
|
|
79
|
-
#
|
|
80
|
-
#
|
|
81
|
-
# If a
|
|
82
|
-
#
|
|
83
|
-
#
|
|
84
|
-
#
|
|
85
|
-
#
|
|
86
|
-
#
|
|
87
|
-
#
|
|
88
|
-
#
|
|
89
|
-
#
|
|
90
|
-
#
|
|
91
|
-
#
|
|
92
|
-
#
|
|
91
|
+
# Finds a +Document+ or multiple documents by their _id values.
|
|
92
|
+
#
|
|
93
|
+
# If a single non-Array argument is given, this argument is interpreted
|
|
94
|
+
# as the _id value of a document to find. If there is a matching document
|
|
95
|
+
# in the database, this document is returned; otherwise, if the
|
|
96
|
+
# +raise_not_found_error+ Mongoid configuration option is truthy
|
|
97
|
+
# (which is the default), +Errors::DocumentNotFound+ is raised, and if
|
|
98
|
+
# +raise_not_found_error+ is falsy, +find+ returns +nil+.
|
|
99
|
+
#
|
|
100
|
+
# If multiple arguments are given, or an Array argument is given, the
|
|
101
|
+
# array is flattened and each array element is interpreted as the _id
|
|
102
|
+
# value of the document to find. Mongoid then attempts to retrieve all
|
|
103
|
+
# documents with the provided _id values. The return value is an array
|
|
104
|
+
# of found documents. Each document appears one time in the returned array,
|
|
105
|
+
# even if its _id is given multiple times in the argument to +find+.
|
|
106
|
+
# If the +raise_not_found_error+ Mongoid configuration option is truthy,
|
|
107
|
+
# +Errors::DocumentNotFound+ exception is raised if any of the specified
|
|
108
|
+
# _ids were not found in the database. If the ++raise_not_found_error+
|
|
109
|
+
# Mongoid configuration option is falsy, only those documents which are
|
|
110
|
+
# found are returned; if no documents are found, the return value is an
|
|
111
|
+
# empty array.
|
|
112
|
+
#
|
|
113
|
+
# Note that MongoDB does not allow the _id field to be an array.
|
|
114
|
+
#
|
|
115
|
+
# The argument undergoes customary Mongoid type conversions based on
|
|
116
|
+
# the type declared for the _id field. By default the _id field is a
|
|
117
|
+
# +BSON::ObjectId+; this allows strings to be passed to +find+ and the
|
|
118
|
+
# strings will be transparently converted to +BSON::ObjectId+ instances
|
|
119
|
+
# during query construction.
|
|
120
|
+
#
|
|
121
|
+
# The +find+ method takes into account the default scope defined on the
|
|
122
|
+
# model class, if any.
|
|
123
|
+
#
|
|
124
|
+
# @param [ Object | Array<Object> ] args The _id values to find or an
|
|
125
|
+
# array thereof.
|
|
126
|
+
#
|
|
127
|
+
# @return [ Document | Array<Document> | nil ] A document or matching documents.
|
|
128
|
+
#
|
|
129
|
+
# @raise Errors::DocumentNotFound If not all documents are found and
|
|
130
|
+
# the +raise_not_found_error+ Mongoid configuration option is truthy.
|
|
93
131
|
def find(*args)
|
|
94
132
|
with_default_scope.find(*args)
|
|
95
133
|
end
|
|
@@ -108,8 +146,6 @@ module Mongoid
|
|
|
108
146
|
# and Mongoid.raise_not_found_error is true.
|
|
109
147
|
#
|
|
110
148
|
# @return [ Document, nil ] A matching document.
|
|
111
|
-
#
|
|
112
|
-
# @since 3.0.0
|
|
113
149
|
def find_by(attrs = {})
|
|
114
150
|
result = where(attrs).find_first
|
|
115
151
|
if result.nil? && Mongoid.raise_not_found_error
|
|
@@ -1,16 +1,13 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
module Mongoid
|
|
3
4
|
module Indexable
|
|
4
5
|
|
|
5
|
-
# Encapsulates
|
|
6
|
-
#
|
|
7
|
-
# @since 4.0.0
|
|
6
|
+
# Encapsulates behavior around an index specification.
|
|
8
7
|
class Specification
|
|
9
8
|
|
|
10
9
|
# The mappings of nice Ruby-style names to the corresponding driver
|
|
11
10
|
# option name.
|
|
12
|
-
#
|
|
13
|
-
# @since 4.0.0
|
|
14
11
|
MAPPINGS = {
|
|
15
12
|
expire_after_seconds: :expire_after
|
|
16
13
|
}
|
|
@@ -31,8 +28,6 @@ module Mongoid
|
|
|
31
28
|
# @param [ Specification ] other The spec to compare against.
|
|
32
29
|
#
|
|
33
30
|
# @return [ true, false ] If the specs are equal.
|
|
34
|
-
#
|
|
35
|
-
# @since 4.0.0
|
|
36
31
|
def ==(other)
|
|
37
32
|
fields == other.fields && key == other.key
|
|
38
33
|
end
|
|
@@ -45,8 +40,6 @@ module Mongoid
|
|
|
45
40
|
# @param [ Class ] klass The class the index is defined on.
|
|
46
41
|
# @param [ Hash ] key The hash of name/direction pairs.
|
|
47
42
|
# @param [ Hash ] opts the index options.
|
|
48
|
-
#
|
|
49
|
-
# @since 4.0.0
|
|
50
43
|
def initialize(klass, key, opts = nil)
|
|
51
44
|
options = opts || {}
|
|
52
45
|
Validators::Options.validate(klass, key, options)
|
|
@@ -62,8 +55,6 @@ module Mongoid
|
|
|
62
55
|
# specification.name
|
|
63
56
|
#
|
|
64
57
|
# @return [ String ] name The index name.
|
|
65
|
-
#
|
|
66
|
-
# @since 5.0.2
|
|
67
58
|
def name
|
|
68
59
|
@name ||= key.reduce([]) do |n, (k,v)|
|
|
69
60
|
n << "#{k}_#{v}"
|
|
@@ -82,8 +73,6 @@ module Mongoid
|
|
|
82
73
|
# @param [ Hash ] key The index key(s).
|
|
83
74
|
#
|
|
84
75
|
# @return [ Hash ] The normalized specification.
|
|
85
|
-
#
|
|
86
|
-
# @since 4.0.0
|
|
87
76
|
def normalize_key(key)
|
|
88
77
|
normalized = {}
|
|
89
78
|
key.each_pair do |name, direction|
|
|
@@ -102,8 +91,6 @@ module Mongoid
|
|
|
102
91
|
# @param [ Hash ] opts The index options.
|
|
103
92
|
#
|
|
104
93
|
# @return [ Hash ] The normalized options.
|
|
105
|
-
#
|
|
106
|
-
# @since 4.0.0
|
|
107
94
|
def normalize_options(opts)
|
|
108
95
|
options = {}
|
|
109
96
|
opts.each_pair do |option, value|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
module Mongoid
|
|
3
4
|
module Indexable
|
|
4
5
|
module Validators
|
|
@@ -51,8 +52,6 @@ module Mongoid
|
|
|
51
52
|
# @param [ Hash ] options The index options.
|
|
52
53
|
#
|
|
53
54
|
# @raise [ Errors::InvalidIndex ] If validation failed.
|
|
54
|
-
#
|
|
55
|
-
# @since 3.0.0
|
|
56
55
|
def validate(klass, spec, options)
|
|
57
56
|
validate_spec(klass, spec, options)
|
|
58
57
|
validate_options(klass, spec, options)
|
|
@@ -72,8 +71,6 @@ module Mongoid
|
|
|
72
71
|
# @param [ Hash ] options The index options.
|
|
73
72
|
#
|
|
74
73
|
# @raise [ Errors::InvalidIndex ] If validation failed.
|
|
75
|
-
#
|
|
76
|
-
# @since 3.0.0
|
|
77
74
|
def validate_options(klass, spec, options)
|
|
78
75
|
options.each_pair do |name, value|
|
|
79
76
|
unless VALID_OPTIONS.include?(name)
|
|
@@ -94,8 +91,6 @@ module Mongoid
|
|
|
94
91
|
# @param [ Hash ] options The index options.
|
|
95
92
|
#
|
|
96
93
|
# @raise [ Errors::InvalidIndex ] If validation failed.
|
|
97
|
-
#
|
|
98
|
-
# @since 3.0.0
|
|
99
94
|
def validate_spec(klass, spec, options)
|
|
100
95
|
raise Errors::InvalidIndex.new(klass, spec, options) if !spec.is_a?(::Hash)
|
|
101
96
|
spec.each_pair do |name, value|
|
data/lib/mongoid/indexable.rb
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
require "mongoid/indexable/specification"
|
|
3
4
|
require "mongoid/indexable/validators/options"
|
|
4
5
|
require "ostruct"
|
|
5
6
|
|
|
6
7
|
module Mongoid
|
|
7
8
|
|
|
8
|
-
# Encapsulates
|
|
9
|
-
#
|
|
10
|
-
# @since 4.0.0
|
|
9
|
+
# Encapsulates behavior around defining indexes.
|
|
11
10
|
module Indexable
|
|
12
11
|
extend ActiveSupport::Concern
|
|
13
12
|
|
|
@@ -24,8 +23,6 @@ module Mongoid
|
|
|
24
23
|
# Person.create_indexes
|
|
25
24
|
#
|
|
26
25
|
# @return [ true ] If the operation succeeded.
|
|
27
|
-
#
|
|
28
|
-
# @since 1.0.0
|
|
29
26
|
def create_indexes
|
|
30
27
|
return unless index_specifications
|
|
31
28
|
|
|
@@ -50,8 +47,6 @@ module Mongoid
|
|
|
50
47
|
# Person.remove_indexes
|
|
51
48
|
#
|
|
52
49
|
# @return [ true ] If the operation succeeded.
|
|
53
|
-
#
|
|
54
|
-
# @since 3.0.0
|
|
55
50
|
def remove_indexes
|
|
56
51
|
indexed_database_names.each do |database|
|
|
57
52
|
with(database: database) do |klass|
|
|
@@ -77,11 +72,9 @@ module Mongoid
|
|
|
77
72
|
# Person.add_indexes
|
|
78
73
|
#
|
|
79
74
|
# @return [ true ] If the operation succeeded.
|
|
80
|
-
#
|
|
81
|
-
# @since 1.0.0
|
|
82
75
|
def add_indexes
|
|
83
|
-
if hereditary? && !index_keys.include?(
|
|
84
|
-
index({
|
|
76
|
+
if hereditary? && !index_keys.include?(self.discriminator_key.to_sym => 1)
|
|
77
|
+
index({ self.discriminator_key.to_sym => 1 }, unique: false, background: true)
|
|
85
78
|
end
|
|
86
79
|
true
|
|
87
80
|
end
|
|
@@ -95,12 +88,10 @@ module Mongoid
|
|
|
95
88
|
# index({ name: 1 }, { background: true })
|
|
96
89
|
# end
|
|
97
90
|
#
|
|
98
|
-
# @param [
|
|
91
|
+
# @param [ Hash ] spec The index spec.
|
|
99
92
|
# @param [ Hash ] options The index options.
|
|
100
93
|
#
|
|
101
94
|
# @return [ Hash ] The index options.
|
|
102
|
-
#
|
|
103
|
-
# @since 1.0.0
|
|
104
95
|
def index(spec, options = nil)
|
|
105
96
|
specification = Specification.new(self, spec, options)
|
|
106
97
|
if !index_specifications.include?(specification)
|
|
@@ -117,8 +108,6 @@ module Mongoid
|
|
|
117
108
|
# @param [ String ] index_name The index name.
|
|
118
109
|
#
|
|
119
110
|
# @return [ Specification ] The found specification.
|
|
120
|
-
#
|
|
121
|
-
# @since 4.0.0
|
|
122
111
|
def index_specification(index_hash, index_name = nil)
|
|
123
112
|
index = OpenStruct.new(fields: index_hash.keys, key: index_hash)
|
|
124
113
|
index_specifications.detect do |spec|
|
|
@@ -137,8 +126,6 @@ module Mongoid
|
|
|
137
126
|
# Model.indexed_database_names
|
|
138
127
|
#
|
|
139
128
|
# @return [ Array<String> ] The names.
|
|
140
|
-
#
|
|
141
|
-
# @since 3.1.0
|
|
142
129
|
def indexed_database_names
|
|
143
130
|
index_specifications.map do |spec|
|
|
144
131
|
spec.options[:database] || database_name
|
|
@@ -153,8 +140,6 @@ module Mongoid
|
|
|
153
140
|
# Model.index_keys
|
|
154
141
|
#
|
|
155
142
|
# @return [ Array<Hash> ] The specification keys.
|
|
156
|
-
#
|
|
157
|
-
# @since 4.0.0
|
|
158
143
|
def index_keys
|
|
159
144
|
index_specifications.map(&:key)
|
|
160
145
|
end
|