mongoid 7.0.10 → 7.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +30 -30
- data/README.md +32 -19
- data/Rakefile +51 -7
- data/lib/config/locales/en.yml +129 -70
- data/lib/mongoid/association/accessors.rb +143 -80
- data/lib/mongoid/association/bindable.rb +7 -26
- data/lib/mongoid/association/builders.rb +4 -12
- data/lib/mongoid/association/constrainable.rb +5 -6
- data/lib/mongoid/association/depending.rb +9 -18
- data/lib/mongoid/association/eager_loadable.rb +2 -3
- data/lib/mongoid/association/embedded/batchable.rb +16 -42
- data/lib/mongoid/association/embedded/cyclic.rb +10 -17
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +3 -7
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +7 -4
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +14 -24
- data/lib/mongoid/association/embedded/embedded_in.rb +6 -26
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +4 -8
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +8 -5
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +90 -93
- data/lib/mongoid/association/embedded/embeds_many.rb +6 -34
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +4 -8
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +9 -6
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +42 -27
- data/lib/mongoid/association/embedded/embeds_one.rb +6 -30
- data/lib/mongoid/association/embedded.rb +2 -0
- data/lib/mongoid/association/macros.rb +44 -41
- data/lib/mongoid/association/many.rb +16 -30
- data/lib/mongoid/association/marshalable.rb +3 -6
- data/lib/mongoid/association/nested/many.rb +18 -27
- data/lib/mongoid/association/nested/nested_buildable.rb +5 -11
- data/lib/mongoid/association/nested/one.rb +16 -27
- data/lib/mongoid/association/nested.rb +3 -3
- data/lib/mongoid/association/one.rb +4 -11
- data/lib/mongoid/association/options.rb +8 -38
- data/lib/mongoid/association/proxy.rb +37 -36
- data/lib/mongoid/association/referenced/auto_save.rb +5 -11
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +4 -9
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +11 -9
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +40 -3
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +16 -27
- data/lib/mongoid/association/referenced/belongs_to.rb +14 -36
- data/lib/mongoid/association/referenced/counter_cache.rb +4 -15
- data/lib/mongoid/association/referenced/eager.rb +39 -38
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +12 -11
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +37 -57
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +23 -43
- data/lib/mongoid/association/referenced/has_many/binding.rb +3 -6
- data/lib/mongoid/association/referenced/has_many/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +444 -456
- data/lib/mongoid/association/referenced/has_many/proxy.rb +74 -107
- data/lib/mongoid/association/referenced/has_many.rb +18 -42
- data/lib/mongoid/association/referenced/has_one/binding.rb +4 -9
- data/lib/mongoid/association/referenced/has_one/buildable.rb +20 -6
- data/lib/mongoid/association/referenced/has_one/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +13 -26
- data/lib/mongoid/association/referenced/has_one/proxy.rb +23 -25
- data/lib/mongoid/association/referenced/has_one.rb +13 -33
- data/lib/mongoid/association/referenced/syncable.rb +7 -22
- data/lib/mongoid/association/referenced.rb +2 -0
- data/lib/mongoid/association/reflections.rb +7 -6
- data/lib/mongoid/association/relatable.rb +18 -74
- data/lib/mongoid/association.rb +8 -22
- data/lib/mongoid/atomic/modifiers.rb +27 -51
- data/lib/mongoid/atomic/paths/embedded/many.rb +4 -7
- data/lib/mongoid/atomic/paths/embedded/one.rb +4 -7
- data/lib/mongoid/atomic/paths/embedded.rb +2 -3
- data/lib/mongoid/atomic/paths/root.rb +4 -7
- data/lib/mongoid/atomic/paths.rb +2 -1
- data/lib/mongoid/atomic.rb +29 -44
- data/lib/mongoid/attributes/dynamic.rb +3 -18
- data/lib/mongoid/attributes/nested.rb +7 -10
- data/lib/mongoid/attributes/processing.rb +9 -24
- data/lib/mongoid/attributes/projector.rb +119 -0
- data/lib/mongoid/attributes/readonly.rb +3 -6
- data/lib/mongoid/attributes.rb +46 -60
- data/lib/mongoid/cacheable.rb +6 -9
- data/lib/mongoid/changeable.rb +6 -60
- data/lib/mongoid/clients/factory.rb +42 -17
- data/lib/mongoid/clients/options.rb +10 -13
- data/lib/mongoid/clients/sessions.rb +2 -6
- data/lib/mongoid/clients/storage_options.rb +7 -12
- data/lib/mongoid/clients/validators/storage.rb +2 -9
- data/lib/mongoid/clients/validators.rb +2 -1
- data/lib/mongoid/clients.rb +3 -10
- data/lib/mongoid/composable.rb +5 -9
- data/lib/mongoid/config/environment.rb +15 -6
- data/lib/mongoid/config/options.rb +20 -23
- data/lib/mongoid/config/validators/client.rb +2 -17
- data/lib/mongoid/config/validators/option.rb +2 -3
- data/lib/mongoid/config/validators.rb +2 -1
- data/lib/mongoid/config.rb +112 -41
- data/lib/mongoid/contextual/aggregable/memory.rb +17 -12
- data/lib/mongoid/contextual/aggregable/mongo.rb +25 -26
- data/lib/mongoid/contextual/aggregable/none.rb +65 -0
- data/lib/mongoid/contextual/aggregable.rb +17 -0
- data/lib/mongoid/contextual/atomic.rb +29 -31
- data/lib/mongoid/contextual/command.rb +2 -5
- data/lib/mongoid/contextual/geo_near.rb +6 -37
- data/lib/mongoid/contextual/map_reduce.rb +5 -33
- data/lib/mongoid/contextual/memory.rb +8 -61
- data/lib/mongoid/contextual/mongo.rb +160 -82
- data/lib/mongoid/contextual/none.rb +44 -28
- data/lib/mongoid/contextual/queryable.rb +2 -3
- data/lib/mongoid/contextual.rb +7 -9
- data/lib/mongoid/copyable.rb +11 -10
- data/lib/mongoid/criteria/findable.rb +12 -15
- data/lib/mongoid/criteria/includable.rb +8 -15
- data/lib/mongoid/criteria/inspectable.rb +2 -3
- data/lib/mongoid/criteria/marshalable.rb +2 -5
- data/lib/mongoid/criteria/modifiable.rb +2 -19
- data/lib/mongoid/criteria/options.rb +2 -3
- data/lib/mongoid/criteria/permission.rb +2 -1
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -13
- data/lib/mongoid/criteria/queryable/expandable.rb +68 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +4 -27
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -4
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +3 -4
- data/lib/mongoid/criteria/queryable/extensions/date.rb +3 -8
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +5 -11
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +3 -26
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +3 -14
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +3 -12
- data/lib/mongoid/criteria/queryable/extensions/object.rb +4 -29
- data/lib/mongoid/criteria/queryable/extensions/range.rb +41 -17
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +6 -13
- data/lib/mongoid/criteria/queryable/extensions/set.rb +3 -4
- data/lib/mongoid/criteria/queryable/extensions/string.rb +3 -18
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -10
- data/lib/mongoid/criteria/queryable/extensions/time.rb +3 -8
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +3 -8
- data/lib/mongoid/criteria/queryable/extensions.rb +1 -4
- data/lib/mongoid/criteria/queryable/key.rb +36 -21
- data/lib/mongoid/criteria/queryable/macroable.rb +3 -4
- data/lib/mongoid/criteria/queryable/mergeable.rb +179 -40
- data/lib/mongoid/criteria/queryable/optional.rb +5 -48
- data/lib/mongoid/criteria/queryable/options.rb +2 -19
- data/lib/mongoid/criteria/queryable/pipeline.rb +5 -15
- data/lib/mongoid/criteria/queryable/selectable.rb +414 -162
- data/lib/mongoid/criteria/queryable/selector.rb +36 -24
- data/lib/mongoid/criteria/queryable/smash.rb +2 -11
- data/lib/mongoid/criteria/queryable/storable.rb +237 -0
- data/lib/mongoid/criteria/queryable.rb +7 -9
- data/lib/mongoid/criteria/scopable.rb +27 -19
- data/lib/mongoid/criteria.rb +79 -72
- data/lib/mongoid/document.rb +24 -73
- data/lib/mongoid/equality.rb +29 -12
- data/lib/mongoid/errors/ambiguous_relationship.rb +4 -5
- data/lib/mongoid/errors/callback.rb +2 -3
- data/lib/mongoid/errors/criteria_argument_required.rb +18 -0
- data/lib/mongoid/errors/delete_restriction.rb +10 -13
- data/lib/mongoid/errors/document_not_destroyed.rb +4 -7
- data/lib/mongoid/errors/document_not_found.rb +2 -9
- data/lib/mongoid/errors/eager_load.rb +6 -5
- data/lib/mongoid/errors/empty_config_file.rb +25 -0
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +2 -3
- data/lib/mongoid/errors/invalid_collection.rb +2 -1
- data/lib/mongoid/errors/invalid_config_file.rb +25 -0
- data/lib/mongoid/errors/invalid_config_option.rb +2 -3
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +2 -3
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +24 -0
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +25 -0
- data/lib/mongoid/errors/invalid_expression_operator.rb +27 -0
- data/lib/mongoid/errors/invalid_field.rb +2 -5
- data/lib/mongoid/errors/invalid_field_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_field_option.rb +2 -3
- data/lib/mongoid/errors/invalid_find.rb +2 -3
- data/lib/mongoid/errors/invalid_includes.rb +2 -3
- data/lib/mongoid/errors/invalid_index.rb +2 -3
- data/lib/mongoid/errors/invalid_options.rb +4 -5
- data/lib/mongoid/errors/invalid_path.rb +2 -3
- data/lib/mongoid/errors/invalid_persistence_option.rb +2 -5
- data/lib/mongoid/errors/invalid_query.rb +40 -0
- data/lib/mongoid/errors/invalid_relation.rb +4 -9
- data/lib/mongoid/errors/invalid_relation_option.rb +4 -5
- data/lib/mongoid/errors/invalid_scope.rb +2 -3
- data/lib/mongoid/errors/invalid_session_use.rb +3 -6
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +6 -5
- data/lib/mongoid/errors/invalid_storage_options.rb +2 -3
- data/lib/mongoid/errors/invalid_storage_parent.rb +2 -3
- data/lib/mongoid/errors/invalid_time.rb +2 -3
- data/lib/mongoid/errors/invalid_value.rb +2 -1
- data/lib/mongoid/errors/inverse_not_found.rb +3 -4
- data/lib/mongoid/errors/mixed_client_configuration.rb +2 -3
- data/lib/mongoid/errors/mixed_relations.rb +2 -3
- data/lib/mongoid/errors/mongoid_error.rb +3 -10
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +3 -4
- data/lib/mongoid/errors/no_client_config.rb +4 -5
- data/lib/mongoid/errors/no_client_database.rb +2 -3
- data/lib/mongoid/errors/no_client_hosts.rb +2 -3
- data/lib/mongoid/errors/no_clients_config.rb +2 -3
- data/lib/mongoid/errors/no_default_client.rb +3 -4
- data/lib/mongoid/errors/no_environment.rb +2 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +2 -3
- data/lib/mongoid/errors/no_metadata.rb +2 -3
- data/lib/mongoid/errors/no_parent.rb +2 -3
- data/lib/mongoid/errors/readonly_attribute.rb +2 -3
- data/lib/mongoid/errors/readonly_document.rb +3 -6
- data/lib/mongoid/errors/scope_overwrite.rb +2 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +2 -0
- data/lib/mongoid/errors/unknown_attribute.rb +2 -3
- data/lib/mongoid/errors/unknown_model.rb +2 -3
- data/lib/mongoid/errors/unsaved_document.rb +3 -2
- data/lib/mongoid/errors/unsupported_javascript.rb +2 -3
- data/lib/mongoid/errors/validations.rb +2 -1
- data/lib/mongoid/errors.rb +12 -1
- data/lib/mongoid/evolvable.rb +4 -5
- data/lib/mongoid/extensions/array.rb +28 -37
- data/lib/mongoid/extensions/big_decimal.rb +2 -11
- data/lib/mongoid/extensions/boolean.rb +3 -5
- data/lib/mongoid/extensions/date.rb +13 -12
- data/lib/mongoid/extensions/date_time.rb +4 -12
- data/lib/mongoid/extensions/decimal128.rb +2 -5
- data/lib/mongoid/extensions/false_class.rb +4 -7
- data/lib/mongoid/extensions/float.rb +5 -10
- data/lib/mongoid/extensions/hash.rb +47 -34
- data/lib/mongoid/extensions/integer.rb +5 -12
- data/lib/mongoid/extensions/module.rb +2 -3
- data/lib/mongoid/extensions/nil_class.rb +2 -5
- data/lib/mongoid/extensions/object.rb +17 -44
- data/lib/mongoid/extensions/object_id.rb +2 -7
- data/lib/mongoid/extensions/range.rb +2 -11
- data/lib/mongoid/extensions/regexp.rb +2 -3
- data/lib/mongoid/extensions/set.rb +2 -7
- data/lib/mongoid/extensions/string.rb +19 -39
- data/lib/mongoid/extensions/symbol.rb +2 -7
- data/lib/mongoid/extensions/time.rb +12 -9
- data/lib/mongoid/extensions/time_with_zone.rb +25 -7
- data/lib/mongoid/extensions/true_class.rb +4 -7
- data/lib/mongoid/extensions.rb +18 -3
- data/lib/mongoid/factory.rb +52 -13
- data/lib/mongoid/fields/foreign_key.rb +3 -22
- data/lib/mongoid/fields/localized.rb +2 -11
- data/lib/mongoid/fields/standard.rb +6 -36
- data/lib/mongoid/fields/validators/macro.rb +36 -18
- data/lib/mongoid/fields/validators.rb +2 -1
- data/lib/mongoid/fields.rb +113 -63
- data/lib/mongoid/findable.rb +59 -23
- data/lib/mongoid/indexable/specification.rb +3 -16
- data/lib/mongoid/indexable/validators/options.rb +2 -7
- data/lib/mongoid/indexable.rb +6 -21
- data/lib/mongoid/inspectable.rb +4 -11
- data/lib/mongoid/interceptable.rb +13 -30
- data/lib/mongoid/loggable.rb +13 -16
- data/lib/mongoid/matchable.rb +2 -153
- data/lib/mongoid/matcher/all.rb +22 -0
- data/lib/mongoid/matcher/and.rb +21 -0
- data/lib/mongoid/matcher/bits.rb +41 -0
- data/lib/mongoid/matcher/bits_all_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_all_set.rb +20 -0
- data/lib/mongoid/matcher/bits_any_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_any_set.rb +20 -0
- data/lib/mongoid/matcher/elem_match.rb +36 -0
- data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
- data/lib/mongoid/matcher/eq.rb +11 -0
- data/lib/mongoid/matcher/eq_impl.rb +67 -0
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +26 -0
- data/lib/mongoid/matcher/exists.rb +15 -0
- data/lib/mongoid/matcher/expression.rb +35 -0
- data/lib/mongoid/matcher/expression_operator.rb +19 -0
- data/lib/mongoid/matcher/field_expression.rb +62 -0
- data/lib/mongoid/matcher/field_operator.rb +54 -0
- data/lib/mongoid/matcher/gt.rb +17 -0
- data/lib/mongoid/matcher/gte.rb +17 -0
- data/lib/mongoid/matcher/in.rb +25 -0
- data/lib/mongoid/matcher/lt.rb +17 -0
- data/lib/mongoid/matcher/lte.rb +17 -0
- data/lib/mongoid/matcher/mod.rb +17 -0
- data/lib/mongoid/matcher/ne.rb +16 -0
- data/lib/mongoid/matcher/nin.rb +11 -0
- data/lib/mongoid/matcher/nor.rb +25 -0
- data/lib/mongoid/matcher/not.rb +29 -0
- data/lib/mongoid/matcher/or.rb +21 -0
- data/lib/mongoid/matcher/regex.rb +41 -0
- data/lib/mongoid/matcher/size.rb +26 -0
- data/lib/mongoid/matcher/type.rb +99 -0
- data/lib/mongoid/matcher.rb +110 -0
- data/lib/mongoid/persistable/creatable.rb +4 -21
- data/lib/mongoid/persistable/deletable.rb +5 -21
- data/lib/mongoid/persistable/destroyable.rb +11 -10
- data/lib/mongoid/persistable/incrementable.rb +6 -7
- data/lib/mongoid/persistable/logical.rb +4 -6
- data/lib/mongoid/persistable/poppable.rb +3 -6
- data/lib/mongoid/persistable/pullable.rb +3 -8
- data/lib/mongoid/persistable/pushable.rb +3 -8
- data/lib/mongoid/persistable/renamable.rb +10 -8
- data/lib/mongoid/persistable/savable.rb +3 -8
- data/lib/mongoid/persistable/settable.rb +3 -6
- data/lib/mongoid/persistable/unsettable.rb +8 -8
- data/lib/mongoid/persistable/updatable.rb +32 -20
- data/lib/mongoid/persistable/upsertable.rb +3 -8
- data/lib/mongoid/persistable.rb +133 -38
- data/lib/mongoid/persistence_context.rb +23 -36
- data/lib/mongoid/positional.rb +2 -5
- data/lib/mongoid/query_cache.rb +118 -103
- data/lib/mongoid/railtie.rb +3 -16
- data/lib/mongoid/railties/controller_runtime.rb +3 -1
- data/lib/mongoid/railties/database.rake +9 -0
- data/lib/mongoid/reloadable.rb +14 -19
- data/lib/mongoid/scopable.rb +8 -35
- data/lib/mongoid/selectable.rb +8 -17
- data/lib/mongoid/serializable.rb +24 -29
- data/lib/mongoid/shardable.rb +80 -17
- data/lib/mongoid/stateful.rb +3 -10
- data/lib/mongoid/stringified_symbol.rb +52 -0
- data/lib/mongoid/tasks/database.rake +12 -5
- data/lib/mongoid/tasks/database.rb +85 -5
- data/lib/mongoid/threaded/lifecycle.rb +2 -21
- data/lib/mongoid/threaded.rb +2 -55
- data/lib/mongoid/timestamps/created/short.rb +2 -1
- data/lib/mongoid/timestamps/created.rb +3 -2
- data/lib/mongoid/timestamps/short.rb +2 -1
- data/lib/mongoid/timestamps/timeless.rb +6 -9
- data/lib/mongoid/timestamps/updated/short.rb +2 -1
- data/lib/mongoid/timestamps/updated.rb +3 -4
- data/lib/mongoid/timestamps.rb +3 -2
- data/lib/mongoid/touchable.rb +53 -23
- data/lib/mongoid/traversable.rb +177 -57
- data/lib/mongoid/validatable/associated.rb +5 -6
- data/lib/mongoid/validatable/format.rb +2 -1
- data/lib/mongoid/validatable/length.rb +2 -1
- data/lib/mongoid/validatable/localizable.rb +2 -3
- data/lib/mongoid/validatable/macros.rb +2 -7
- data/lib/mongoid/validatable/presence.rb +8 -13
- data/lib/mongoid/validatable/queryable.rb +2 -3
- data/lib/mongoid/validatable/uniqueness.rb +20 -33
- data/lib/mongoid/validatable.rb +8 -27
- data/lib/mongoid/version.rb +2 -2
- data/lib/mongoid.rb +32 -15
- data/lib/rails/generators/mongoid/config/config_generator.rb +10 -2
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +45 -30
- data/lib/rails/generators/mongoid/model/model_generator.rb +3 -2
- data/lib/rails/generators/mongoid_generator.rb +2 -1
- data/lib/rails/mongoid.rb +4 -5
- data/spec/README.md +19 -4
- data/spec/config/mongoid.yml +1 -0
- data/spec/integration/app_spec.rb +246 -95
- data/spec/integration/associations/belongs_to_spec.rb +2 -0
- data/spec/integration/associations/embedded_dirty_spec.rb +29 -0
- data/spec/integration/associations/embedded_spec.rb +207 -1
- data/spec/integration/associations/embeds_many_spec.rb +206 -0
- data/spec/integration/associations/embeds_one_spec.rb +23 -0
- data/spec/integration/associations/foreign_key_spec.rb +98 -0
- data/spec/integration/associations/foreign_key_spec_models.rb +64 -0
- data/spec/integration/associations/has_many_spec.rb +128 -0
- data/spec/integration/associations/has_one_spec.rb +176 -0
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +115 -0
- data/spec/integration/associations/reverse_population_spec.rb +34 -0
- data/spec/integration/associations/reverse_population_spec_models.rb +36 -0
- data/spec/integration/associations/scope_option_spec.rb +101 -0
- data/spec/integration/atomic/modifiers_spec.rb +116 -0
- data/spec/integration/bson_regexp_raw_spec.rb +19 -0
- data/spec/integration/callbacks_models.rb +61 -0
- data/spec/integration/callbacks_spec.rb +228 -0
- data/spec/integration/contextual/empty_spec.rb +141 -0
- data/spec/integration/criteria/alias_query_spec.rb +161 -0
- data/spec/integration/criteria/date_field_spec.rb +1 -2
- data/spec/integration/criteria/default_scope_spec.rb +72 -0
- data/spec/integration/criteria/logical_spec.rb +124 -0
- data/spec/integration/criteria/range_spec.rb +265 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +125 -15
- data/spec/integration/discriminator_key_spec.rb +353 -0
- data/spec/integration/discriminator_value_spec.rb +206 -0
- data/spec/integration/document_spec.rb +30 -1
- data/spec/integration/i18n_fallbacks_spec.rb +89 -0
- data/spec/integration/{matchable_spec.rb → matcher_examples_spec.rb} +120 -42
- data/spec/integration/matcher_operator_data/all.yml +140 -0
- data/spec/integration/matcher_operator_data/and.yml +93 -0
- data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
- data/spec/integration/matcher_operator_data/comment.yml +22 -0
- data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
- data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
- data/spec/integration/matcher_operator_data/eq.yml +191 -0
- data/spec/integration/matcher_operator_data/exists.yml +213 -0
- data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
- data/spec/integration/matcher_operator_data/gt.yml +132 -0
- data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
- data/spec/integration/matcher_operator_data/gte.yml +132 -0
- data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/implicit.yml +331 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
- data/spec/integration/matcher_operator_data/in.yml +210 -0
- data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
- data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
- data/spec/integration/matcher_operator_data/lt.yml +132 -0
- data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
- data/spec/integration/matcher_operator_data/lte.yml +132 -0
- data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/mod.yml +55 -0
- data/spec/integration/matcher_operator_data/multiple.yml +29 -0
- data/spec/integration/matcher_operator_data/ne.yml +150 -0
- data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
- data/spec/integration/matcher_operator_data/nin.yml +114 -0
- data/spec/integration/matcher_operator_data/nor.yml +126 -0
- data/spec/integration/matcher_operator_data/not.yml +196 -0
- data/spec/integration/matcher_operator_data/or.yml +137 -0
- data/spec/integration/matcher_operator_data/regex.yml +174 -0
- data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
- data/spec/integration/matcher_operator_data/size.yml +174 -0
- data/spec/integration/matcher_operator_data/type.yml +70 -0
- data/spec/integration/matcher_operator_data/type_array.yml +16 -0
- data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
- data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
- data/spec/integration/matcher_operator_data/type_code.yml +26 -0
- data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
- data/spec/integration/matcher_operator_data/type_date.yml +39 -0
- data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
- data/spec/integration/matcher_operator_data/type_decimal.yml +40 -0
- data/spec/integration/matcher_operator_data/type_double.yml +15 -0
- data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
- data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
- data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_null.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
- data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
- data/spec/integration/matcher_operator_data/type_string.yml +15 -0
- data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
- data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
- data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
- data/spec/integration/matcher_operator_spec.rb +124 -0
- data/spec/integration/matcher_spec.rb +283 -0
- data/spec/integration/server_query_spec.rb +141 -0
- data/spec/integration/shardable_spec.rb +148 -0
- data/spec/integration/stringified_symbol_field_spec.rb +203 -0
- data/spec/lite_spec_helper.rb +22 -5
- data/spec/mongoid/association/accessors_spec.rb +284 -77
- data/spec/mongoid/association/auto_save_spec.rb +74 -33
- data/spec/mongoid/association/builders_spec.rb +3 -1
- data/spec/mongoid/association/constrainable_spec.rb +2 -0
- data/spec/mongoid/association/counter_cache_spec.rb +34 -32
- data/spec/mongoid/association/depending_spec.rb +426 -333
- data/spec/mongoid/association/eager_spec.rb +6 -4
- data/spec/mongoid/association/embedded/cyclic_spec.rb +4 -2
- data/spec/mongoid/association/embedded/dirty_spec.rb +4 -2
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +65 -13
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +3 -1
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +431 -133
- data/spec/mongoid/association/embedded/embeds_many_models.rb +17 -1
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +51 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +3 -1
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +23 -21
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +3 -0
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +28 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +3 -1
- data/spec/mongoid/association/macros_spec.rb +11 -9
- data/spec/mongoid/association/nested/many_spec.rb +2 -0
- data/spec/mongoid/association/nested/one_spec.rb +18 -12
- data/spec/mongoid/association/options_spec.rb +2 -0
- data/spec/mongoid/association/polymorphic_spec.rb +2 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -0
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +57 -16
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +242 -12
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +99 -58
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +57 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +24 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +3 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +28 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +46 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +25 -5
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +215 -167
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +43 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +39 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +46 -2
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +3 -1
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +23 -0
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +40 -9
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +306 -125
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +679 -339
- data/spec/mongoid/association/referenced/has_many_models.rb +58 -0
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +23 -0
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +2 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +53 -7
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +34 -4
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +28 -26
- data/spec/mongoid/association/referenced/has_one_models.rb +49 -0
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +24 -1
- data/spec/mongoid/association/reflections_spec.rb +2 -0
- data/spec/mongoid/association/syncable_spec.rb +33 -31
- data/spec/mongoid/association_spec.rb +2 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +49 -0
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +2 -0
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +2 -0
- data/spec/mongoid/atomic/paths/root_spec.rb +2 -0
- data/spec/mongoid/atomic/paths_spec.rb +107 -12
- data/spec/mongoid/atomic_spec.rb +31 -6
- data/spec/mongoid/attributes/dynamic_spec.rb +0 -1
- data/spec/mongoid/attributes/nested_spec.rb +69 -67
- data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
- data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
- data/spec/mongoid/attributes/projector_spec.rb +44 -0
- data/spec/mongoid/attributes/readonly_spec.rb +24 -22
- data/spec/mongoid/attributes_spec.rb +363 -28
- data/spec/mongoid/cacheable_spec.rb +3 -1
- data/spec/mongoid/changeable_spec.rb +60 -35
- data/spec/mongoid/clients/factory_spec.rb +136 -28
- data/spec/mongoid/clients/options_spec.rb +44 -26
- data/spec/mongoid/clients/sessions_spec.rb +25 -28
- data/spec/mongoid/clients/transactions_spec.rb +54 -29
- data/spec/mongoid/clients_spec.rb +8 -6
- data/spec/mongoid/composable_spec.rb +2 -0
- data/spec/mongoid/config/environment_spec.rb +88 -8
- data/spec/mongoid/config/options_spec.rb +22 -3
- data/spec/mongoid/config_spec.rb +277 -1
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +53 -11
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +122 -20
- data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
- data/spec/mongoid/contextual/atomic_spec.rb +222 -71
- data/spec/mongoid/contextual/geo_near_spec.rb +20 -18
- data/spec/mongoid/contextual/map_reduce_spec.rb +4 -2
- data/spec/mongoid/contextual/memory_spec.rb +25 -23
- data/spec/mongoid/contextual/mongo_spec.rb +413 -92
- data/spec/mongoid/contextual/none_spec.rb +9 -81
- data/spec/mongoid/copyable_spec.rb +207 -26
- data/spec/mongoid/copyable_spec_models.rb +30 -0
- data/spec/mongoid/criteria/findable_spec.rb +77 -20
- data/spec/mongoid/criteria/inspectable_spec.rb +2 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +2 -0
- data/spec/mongoid/criteria/modifiable_spec.rb +43 -40
- data/spec/mongoid/criteria/options_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +61 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +35 -17
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +239 -178
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +23 -16
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/key_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +145 -12
- data/spec/mongoid/criteria/queryable/optional_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/options_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +1593 -286
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +1010 -2736
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/smash_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/storable_spec.rb +226 -0
- data/spec/mongoid/criteria/scopable_spec.rb +129 -0
- data/spec/mongoid/criteria_projection_spec.rb +410 -0
- data/spec/mongoid/criteria_spec.rb +782 -459
- data/spec/mongoid/document_fields_spec.rb +26 -1
- data/spec/mongoid/document_persistence_context_spec.rb +0 -1
- data/spec/mongoid/document_query_spec.rb +89 -0
- data/spec/mongoid/document_spec.rb +123 -48
- data/spec/mongoid/equality_spec.rb +144 -41
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +5 -3
- data/spec/mongoid/errors/callback_spec.rb +2 -0
- data/spec/mongoid/errors/delete_restriction_spec.rb +4 -2
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +2 -0
- data/spec/mongoid/errors/document_not_found_spec.rb +2 -0
- data/spec/mongoid/errors/eager_load_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_collection_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_config_file_spec.rb +31 -0
- data/spec/mongoid/errors/invalid_config_option_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_field_option_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_field_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_includes_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_index_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_options_spec.rb +4 -2
- data/spec/mongoid/errors/invalid_path_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_relation_spec.rb +4 -2
- data/spec/mongoid/errors/invalid_scope_spec.rb +3 -1
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_time_spec.rb +2 -0
- data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +2 -0
- data/spec/mongoid/errors/mixed_relations_spec.rb +2 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +22 -8
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_config_spec.rb +4 -2
- data/spec/mongoid/errors/no_client_database_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_hosts_spec.rb +5 -3
- data/spec/mongoid/errors/no_clients_config_spec.rb +2 -0
- data/spec/mongoid/errors/no_environment_spec.rb +2 -0
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +2 -0
- data/spec/mongoid/errors/no_metadata_spec.rb +4 -2
- data/spec/mongoid/errors/no_parent_spec.rb +3 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +2 -0
- data/spec/mongoid/errors/readonly_document_spec.rb +2 -0
- data/spec/mongoid/errors/scope_overwrite_spec.rb +2 -0
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +2 -0
- data/spec/mongoid/errors/unknown_attribute_spec.rb +4 -2
- data/spec/mongoid/errors/unsaved_document_spec.rb +3 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +2 -0
- data/spec/mongoid/errors/validations_spec.rb +2 -0
- data/spec/mongoid/extensions/array_spec.rb +25 -43
- data/spec/mongoid/extensions/big_decimal_spec.rb +2 -0
- data/spec/mongoid/extensions/binary_spec.rb +2 -0
- data/spec/mongoid/extensions/boolean_spec.rb +2 -0
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +335 -0
- data/spec/mongoid/extensions/date_spec.rb +8 -160
- data/spec/mongoid/extensions/date_time_spec.rb +17 -60
- data/spec/mongoid/extensions/decimal128_spec.rb +2 -0
- data/spec/mongoid/extensions/false_class_spec.rb +3 -1
- data/spec/mongoid/extensions/float_spec.rb +17 -3
- data/spec/mongoid/extensions/hash_spec.rb +105 -0
- data/spec/mongoid/extensions/integer_spec.rb +14 -2
- data/spec/mongoid/extensions/module_spec.rb +2 -0
- data/spec/mongoid/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/extensions/object_id_spec.rb +2 -0
- data/spec/mongoid/extensions/object_spec.rb +13 -24
- data/spec/mongoid/extensions/range_spec.rb +2 -0
- data/spec/mongoid/extensions/regexp_spec.rb +2 -0
- data/spec/mongoid/extensions/set_spec.rb +2 -0
- data/spec/mongoid/extensions/string_spec.rb +60 -27
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
- data/spec/mongoid/extensions/symbol_spec.rb +2 -0
- data/spec/mongoid/extensions/time_spec.rb +29 -0
- data/spec/mongoid/extensions/time_with_zone_spec.rb +33 -0
- data/spec/mongoid/extensions/true_class_spec.rb +3 -1
- data/spec/mongoid/extensions_spec.rb +16 -2
- data/spec/mongoid/factory_spec.rb +287 -27
- data/spec/mongoid/fields/foreign_key_spec.rb +2 -0
- data/spec/mongoid/fields/localized_spec.rb +6 -4
- data/spec/mongoid/fields/standard_spec.rb +2 -0
- data/spec/mongoid/fields_spec.rb +418 -36
- data/spec/mongoid/findable_spec.rb +53 -19
- data/spec/mongoid/indexable/specification_spec.rb +2 -0
- data/spec/mongoid/indexable_spec.rb +30 -2
- data/spec/mongoid/inspectable_spec.rb +39 -2
- data/spec/mongoid/interceptable_spec.rb +168 -96
- data/spec/mongoid/interceptable_spec_models.rb +76 -0
- data/spec/mongoid/loggable_spec.rb +2 -0
- data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
- data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +239 -0
- data/spec/mongoid/matcher/extract_attribute_spec.rb +40 -0
- data/spec/mongoid/persistable/creatable_spec.rb +112 -27
- data/spec/mongoid/persistable/deletable_spec.rb +273 -11
- data/spec/mongoid/persistable/destroyable_spec.rb +201 -11
- data/spec/mongoid/persistable/incrementable_spec.rb +23 -7
- data/spec/mongoid/persistable/logical_spec.rb +19 -3
- data/spec/mongoid/persistable/poppable_spec.rb +19 -3
- data/spec/mongoid/persistable/pullable_spec.rb +36 -6
- data/spec/mongoid/persistable/pushable_spec.rb +36 -6
- data/spec/mongoid/persistable/renamable_spec.rb +18 -2
- data/spec/mongoid/persistable/savable_spec.rb +188 -25
- data/spec/mongoid/persistable/settable_spec.rb +54 -8
- data/spec/mongoid/persistable/unsettable_spec.rb +19 -3
- data/spec/mongoid/persistable/updatable_spec.rb +45 -23
- data/spec/mongoid/persistable/upsertable_spec.rb +4 -2
- data/spec/mongoid/persistable_spec.rb +85 -9
- data/spec/mongoid/persistence_context_spec.rb +2 -0
- data/spec/mongoid/positional_spec.rb +2 -0
- data/spec/mongoid/query_cache_middleware_spec.rb +68 -0
- data/spec/mongoid/query_cache_spec.rb +501 -81
- data/spec/mongoid/relations/proxy_spec.rb +8 -6
- data/spec/mongoid/reloadable_spec.rb +298 -20
- data/spec/mongoid/scopable_spec.rb +67 -21
- data/spec/mongoid/selectable_spec.rb +8 -6
- data/spec/mongoid/serializable_spec.rb +160 -29
- data/spec/mongoid/shardable_models.rb +61 -0
- data/spec/mongoid/shardable_spec.rb +116 -17
- data/spec/mongoid/stateful_spec.rb +3 -1
- data/spec/mongoid/tasks/database_rake_spec.rb +2 -0
- data/spec/mongoid/tasks/database_spec.rb +2 -0
- data/spec/mongoid/threaded_spec.rb +4 -2
- data/spec/mongoid/timestamps/created/short_spec.rb +3 -1
- data/spec/mongoid/timestamps/created_spec.rb +3 -1
- data/spec/mongoid/timestamps/timeless_spec.rb +4 -2
- data/spec/mongoid/timestamps/updated/short_spec.rb +5 -3
- data/spec/mongoid/timestamps/updated_spec.rb +5 -3
- data/spec/mongoid/timestamps_spec.rb +8 -6
- data/spec/mongoid/touchable_spec.rb +180 -33
- data/spec/mongoid/touchable_spec_models.rb +53 -0
- data/spec/mongoid/traversable_spec.rb +1167 -1
- data/spec/mongoid/validatable/associated_spec.rb +2 -0
- data/spec/mongoid/validatable/format_spec.rb +2 -0
- data/spec/mongoid/validatable/length_spec.rb +2 -0
- data/spec/mongoid/validatable/numericality_spec.rb +2 -0
- data/spec/mongoid/validatable/presence_spec.rb +28 -22
- data/spec/mongoid/validatable/uniqueness_spec.rb +69 -67
- data/spec/mongoid/validatable_spec.rb +5 -3
- data/spec/mongoid_spec.rb +2 -0
- data/spec/rails/controller_extension/controller_runtime_spec.rb +3 -1
- data/spec/rails/mongoid_spec.rb +4 -2
- data/spec/shared/LICENSE +20 -0
- data/spec/shared/bin/get-mongodb-download-url +17 -0
- data/spec/shared/bin/s3-copy +45 -0
- data/spec/shared/bin/s3-upload +69 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/cluster_config.rb +231 -0
- data/spec/shared/lib/mrss/constraints.rb +386 -0
- data/spec/shared/lib/mrss/docker_runner.rb +271 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +200 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +199 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +120 -0
- data/spec/shared/lib/mrss/session_registry.rb +69 -0
- data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
- data/spec/shared/lib/mrss/utils.rb +15 -0
- data/spec/shared/share/Dockerfile.erb +339 -0
- data/spec/shared/share/haproxy-1.conf +16 -0
- data/spec/shared/share/haproxy-2.conf +17 -0
- data/spec/shared/shlib/distro.sh +74 -0
- data/spec/shared/shlib/server.sh +379 -0
- data/spec/shared/shlib/set_env.sh +132 -0
- data/spec/spec_helper.rb +39 -35
- data/spec/support/authorization.rb +2 -0
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +15 -234
- data/spec/support/expectations.rb +5 -1
- data/spec/support/helpers.rb +11 -0
- data/spec/support/macros.rb +22 -0
- data/spec/{app → support}/models/account.rb +3 -1
- data/spec/{app → support}/models/acolyte.rb +2 -0
- data/spec/{app → support}/models/actor.rb +3 -1
- data/spec/support/models/actress.rb +4 -0
- data/spec/{app → support}/models/address.rb +6 -0
- data/spec/{app → support}/models/address_component.rb +2 -0
- data/spec/{app → support}/models/address_number.rb +2 -0
- data/spec/{app → support}/models/agency.rb +2 -0
- data/spec/{app → support}/models/agent.rb +2 -0
- data/spec/{app → support}/models/album.rb +2 -0
- data/spec/{app → support}/models/alert.rb +2 -0
- data/spec/{app → support}/models/animal.rb +2 -0
- data/spec/{app → support}/models/answer.rb +2 -0
- data/spec/{app → support}/models/appointment.rb +2 -0
- data/spec/support/models/armrest.rb +9 -0
- data/spec/{app → support}/models/article.rb +2 -0
- data/spec/{app → support}/models/artist.rb +4 -0
- data/spec/{app → support}/models/artwork.rb +2 -0
- data/spec/support/models/audible_sound.rb +3 -0
- data/spec/{app → support}/models/audio.rb +2 -0
- data/spec/{app → support}/models/augmentation.rb +2 -0
- data/spec/{app → support}/models/author.rb +2 -0
- data/spec/{app → support}/models/baby.rb +2 -0
- data/spec/{app → support}/models/band.rb +6 -0
- data/spec/{app → support}/models/bar.rb +2 -0
- data/spec/{app → support}/models/basic.rb +2 -0
- data/spec/support/models/bed.rb +3 -0
- data/spec/{app → support}/models/big_palette.rb +2 -0
- data/spec/{app → support}/models/birthday.rb +2 -0
- data/spec/support/models/bolt.rb +7 -0
- data/spec/{app → support}/models/bomb.rb +2 -0
- data/spec/{app → support}/models/book.rb +2 -0
- data/spec/{app → support}/models/breed.rb +2 -0
- data/spec/{app → support}/models/browser.rb +3 -1
- data/spec/{app → support}/models/building.rb +2 -0
- data/spec/{app → support}/models/building_address.rb +2 -0
- data/spec/{app → support}/models/bus.rb +2 -0
- data/spec/{app → support}/models/business.rb +2 -0
- data/spec/{app → support}/models/callback_test.rb +2 -0
- data/spec/{app → support}/models/canvas.rb +3 -1
- data/spec/support/models/car.rb +3 -0
- data/spec/{app → support}/models/cat.rb +2 -0
- data/spec/{app → support}/models/category.rb +2 -0
- data/spec/{app → support}/models/child.rb +2 -0
- data/spec/{app → support}/models/child_doc.rb +5 -3
- data/spec/{app → support}/models/church.rb +2 -0
- data/spec/{app → support}/models/circle.rb +2 -0
- data/spec/{app → support}/models/circuit.rb +2 -0
- data/spec/{app → support}/models/circus.rb +2 -0
- data/spec/{app → support}/models/code.rb +2 -0
- data/spec/support/models/coding/pull_request.rb +11 -0
- data/spec/support/models/coding.rb +3 -0
- data/spec/{app → support}/models/comment.rb +2 -0
- data/spec/{app → support}/models/company.rb +2 -0
- data/spec/{app → support}/models/consumption_period.rb +2 -0
- data/spec/{app → support}/models/contextable_item.rb +2 -0
- data/spec/{app → support}/models/contractor.rb +2 -0
- data/spec/{app → support}/models/cookie.rb +2 -0
- data/spec/{app → support}/models/country_code.rb +4 -0
- data/spec/{app → support}/models/courier_job.rb +2 -0
- data/spec/support/models/crate.rb +12 -0
- data/spec/support/models/customer.rb +10 -0
- data/spec/support/models/customer_address.rb +11 -0
- data/spec/support/models/deed.rb +7 -0
- data/spec/{app → support}/models/definition.rb +2 -0
- data/spec/{app → support}/models/delegating_patient.rb +0 -1
- data/spec/{app → support}/models/description.rb +2 -0
- data/spec/{app → support}/models/dictionary.rb +8 -0
- data/spec/{app → support}/models/division.rb +2 -0
- data/spec/{app → support}/models/doctor.rb +2 -0
- data/spec/{app → support}/models/dog.rb +2 -0
- data/spec/{app → support}/models/dokument.rb +2 -0
- data/spec/{app → support}/models/draft.rb +2 -0
- data/spec/{app → support}/models/dragon.rb +2 -0
- data/spec/{app → support}/models/driver.rb +3 -1
- data/spec/{app → support}/models/drug.rb +2 -0
- data/spec/{app → support}/models/dungeon.rb +2 -0
- data/spec/{app → support}/models/edit.rb +2 -0
- data/spec/{app → support}/models/email.rb +2 -0
- data/spec/{app → support}/models/employer.rb +2 -0
- data/spec/{app → support}/models/entry.rb +2 -0
- data/spec/support/models/eraser.rb +3 -0
- data/spec/{app → support}/models/even.rb +2 -0
- data/spec/{app → support}/models/event.rb +2 -0
- data/spec/{app → support}/models/exhibition.rb +2 -0
- data/spec/{app → support}/models/exhibitor.rb +2 -0
- data/spec/{app → support}/models/explosion.rb +2 -0
- data/spec/{app → support}/models/eye.rb +2 -0
- data/spec/{app → support}/models/eye_bowl.rb +2 -0
- data/spec/{app → support}/models/face.rb +2 -0
- data/spec/{app → support}/models/favorite.rb +2 -0
- data/spec/{app → support}/models/filesystem.rb +2 -0
- data/spec/{app → support}/models/fire_hydrant.rb +2 -0
- data/spec/{app → support}/models/firefox.rb +2 -0
- data/spec/{app → support}/models/fish.rb +2 -0
- data/spec/{app → support}/models/folder.rb +2 -0
- data/spec/{app → support}/models/folder_item.rb +2 -0
- data/spec/{app → support}/models/fruits.rb +2 -0
- data/spec/{app → support}/models/game.rb +2 -0
- data/spec/{app → support}/models/ghost.rb +2 -0
- data/spec/support/models/guitar.rb +4 -0
- data/spec/support/models/hole.rb +12 -0
- data/spec/{app → support}/models/home.rb +2 -0
- data/spec/{app → support}/models/house.rb +2 -0
- data/spec/{app → support}/models/html_writer.rb +2 -0
- data/spec/{app → support}/models/id_key.rb +2 -0
- data/spec/support/models/idnodef.rb +7 -0
- data/spec/{app → support}/models/image.rb +2 -0
- data/spec/{app → support}/models/implant.rb +2 -0
- data/spec/support/models/instrument.rb +8 -0
- data/spec/{app → support}/models/item.rb +3 -1
- data/spec/{app → support}/models/jar.rb +2 -0
- data/spec/{app → support}/models/kaleidoscope.rb +2 -0
- data/spec/{app → support}/models/kangaroo.rb +3 -1
- data/spec/{app → support}/models/label.rb +4 -1
- data/spec/{app → support}/models/language.rb +2 -0
- data/spec/{app → support}/models/lat_lng.rb +2 -0
- data/spec/{app → support}/models/league.rb +2 -0
- data/spec/support/models/learner.rb +4 -0
- data/spec/{app → support}/models/line_item.rb +2 -0
- data/spec/{app → support}/models/location.rb +2 -0
- data/spec/{app → support}/models/login.rb +2 -0
- data/spec/{app → support}/models/manufacturer.rb +2 -0
- data/spec/{app → support}/models/meat.rb +2 -0
- data/spec/{app → support}/models/membership.rb +2 -0
- data/spec/{app → support}/models/message.rb +2 -0
- data/spec/{app → support}/models/minim.rb +0 -1
- data/spec/{app → support}/models/mixed_drink.rb +2 -0
- data/spec/support/models/mop.rb +24 -0
- data/spec/{app → support}/models/movie.rb +2 -0
- data/spec/support/models/my_hash.rb +4 -0
- data/spec/{app → support}/models/name.rb +2 -0
- data/spec/support/models/name_only.rb +8 -0
- data/spec/{app → support}/models/node.rb +2 -0
- data/spec/{app → support}/models/note.rb +2 -0
- data/spec/support/models/nut.rb +7 -0
- data/spec/{app → support}/models/odd.rb +2 -0
- data/spec/support/models/order.rb +12 -0
- data/spec/{app → support}/models/ordered_post.rb +3 -1
- data/spec/{app → support}/models/ordered_preference.rb +2 -0
- data/spec/{app → support}/models/oscar.rb +2 -0
- data/spec/support/models/other_owner_object.rb +4 -0
- data/spec/{app → support}/models/override.rb +2 -0
- data/spec/{app → support}/models/ownable.rb +2 -0
- data/spec/{app → support}/models/owner.rb +4 -0
- data/spec/{app → support}/models/pack.rb +2 -0
- data/spec/{app → support}/models/page.rb +2 -0
- data/spec/{app → support}/models/page_question.rb +2 -0
- data/spec/{app → support}/models/palette.rb +3 -1
- data/spec/{app → support}/models/parent.rb +2 -0
- data/spec/{app → support}/models/parent_doc.rb +2 -0
- data/spec/support/models/passport.rb +13 -0
- data/spec/{app → support}/models/patient.rb +2 -0
- data/spec/{app → support}/models/pdf_writer.rb +2 -0
- data/spec/support/models/pencil.rb +3 -0
- data/spec/{app → support}/models/person.rb +21 -1
- data/spec/{app → support}/models/pet.rb +2 -0
- data/spec/{app → support}/models/pet_owner.rb +2 -0
- data/spec/{app → support}/models/phone.rb +5 -1
- data/spec/support/models/piano.rb +4 -0
- data/spec/{app → support}/models/pizza.rb +2 -0
- data/spec/{app → support}/models/player.rb +2 -0
- data/spec/{app → support}/models/post.rb +2 -0
- data/spec/{app → support}/models/post_genre.rb +2 -0
- data/spec/{app → support}/models/powerup.rb +2 -0
- data/spec/{app → support}/models/preference.rb +2 -0
- data/spec/{app → support}/models/princess.rb +2 -0
- data/spec/{app → support}/models/product.rb +2 -0
- data/spec/support/models/profile.rb +17 -0
- data/spec/{app → support}/models/pronunciation.rb +2 -0
- data/spec/{app → support}/models/pub.rb +2 -0
- data/spec/support/models/publication/encyclopedia.rb +11 -0
- data/spec/support/models/publication/review.rb +13 -0
- data/spec/support/models/publication.rb +4 -0
- data/spec/{app → support}/models/purchase.rb +2 -0
- data/spec/support/models/purchased_item.rb +10 -0
- data/spec/{app → support}/models/question.rb +2 -0
- data/spec/{app → support}/models/quiz.rb +2 -0
- data/spec/{app → support}/models/rating.rb +2 -0
- data/spec/{app → support}/models/record.rb +2 -0
- data/spec/{app → support}/models/registry.rb +2 -0
- data/spec/{app → support}/models/role.rb +2 -0
- data/spec/{app → support}/models/root_category.rb +2 -0
- data/spec/{app → support}/models/sandwich.rb +2 -0
- data/spec/{app → support}/models/scheduler.rb +2 -0
- data/spec/support/models/scribe.rb +7 -0
- data/spec/support/models/sealer.rb +7 -0
- data/spec/support/models/seat.rb +24 -0
- data/spec/{app → support}/models/seo.rb +2 -0
- data/spec/support/models/series.rb +7 -0
- data/spec/{app → support}/models/server.rb +2 -0
- data/spec/{app → support}/models/service.rb +2 -0
- data/spec/{app → support}/models/shape.rb +4 -2
- data/spec/{app → support}/models/shelf.rb +2 -0
- data/spec/{app → support}/models/shipment_address.rb +2 -0
- data/spec/{app → support}/models/shipping_container.rb +2 -0
- data/spec/{app → support}/models/shipping_pack.rb +2 -0
- data/spec/support/models/shirt.rb +11 -0
- data/spec/{app → support}/models/shop.rb +2 -0
- data/spec/{app → support}/models/short_agent.rb +2 -0
- data/spec/{app → support}/models/short_quiz.rb +2 -0
- data/spec/{app → support}/models/simple.rb +2 -0
- data/spec/{app → support}/models/slave.rb +2 -0
- data/spec/{app → support}/models/song.rb +2 -0
- data/spec/{app → support}/models/sound.rb +2 -0
- data/spec/support/models/spacer.rb +7 -0
- data/spec/{app → support}/models/square.rb +2 -0
- data/spec/{app → support}/models/staff.rb +2 -0
- data/spec/{app → support}/models/store_as_dup_test1.rb +2 -0
- data/spec/{app → support}/models/store_as_dup_test2.rb +2 -0
- data/spec/{app → support}/models/strategy.rb +2 -0
- data/spec/{app → support}/models/sub_item.rb +2 -0
- data/spec/{app → support}/models/subscription.rb +2 -0
- data/spec/{app → support}/models/survey.rb +2 -0
- data/spec/{app → support}/models/symptom.rb +2 -0
- data/spec/support/models/system_role.rb +7 -0
- data/spec/{app → support}/models/tag.rb +2 -0
- data/spec/{app → support}/models/target.rb +2 -0
- data/spec/{app → support}/models/template.rb +2 -0
- data/spec/{app → support}/models/thing.rb +2 -0
- data/spec/support/models/threadlocker.rb +7 -0
- data/spec/{app → support}/models/title.rb +2 -0
- data/spec/{app → support}/models/tool.rb +4 -2
- data/spec/{app → support}/models/topping.rb +2 -0
- data/spec/support/models/toy.rb +9 -0
- data/spec/{app → support}/models/track.rb +2 -0
- data/spec/{app → support}/models/translation.rb +2 -0
- data/spec/{app → support}/models/tree.rb +2 -0
- data/spec/support/models/truck.rb +7 -0
- data/spec/{app → support}/models/user.rb +2 -0
- data/spec/{app → support}/models/user_account.rb +2 -0
- data/spec/{app → support}/models/validation_callback.rb +2 -0
- data/spec/support/models/vehicle.rb +18 -0
- data/spec/{app → support}/models/version.rb +2 -0
- data/spec/{app → support}/models/vertex.rb +3 -1
- data/spec/{app → support}/models/vet_visit.rb +2 -0
- data/spec/{app → support}/models/video.rb +2 -0
- data/spec/support/models/video_game.rb +3 -0
- data/spec/support/models/washer.rb +7 -0
- data/spec/{app → support}/models/weapon.rb +2 -0
- data/spec/{app → support}/models/wiki_page.rb +3 -0
- data/spec/{app → support}/models/word.rb +2 -0
- data/spec/{app → support}/models/word_origin.rb +2 -0
- data/spec/{app → support}/models/writer.rb +4 -2
- data/spec/support/shared/time.rb +53 -0
- data/spec/support/spec_config.rb +16 -3
- data.tar.gz.sig +0 -0
- metadata +1100 -738
- metadata.gz.sig +0 -0
- data/lib/mongoid/criteria/queryable/forwardable.rb +0 -65
- data/lib/mongoid/matchable/all.rb +0 -28
- data/lib/mongoid/matchable/and.rb +0 -30
- data/lib/mongoid/matchable/default.rb +0 -119
- data/lib/mongoid/matchable/elem_match.rb +0 -34
- data/lib/mongoid/matchable/eq.rb +0 -22
- data/lib/mongoid/matchable/exists.rb +0 -23
- data/lib/mongoid/matchable/gt.rb +0 -23
- data/lib/mongoid/matchable/gte.rb +0 -23
- data/lib/mongoid/matchable/in.rb +0 -24
- data/lib/mongoid/matchable/lt.rb +0 -23
- data/lib/mongoid/matchable/lte.rb +0 -23
- data/lib/mongoid/matchable/ne.rb +0 -21
- data/lib/mongoid/matchable/nin.rb +0 -22
- data/lib/mongoid/matchable/nor.rb +0 -37
- data/lib/mongoid/matchable/or.rb +0 -33
- data/lib/mongoid/matchable/regexp.rb +0 -27
- data/lib/mongoid/matchable/size.rb +0 -21
- data/lib/support/ruby_version.rb +0 -26
- data/spec/app/models/actress.rb +0 -2
- data/spec/app/models/bed.rb +0 -1
- data/spec/app/models/car.rb +0 -1
- data/spec/app/models/eraser.rb +0 -1
- data/spec/app/models/learner.rb +0 -2
- data/spec/app/models/my_hash.rb +0 -2
- data/spec/app/models/other_owner_object.rb +0 -2
- data/spec/app/models/passport.rb +0 -5
- data/spec/app/models/pencil.rb +0 -1
- data/spec/app/models/profile.rb +0 -5
- data/spec/app/models/series.rb +0 -4
- data/spec/app/models/truck.rb +0 -3
- data/spec/app/models/vehicle.rb +0 -11
- data/spec/app/models/video_game.rb +0 -1
- data/spec/mongoid/criteria/queryable/forwardable_spec.rb +0 -87
- data/spec/mongoid/matchable/all_spec.rb +0 -31
- data/spec/mongoid/matchable/and_spec.rb +0 -187
- data/spec/mongoid/matchable/default_spec.rb +0 -137
- data/spec/mongoid/matchable/elem_match_spec.rb +0 -106
- data/spec/mongoid/matchable/eq_spec.rb +0 -48
- data/spec/mongoid/matchable/exists_spec.rb +0 -57
- data/spec/mongoid/matchable/gt_spec.rb +0 -86
- data/spec/mongoid/matchable/gte_spec.rb +0 -84
- data/spec/mongoid/matchable/in_spec.rb +0 -49
- data/spec/mongoid/matchable/lt_spec.rb +0 -85
- data/spec/mongoid/matchable/lte_spec.rb +0 -85
- data/spec/mongoid/matchable/ne_spec.rb +0 -46
- data/spec/mongoid/matchable/nin_spec.rb +0 -48
- data/spec/mongoid/matchable/nor_spec.rb +0 -209
- data/spec/mongoid/matchable/or_spec.rb +0 -131
- data/spec/mongoid/matchable/regexp_spec.rb +0 -59
- data/spec/mongoid/matchable/size_spec.rb +0 -25
- data/spec/mongoid/matchable_spec.rb +0 -853
- data/spec/support/child_process_helper.rb +0 -76
- data/spec/support/cluster_config.rb +0 -158
- /data/spec/{app → support}/models/array_field.rb +0 -0
- /data/spec/{app → support}/models/store_as_dup_test3.rb +0 -0
- /data/spec/{app → support}/models/store_as_dup_test4.rb +0 -0
- /data/spec/{app → support}/models/updatable.rb +0 -0
data/lib/mongoid/config.rb
CHANGED
|
@@ -1,33 +1,115 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
require "mongoid/config/environment"
|
|
3
4
|
require "mongoid/config/options"
|
|
4
5
|
require "mongoid/config/validators"
|
|
5
6
|
|
|
6
7
|
module Mongoid
|
|
7
8
|
|
|
8
|
-
# This module defines all the configuration options for Mongoid, including
|
|
9
|
-
# database connections.
|
|
9
|
+
# This module defines all the configuration options for Mongoid, including
|
|
10
|
+
# the database connections.
|
|
10
11
|
module Config
|
|
11
|
-
extend
|
|
12
|
+
extend Forwardable
|
|
12
13
|
extend Options
|
|
14
|
+
extend self
|
|
13
15
|
|
|
14
|
-
|
|
15
|
-
delegate :logger, to: ::Mongoid
|
|
16
|
+
def_delegators ::Mongoid, :logger, :logger=
|
|
16
17
|
|
|
17
18
|
LOCK = Mutex.new
|
|
18
19
|
|
|
20
|
+
# Application name that is printed to the mongodb logs upon establishing
|
|
21
|
+
# a connection in server versions >= 3.4. Note that the name cannot
|
|
22
|
+
# exceed 128 bytes. It is also used as the database name if the
|
|
23
|
+
# database name is not explicitly defined.
|
|
24
|
+
option :app_name, default: nil
|
|
25
|
+
|
|
26
|
+
# Create indexes in background by default.
|
|
27
|
+
option :background_indexing, default: false
|
|
28
|
+
|
|
29
|
+
# Mark belongs_to associations as required by default, so that saving a
|
|
30
|
+
# model with a missing belongs_to association will trigger a validation
|
|
31
|
+
# error.
|
|
32
|
+
option :belongs_to_required_by_default, default: true
|
|
33
|
+
|
|
34
|
+
# Set the global discriminator key.
|
|
35
|
+
option :discriminator_key, default: "_type"
|
|
36
|
+
|
|
37
|
+
# Raise an exception when a field is redefined.
|
|
38
|
+
option :duplicate_fields_exception, default: false
|
|
39
|
+
|
|
40
|
+
# Include the root model name in json serialization.
|
|
19
41
|
option :include_root_in_json, default: false
|
|
42
|
+
|
|
43
|
+
# # Include the _type field in serialization.
|
|
20
44
|
option :include_type_for_serialization, default: false
|
|
45
|
+
|
|
46
|
+
# Whether to join nested persistence contexts for atomic operations
|
|
47
|
+
# to parent contexts by default.
|
|
48
|
+
option :join_contexts, default: false
|
|
49
|
+
|
|
50
|
+
# The log level.
|
|
51
|
+
#
|
|
52
|
+
# It must be set prior to referencing clients or Mongo.logger,
|
|
53
|
+
# changes to this option are not be propagated to any clients and
|
|
54
|
+
# loggers that already exist.
|
|
55
|
+
#
|
|
56
|
+
# Additionally, only when the clients are configured via the
|
|
57
|
+
# configuration file is the log level given by this option honored.
|
|
58
|
+
option :log_level, default: :info
|
|
59
|
+
|
|
60
|
+
# Preload all models in development, needed when models use inheritance.
|
|
21
61
|
option :preload_models, default: false
|
|
62
|
+
|
|
63
|
+
# Raise an error when performing a #find and the document is not found.
|
|
22
64
|
option :raise_not_found_error, default: true
|
|
65
|
+
|
|
66
|
+
# Raise an error when defining a scope with the same name as an
|
|
67
|
+
# existing method.
|
|
23
68
|
option :scope_overwrite_exception, default: false
|
|
24
|
-
|
|
69
|
+
|
|
70
|
+
# Use ActiveSupport's time zone in time operations instead of the
|
|
71
|
+
# Ruby default time zone.
|
|
25
72
|
option :use_activesupport_time_zone, default: true
|
|
73
|
+
|
|
74
|
+
# Return stored times as UTC.
|
|
26
75
|
option :use_utc, default: false
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
option :
|
|
76
|
+
|
|
77
|
+
# Update embedded documents correctly when setting it, unsetting it
|
|
78
|
+
# and resetting it. See MONGOID-5206 and MONGOID-5240 for more details.
|
|
79
|
+
option :broken_updates, default: true
|
|
80
|
+
|
|
81
|
+
# Maintain legacy behavior of === on Mongoid documents, which returns
|
|
82
|
+
# true in a number of cases where Ruby's === implementation would
|
|
83
|
+
# return false.
|
|
84
|
+
option :legacy_triple_equals, default: true
|
|
85
|
+
|
|
86
|
+
# When exiting a nested `with_scope' block, set the current scope to
|
|
87
|
+
# nil instead of the parent scope for backwards compatibility.
|
|
88
|
+
option :broken_scoping, default: true
|
|
89
|
+
|
|
90
|
+
# Maintain broken behavior of sum over empty result sets for backwards
|
|
91
|
+
# compatibility.
|
|
92
|
+
option :broken_aggregables, default: true
|
|
93
|
+
|
|
94
|
+
# Ignore aliased fields in embedded documents when performing pluck and
|
|
95
|
+
# distinct operations, for backwards compatibility.
|
|
96
|
+
option :broken_alias_handling, default: true
|
|
97
|
+
|
|
98
|
+
# Maintain broken `and' behavior when using the same operator on the same
|
|
99
|
+
# field multiple times for backwards compatibility.
|
|
100
|
+
option :broken_and, default: true
|
|
101
|
+
|
|
102
|
+
# Use millisecond precision when comparing Time objects with the _matches?
|
|
103
|
+
# function.
|
|
104
|
+
option :compare_time_by_ms, default: false
|
|
105
|
+
|
|
106
|
+
# Use bson-ruby's implementation of as_json for BSON::ObjectId instead of
|
|
107
|
+
# the one monkey-patched into Mongoid.
|
|
108
|
+
option :object_id_as_json_oid, default: true
|
|
109
|
+
|
|
110
|
+
# Maintain legacy behavior of pluck and distinct, which does not
|
|
111
|
+
# demongoize the values on returning them.
|
|
112
|
+
option :legacy_pluck_distinct, default: true
|
|
31
113
|
|
|
32
114
|
# Has Mongoid been configured? This is checking that at least a valid
|
|
33
115
|
# client config exists.
|
|
@@ -36,8 +118,6 @@ module Mongoid
|
|
|
36
118
|
# config.configured?
|
|
37
119
|
#
|
|
38
120
|
# @return [ true, false ] If Mongoid is configured.
|
|
39
|
-
#
|
|
40
|
-
# @since 3.0.9
|
|
41
121
|
def configured?
|
|
42
122
|
clients.key?(:default)
|
|
43
123
|
end
|
|
@@ -50,8 +130,6 @@ module Mongoid
|
|
|
50
130
|
# config.connect_to("mongoid_test")
|
|
51
131
|
#
|
|
52
132
|
# @param [ String ] name The database name.
|
|
53
|
-
#
|
|
54
|
-
# @since 3.0.0
|
|
55
133
|
def connect_to(name, options = { read: { mode: :primary }})
|
|
56
134
|
self.clients = {
|
|
57
135
|
default: {
|
|
@@ -81,8 +159,6 @@ module Mongoid
|
|
|
81
159
|
#
|
|
82
160
|
# @param [ String ] path The path to the file.
|
|
83
161
|
# @param [ String, Symbol ] environment The environment to load.
|
|
84
|
-
#
|
|
85
|
-
# @since 2.0.1
|
|
86
162
|
def load!(path, environment = nil)
|
|
87
163
|
settings = Environment.load_yaml(path, environment)
|
|
88
164
|
if settings.present?
|
|
@@ -100,8 +176,6 @@ module Mongoid
|
|
|
100
176
|
# config.models
|
|
101
177
|
#
|
|
102
178
|
# @return [ Array<Class> ] All the models in the application.
|
|
103
|
-
#
|
|
104
|
-
# @since 3.1.0
|
|
105
179
|
def models
|
|
106
180
|
@models ||= []
|
|
107
181
|
end
|
|
@@ -112,8 +186,6 @@ module Mongoid
|
|
|
112
186
|
# config.register_model(Band)
|
|
113
187
|
#
|
|
114
188
|
# @param [ Class ] klass The model to register.
|
|
115
|
-
#
|
|
116
|
-
# @since 3.1.0
|
|
117
189
|
def register_model(klass)
|
|
118
190
|
LOCK.synchronize do
|
|
119
191
|
models.push(klass) unless models.include?(klass)
|
|
@@ -126,8 +198,6 @@ module Mongoid
|
|
|
126
198
|
# config.load_configuration(settings)
|
|
127
199
|
#
|
|
128
200
|
# @param [ Hash ] settings The configuration settings.
|
|
129
|
-
#
|
|
130
|
-
# @since 3.1.0
|
|
131
201
|
def load_configuration(settings)
|
|
132
202
|
configuration = settings.with_indifferent_access
|
|
133
203
|
self.options = configuration[:options]
|
|
@@ -143,8 +213,6 @@ module Mongoid
|
|
|
143
213
|
# @param [ String, Symbol ] name The name of the database.
|
|
144
214
|
#
|
|
145
215
|
# @return [ String, Symbol ] The global override.
|
|
146
|
-
#
|
|
147
|
-
# @since 3.0.0
|
|
148
216
|
def override_database(name)
|
|
149
217
|
Threaded.database_override = name
|
|
150
218
|
end
|
|
@@ -157,8 +225,6 @@ module Mongoid
|
|
|
157
225
|
# @param [ String, Symbol ] name The name of the client.
|
|
158
226
|
#
|
|
159
227
|
# @return [ String, Symbol ] The global override.
|
|
160
|
-
#
|
|
161
|
-
# @since 3.0.0
|
|
162
228
|
def override_client(name)
|
|
163
229
|
Threaded.client_override = name ? name.to_s : nil
|
|
164
230
|
end
|
|
@@ -171,10 +237,8 @@ module Mongoid
|
|
|
171
237
|
# @note This is the fastest way to drop all data.
|
|
172
238
|
#
|
|
173
239
|
# @return [ true ] true.
|
|
174
|
-
#
|
|
175
|
-
# @since 2.0.2
|
|
176
240
|
def purge!
|
|
177
|
-
|
|
241
|
+
global_client.database.collections.each(&:drop) and true
|
|
178
242
|
end
|
|
179
243
|
|
|
180
244
|
# Truncate all data in all collections, but not the indexes.
|
|
@@ -185,10 +249,8 @@ module Mongoid
|
|
|
185
249
|
# @note This will be slower than purge!
|
|
186
250
|
#
|
|
187
251
|
# @return [ true ] true.
|
|
188
|
-
#
|
|
189
|
-
# @since 2.0.2
|
|
190
252
|
def truncate!
|
|
191
|
-
|
|
253
|
+
global_client.database.collections.each do |collection|
|
|
192
254
|
collection.find.delete_many
|
|
193
255
|
end and true
|
|
194
256
|
end
|
|
@@ -199,8 +261,6 @@ module Mongoid
|
|
|
199
261
|
# config.options = { raise_not_found_error: true }
|
|
200
262
|
#
|
|
201
263
|
# @param [ Hash ] options The configuration options.
|
|
202
|
-
#
|
|
203
|
-
# @since 3.0.0
|
|
204
264
|
def options=(options)
|
|
205
265
|
if options
|
|
206
266
|
options.each_pair do |option, value|
|
|
@@ -216,8 +276,6 @@ module Mongoid
|
|
|
216
276
|
# config.clients
|
|
217
277
|
#
|
|
218
278
|
# @return [ Hash ] The clients configuration.
|
|
219
|
-
#
|
|
220
|
-
# @since 3.0.0
|
|
221
279
|
def clients
|
|
222
280
|
@clients ||= {}
|
|
223
281
|
end
|
|
@@ -228,8 +286,6 @@ module Mongoid
|
|
|
228
286
|
# Config.time_zone
|
|
229
287
|
#
|
|
230
288
|
# @return [ String ] The time zone.
|
|
231
|
-
#
|
|
232
|
-
# @since 3.0.0
|
|
233
289
|
def time_zone
|
|
234
290
|
use_utc? ? "UTC" : ::Time.zone
|
|
235
291
|
end
|
|
@@ -240,8 +296,6 @@ module Mongoid
|
|
|
240
296
|
# config.running_with_passenger?
|
|
241
297
|
#
|
|
242
298
|
# @return [ true, false ] If the app is deployed on Passenger.
|
|
243
|
-
#
|
|
244
|
-
# @since 3.0.11
|
|
245
299
|
def running_with_passenger?
|
|
246
300
|
@running_with_passenger ||= defined?(PhusionPassenger)
|
|
247
301
|
end
|
|
@@ -259,5 +313,22 @@ module Mongoid
|
|
|
259
313
|
Validators::Client.validate(c)
|
|
260
314
|
@clients = c
|
|
261
315
|
end
|
|
316
|
+
|
|
317
|
+
# Get database client that respects global overrides
|
|
318
|
+
# Config.override_database and Config.override_client.
|
|
319
|
+
#
|
|
320
|
+
# @return [Mongo::Client] Client according to global overrides.
|
|
321
|
+
def global_client
|
|
322
|
+
client = if Threaded.client_override
|
|
323
|
+
Clients.with_name(Threaded.client_override)
|
|
324
|
+
else
|
|
325
|
+
Clients.default
|
|
326
|
+
end
|
|
327
|
+
if Threaded.database_override
|
|
328
|
+
client.use(Threaded.database_override)
|
|
329
|
+
else
|
|
330
|
+
client
|
|
331
|
+
end
|
|
332
|
+
end
|
|
262
333
|
end
|
|
263
334
|
end
|
|
@@ -1,10 +1,25 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
module Mongoid
|
|
3
4
|
module Contextual
|
|
4
5
|
module Aggregable
|
|
5
|
-
# Contains
|
|
6
|
+
# Contains behavior for aggregating values in memory.
|
|
6
7
|
module Memory
|
|
7
8
|
|
|
9
|
+
# Get all the aggregate values for the provided field.
|
|
10
|
+
# Provided for interface consistency with Aggregable::Mongo.
|
|
11
|
+
#
|
|
12
|
+
# @param [ String, Symbol ] field The field name.
|
|
13
|
+
#
|
|
14
|
+
# @return [ Hash ] A Hash containing the aggregate values.
|
|
15
|
+
# If no documents are present, then returned Hash will have
|
|
16
|
+
# count, sum of 0 and max, min, avg of nil.
|
|
17
|
+
def aggregates(field)
|
|
18
|
+
%w(count sum avg min max).each_with_object({}) do |method, hash|
|
|
19
|
+
hash[method] = send(method, field)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
8
23
|
# Get the average value of the provided field.
|
|
9
24
|
#
|
|
10
25
|
# @example Get the average of a single field.
|
|
@@ -13,8 +28,6 @@ module Mongoid
|
|
|
13
28
|
# @param [ Symbol ] field The field to average.
|
|
14
29
|
#
|
|
15
30
|
# @return [ Float ] The average.
|
|
16
|
-
#
|
|
17
|
-
# @since 3.0.0
|
|
18
31
|
def avg(field)
|
|
19
32
|
count > 0 ? sum(field).to_f / count.to_f : nil
|
|
20
33
|
end
|
|
@@ -35,8 +48,6 @@ module Mongoid
|
|
|
35
48
|
#
|
|
36
49
|
# @return [ Float, Document ] The max value or document with the max
|
|
37
50
|
# value.
|
|
38
|
-
#
|
|
39
|
-
# @since 3.0.0
|
|
40
51
|
def max(field = nil)
|
|
41
52
|
block_given? ? super() : aggregate_by(field, :max_by)
|
|
42
53
|
end
|
|
@@ -57,8 +68,6 @@ module Mongoid
|
|
|
57
68
|
#
|
|
58
69
|
# @return [ Float, Document ] The min value or document with the min
|
|
59
70
|
# value.
|
|
60
|
-
#
|
|
61
|
-
# @since 3.0.0
|
|
62
71
|
def min(field = nil)
|
|
63
72
|
block_given? ? super() : aggregate_by(field, :min_by)
|
|
64
73
|
end
|
|
@@ -75,8 +84,6 @@ module Mongoid
|
|
|
75
84
|
# @param [ Symbol ] field The field to sum.
|
|
76
85
|
#
|
|
77
86
|
# @return [ Float ] The sum value.
|
|
78
|
-
#
|
|
79
|
-
# @since 3.0.0
|
|
80
87
|
def sum(field = nil)
|
|
81
88
|
if block_given?
|
|
82
89
|
super()
|
|
@@ -98,8 +105,6 @@ module Mongoid
|
|
|
98
105
|
# @param [ Symbol ] method The method (min_by or max_by).
|
|
99
106
|
#
|
|
100
107
|
# @return [ Integer ] The aggregate.
|
|
101
|
-
#
|
|
102
|
-
# @since 3.0.0
|
|
103
108
|
def aggregate_by(field, method)
|
|
104
109
|
count > 0 ? send(method) { |doc| doc.public_send(field) }.public_send(field) : nil
|
|
105
110
|
end
|
|
@@ -1,31 +1,38 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "mongoid/contextual/aggregable"
|
|
4
|
+
|
|
2
5
|
module Mongoid
|
|
3
6
|
module Contextual
|
|
4
7
|
module Aggregable
|
|
5
|
-
# Contains
|
|
8
|
+
# Contains behavior for aggregating values in Mongo.
|
|
6
9
|
module Mongo
|
|
7
10
|
|
|
8
11
|
# Get all the aggregate values for the provided field.
|
|
9
12
|
#
|
|
10
13
|
# @example Get all the aggregate values.
|
|
11
14
|
# aggregable.aggregates(:likes)
|
|
15
|
+
# # => {
|
|
16
|
+
# # "count" => 2.0,
|
|
17
|
+
# # "max" => 1000.0,
|
|
18
|
+
# # "min" => 500.0,
|
|
19
|
+
# # "sum" => 1500.0,
|
|
20
|
+
# # "avg" => 750.0
|
|
21
|
+
# # }
|
|
12
22
|
#
|
|
13
23
|
# @param [ String, Symbol ] field The field name.
|
|
14
24
|
#
|
|
15
|
-
# @return [ Hash ]
|
|
16
|
-
#
|
|
17
|
-
#
|
|
18
|
-
# "max" => 1000.0,
|
|
19
|
-
# "min" => 500.0,
|
|
20
|
-
# "sum" => 1500.0,
|
|
21
|
-
# "avg" => 750.0
|
|
22
|
-
# }
|
|
23
|
-
#
|
|
24
|
-
# @since 3.0.0
|
|
25
|
+
# @return [ Hash ] A Hash containing the aggregate values.
|
|
26
|
+
# If no documents are found, then returned Hash will have
|
|
27
|
+
# count, sum of 0 and max, min, avg of nil.
|
|
25
28
|
def aggregates(field)
|
|
26
29
|
result = collection.find.aggregate(pipeline(field), session: _session).to_a
|
|
27
30
|
if result.empty?
|
|
28
|
-
|
|
31
|
+
if Mongoid.broken_aggregables
|
|
32
|
+
{ "count" => 0, "sum" => nil, "avg" => nil, "min" => nil, "max" => nil }
|
|
33
|
+
else
|
|
34
|
+
Aggregable::EMPTY_RESULT.dup
|
|
35
|
+
end
|
|
29
36
|
else
|
|
30
37
|
result.first
|
|
31
38
|
end
|
|
@@ -39,8 +46,6 @@ module Mongoid
|
|
|
39
46
|
# @param [ Symbol ] field The field to average.
|
|
40
47
|
#
|
|
41
48
|
# @return [ Float ] The average.
|
|
42
|
-
#
|
|
43
|
-
# @since 3.0.0
|
|
44
49
|
def avg(field)
|
|
45
50
|
aggregates(field)["avg"]
|
|
46
51
|
end
|
|
@@ -61,8 +66,6 @@ module Mongoid
|
|
|
61
66
|
#
|
|
62
67
|
# @return [ Float, Document ] The max value or document with the max
|
|
63
68
|
# value.
|
|
64
|
-
#
|
|
65
|
-
# @since 3.0.0
|
|
66
69
|
def max(field = nil)
|
|
67
70
|
block_given? ? super() : aggregates(field)["max"]
|
|
68
71
|
end
|
|
@@ -83,8 +86,6 @@ module Mongoid
|
|
|
83
86
|
#
|
|
84
87
|
# @return [ Float, Document ] The min value or document with the min
|
|
85
88
|
# value.
|
|
86
|
-
#
|
|
87
|
-
# @since 3.0.0
|
|
88
89
|
def min(field = nil)
|
|
89
90
|
block_given? ? super() : aggregates(field)["min"]
|
|
90
91
|
end
|
|
@@ -101,8 +102,6 @@ module Mongoid
|
|
|
101
102
|
# @param [ Symbol ] field The field to sum.
|
|
102
103
|
#
|
|
103
104
|
# @return [ Float ] The sum value.
|
|
104
|
-
#
|
|
105
|
-
# @since 3.0.0
|
|
106
105
|
def sum(field = nil)
|
|
107
106
|
block_given? ? super() : aggregates(field)["sum"] || 0
|
|
108
107
|
end
|
|
@@ -119,15 +118,15 @@ module Mongoid
|
|
|
119
118
|
# @param [ String, Symbol ] field The name of the field.
|
|
120
119
|
#
|
|
121
120
|
# @return [ Array ] The array of pipeline operators.
|
|
122
|
-
#
|
|
123
|
-
# @since 3.1.0
|
|
124
121
|
def pipeline(field)
|
|
125
122
|
db_field = "$#{database_field_name(field)}"
|
|
123
|
+
sort, skip, limit = criteria.options.values_at(:sort, :skip, :limit)
|
|
124
|
+
|
|
126
125
|
pipeline = []
|
|
127
126
|
pipeline << { "$match" => criteria.exists(field => true).selector }
|
|
128
|
-
pipeline << { "$sort" =>
|
|
129
|
-
pipeline << { "$skip" =>
|
|
130
|
-
pipeline << { "$limit" =>
|
|
127
|
+
pipeline << { "$sort" => sort } if sort && (skip || limit)
|
|
128
|
+
pipeline << { "$skip" => skip } if skip
|
|
129
|
+
pipeline << { "$limit" => limit } if limit
|
|
131
130
|
pipeline << {
|
|
132
131
|
"$group" => {
|
|
133
132
|
"_id" => field.to_s,
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "mongoid/contextual/aggregable"
|
|
4
|
+
|
|
5
|
+
module Mongoid
|
|
6
|
+
module Contextual
|
|
7
|
+
module Aggregable
|
|
8
|
+
# Contains behavior for aggregating values in null context.
|
|
9
|
+
module None
|
|
10
|
+
|
|
11
|
+
# Get all the aggregate values for the provided field in null context.
|
|
12
|
+
# Provided for interface consistency with Aggregable::Mongo.
|
|
13
|
+
#
|
|
14
|
+
# @param [ String, Symbol ] _field The field name.
|
|
15
|
+
#
|
|
16
|
+
# @return [ Hash ] A Hash with count, sum of 0 and max, min, avg of nil.
|
|
17
|
+
def aggregates(_field)
|
|
18
|
+
Aggregable::EMPTY_RESULT.dup
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Always returns zero.
|
|
22
|
+
#
|
|
23
|
+
# @example Get the sum of null context.
|
|
24
|
+
#
|
|
25
|
+
# @param [ Symbol ] _field The field to sum.
|
|
26
|
+
#
|
|
27
|
+
# @return [ Integer ] Always zero.
|
|
28
|
+
def sum(_field = nil)
|
|
29
|
+
0
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Always returns nil.
|
|
33
|
+
#
|
|
34
|
+
# @example Get the avg of null context.
|
|
35
|
+
#
|
|
36
|
+
# @param [ Symbol ] _field The field to avg.
|
|
37
|
+
#
|
|
38
|
+
# @return [ nil ] Always nil.
|
|
39
|
+
def avg(_field)
|
|
40
|
+
nil
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Always returns nil.
|
|
44
|
+
#
|
|
45
|
+
# @example Get the min of null context.
|
|
46
|
+
#
|
|
47
|
+
# @param [ Symbol ] _field The field to min.
|
|
48
|
+
#
|
|
49
|
+
# @return [ nil ] Always nil.
|
|
50
|
+
def min(_field = nil)
|
|
51
|
+
nil
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Always returns nil.
|
|
55
|
+
#
|
|
56
|
+
# @example Get the max of null context.
|
|
57
|
+
#
|
|
58
|
+
# @param [ Symbol ] _field The field to max.
|
|
59
|
+
#
|
|
60
|
+
# @return [ nil ] Always nil.
|
|
61
|
+
alias :max :min
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
module Mongoid
|
|
3
4
|
module Contextual
|
|
4
5
|
module Atomic
|
|
@@ -11,12 +12,22 @@ module Mongoid
|
|
|
11
12
|
# @param [ Hash ] adds The operations.
|
|
12
13
|
#
|
|
13
14
|
# @return [ nil ] Nil.
|
|
14
|
-
#
|
|
15
|
-
# @since 3.0.0
|
|
16
15
|
def add_to_set(adds)
|
|
17
16
|
view.update_many("$addToSet" => collect_operations(adds))
|
|
18
17
|
end
|
|
19
18
|
|
|
19
|
+
# Perform an atomic $addToSet/$each on the matching documents.
|
|
20
|
+
#
|
|
21
|
+
# @example Add the value to the set.
|
|
22
|
+
# context.add_each_to_set(members: ["Dave", "Bill"], genres: ["Electro", "Disco"])
|
|
23
|
+
#
|
|
24
|
+
# @param [ Hash ] adds The operations.
|
|
25
|
+
#
|
|
26
|
+
# @return [ nil ] Nil.
|
|
27
|
+
def add_each_to_set(adds)
|
|
28
|
+
view.update_many("$addToSet" => collect_each_operations(adds))
|
|
29
|
+
end
|
|
30
|
+
|
|
20
31
|
# Perform an atomic $bit operation on the matching documents.
|
|
21
32
|
#
|
|
22
33
|
# @example Perform the bitwise op.
|
|
@@ -25,8 +36,6 @@ module Mongoid
|
|
|
25
36
|
# @param [ Hash ] bits The operations.
|
|
26
37
|
#
|
|
27
38
|
# @return [ nil ] Nil.
|
|
28
|
-
#
|
|
29
|
-
# @since 3.0.0
|
|
30
39
|
def bit(bits)
|
|
31
40
|
view.update_many("$bit" => collect_operations(bits))
|
|
32
41
|
end
|
|
@@ -39,8 +48,6 @@ module Mongoid
|
|
|
39
48
|
# @param [ Hash ] incs The operations.
|
|
40
49
|
#
|
|
41
50
|
# @return [ nil ] Nil.
|
|
42
|
-
#
|
|
43
|
-
# @since 3.0.0
|
|
44
51
|
def inc(incs)
|
|
45
52
|
view.update_many("$inc" => collect_operations(incs))
|
|
46
53
|
end
|
|
@@ -56,8 +63,6 @@ module Mongoid
|
|
|
56
63
|
# @param [ Hash ] pops The operations.
|
|
57
64
|
#
|
|
58
65
|
# @return [ nil ] Nil.
|
|
59
|
-
#
|
|
60
|
-
# @since 3.0.0
|
|
61
66
|
def pop(pops)
|
|
62
67
|
view.update_many("$pop" => collect_operations(pops))
|
|
63
68
|
end
|
|
@@ -72,8 +77,6 @@ module Mongoid
|
|
|
72
77
|
# @param [ Hash ] pulls The operations.
|
|
73
78
|
#
|
|
74
79
|
# @return [ nil ] Nil.
|
|
75
|
-
#
|
|
76
|
-
# @since 3.0.0
|
|
77
80
|
def pull(pulls)
|
|
78
81
|
view.update_many("$pull" => collect_operations(pulls))
|
|
79
82
|
end
|
|
@@ -86,8 +89,6 @@ module Mongoid
|
|
|
86
89
|
# @param [ Hash ] pulls The operations.
|
|
87
90
|
#
|
|
88
91
|
# @return [ nil ] Nil.
|
|
89
|
-
#
|
|
90
|
-
# @since 3.0.0
|
|
91
92
|
def pull_all(pulls)
|
|
92
93
|
view.update_many("$pullAll" => collect_operations(pulls))
|
|
93
94
|
end
|
|
@@ -100,8 +101,6 @@ module Mongoid
|
|
|
100
101
|
# @param [ Hash ] pushes The operations.
|
|
101
102
|
#
|
|
102
103
|
# @return [ nil ] Nil.
|
|
103
|
-
#
|
|
104
|
-
# @since 3.0.0
|
|
105
104
|
def push(pushes)
|
|
106
105
|
view.update_many("$push" => collect_operations(pushes))
|
|
107
106
|
end
|
|
@@ -114,13 +113,8 @@ module Mongoid
|
|
|
114
113
|
# @param [ Hash ] pushes The operations.
|
|
115
114
|
#
|
|
116
115
|
# @return [ nil ] Nil.
|
|
117
|
-
#
|
|
118
|
-
# @since 3.0.0
|
|
119
116
|
def push_all(pushes)
|
|
120
|
-
|
|
121
|
-
ops.merge!(field => { '$each' => elements })
|
|
122
|
-
end
|
|
123
|
-
view.update_many("$push" => push_each_updates)
|
|
117
|
+
view.update_many("$push" => collect_each_operations(pushes))
|
|
124
118
|
end
|
|
125
119
|
|
|
126
120
|
# Perform an atomic $rename of fields on the matching documents.
|
|
@@ -131,8 +125,6 @@ module Mongoid
|
|
|
131
125
|
# @param [ Hash ] renames The operations.
|
|
132
126
|
#
|
|
133
127
|
# @return [ nil ] Nil.
|
|
134
|
-
#
|
|
135
|
-
# @since 3.0.0
|
|
136
128
|
def rename(renames)
|
|
137
129
|
operations = renames.inject({}) do |ops, (old_name, new_name)|
|
|
138
130
|
ops[old_name] = new_name.to_s
|
|
@@ -149,8 +141,6 @@ module Mongoid
|
|
|
149
141
|
# @param [ Hash ] sets The operations.
|
|
150
142
|
#
|
|
151
143
|
# @return [ nil ] Nil.
|
|
152
|
-
#
|
|
153
|
-
# @since 3.0.0
|
|
154
144
|
def set(sets)
|
|
155
145
|
view.update_many("$set" => collect_operations(sets))
|
|
156
146
|
end
|
|
@@ -160,22 +150,30 @@ module Mongoid
|
|
|
160
150
|
# @example Unset the field on the matches.
|
|
161
151
|
# context.unset(:name)
|
|
162
152
|
#
|
|
163
|
-
# @param [ String
|
|
153
|
+
# @param [ String | Symbol | Array<String|Symbol> | Hash ] args
|
|
154
|
+
# The name(s) of the field(s) to unset.
|
|
155
|
+
# If a Hash is specified, its keys will be used irrespective of what
|
|
156
|
+
# each key's value is, even if the value is nil or false.
|
|
164
157
|
#
|
|
165
158
|
# @return [ nil ] Nil.
|
|
166
|
-
#
|
|
167
|
-
# @since 3.0.0
|
|
168
159
|
def unset(*args)
|
|
169
|
-
fields = args.
|
|
160
|
+
fields = args.map { |a| a.is_a?(Hash) ? a.keys : a }
|
|
161
|
+
.__find_args__
|
|
162
|
+
.map { |f| [database_field_name(f), true] }
|
|
170
163
|
view.update_many("$unset" => Hash[fields])
|
|
171
164
|
end
|
|
172
165
|
|
|
173
166
|
private
|
|
174
167
|
|
|
175
168
|
def collect_operations(ops)
|
|
176
|
-
ops.
|
|
169
|
+
ops.each_with_object({}) do |(field, value), operations|
|
|
177
170
|
operations[database_field_name(field)] = value.mongoize
|
|
178
|
-
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def collect_each_operations(ops)
|
|
175
|
+
ops.each_with_object({}) do |(field, value), operations|
|
|
176
|
+
operations[database_field_name(field)] = { "$each" => Array.wrap(value).mongoize }
|
|
179
177
|
end
|
|
180
178
|
end
|
|
181
179
|
end
|