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
|
@@ -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,11 @@ 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
|
|
59
53
|
end
|
|
60
54
|
|
|
61
55
|
private
|
|
@@ -71,8 +65,6 @@ module Mongoid
|
|
|
71
65
|
# @param [ String ] operator The MongoDB operator.
|
|
72
66
|
#
|
|
73
67
|
# @return [ Mergeable ] The new mergeable.
|
|
74
|
-
#
|
|
75
|
-
# @since 1.0.0
|
|
76
68
|
def __add__(criterion, operator)
|
|
77
69
|
with_strategy(:__add__, criterion, operator)
|
|
78
70
|
end
|
|
@@ -89,8 +81,6 @@ module Mongoid
|
|
|
89
81
|
# @param [ String ] inner The inner MongoDB operator.
|
|
90
82
|
#
|
|
91
83
|
# @return [ Mergeable ] The new mergeable.
|
|
92
|
-
#
|
|
93
|
-
# @since 1.0.0
|
|
94
84
|
def __expanded__(criterion, outer, inner)
|
|
95
85
|
selection(criterion) do |selector, field, value|
|
|
96
86
|
selector.store(field, { outer => { inner => value }})
|
|
@@ -108,8 +98,6 @@ module Mongoid
|
|
|
108
98
|
# @param [ Hash ] criterion The criteria.
|
|
109
99
|
#
|
|
110
100
|
# @return [ Mergeable ] The cloned object.
|
|
111
|
-
#
|
|
112
|
-
# @since 2.0.0
|
|
113
101
|
def __merge__(criterion)
|
|
114
102
|
selection(criterion) do |selector, field, value|
|
|
115
103
|
selector.merge!(field.__expr_part__(value))
|
|
@@ -127,40 +115,198 @@ module Mongoid
|
|
|
127
115
|
# @param [ String ] operator The MongoDB operator.
|
|
128
116
|
#
|
|
129
117
|
# @return [ Mergeable ] The new mergeable.
|
|
130
|
-
#
|
|
131
|
-
# @since 1.0.0
|
|
132
118
|
def __intersect__(criterion, operator)
|
|
133
119
|
with_strategy(:__intersect__, criterion, operator)
|
|
134
120
|
end
|
|
135
121
|
|
|
136
|
-
# Adds
|
|
122
|
+
# Adds $and/$or/$nor criteria to a copy of this selection.
|
|
123
|
+
#
|
|
124
|
+
# Each of the criteria can be a Hash of key/value pairs or MongoDB
|
|
125
|
+
# operators (keys beginning with $), or a Selectable object
|
|
126
|
+
# (which typically will be a Criteria instance).
|
|
137
127
|
#
|
|
138
128
|
# @api private
|
|
139
129
|
#
|
|
140
130
|
# @example Add the criterion.
|
|
141
131
|
# mergeable.__multi__([ 1, 2 ], "$in")
|
|
142
132
|
#
|
|
143
|
-
# @param [ Hash ]
|
|
133
|
+
# @param [ Array<Hash | Criteria> ] criteria Multiple key/value pair
|
|
134
|
+
# matches or Criteria objects.
|
|
144
135
|
# @param [ String ] operator The MongoDB operator.
|
|
145
136
|
#
|
|
146
137
|
# @return [ Mergeable ] The new mergeable.
|
|
147
|
-
|
|
148
|
-
# @since 1.0.0
|
|
149
|
-
def __multi__(criterion, operator)
|
|
138
|
+
def __multi__(criteria, operator)
|
|
150
139
|
clone.tap do |query|
|
|
151
140
|
sel = query.selector
|
|
152
|
-
|
|
141
|
+
criteria.flatten.each do |expr|
|
|
153
142
|
next unless expr
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
hash
|
|
143
|
+
result_criteria = sel[operator] || []
|
|
144
|
+
if expr.is_a?(Selectable)
|
|
145
|
+
expr = expr.selector
|
|
158
146
|
end
|
|
159
|
-
|
|
147
|
+
normalized = _mongoid_expand_keys(expr)
|
|
148
|
+
sel.store(operator, result_criteria.push(normalized))
|
|
160
149
|
end
|
|
161
150
|
end
|
|
162
151
|
end
|
|
163
152
|
|
|
153
|
+
# Combines criteria into a MongoDB selector.
|
|
154
|
+
#
|
|
155
|
+
# Criteria is an array of criterion objects which will be flattened.
|
|
156
|
+
#
|
|
157
|
+
# Each criterion can be:
|
|
158
|
+
# - A hash
|
|
159
|
+
# - A Criteria instance
|
|
160
|
+
# - nil, in which case it is ignored
|
|
161
|
+
#
|
|
162
|
+
# @api private
|
|
163
|
+
private def _mongoid_add_top_level_operation(operator, criteria)
|
|
164
|
+
# Flatten the criteria. The idea is that predicates in MongoDB
|
|
165
|
+
# are always hashes and are never arrays. This method additionally
|
|
166
|
+
# allows Criteria instances as predicates.
|
|
167
|
+
# The flattening is existing Mongoid behavior but we could possibly
|
|
168
|
+
# get rid of it as applications can splat their predicates, or
|
|
169
|
+
# flatten if needed.
|
|
170
|
+
clone.tap do |query|
|
|
171
|
+
sel = query.selector
|
|
172
|
+
_mongoid_flatten_arrays(criteria).each do |criterion|
|
|
173
|
+
if criterion.is_a?(Selectable)
|
|
174
|
+
expr = _mongoid_expand_keys(criterion.selector)
|
|
175
|
+
else
|
|
176
|
+
expr = _mongoid_expand_keys(criterion)
|
|
177
|
+
end
|
|
178
|
+
if sel.empty?
|
|
179
|
+
sel.store(operator, [expr])
|
|
180
|
+
elsif sel.keys == [operator]
|
|
181
|
+
sel.store(operator, sel[operator] + [expr])
|
|
182
|
+
else
|
|
183
|
+
operands = [sel.dup] + [expr]
|
|
184
|
+
sel.clear
|
|
185
|
+
sel.store(operator, operands)
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
# Calling .flatten on an array which includes a Criteria instance
|
|
192
|
+
# evaluates the criteria, which we do not want. Hence this method
|
|
193
|
+
# explicitly only expands Array objects and Array subclasses.
|
|
194
|
+
private def _mongoid_flatten_arrays(array)
|
|
195
|
+
out = []
|
|
196
|
+
pending = array.dup
|
|
197
|
+
until pending.empty?
|
|
198
|
+
item = pending.shift
|
|
199
|
+
if item.nil?
|
|
200
|
+
# skip
|
|
201
|
+
elsif item.is_a?(Array)
|
|
202
|
+
pending += item
|
|
203
|
+
else
|
|
204
|
+
out << item
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
out
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
# Takes a criteria hash and expands Key objects into hashes containing
|
|
211
|
+
# MQL corresponding to said key objects. Also converts the input to
|
|
212
|
+
# BSON::Document to permit indifferent access.
|
|
213
|
+
#
|
|
214
|
+
# The argument must be a hash containing key-value pairs of the
|
|
215
|
+
# following forms:
|
|
216
|
+
# - {field_name: value}
|
|
217
|
+
# - {'field_name' => value}
|
|
218
|
+
# - {key_instance: value}
|
|
219
|
+
# - {:$operator => operator_value_expression}
|
|
220
|
+
# - {'$operator' => operator_value_expression}
|
|
221
|
+
#
|
|
222
|
+
# Ruby does not permit multiple symbol operators. For example,
|
|
223
|
+
# {:foo.gt => 1, :foo.gt => 2} is collapsed to {:foo.gt => 2} by the
|
|
224
|
+
# language. Therefore this method never has to deal with multiple
|
|
225
|
+
# identical operators.
|
|
226
|
+
#
|
|
227
|
+
# Similarly, this method should never need to expand a literal value
|
|
228
|
+
# and an operator at the same time.
|
|
229
|
+
#
|
|
230
|
+
# This method effectively converts symbol keys to string keys in
|
|
231
|
+
# the input +expr+, such that the downstream code can assume that
|
|
232
|
+
# conditions always contain string keys.
|
|
233
|
+
#
|
|
234
|
+
# @param [ Hash ] expr Criteria including Key instances.
|
|
235
|
+
#
|
|
236
|
+
# @return [ BSON::Document ] The expanded criteria.
|
|
237
|
+
private def _mongoid_expand_keys(expr)
|
|
238
|
+
unless expr.is_a?(Hash)
|
|
239
|
+
raise ArgumentError, 'Argument must be a Hash'
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
result = BSON::Document.new
|
|
243
|
+
expr.each do |field, value|
|
|
244
|
+
field.__expr_part__(value.__expand_complex__, negating?).each do |k, v|
|
|
245
|
+
if existing = result[k]
|
|
246
|
+
if existing.is_a?(Hash)
|
|
247
|
+
# Existing value is an operator.
|
|
248
|
+
# If new value is also an operator, ensure there are no
|
|
249
|
+
# conflicts and add
|
|
250
|
+
if v.is_a?(Hash)
|
|
251
|
+
# The new value is also an operator.
|
|
252
|
+
# If there are no conflicts, combine the hashes, otherwise
|
|
253
|
+
# add new conditions to top level with $and.
|
|
254
|
+
if (v.keys & existing.keys).empty?
|
|
255
|
+
existing.update(v)
|
|
256
|
+
else
|
|
257
|
+
raise NotImplementedError, 'Ruby does not allow same symbol operator with different values'
|
|
258
|
+
result['$and'] ||= []
|
|
259
|
+
result['$and'] << {k => v}
|
|
260
|
+
end
|
|
261
|
+
else
|
|
262
|
+
# The new value is a simple value.
|
|
263
|
+
# Transform the implicit equality to either $eq or $regexp
|
|
264
|
+
# depending on the type of the argument. See
|
|
265
|
+
# https://docs.mongodb.com/manual/reference/operator/query/eq/#std-label-eq-usage-examples
|
|
266
|
+
# for the description of relevant server behavior.
|
|
267
|
+
op = case v
|
|
268
|
+
when Regexp, BSON::Regexp::Raw
|
|
269
|
+
'$regex'
|
|
270
|
+
else
|
|
271
|
+
'$eq'
|
|
272
|
+
end
|
|
273
|
+
# If there isn't an $eq/$regex operator already in the
|
|
274
|
+
# query, transform the new value into an operator
|
|
275
|
+
# expression and add it to the existing hash. Otherwise
|
|
276
|
+
# add the new condition with $and to the top level.
|
|
277
|
+
if existing.key?(op)
|
|
278
|
+
raise NotImplementedError, 'Ruby does not allow same symbol operator with different values'
|
|
279
|
+
result['$and'] ||= []
|
|
280
|
+
result['$and'] << {k => v}
|
|
281
|
+
else
|
|
282
|
+
existing.update(op => v)
|
|
283
|
+
end
|
|
284
|
+
end
|
|
285
|
+
else
|
|
286
|
+
# Existing value is a simple value.
|
|
287
|
+
# See the notes above about transformations to $eq/$regex.
|
|
288
|
+
op = case existing
|
|
289
|
+
when Regexp, BSON::Regexp::Raw
|
|
290
|
+
'$regex'
|
|
291
|
+
else
|
|
292
|
+
'$eq'
|
|
293
|
+
end
|
|
294
|
+
if v.is_a?(Hash) && !v.key?(op)
|
|
295
|
+
result[k] = {op => existing}.update(v)
|
|
296
|
+
else
|
|
297
|
+
raise NotImplementedError, 'Ruby does not allow same symbol operator with different values'
|
|
298
|
+
result['$and'] ||= []
|
|
299
|
+
result['$and'] << {k => v}
|
|
300
|
+
end
|
|
301
|
+
end
|
|
302
|
+
else
|
|
303
|
+
result[k] = v
|
|
304
|
+
end
|
|
305
|
+
end
|
|
306
|
+
end
|
|
307
|
+
result
|
|
308
|
+
end
|
|
309
|
+
|
|
164
310
|
# Adds the criterion to the existing selection.
|
|
165
311
|
#
|
|
166
312
|
# @api private
|
|
@@ -172,9 +318,10 @@ module Mongoid
|
|
|
172
318
|
# @param [ String ] operator The MongoDB operator.
|
|
173
319
|
#
|
|
174
320
|
# @return [ Mergeable ] The new mergeable.
|
|
175
|
-
#
|
|
176
|
-
# @since 1.0.0
|
|
177
321
|
def __override__(criterion, operator)
|
|
322
|
+
if criterion.is_a?(Selectable)
|
|
323
|
+
criterion = criterion.selector
|
|
324
|
+
end
|
|
178
325
|
selection(criterion) do |selector, field, value|
|
|
179
326
|
expression = prepare(field, operator, value)
|
|
180
327
|
existing = selector[field]
|
|
@@ -197,8 +344,6 @@ module Mongoid
|
|
|
197
344
|
# @param [ String ] operator The MongoDB operator.
|
|
198
345
|
#
|
|
199
346
|
# @return [ Mergeable ] The new mergeable.
|
|
200
|
-
#
|
|
201
|
-
# @since 1.0.0
|
|
202
347
|
def __union__(criterion, operator)
|
|
203
348
|
with_strategy(:__union__, criterion, operator)
|
|
204
349
|
end
|
|
@@ -213,8 +358,6 @@ module Mongoid
|
|
|
213
358
|
# @param [ Symbol ] strategy The strategy to use.
|
|
214
359
|
#
|
|
215
360
|
# @return [ Mergeable ] The existing mergeable.
|
|
216
|
-
#
|
|
217
|
-
# @since 1.0.0
|
|
218
361
|
def use(strategy)
|
|
219
362
|
tap do |mergeable|
|
|
220
363
|
mergeable.strategy = strategy
|
|
@@ -233,8 +376,6 @@ module Mongoid
|
|
|
233
376
|
# @param [ String ] operator The MongoDB operator.
|
|
234
377
|
#
|
|
235
378
|
# @return [ Mergeable ] The cloned query.
|
|
236
|
-
#
|
|
237
|
-
# @since 1.0.0
|
|
238
379
|
def with_strategy(strategy, criterion, operator)
|
|
239
380
|
selection(criterion) do |selector, field, value|
|
|
240
381
|
selector.store(
|
|
@@ -255,8 +396,6 @@ module Mongoid
|
|
|
255
396
|
# @param [ Object ] value The value.
|
|
256
397
|
#
|
|
257
398
|
# @return [ Object ] The serialized value.
|
|
258
|
-
#
|
|
259
|
-
# @since 1.0.0
|
|
260
399
|
def prepare(field, operator, value)
|
|
261
400
|
unless operator =~ /exists|type|size/
|
|
262
401
|
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)
|
|
@@ -183,8 +166,6 @@ module Mongoid
|
|
|
183
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|
|
|
@@ -206,8 +187,6 @@ module Mongoid
|
|
|
206
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,8 +317,6 @@ 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
321
|
if driver == :mongo1x
|
|
359
322
|
sorting = (options[:sort] || []).dup
|
|
@@ -377,8 +340,6 @@ module Mongoid
|
|
|
377
340
|
# @param [ Array ] args The options.
|
|
378
341
|
#
|
|
379
342
|
# @return [ Queryable ] The cloned queryable.
|
|
380
|
-
#
|
|
381
|
-
# @since 1.0.0
|
|
382
343
|
def option(*args)
|
|
383
344
|
clone.tap do |query|
|
|
384
345
|
unless args.compact.empty?
|
|
@@ -398,8 +359,6 @@ module Mongoid
|
|
|
398
359
|
# @param [ Integer ] direction The sort direction.
|
|
399
360
|
#
|
|
400
361
|
# @return [ Optional ] The cloned optional.
|
|
401
|
-
#
|
|
402
|
-
# @since 1.0.0
|
|
403
362
|
def sort_with_list(*fields, direction)
|
|
404
363
|
option(fields) do |options, query|
|
|
405
364
|
fields.flatten.compact.each do |field|
|
|
@@ -417,8 +376,6 @@ module Mongoid
|
|
|
417
376
|
# Optional.forwardables
|
|
418
377
|
#
|
|
419
378
|
# @return [ Array<Symbol> ] The names of the forwardable methods.
|
|
420
|
-
#
|
|
421
|
-
# @since 1.0.0
|
|
422
379
|
def forwardables
|
|
423
380
|
public_instance_methods(false) - [ :options, :options= ]
|
|
424
381
|
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
|
|
@@ -65,8 +58,6 @@ module Mongoid
|
|
|
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,8 +83,6 @@ 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
87
|
self.class.new(aliases, serializers) do |copy|
|
|
101
88
|
each_pair do |key, value|
|
|
@@ -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)
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
module Mongoid
|
|
3
4
|
class Criteria
|
|
4
5
|
module Queryable
|
|
5
6
|
|
|
6
7
|
# Represents an aggregation pipeline.
|
|
7
|
-
#
|
|
8
|
-
# @since 2.0.0
|
|
9
8
|
class Pipeline < Array
|
|
10
9
|
|
|
11
10
|
# @attribute [r] aliases The field aliases.
|
|
@@ -18,8 +17,6 @@ module Mongoid
|
|
|
18
17
|
# pipeline.__deep_copy__
|
|
19
18
|
#
|
|
20
19
|
# @return [ Pipeline ] The cloned pipeline.
|
|
21
|
-
#
|
|
22
|
-
# @since 2.0.0
|
|
23
20
|
def __deep_copy__
|
|
24
21
|
self.class.new(aliases) do |copy|
|
|
25
22
|
each do |entry|
|
|
@@ -31,13 +28,11 @@ module Mongoid
|
|
|
31
28
|
# Add a group operation to the aggregation pipeline.
|
|
32
29
|
#
|
|
33
30
|
# @example Add a group operation.
|
|
34
|
-
# pipeline.group(:count.sum => 1, :max.max => "likes")
|
|
31
|
+
# pipeline.group(:_id => "foo", :count.sum => 1, :max.max => "likes")
|
|
35
32
|
#
|
|
36
33
|
# @param [ Hash ] entry The group entry.
|
|
37
34
|
#
|
|
38
35
|
# @return [ Pipeline ] The pipeline.
|
|
39
|
-
#
|
|
40
|
-
# @since 2.0.0
|
|
41
36
|
def group(entry)
|
|
42
37
|
push("$group" => evolve(entry.__expand_complex__))
|
|
43
38
|
end
|
|
@@ -49,8 +44,6 @@ module Mongoid
|
|
|
49
44
|
#
|
|
50
45
|
# @param [ Hash ] aliases A hash of mappings from aliases to the actual
|
|
51
46
|
# field names in the database.
|
|
52
|
-
#
|
|
53
|
-
# @since 2.0.0
|
|
54
47
|
def initialize(aliases = {})
|
|
55
48
|
@aliases = aliases
|
|
56
49
|
yield(self) if block_given?
|
|
@@ -74,11 +67,10 @@ module Mongoid
|
|
|
74
67
|
# pipeline.unwind(:field)
|
|
75
68
|
# pipeline.unwind(document)
|
|
76
69
|
#
|
|
77
|
-
# @param [ String, Symbol, Hash ] field_or_doc
|
|
70
|
+
# @param [ String, Symbol, Hash ] field_or_doc A field name or a
|
|
71
|
+
# document.
|
|
78
72
|
#
|
|
79
73
|
# @return [ Pipeline ] The pipeline.
|
|
80
|
-
#
|
|
81
|
-
# @since 2.0.0
|
|
82
74
|
def unwind(field_or_doc)
|
|
83
75
|
unless field_or_doc.respond_to? :keys
|
|
84
76
|
normalized = field_or_doc.to_s
|
|
@@ -101,8 +93,6 @@ module Mongoid
|
|
|
101
93
|
# @param [ Hash ] entry The entry to evolve.
|
|
102
94
|
#
|
|
103
95
|
# @return [ Hash ] The evolved entry.
|
|
104
|
-
#
|
|
105
|
-
# @since 2.0.0
|
|
106
96
|
def evolve(entry)
|
|
107
97
|
aggregate = Selector.new(aliases)
|
|
108
98
|
entry.each_pair do |field, value|
|