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,9 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
module Mongoid
|
|
3
4
|
class Criteria
|
|
4
5
|
module Queryable
|
|
5
6
|
|
|
6
|
-
# Contains
|
|
7
|
+
# Contains behavior for merging existing selection with new selection.
|
|
7
8
|
module Mergeable
|
|
8
9
|
|
|
9
10
|
# @attribute [rw] strategy The name of the current strategy.
|
|
@@ -15,8 +16,6 @@ module Mongoid
|
|
|
15
16
|
# mergeable.intersect.in(field: [ 1, 2, 3 ])
|
|
16
17
|
#
|
|
17
18
|
# @return [ Mergeable ] The intersect flagged mergeable.
|
|
18
|
-
#
|
|
19
|
-
# @since 1.0.0
|
|
20
19
|
def intersect
|
|
21
20
|
use(:__intersect__)
|
|
22
21
|
end
|
|
@@ -27,8 +26,6 @@ module Mongoid
|
|
|
27
26
|
# mergeable.override.in(field: [ 1, 2, 3 ])
|
|
28
27
|
#
|
|
29
28
|
# @return [ Mergeable ] The override flagged mergeable.
|
|
30
|
-
#
|
|
31
|
-
# @since 1.0.0
|
|
32
29
|
def override
|
|
33
30
|
use(:__override__)
|
|
34
31
|
end
|
|
@@ -39,8 +36,6 @@ module Mongoid
|
|
|
39
36
|
# mergeable.union.in(field: [ 1, 2, 3 ])
|
|
40
37
|
#
|
|
41
38
|
# @return [ Mergeable ] The union flagged mergeable.
|
|
42
|
-
#
|
|
43
|
-
# @since 1.0.0
|
|
44
39
|
def union
|
|
45
40
|
use(:__union__)
|
|
46
41
|
end
|
|
@@ -50,12 +45,32 @@ module Mongoid
|
|
|
50
45
|
# @example Reset the strategies.
|
|
51
46
|
# mergeable.reset_strategies!
|
|
52
47
|
#
|
|
53
|
-
# @return [
|
|
54
|
-
#
|
|
55
|
-
# @since 1.0.0
|
|
48
|
+
# @return [ Criteria ] self.
|
|
56
49
|
def reset_strategies!
|
|
57
50
|
self.strategy = nil
|
|
58
51
|
self.negating = nil
|
|
52
|
+
self
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Merge criteria with operators using the and operator.
|
|
56
|
+
#
|
|
57
|
+
# @param [ Hash ] criterion The criterion to add to the criteria.
|
|
58
|
+
# @param [ String ] operator The MongoDB operator.
|
|
59
|
+
#
|
|
60
|
+
# @return [ Criteria ] The resulting criteria.
|
|
61
|
+
def and_with_operator(criterion, operator)
|
|
62
|
+
crit = self
|
|
63
|
+
if criterion
|
|
64
|
+
criterion.each_pair do |field, value|
|
|
65
|
+
val = prepare(field, operator, value)
|
|
66
|
+
# The prepare method already takes the negation into account. We
|
|
67
|
+
# set negating to false here so that ``and`` doesn't also apply
|
|
68
|
+
# negation and we have a double negative.
|
|
69
|
+
crit.negating = false
|
|
70
|
+
crit = crit.and(field => val)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
crit
|
|
59
74
|
end
|
|
60
75
|
|
|
61
76
|
private
|
|
@@ -71,8 +86,6 @@ module Mongoid
|
|
|
71
86
|
# @param [ String ] operator The MongoDB operator.
|
|
72
87
|
#
|
|
73
88
|
# @return [ Mergeable ] The new mergeable.
|
|
74
|
-
#
|
|
75
|
-
# @since 1.0.0
|
|
76
89
|
def __add__(criterion, operator)
|
|
77
90
|
with_strategy(:__add__, criterion, operator)
|
|
78
91
|
end
|
|
@@ -89,8 +102,6 @@ module Mongoid
|
|
|
89
102
|
# @param [ String ] inner The inner MongoDB operator.
|
|
90
103
|
#
|
|
91
104
|
# @return [ Mergeable ] The new mergeable.
|
|
92
|
-
#
|
|
93
|
-
# @since 1.0.0
|
|
94
105
|
def __expanded__(criterion, outer, inner)
|
|
95
106
|
selection(criterion) do |selector, field, value|
|
|
96
107
|
selector.store(field, { outer => { inner => value }})
|
|
@@ -108,8 +119,6 @@ module Mongoid
|
|
|
108
119
|
# @param [ Hash ] criterion The criteria.
|
|
109
120
|
#
|
|
110
121
|
# @return [ Mergeable ] The cloned object.
|
|
111
|
-
#
|
|
112
|
-
# @since 2.0.0
|
|
113
122
|
def __merge__(criterion)
|
|
114
123
|
selection(criterion) do |selector, field, value|
|
|
115
124
|
selector.merge!(field.__expr_part__(value))
|
|
@@ -127,40 +136,198 @@ module Mongoid
|
|
|
127
136
|
# @param [ String ] operator The MongoDB operator.
|
|
128
137
|
#
|
|
129
138
|
# @return [ Mergeable ] The new mergeable.
|
|
130
|
-
#
|
|
131
|
-
# @since 1.0.0
|
|
132
139
|
def __intersect__(criterion, operator)
|
|
133
140
|
with_strategy(:__intersect__, criterion, operator)
|
|
134
141
|
end
|
|
135
142
|
|
|
136
|
-
# Adds
|
|
143
|
+
# Adds $and/$or/$nor criteria to a copy of this selection.
|
|
144
|
+
#
|
|
145
|
+
# Each of the criteria can be a Hash of key/value pairs or MongoDB
|
|
146
|
+
# operators (keys beginning with $), or a Selectable object
|
|
147
|
+
# (which typically will be a Criteria instance).
|
|
137
148
|
#
|
|
138
149
|
# @api private
|
|
139
150
|
#
|
|
140
151
|
# @example Add the criterion.
|
|
141
152
|
# mergeable.__multi__([ 1, 2 ], "$in")
|
|
142
153
|
#
|
|
143
|
-
# @param [ Hash ]
|
|
154
|
+
# @param [ Array<Hash | Criteria> ] criteria Multiple key/value pair
|
|
155
|
+
# matches or Criteria objects.
|
|
144
156
|
# @param [ String ] operator The MongoDB operator.
|
|
145
157
|
#
|
|
146
158
|
# @return [ Mergeable ] The new mergeable.
|
|
147
|
-
|
|
148
|
-
# @since 1.0.0
|
|
149
|
-
def __multi__(criterion, operator)
|
|
159
|
+
def __multi__(criteria, operator)
|
|
150
160
|
clone.tap do |query|
|
|
151
161
|
sel = query.selector
|
|
152
|
-
|
|
162
|
+
criteria.flatten.each do |expr|
|
|
153
163
|
next unless expr
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
164
|
+
result_criteria = sel[operator] || []
|
|
165
|
+
if expr.is_a?(Selectable)
|
|
166
|
+
expr = expr.selector
|
|
167
|
+
end
|
|
168
|
+
normalized = _mongoid_expand_keys(expr)
|
|
169
|
+
sel.store(operator, result_criteria.push(normalized))
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
# Combines criteria into a MongoDB selector.
|
|
175
|
+
#
|
|
176
|
+
# Criteria is an array of criterion objects which will be flattened.
|
|
177
|
+
#
|
|
178
|
+
# Each criterion can be:
|
|
179
|
+
# - A hash
|
|
180
|
+
# - A Criteria instance
|
|
181
|
+
# - nil, in which case it is ignored
|
|
182
|
+
#
|
|
183
|
+
# @api private
|
|
184
|
+
private def _mongoid_add_top_level_operation(operator, criteria)
|
|
185
|
+
# Flatten the criteria. The idea is that predicates in MongoDB
|
|
186
|
+
# are always hashes and are never arrays. This method additionally
|
|
187
|
+
# allows Criteria instances as predicates.
|
|
188
|
+
# The flattening is existing Mongoid behavior but we could possibly
|
|
189
|
+
# get rid of it as applications can splat their predicates, or
|
|
190
|
+
# flatten if needed.
|
|
191
|
+
clone.tap do |query|
|
|
192
|
+
sel = query.selector
|
|
193
|
+
_mongoid_flatten_arrays(criteria).each do |criterion|
|
|
194
|
+
if criterion.is_a?(Selectable)
|
|
195
|
+
expr = _mongoid_expand_keys(criterion.selector)
|
|
196
|
+
else
|
|
197
|
+
expr = _mongoid_expand_keys(criterion)
|
|
198
|
+
end
|
|
199
|
+
if sel.empty?
|
|
200
|
+
sel.store(operator, [expr])
|
|
201
|
+
elsif sel.keys == [operator]
|
|
202
|
+
sel.store(operator, sel[operator] + [expr])
|
|
203
|
+
else
|
|
204
|
+
operands = [sel.dup] + [expr]
|
|
205
|
+
sel.clear
|
|
206
|
+
sel.store(operator, operands)
|
|
158
207
|
end
|
|
159
|
-
sel.store(operator, criteria.push(normalized))
|
|
160
208
|
end
|
|
161
209
|
end
|
|
162
210
|
end
|
|
163
211
|
|
|
212
|
+
# Calling .flatten on an array which includes a Criteria instance
|
|
213
|
+
# evaluates the criteria, which we do not want. Hence this method
|
|
214
|
+
# explicitly only expands Array objects and Array subclasses.
|
|
215
|
+
private def _mongoid_flatten_arrays(array)
|
|
216
|
+
out = []
|
|
217
|
+
pending = array.dup
|
|
218
|
+
until pending.empty?
|
|
219
|
+
item = pending.shift
|
|
220
|
+
if item.nil?
|
|
221
|
+
# skip
|
|
222
|
+
elsif item.is_a?(Array)
|
|
223
|
+
pending += item
|
|
224
|
+
else
|
|
225
|
+
out << item
|
|
226
|
+
end
|
|
227
|
+
end
|
|
228
|
+
out
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
# Takes a criteria hash and expands Key objects into hashes containing
|
|
232
|
+
# MQL corresponding to said key objects. Also converts the input to
|
|
233
|
+
# BSON::Document to permit indifferent access.
|
|
234
|
+
#
|
|
235
|
+
# The argument must be a hash containing key-value pairs of the
|
|
236
|
+
# following forms:
|
|
237
|
+
# - {field_name: value}
|
|
238
|
+
# - {'field_name' => value}
|
|
239
|
+
# - {key_instance: value}
|
|
240
|
+
# - {:$operator => operator_value_expression}
|
|
241
|
+
# - {'$operator' => operator_value_expression}
|
|
242
|
+
#
|
|
243
|
+
# Ruby does not permit multiple symbol operators. For example,
|
|
244
|
+
# {:foo.gt => 1, :foo.gt => 2} is collapsed to {:foo.gt => 2} by the
|
|
245
|
+
# language. Therefore this method never has to deal with multiple
|
|
246
|
+
# identical operators.
|
|
247
|
+
#
|
|
248
|
+
# Similarly, this method should never need to expand a literal value
|
|
249
|
+
# and an operator at the same time.
|
|
250
|
+
#
|
|
251
|
+
# This method effectively converts symbol keys to string keys in
|
|
252
|
+
# the input +expr+, such that the downstream code can assume that
|
|
253
|
+
# conditions always contain string keys.
|
|
254
|
+
#
|
|
255
|
+
# @param [ Hash ] expr Criteria including Key instances.
|
|
256
|
+
#
|
|
257
|
+
# @return [ BSON::Document ] The expanded criteria.
|
|
258
|
+
private def _mongoid_expand_keys(expr)
|
|
259
|
+
unless expr.is_a?(Hash)
|
|
260
|
+
raise ArgumentError, 'Argument must be a Hash'
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
result = BSON::Document.new
|
|
264
|
+
expr.each do |field, value|
|
|
265
|
+
field.__expr_part__(value.__expand_complex__, negating?).each do |k, v|
|
|
266
|
+
if existing = result[k]
|
|
267
|
+
if existing.is_a?(Hash)
|
|
268
|
+
# Existing value is an operator.
|
|
269
|
+
# If new value is also an operator, ensure there are no
|
|
270
|
+
# conflicts and add
|
|
271
|
+
if v.is_a?(Hash)
|
|
272
|
+
# The new value is also an operator.
|
|
273
|
+
# If there are no conflicts, combine the hashes, otherwise
|
|
274
|
+
# add new conditions to top level with $and.
|
|
275
|
+
if (v.keys & existing.keys).empty?
|
|
276
|
+
existing.update(v)
|
|
277
|
+
else
|
|
278
|
+
raise NotImplementedError, 'Ruby does not allow same symbol operator with different values'
|
|
279
|
+
result['$and'] ||= []
|
|
280
|
+
result['$and'] << {k => v}
|
|
281
|
+
end
|
|
282
|
+
else
|
|
283
|
+
# The new value is a simple value.
|
|
284
|
+
# Transform the implicit equality to either $eq or $regexp
|
|
285
|
+
# depending on the type of the argument. See
|
|
286
|
+
# https://docs.mongodb.com/manual/reference/operator/query/eq/#std-label-eq-usage-examples
|
|
287
|
+
# for the description of relevant server behavior.
|
|
288
|
+
op = case v
|
|
289
|
+
when Regexp, BSON::Regexp::Raw
|
|
290
|
+
'$regex'
|
|
291
|
+
else
|
|
292
|
+
'$eq'
|
|
293
|
+
end
|
|
294
|
+
# If there isn't an $eq/$regex operator already in the
|
|
295
|
+
# query, transform the new value into an operator
|
|
296
|
+
# expression and add it to the existing hash. Otherwise
|
|
297
|
+
# add the new condition with $and to the top level.
|
|
298
|
+
if existing.key?(op)
|
|
299
|
+
raise NotImplementedError, 'Ruby does not allow same symbol operator with different values'
|
|
300
|
+
result['$and'] ||= []
|
|
301
|
+
result['$and'] << {k => v}
|
|
302
|
+
else
|
|
303
|
+
existing.update(op => v)
|
|
304
|
+
end
|
|
305
|
+
end
|
|
306
|
+
else
|
|
307
|
+
# Existing value is a simple value.
|
|
308
|
+
# See the notes above about transformations to $eq/$regex.
|
|
309
|
+
op = case existing
|
|
310
|
+
when Regexp, BSON::Regexp::Raw
|
|
311
|
+
'$regex'
|
|
312
|
+
else
|
|
313
|
+
'$eq'
|
|
314
|
+
end
|
|
315
|
+
if v.is_a?(Hash) && !v.key?(op)
|
|
316
|
+
result[k] = {op => existing}.update(v)
|
|
317
|
+
else
|
|
318
|
+
raise NotImplementedError, 'Ruby does not allow same symbol operator with different values'
|
|
319
|
+
result['$and'] ||= []
|
|
320
|
+
result['$and'] << {k => v}
|
|
321
|
+
end
|
|
322
|
+
end
|
|
323
|
+
else
|
|
324
|
+
result[k] = v
|
|
325
|
+
end
|
|
326
|
+
end
|
|
327
|
+
end
|
|
328
|
+
result
|
|
329
|
+
end
|
|
330
|
+
|
|
164
331
|
# Adds the criterion to the existing selection.
|
|
165
332
|
#
|
|
166
333
|
# @api private
|
|
@@ -172,9 +339,10 @@ module Mongoid
|
|
|
172
339
|
# @param [ String ] operator The MongoDB operator.
|
|
173
340
|
#
|
|
174
341
|
# @return [ Mergeable ] The new mergeable.
|
|
175
|
-
#
|
|
176
|
-
# @since 1.0.0
|
|
177
342
|
def __override__(criterion, operator)
|
|
343
|
+
if criterion.is_a?(Selectable)
|
|
344
|
+
criterion = criterion.selector
|
|
345
|
+
end
|
|
178
346
|
selection(criterion) do |selector, field, value|
|
|
179
347
|
expression = prepare(field, operator, value)
|
|
180
348
|
existing = selector[field]
|
|
@@ -197,8 +365,6 @@ module Mongoid
|
|
|
197
365
|
# @param [ String ] operator The MongoDB operator.
|
|
198
366
|
#
|
|
199
367
|
# @return [ Mergeable ] The new mergeable.
|
|
200
|
-
#
|
|
201
|
-
# @since 1.0.0
|
|
202
368
|
def __union__(criterion, operator)
|
|
203
369
|
with_strategy(:__union__, criterion, operator)
|
|
204
370
|
end
|
|
@@ -213,8 +379,6 @@ module Mongoid
|
|
|
213
379
|
# @param [ Symbol ] strategy The strategy to use.
|
|
214
380
|
#
|
|
215
381
|
# @return [ Mergeable ] The existing mergeable.
|
|
216
|
-
#
|
|
217
|
-
# @since 1.0.0
|
|
218
382
|
def use(strategy)
|
|
219
383
|
tap do |mergeable|
|
|
220
384
|
mergeable.strategy = strategy
|
|
@@ -233,8 +397,6 @@ module Mongoid
|
|
|
233
397
|
# @param [ String ] operator The MongoDB operator.
|
|
234
398
|
#
|
|
235
399
|
# @return [ Mergeable ] The cloned query.
|
|
236
|
-
#
|
|
237
|
-
# @since 1.0.0
|
|
238
400
|
def with_strategy(strategy, criterion, operator)
|
|
239
401
|
selection(criterion) do |selector, field, value|
|
|
240
402
|
selector.store(
|
|
@@ -255,8 +417,6 @@ module Mongoid
|
|
|
255
417
|
# @param [ Object ] value The value.
|
|
256
418
|
#
|
|
257
419
|
# @return [ Object ] The serialized value.
|
|
258
|
-
#
|
|
259
|
-
# @since 1.0.0
|
|
260
420
|
def prepare(field, operator, value)
|
|
261
421
|
unless operator =~ /exists|type|size/
|
|
262
422
|
value = value.__expand_complex__
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
module Mongoid
|
|
3
4
|
class Criteria
|
|
4
5
|
module Queryable
|
|
5
6
|
|
|
6
|
-
# The optional module includes all
|
|
7
|
+
# The optional module includes all behavior that has to do with extra
|
|
7
8
|
# options surrounding queries, like skip, limit, sorting, etc.
|
|
8
9
|
module Optional
|
|
9
10
|
extend Macroable
|
|
@@ -19,8 +20,6 @@ module Mongoid
|
|
|
19
20
|
# @param [ Array<Symbol> ] fields The fields to sort.
|
|
20
21
|
#
|
|
21
22
|
# @return [ Optional ] The cloned optional.
|
|
22
|
-
#
|
|
23
|
-
# @since 1.0.0
|
|
24
23
|
def ascending(*fields)
|
|
25
24
|
sort_with_list(*fields, 1)
|
|
26
25
|
end
|
|
@@ -37,8 +36,6 @@ module Mongoid
|
|
|
37
36
|
# @param [ Integer ] value The batch size.
|
|
38
37
|
#
|
|
39
38
|
# @return [ Optional ] The cloned optional.
|
|
40
|
-
#
|
|
41
|
-
# @since 1.0.0
|
|
42
39
|
def batch_size(value = nil)
|
|
43
40
|
option(value) { |options| options.store(:batch_size, value) }
|
|
44
41
|
end
|
|
@@ -51,8 +48,6 @@ module Mongoid
|
|
|
51
48
|
# @param [ Array<Symbol> ] fields The fields to sort.
|
|
52
49
|
#
|
|
53
50
|
# @return [ Optional ] The cloned optional.
|
|
54
|
-
#
|
|
55
|
-
# @since 1.0.0
|
|
56
51
|
def descending(*fields)
|
|
57
52
|
sort_with_list(*fields, -1)
|
|
58
53
|
end
|
|
@@ -68,8 +63,6 @@ module Mongoid
|
|
|
68
63
|
# @param [ Hash ] value The index hint.
|
|
69
64
|
#
|
|
70
65
|
# @return [ Optional ] The cloned optional.
|
|
71
|
-
#
|
|
72
|
-
# @since 1.0.0
|
|
73
66
|
def hint(value = nil)
|
|
74
67
|
option(value) { |options| options.store(:hint, value) }
|
|
75
68
|
end
|
|
@@ -82,8 +75,6 @@ module Mongoid
|
|
|
82
75
|
# @param [ Integer ] value The number of documents to return.
|
|
83
76
|
#
|
|
84
77
|
# @return [ Optional ] The cloned optional.
|
|
85
|
-
#
|
|
86
|
-
# @since 1.0.0
|
|
87
78
|
def limit(value = nil)
|
|
88
79
|
option(value) do |options, query|
|
|
89
80
|
val = value.to_i
|
|
@@ -101,8 +92,6 @@ module Mongoid
|
|
|
101
92
|
# @param [ Integer ] value The max number of documents to scan.
|
|
102
93
|
#
|
|
103
94
|
# @return [ Optional ] The cloned optional.
|
|
104
|
-
#
|
|
105
|
-
# @since 1.0.0
|
|
106
95
|
def max_scan(value = nil)
|
|
107
96
|
option(value) { |options| options.store(:max_scan, value) }
|
|
108
97
|
end
|
|
@@ -115,8 +104,6 @@ module Mongoid
|
|
|
115
104
|
# @param [ Integer ] value The max time in milliseconds for processing operations on a cursor.
|
|
116
105
|
#
|
|
117
106
|
# @return [ Optional ] The cloned optional.
|
|
118
|
-
#
|
|
119
|
-
# @since 6.0.0
|
|
120
107
|
def max_time_ms(value = nil)
|
|
121
108
|
option(value) { |options| options.store(:max_time_ms, value) }
|
|
122
109
|
end
|
|
@@ -127,8 +114,6 @@ module Mongoid
|
|
|
127
114
|
# optional.no_timeout
|
|
128
115
|
#
|
|
129
116
|
# @return [ Optional ] The cloned optional.
|
|
130
|
-
#
|
|
131
|
-
# @since 1.0.0
|
|
132
117
|
def no_timeout
|
|
133
118
|
clone.tap { |query| query.options.store(:timeout, false) }
|
|
134
119
|
end
|
|
@@ -141,8 +126,6 @@ module Mongoid
|
|
|
141
126
|
# @param [ Array<Symbol> ] args The fields to return.
|
|
142
127
|
#
|
|
143
128
|
# @return [ Optional ] The cloned optional.
|
|
144
|
-
#
|
|
145
|
-
# @since 1.0.0
|
|
146
129
|
def only(*args)
|
|
147
130
|
args = args.flatten
|
|
148
131
|
option(*args) do |options|
|
|
@@ -169,10 +152,10 @@ module Mongoid
|
|
|
169
152
|
# optional.order_by([[ name, 1 ], [ dob, -1 ]])
|
|
170
153
|
#
|
|
171
154
|
# @example Add sorting options via an array with symbol directions.
|
|
172
|
-
# optional.order_by([[ name, :asc ], [ dob, :desc ]])
|
|
155
|
+
# optional.order_by([[ :name, :asc ], [ :dob, :desc ]])
|
|
173
156
|
#
|
|
174
157
|
# @example Add sorting options via an array with string directions.
|
|
175
|
-
# optional.order_by([[ name, "asc" ], [ dob, "desc" ]])
|
|
158
|
+
# optional.order_by([[ "name", "asc" ], [ "dob", "desc" ]])
|
|
176
159
|
#
|
|
177
160
|
# @example Add sorting options with keys.
|
|
178
161
|
# optional.order_by(:name.asc, :dob.desc)
|
|
@@ -180,11 +163,9 @@ module Mongoid
|
|
|
180
163
|
# @example Add sorting options via a string.
|
|
181
164
|
# optional.order_by("name ASC, dob DESC")
|
|
182
165
|
#
|
|
183
|
-
# @param [ Array
|
|
166
|
+
# @param [ Array | Hash | String ] spec The sorting specification.
|
|
184
167
|
#
|
|
185
168
|
# @return [ Optional ] The cloned optional.
|
|
186
|
-
#
|
|
187
|
-
# @since 1.0.0
|
|
188
169
|
def order_by(*spec)
|
|
189
170
|
option(spec) do |options, query|
|
|
190
171
|
spec.compact.each do |criterion|
|
|
@@ -203,11 +184,9 @@ module Mongoid
|
|
|
203
184
|
# @example Replace the ordering.
|
|
204
185
|
# optional.reorder(name: :asc)
|
|
205
186
|
#
|
|
206
|
-
# @param [ Array
|
|
187
|
+
# @param [ Array | Hash | String ] spec The sorting specification.
|
|
207
188
|
#
|
|
208
189
|
# @return [ Optional ] The cloned optional.
|
|
209
|
-
#
|
|
210
|
-
# @since 2.1.0
|
|
211
190
|
def reorder(*spec)
|
|
212
191
|
clone.tap do |query|
|
|
213
192
|
query.options.delete(:sort)
|
|
@@ -222,8 +201,6 @@ module Mongoid
|
|
|
222
201
|
# @param [ Integer ] value The number to skip.
|
|
223
202
|
#
|
|
224
203
|
# @return [ Optional ] The cloned optional.
|
|
225
|
-
#
|
|
226
|
-
# @since 1.0.0
|
|
227
204
|
def skip(value = nil)
|
|
228
205
|
option(value) do |options, query|
|
|
229
206
|
val = value.to_i
|
|
@@ -241,8 +218,6 @@ module Mongoid
|
|
|
241
218
|
# @param [ Hash ] criterion The slice options.
|
|
242
219
|
#
|
|
243
220
|
# @return [ Optional ] The cloned optional.
|
|
244
|
-
#
|
|
245
|
-
# @since 1.0.0
|
|
246
221
|
def slice(criterion = nil)
|
|
247
222
|
option(criterion) do |options|
|
|
248
223
|
options.__union__(
|
|
@@ -259,8 +234,6 @@ module Mongoid
|
|
|
259
234
|
# optional.snapshot
|
|
260
235
|
#
|
|
261
236
|
# @return [ Optional ] The cloned optional.
|
|
262
|
-
#
|
|
263
|
-
# @since 1.0.0
|
|
264
237
|
def snapshot
|
|
265
238
|
clone.tap do |query|
|
|
266
239
|
query.options.store(:snapshot, true)
|
|
@@ -275,8 +248,6 @@ module Mongoid
|
|
|
275
248
|
# @param [ Array<Symbol> ] args The fields to ignore.
|
|
276
249
|
#
|
|
277
250
|
# @return [ Optional ] The cloned optional.
|
|
278
|
-
#
|
|
279
|
-
# @since 1.0.0
|
|
280
251
|
def without(*args)
|
|
281
252
|
args = args.flatten
|
|
282
253
|
option(*args) do |options|
|
|
@@ -299,8 +270,6 @@ module Mongoid
|
|
|
299
270
|
# @param [ String ] comment The comment to be associated with the query.
|
|
300
271
|
#
|
|
301
272
|
# @return [ Optional ] The cloned optional.
|
|
302
|
-
#
|
|
303
|
-
# @since 2.2.0
|
|
304
273
|
def comment(comment = nil)
|
|
305
274
|
clone.tap do |query|
|
|
306
275
|
query.options.store(:comment, comment)
|
|
@@ -318,8 +287,6 @@ module Mongoid
|
|
|
318
287
|
# @param [ Symbol ] type The type of cursor to create.
|
|
319
288
|
#
|
|
320
289
|
# @return [ Optional ] The cloned optional.
|
|
321
|
-
#
|
|
322
|
-
# @since 2.2.0
|
|
323
290
|
def cursor_type(type)
|
|
324
291
|
clone.tap { |query| query.options.store(:cursor_type, type) }
|
|
325
292
|
end
|
|
@@ -332,8 +299,6 @@ module Mongoid
|
|
|
332
299
|
# @param [ Hash ] collation_doc The document describing the collation to use.
|
|
333
300
|
#
|
|
334
301
|
# @return [ Optional ] The cloned optional.
|
|
335
|
-
#
|
|
336
|
-
# @since 6.1.0
|
|
337
302
|
def collation(collation_doc)
|
|
338
303
|
clone.tap { |query| query.options.store(:collation, collation_doc) }
|
|
339
304
|
end
|
|
@@ -352,18 +317,10 @@ module Mongoid
|
|
|
352
317
|
# @param [ Integer ] direction The sort direction.
|
|
353
318
|
#
|
|
354
319
|
# @return [ Optional ] The cloned optional.
|
|
355
|
-
#
|
|
356
|
-
# @since 1.0.0
|
|
357
320
|
def add_sort_option(options, field, direction)
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
options.store(:sort, sorting)
|
|
362
|
-
else
|
|
363
|
-
sorting = (options[:sort] || {}).dup
|
|
364
|
-
sorting[field] = direction
|
|
365
|
-
options.store(:sort, sorting)
|
|
366
|
-
end
|
|
321
|
+
sorting = (options[:sort] || {}).dup
|
|
322
|
+
sorting[field] = direction
|
|
323
|
+
options.store(:sort, sorting)
|
|
367
324
|
end
|
|
368
325
|
|
|
369
326
|
# Take the provided criterion and store it as an option in the query
|
|
@@ -377,8 +334,6 @@ module Mongoid
|
|
|
377
334
|
# @param [ Array ] args The options.
|
|
378
335
|
#
|
|
379
336
|
# @return [ Queryable ] The cloned queryable.
|
|
380
|
-
#
|
|
381
|
-
# @since 1.0.0
|
|
382
337
|
def option(*args)
|
|
383
338
|
clone.tap do |query|
|
|
384
339
|
unless args.compact.empty?
|
|
@@ -398,8 +353,6 @@ module Mongoid
|
|
|
398
353
|
# @param [ Integer ] direction The sort direction.
|
|
399
354
|
#
|
|
400
355
|
# @return [ Optional ] The cloned optional.
|
|
401
|
-
#
|
|
402
|
-
# @since 1.0.0
|
|
403
356
|
def sort_with_list(*fields, direction)
|
|
404
357
|
option(fields) do |options, query|
|
|
405
358
|
fields.flatten.compact.each do |field|
|
|
@@ -417,8 +370,6 @@ module Mongoid
|
|
|
417
370
|
# Optional.forwardables
|
|
418
371
|
#
|
|
419
372
|
# @return [ Array<Symbol> ] The names of the forwardable methods.
|
|
420
|
-
#
|
|
421
|
-
# @since 1.0.0
|
|
422
373
|
def forwardables
|
|
423
374
|
public_instance_methods(false) - [ :options, :options= ]
|
|
424
375
|
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
module Mongoid
|
|
3
4
|
class Criteria
|
|
4
5
|
module Queryable
|
|
@@ -13,8 +14,6 @@ module Mongoid
|
|
|
13
14
|
# options.fields
|
|
14
15
|
#
|
|
15
16
|
# @return [ Hash ] The fields options.
|
|
16
|
-
#
|
|
17
|
-
# @since 1.0.0
|
|
18
17
|
def fields
|
|
19
18
|
self[:fields]
|
|
20
19
|
end
|
|
@@ -25,8 +24,6 @@ module Mongoid
|
|
|
25
24
|
# options.limit
|
|
26
25
|
#
|
|
27
26
|
# @return [ Integer ] The limit option.
|
|
28
|
-
#
|
|
29
|
-
# @since 1.0.0
|
|
30
27
|
def limit
|
|
31
28
|
self[:limit]
|
|
32
29
|
end
|
|
@@ -37,8 +34,6 @@ module Mongoid
|
|
|
37
34
|
# options.skip
|
|
38
35
|
#
|
|
39
36
|
# @return [ Integer ] The skip option.
|
|
40
|
-
#
|
|
41
|
-
# @since 1.0.0
|
|
42
37
|
def skip
|
|
43
38
|
self[:skip]
|
|
44
39
|
end
|
|
@@ -49,8 +44,6 @@ module Mongoid
|
|
|
49
44
|
# options.sort
|
|
50
45
|
#
|
|
51
46
|
# @return [ Hash ] The sort options.
|
|
52
|
-
#
|
|
53
|
-
# @since 1.0.0
|
|
54
47
|
def sort
|
|
55
48
|
self[:sort]
|
|
56
49
|
end
|
|
@@ -61,12 +54,10 @@ module Mongoid
|
|
|
61
54
|
# @example Store a value in the options.
|
|
62
55
|
# options.store(:key, "testing")
|
|
63
56
|
#
|
|
64
|
-
# @param [ String
|
|
57
|
+
# @param [ String | Symbol ] key The name of the attribute.
|
|
65
58
|
# @param [ Object ] value The value to add.
|
|
66
59
|
#
|
|
67
60
|
# @return [ Object ] The stored object.
|
|
68
|
-
#
|
|
69
|
-
# @since 1.0.0
|
|
70
61
|
def store(key, value, localize = true)
|
|
71
62
|
super(key, evolve(value, localize))
|
|
72
63
|
end
|
|
@@ -78,8 +69,6 @@ module Mongoid
|
|
|
78
69
|
# options.to_pipeline
|
|
79
70
|
#
|
|
80
71
|
# @return [ Array<Hash> ] The options in pipeline form.
|
|
81
|
-
#
|
|
82
|
-
# @since 2.0.0
|
|
83
72
|
def to_pipeline
|
|
84
73
|
pipeline = []
|
|
85
74
|
pipeline.push({ "$skip" => skip }) if skip
|
|
@@ -94,10 +83,8 @@ module Mongoid
|
|
|
94
83
|
# options.__deep_copy__
|
|
95
84
|
#
|
|
96
85
|
# @return [ Options ] The copied options.
|
|
97
|
-
#
|
|
98
|
-
# @since 6.1.1
|
|
99
86
|
def __deep_copy__
|
|
100
|
-
self.class.new(aliases, serializers) do |copy|
|
|
87
|
+
self.class.new(aliases, serializers, associations, aliased_associations) do |copy|
|
|
101
88
|
each_pair do |key, value|
|
|
102
89
|
copy.merge!(key => value.__deep_copy__)
|
|
103
90
|
end
|
|
@@ -116,8 +103,6 @@ module Mongoid
|
|
|
116
103
|
# @param [ Object ] value The value to serialize.
|
|
117
104
|
#
|
|
118
105
|
# @return [ Object ] The serialized object.
|
|
119
|
-
#
|
|
120
|
-
# @since 1.0.0
|
|
121
106
|
def evolve(value, localize = true)
|
|
122
107
|
case value
|
|
123
108
|
when Hash
|
|
@@ -137,8 +122,6 @@ module Mongoid
|
|
|
137
122
|
# @param [ Hash ] value The hash to serialize.
|
|
138
123
|
#
|
|
139
124
|
# @return [ Object ] The serialized hash.
|
|
140
|
-
#
|
|
141
|
-
# @since 1.0.0
|
|
142
125
|
def evolve_hash(value, localize = true)
|
|
143
126
|
value.inject({}) do |hash, (field, _value)|
|
|
144
127
|
name, serializer = storage_pair(field)
|