mongoid 3.1.5 → 8.0.2
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 +5 -5
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +636 -33
- data/LICENSE +2 -1
- data/README.md +32 -24
- data/Rakefile +75 -5
- data/lib/config/locales/en.yml +301 -132
- data/lib/mongoid/association/accessors.rb +431 -0
- data/lib/mongoid/association/bindable.rb +227 -0
- data/lib/mongoid/association/builders.rb +86 -0
- data/lib/mongoid/association/constrainable.rb +42 -0
- data/lib/mongoid/association/depending.rb +128 -0
- data/lib/mongoid/association/eager_loadable.rb +57 -0
- data/lib/mongoid/association/embedded/batchable.rb +398 -0
- data/lib/mongoid/association/embedded/cyclic.rb +102 -0
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +74 -0
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +38 -0
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +111 -0
- data/lib/mongoid/association/embedded/embedded_in.rb +135 -0
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +42 -0
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +45 -0
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +571 -0
- data/lib/mongoid/association/embedded/embeds_many.rb +183 -0
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +43 -0
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +53 -0
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +164 -0
- data/lib/mongoid/association/embedded/embeds_one.rb +150 -0
- data/lib/mongoid/association/embedded.rb +6 -0
- data/lib/mongoid/association/macros.rb +228 -0
- data/lib/mongoid/association/many.rb +202 -0
- data/lib/mongoid/association/marshalable.rb +31 -0
- data/lib/mongoid/association/nested/many.rb +192 -0
- data/lib/mongoid/association/nested/nested_buildable.rb +66 -0
- data/lib/mongoid/association/nested/one.rb +116 -0
- data/lib/mongoid/association/nested.rb +15 -0
- data/lib/mongoid/association/one.rb +53 -0
- data/lib/mongoid/association/options.rb +122 -0
- data/lib/mongoid/association/proxy.rb +200 -0
- data/lib/mongoid/association/referenced/auto_save.rb +74 -0
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +83 -0
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +48 -0
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +73 -0
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +124 -0
- data/lib/mongoid/association/referenced/belongs_to.rb +226 -0
- data/lib/mongoid/association/referenced/counter_cache.rb +152 -0
- data/lib/mongoid/association/referenced/eager.rb +163 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +72 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +40 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +53 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +345 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +273 -0
- data/lib/mongoid/association/referenced/has_many/binding.rb +36 -0
- data/lib/mongoid/association/referenced/has_many/buildable.rb +38 -0
- data/lib/mongoid/association/referenced/has_many/eager.rb +44 -0
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +494 -0
- data/lib/mongoid/association/referenced/has_many/proxy.rb +551 -0
- data/lib/mongoid/association/referenced/has_many.rb +251 -0
- data/lib/mongoid/association/referenced/has_one/binding.rb +42 -0
- data/lib/mongoid/association/referenced/has_one/buildable.rb +74 -0
- data/lib/mongoid/association/referenced/has_one/eager.rb +36 -0
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +113 -0
- data/lib/mongoid/association/referenced/has_one/proxy.rb +108 -0
- data/lib/mongoid/association/referenced/has_one.rb +184 -0
- data/lib/mongoid/association/referenced/syncable.rb +155 -0
- data/lib/mongoid/association/referenced.rb +9 -0
- data/lib/mongoid/association/reflections.rb +69 -0
- data/lib/mongoid/association/relatable.rb +489 -0
- data/lib/mongoid/association.rb +135 -0
- data/lib/mongoid/atomic/modifiers.rb +41 -61
- data/lib/mongoid/atomic/paths/embedded/many.rb +24 -8
- data/lib/mongoid/atomic/paths/embedded/one.rb +5 -8
- data/lib/mongoid/atomic/paths/embedded.rb +3 -34
- data/lib/mongoid/atomic/paths/root.rb +4 -20
- data/lib/mongoid/atomic/paths.rb +2 -1
- data/lib/mongoid/atomic.rb +52 -69
- data/lib/mongoid/attributes/dynamic.rb +141 -0
- data/lib/mongoid/attributes/nested.rb +93 -0
- data/lib/mongoid/attributes/processing.rb +35 -97
- data/lib/mongoid/attributes/projector.rb +119 -0
- data/lib/mongoid/attributes/readonly.rb +27 -10
- data/lib/mongoid/attributes.rb +159 -181
- data/lib/mongoid/cacheable.rb +33 -0
- data/lib/mongoid/changeable.rb +420 -0
- data/lib/mongoid/clients/factory.rb +105 -0
- data/lib/mongoid/clients/options.rb +111 -0
- data/lib/mongoid/clients/sessions.rb +113 -0
- data/lib/mongoid/clients/storage_options.rb +79 -0
- data/lib/mongoid/clients/validators/storage.rb +58 -0
- data/lib/mongoid/clients/validators.rb +3 -0
- data/lib/mongoid/clients.rb +79 -0
- data/lib/mongoid/composable.rb +128 -0
- data/lib/mongoid/config/environment.rb +51 -13
- data/lib/mongoid/config/options.rb +30 -18
- data/lib/mongoid/config/validators/client.rb +128 -0
- data/lib/mongoid/config/validators/option.rb +3 -4
- data/lib/mongoid/config/validators.rb +3 -2
- data/lib/mongoid/config.rb +170 -89
- data/lib/mongoid/contextual/aggregable/memory.rb +40 -27
- data/lib/mongoid/contextual/aggregable/mongo.rb +33 -36
- data/lib/mongoid/contextual/aggregable/none.rb +65 -0
- data/lib/mongoid/contextual/aggregable.rb +17 -0
- data/lib/mongoid/contextual/atomic.rb +80 -79
- data/lib/mongoid/contextual/command.rb +8 -11
- data/lib/mongoid/contextual/geo_near.rb +42 -44
- data/lib/mongoid/contextual/map_reduce.rb +33 -127
- data/lib/mongoid/contextual/memory.rb +226 -88
- data/lib/mongoid/contextual/mongo.rb +466 -293
- data/lib/mongoid/contextual/none.rb +193 -0
- data/lib/mongoid/contextual/queryable.rb +3 -4
- data/lib/mongoid/contextual.rb +11 -11
- data/lib/mongoid/copyable.rb +68 -20
- data/lib/mongoid/criteria/findable.rb +143 -0
- data/lib/mongoid/criteria/includable.rb +92 -0
- data/lib/mongoid/criteria/inspectable.rb +24 -0
- data/lib/mongoid/criteria/marshalable.rb +55 -0
- data/lib/mongoid/criteria/modifiable.rb +235 -0
- data/lib/mongoid/criteria/options.rb +24 -0
- data/lib/mongoid/criteria/permission.rb +71 -0
- data/lib/mongoid/criteria/queryable/aggregable.rb +109 -0
- data/lib/mongoid/criteria/queryable/expandable.rb +68 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +151 -0
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +57 -0
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +33 -0
- data/lib/mongoid/criteria/queryable/extensions/date.rb +63 -0
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +52 -0
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +163 -0
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +75 -0
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +81 -0
- data/lib/mongoid/criteria/queryable/extensions/object.rb +182 -0
- data/lib/mongoid/criteria/queryable/extensions/range.rb +102 -0
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +72 -0
- data/lib/mongoid/criteria/queryable/extensions/set.rb +33 -0
- data/lib/mongoid/criteria/queryable/extensions/string.rb +122 -0
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +74 -0
- data/lib/mongoid/criteria/queryable/extensions/time.rb +60 -0
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +66 -0
- data/lib/mongoid/criteria/queryable/extensions.rb +25 -0
- data/lib/mongoid/criteria/queryable/key.rb +177 -0
- data/lib/mongoid/criteria/queryable/macroable.rb +26 -0
- data/lib/mongoid/criteria/queryable/mergeable.rb +434 -0
- data/lib/mongoid/criteria/queryable/optional.rb +380 -0
- data/lib/mongoid/criteria/queryable/options.rb +136 -0
- data/lib/mongoid/criteria/queryable/pipeline.rb +106 -0
- data/lib/mongoid/criteria/queryable/selectable.rb +937 -0
- data/lib/mongoid/criteria/queryable/selector.rb +287 -0
- data/lib/mongoid/criteria/queryable/smash.rb +128 -0
- data/lib/mongoid/criteria/queryable/storable.rb +237 -0
- data/lib/mongoid/criteria/queryable.rb +90 -0
- data/lib/mongoid/criteria/scopable.rb +166 -0
- data/lib/mongoid/criteria.rb +177 -189
- data/lib/mongoid/deprecable.rb +36 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +193 -139
- data/lib/mongoid/equality.rb +35 -18
- data/lib/mongoid/errors/ambiguous_relationship.rb +5 -6
- 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 +22 -0
- data/lib/mongoid/errors/document_not_found.rb +36 -21
- data/lib/mongoid/errors/empty_config_file.rb +25 -0
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +19 -0
- data/lib/mongoid/errors/invalid_collection.rb +2 -1
- data/lib/mongoid/errors/invalid_config_file.rb +25 -0
- data/lib/mongoid/errors/invalid_config_option.rb +3 -4
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +31 -0
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +24 -0
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +25 -0
- data/lib/mongoid/errors/invalid_expression_operator.rb +27 -0
- data/lib/mongoid/errors/invalid_field.rb +10 -9
- data/lib/mongoid/errors/invalid_field_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_field_option.rb +2 -3
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/invalid_find.rb +2 -3
- data/lib/mongoid/errors/invalid_includes.rb +2 -3
- data/lib/mongoid/errors/invalid_index.rb +2 -3
- data/lib/mongoid/errors/invalid_options.rb +4 -5
- data/lib/mongoid/errors/invalid_path.rb +2 -3
- data/lib/mongoid/errors/invalid_persistence_option.rb +26 -0
- data/lib/mongoid/errors/invalid_query.rb +40 -0
- data/lib/mongoid/errors/invalid_relation.rb +61 -0
- data/lib/mongoid/errors/invalid_relation_option.rb +28 -0
- data/lib/mongoid/errors/invalid_scope.rb +2 -3
- data/lib/mongoid/errors/invalid_session_use.rb +21 -0
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +6 -5
- data/lib/mongoid/errors/invalid_storage_options.rb +4 -5
- data/lib/mongoid/errors/invalid_storage_parent.rb +25 -0
- data/lib/mongoid/errors/invalid_time.rb +2 -3
- data/lib/mongoid/errors/inverse_not_found.rb +4 -5
- data/lib/mongoid/errors/mixed_client_configuration.rb +27 -0
- data/lib/mongoid/errors/mixed_relations.rb +2 -3
- data/lib/mongoid/errors/mongoid_error.rb +22 -23
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +3 -4
- data/lib/mongoid/errors/no_client_config.rb +21 -0
- data/lib/mongoid/errors/no_client_database.rb +26 -0
- data/lib/mongoid/errors/no_client_hosts.rb +26 -0
- data/lib/mongoid/errors/no_clients_config.rb +19 -0
- data/lib/mongoid/errors/no_default_client.rb +22 -0
- data/lib/mongoid/errors/no_environment.rb +2 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +2 -3
- data/lib/mongoid/errors/no_metadata.rb +2 -3
- data/lib/mongoid/errors/no_parent.rb +2 -3
- data/lib/mongoid/errors/readonly_attribute.rb +3 -4
- data/lib/mongoid/errors/readonly_document.rb +21 -0
- data/lib/mongoid/errors/scope_overwrite.rb +2 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +3 -1
- data/lib/mongoid/errors/unknown_attribute.rb +3 -4
- data/lib/mongoid/errors/unknown_model.rb +24 -0
- 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 +30 -9
- data/lib/mongoid/evolvable.rb +4 -5
- data/lib/mongoid/extensions/array.rb +45 -52
- data/lib/mongoid/extensions/big_decimal.rb +41 -22
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +19 -17
- data/lib/mongoid/extensions/date.rb +33 -23
- data/lib/mongoid/extensions/date_time.rb +5 -13
- data/lib/mongoid/extensions/decimal128.rb +36 -0
- data/lib/mongoid/extensions/false_class.rb +5 -8
- data/lib/mongoid/extensions/float.rb +11 -16
- data/lib/mongoid/extensions/hash.rb +88 -49
- data/lib/mongoid/extensions/integer.rb +10 -18
- data/lib/mongoid/extensions/module.rb +3 -4
- data/lib/mongoid/extensions/nil_class.rb +2 -5
- data/lib/mongoid/extensions/object.rb +38 -62
- data/lib/mongoid/extensions/object_id.rb +7 -12
- data/lib/mongoid/extensions/range.rb +46 -17
- data/lib/mongoid/extensions/regexp.rb +15 -8
- data/lib/mongoid/extensions/set.rb +17 -15
- data/lib/mongoid/extensions/string.rb +40 -80
- data/lib/mongoid/extensions/symbol.rb +7 -23
- data/lib/mongoid/extensions/time.rb +42 -25
- data/lib/mongoid/extensions/time_with_zone.rb +27 -10
- data/lib/mongoid/extensions/true_class.rb +5 -8
- data/lib/mongoid/extensions.rb +31 -13
- data/lib/mongoid/factory.rb +99 -11
- data/lib/mongoid/fields/foreign_key.rb +26 -34
- data/lib/mongoid/fields/localized.rb +24 -13
- data/lib/mongoid/fields/standard.rb +19 -73
- data/lib/mongoid/fields/validators/macro.rb +56 -15
- data/lib/mongoid/fields/validators.rb +2 -1
- data/lib/mongoid/fields.rb +342 -87
- data/lib/mongoid/findable.rb +219 -0
- data/lib/mongoid/indexable/specification.rb +103 -0
- data/lib/mongoid/indexable/validators/options.rb +110 -0
- data/lib/mongoid/indexable.rb +148 -0
- data/lib/mongoid/inspectable.rb +52 -0
- data/lib/mongoid/interceptable.rb +312 -0
- data/lib/mongoid/loggable.rb +15 -18
- data/lib/mongoid/matchable.rb +23 -0
- 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 +115 -0
- data/lib/mongoid/persistable/creatable.rb +181 -0
- data/lib/mongoid/persistable/deletable.rb +132 -0
- data/lib/mongoid/persistable/destroyable.rb +57 -0
- data/lib/mongoid/persistable/incrementable.rb +35 -0
- data/lib/mongoid/persistable/logical.rb +36 -0
- data/lib/mongoid/persistable/poppable.rb +36 -0
- data/lib/mongoid/persistable/pullable.rb +50 -0
- data/lib/mongoid/persistable/pushable.rb +66 -0
- data/lib/mongoid/persistable/renamable.rb +37 -0
- data/lib/mongoid/persistable/savable.rb +47 -0
- data/lib/mongoid/persistable/settable.rb +93 -0
- data/lib/mongoid/persistable/unsettable.rb +36 -0
- data/lib/mongoid/persistable/updatable.rb +165 -0
- data/lib/mongoid/persistable/upsertable.rb +51 -0
- data/lib/mongoid/persistable.rb +305 -0
- data/lib/mongoid/persistence_context.rb +239 -0
- data/lib/mongoid/positional.rb +72 -0
- data/lib/mongoid/query_cache.rb +64 -0
- data/lib/mongoid/railtie.rb +35 -78
- data/lib/mongoid/railties/controller_runtime.rb +88 -0
- data/lib/mongoid/railties/database.rake +18 -25
- data/lib/mongoid/reloadable.rb +94 -0
- data/lib/mongoid/scopable.rb +324 -0
- data/lib/mongoid/selectable.rb +49 -0
- data/lib/mongoid/serializable.rb +170 -0
- data/lib/mongoid/shardable.rb +130 -0
- data/lib/mongoid/stateful.rb +134 -0
- data/lib/mongoid/stringified_symbol.rb +52 -0
- data/lib/mongoid/tasks/database.rake +38 -0
- data/lib/mongoid/tasks/database.rb +194 -0
- data/lib/mongoid/threaded/lifecycle.rb +28 -70
- data/lib/mongoid/threaded.rb +142 -219
- data/lib/mongoid/timestamps/created/short.rb +2 -1
- data/lib/mongoid/timestamps/created.rb +9 -5
- data/lib/mongoid/timestamps/short.rb +2 -1
- data/lib/mongoid/timestamps/timeless.rb +52 -16
- data/lib/mongoid/timestamps/updated/short.rb +4 -3
- data/lib/mongoid/timestamps/updated.rb +14 -9
- data/lib/mongoid/timestamps.rb +4 -3
- data/lib/mongoid/touchable.rb +131 -0
- data/lib/mongoid/traversable.rb +337 -0
- data/lib/mongoid/validatable/associated.rb +47 -0
- data/lib/mongoid/validatable/format.rb +21 -0
- data/lib/mongoid/validatable/length.rb +21 -0
- data/lib/mongoid/validatable/localizable.rb +29 -0
- data/lib/mongoid/validatable/macros.rb +89 -0
- data/lib/mongoid/validatable/presence.rb +81 -0
- data/lib/mongoid/validatable/queryable.rb +29 -0
- data/lib/mongoid/validatable/uniqueness.rb +304 -0
- data/lib/mongoid/validatable.rb +160 -0
- data/lib/mongoid/version.rb +3 -2
- data/lib/mongoid/warnings.rb +28 -0
- data/lib/mongoid.rb +68 -109
- data/lib/rails/generators/mongoid/config/config_generator.rb +10 -2
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +150 -45
- data/lib/rails/generators/mongoid/model/model_generator.rb +3 -3
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -4
- data/lib/rails/generators/mongoid_generator.rb +5 -41
- data/lib/rails/mongoid.rb +6 -129
- data/spec/README.md +33 -0
- data/spec/config/mongoid.yml +56 -25
- data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
- data/spec/integration/app_spec.rb +345 -0
- data/spec/integration/associations/belongs_to_spec.rb +33 -0
- data/spec/integration/associations/embedded_dirty_spec.rb +57 -0
- data/spec/integration/associations/embedded_spec.rb +283 -0
- data/spec/integration/associations/embeds_many_spec.rb +219 -0
- data/spec/integration/associations/embeds_one_spec.rb +41 -0
- data/spec/integration/associations/foreign_key_spec.rb +107 -0
- data/spec/integration/associations/foreign_key_spec_models.rb +64 -0
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
- data/spec/integration/associations/has_many_spec.rb +128 -0
- data/spec/integration/associations/has_one_spec.rb +272 -0
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +115 -0
- data/spec/integration/associations/reverse_population_spec.rb +34 -0
- data/spec/integration/associations/reverse_population_spec_models.rb +36 -0
- data/spec/integration/associations/scope_option_spec.rb +101 -0
- data/spec/integration/atomic/modifiers_spec.rb +116 -0
- data/spec/integration/bson_regexp_raw_spec.rb +19 -0
- data/spec/integration/callbacks_models.rb +155 -0
- data/spec/integration/callbacks_spec.rb +450 -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 +40 -0
- data/spec/integration/criteria/default_scope_spec.rb +72 -0
- data/spec/integration/criteria/logical_spec.rb +124 -0
- data/spec/integration/criteria/range_spec.rb +359 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +142 -0
- data/spec/integration/discriminator_key_spec.rb +392 -0
- data/spec/integration/discriminator_value_spec.rb +206 -0
- data/spec/integration/document_spec.rb +51 -0
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +89 -0
- data/spec/integration/matcher_examples_spec.rb +765 -0
- data/spec/integration/matcher_operator_data/all.yml +140 -0
- data/spec/integration/matcher_operator_data/and.yml +93 -0
- data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
- data/spec/integration/matcher_operator_data/comment.yml +22 -0
- data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
- data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
- data/spec/integration/matcher_operator_data/eq.yml +191 -0
- data/spec/integration/matcher_operator_data/exists.yml +213 -0
- data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
- data/spec/integration/matcher_operator_data/gt.yml +132 -0
- data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
- data/spec/integration/matcher_operator_data/gte.yml +132 -0
- data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/implicit.yml +331 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
- data/spec/integration/matcher_operator_data/in.yml +210 -0
- data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
- data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
- data/spec/integration/matcher_operator_data/lt.yml +132 -0
- data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
- data/spec/integration/matcher_operator_data/lte.yml +132 -0
- data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/mod.yml +55 -0
- data/spec/integration/matcher_operator_data/multiple.yml +29 -0
- data/spec/integration/matcher_operator_data/ne.yml +150 -0
- data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
- data/spec/integration/matcher_operator_data/nin.yml +114 -0
- data/spec/integration/matcher_operator_data/nor.yml +126 -0
- data/spec/integration/matcher_operator_data/not.yml +196 -0
- data/spec/integration/matcher_operator_data/or.yml +137 -0
- data/spec/integration/matcher_operator_data/regex.yml +174 -0
- data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
- data/spec/integration/matcher_operator_data/size.yml +174 -0
- data/spec/integration/matcher_operator_data/type.yml +70 -0
- data/spec/integration/matcher_operator_data/type_array.yml +16 -0
- data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
- data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
- data/spec/integration/matcher_operator_data/type_code.yml +26 -0
- data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
- data/spec/integration/matcher_operator_data/type_date.yml +39 -0
- data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
- data/spec/integration/matcher_operator_data/type_decimal.yml +41 -0
- data/spec/integration/matcher_operator_data/type_double.yml +15 -0
- data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
- data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
- data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_null.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
- data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
- data/spec/integration/matcher_operator_data/type_string.yml +15 -0
- data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
- data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
- data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
- data/spec/integration/matcher_operator_spec.rb +122 -0
- data/spec/integration/matcher_spec.rb +283 -0
- data/spec/integration/persistence/range_field_spec.rb +350 -0
- data/spec/integration/server_query_spec.rb +141 -0
- data/spec/integration/shardable_spec.rb +148 -0
- data/spec/integration/stringified_symbol_field_spec.rb +203 -0
- data/spec/lite_spec_helper.rb +83 -0
- data/spec/mongoid/association/accessors_spec.rb +1067 -0
- data/spec/mongoid/association/auto_save_spec.rb +403 -0
- data/spec/mongoid/association/builders_spec.rb +255 -0
- data/spec/mongoid/association/constrainable_spec.rb +117 -0
- data/spec/mongoid/association/counter_cache_spec.rb +452 -0
- data/spec/mongoid/association/depending_spec.rb +959 -0
- data/spec/mongoid/association/eager_spec.rb +282 -0
- data/spec/mongoid/association/embedded/cyclic_spec.rb +180 -0
- data/spec/mongoid/association/embedded/dirty_spec.rb +67 -0
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +174 -0
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +90 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +619 -0
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +903 -0
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +56 -0
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +218 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +4863 -0
- data/spec/mongoid/association/embedded/embeds_many_models.rb +226 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +63 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +932 -0
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +79 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +106 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +1025 -0
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +8 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +73 -0
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +28 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +984 -0
- data/spec/mongoid/association/macros_spec.rb +1116 -0
- data/spec/mongoid/association/nested/many_spec.rb +232 -0
- data/spec/mongoid/association/nested/one_spec.rb +253 -0
- data/spec/mongoid/association/options_spec.rb +1323 -0
- data/spec/mongoid/association/polymorphic_spec.rb +162 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +244 -0
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +292 -0
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +412 -0
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +1388 -0
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +57 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +2046 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +180 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +148 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +196 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +76 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +3836 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +92 -0
- 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 +1104 -0
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +155 -0
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +251 -0
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +290 -0
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2232 -0
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +23 -0
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +4161 -0
- data/spec/mongoid/association/referenced/has_many_models.rb +97 -0
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +1273 -0
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +133 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +159 -0
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +193 -0
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +1248 -0
- data/spec/mongoid/association/referenced/has_one_models.rb +113 -0
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +1383 -0
- data/spec/mongoid/association/reflections_spec.rb +92 -0
- data/spec/mongoid/association/syncable_spec.rb +513 -0
- data/spec/mongoid/association_spec.rb +191 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +88 -39
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +10 -49
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +9 -49
- data/spec/mongoid/atomic/paths/root_spec.rb +5 -61
- data/spec/mongoid/atomic/paths_spec.rb +115 -35
- data/spec/mongoid/atomic_spec.rb +89 -42
- data/spec/mongoid/attributes/dynamic_spec.rb +152 -0
- data/spec/mongoid/attributes/nested_spec.rb +5000 -0
- data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
- data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
- data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
- data/spec/mongoid/attributes/projector_spec.rb +40 -0
- data/spec/mongoid/attributes/readonly_spec.rb +166 -64
- data/spec/mongoid/attributes_spec.rb +1418 -409
- data/spec/mongoid/cacheable_spec.rb +114 -0
- data/spec/mongoid/changeable_spec.rb +1914 -0
- data/spec/mongoid/clients/factory_spec.rb +426 -0
- data/spec/mongoid/clients/options_spec.rb +521 -0
- data/spec/mongoid/clients/sessions_spec.rb +297 -0
- data/spec/mongoid/clients/transactions_spec.rb +415 -0
- data/spec/mongoid/clients_spec.rb +1084 -0
- data/spec/mongoid/composable_spec.rb +33 -0
- data/spec/mongoid/config/environment_spec.rb +138 -17
- data/spec/mongoid/config/options_spec.rb +26 -7
- data/spec/mongoid/config_spec.rb +607 -93
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +433 -153
- data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +221 -56
- data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
- data/spec/mongoid/contextual/atomic_spec.rb +577 -162
- data/spec/mongoid/contextual/geo_near_spec.rb +104 -38
- data/spec/mongoid/contextual/map_reduce_spec.rb +137 -142
- data/spec/mongoid/contextual/memory_spec.rb +1880 -269
- data/spec/mongoid/contextual/mongo_spec.rb +2523 -601
- data/spec/mongoid/contextual/none_spec.rb +123 -0
- data/spec/mongoid/copyable_spec.rb +833 -76
- data/spec/mongoid/copyable_spec_models.rb +47 -0
- data/spec/mongoid/criteria/findable_spec.rb +1132 -0
- data/spec/mongoid/criteria/includable_spec.rb +1492 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
- data/spec/mongoid/criteria/inspectable_spec.rb +29 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +47 -0
- data/spec/mongoid/criteria/modifiable_spec.rb +1812 -0
- data/spec/mongoid/criteria/options_spec.rb +31 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +372 -0
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +61 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +513 -0
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +169 -0
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +60 -0
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +215 -0
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +343 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +434 -0
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +60 -0
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +67 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +314 -0
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +67 -0
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +79 -0
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +119 -0
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +110 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +370 -0
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +91 -0
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +92 -0
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +41 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +347 -0
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +169 -0
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +406 -0
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +387 -0
- data/spec/mongoid/criteria/queryable/key_spec.rb +96 -0
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +182 -0
- data/spec/mongoid/criteria/queryable/optional_spec.rb +1317 -0
- data/spec/mongoid/criteria/queryable/options_spec.rb +362 -0
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +214 -0
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +139 -0
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +2119 -0
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +2462 -0
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +895 -0
- data/spec/mongoid/criteria/queryable/smash_spec.rb +32 -0
- data/spec/mongoid/criteria/queryable/storable_spec.rb +226 -0
- data/spec/mongoid/criteria/scopable_spec.rb +601 -0
- data/spec/mongoid/criteria_projection_spec.rb +410 -0
- data/spec/mongoid/criteria_spec.rb +1828 -3572
- data/spec/mongoid/document_fields_spec.rb +262 -0
- data/spec/mongoid/document_persistence_context_spec.rb +32 -0
- data/spec/mongoid/document_query_spec.rb +89 -0
- data/spec/mongoid/document_spec.rb +452 -221
- data/spec/mongoid/equality_spec.rb +155 -52
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +8 -6
- data/spec/mongoid/errors/callback_spec.rb +5 -3
- data/spec/mongoid/errors/delete_restriction_spec.rb +7 -5
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +35 -0
- data/spec/mongoid/errors/document_not_found_spec.rb +89 -11
- data/spec/mongoid/errors/invalid_collection_spec.rb +5 -3
- data/spec/mongoid/errors/invalid_config_file_spec.rb +31 -0
- data/spec/mongoid/errors/invalid_config_option_spec.rb +5 -3
- data/spec/mongoid/errors/invalid_field_option_spec.rb +5 -3
- data/spec/mongoid/errors/invalid_field_spec.rb +6 -4
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +5 -3
- data/spec/mongoid/errors/invalid_includes_spec.rb +5 -3
- data/spec/mongoid/errors/invalid_index_spec.rb +5 -3
- data/spec/mongoid/errors/invalid_options_spec.rb +7 -5
- data/spec/mongoid/errors/invalid_path_spec.rb +5 -3
- data/spec/mongoid/errors/invalid_relation_spec.rb +39 -0
- data/spec/mongoid/errors/invalid_scope_spec.rb +7 -5
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +5 -3
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +5 -3
- data/spec/mongoid/errors/invalid_time_spec.rb +5 -3
- data/spec/mongoid/errors/inverse_not_found_spec.rb +6 -4
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +31 -0
- data/spec/mongoid/errors/mixed_relations_spec.rb +5 -3
- data/spec/mongoid/errors/mongoid_error_spec.rb +45 -10
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +8 -6
- data/spec/mongoid/errors/no_client_config_spec.rb +31 -0
- data/spec/mongoid/errors/no_client_database_spec.rb +31 -0
- data/spec/mongoid/errors/no_client_hosts_spec.rb +31 -0
- data/spec/mongoid/errors/no_clients_config_spec.rb +31 -0
- data/spec/mongoid/errors/no_environment_spec.rb +8 -6
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +5 -3
- data/spec/mongoid/errors/no_metadata_spec.rb +5 -3
- data/spec/mongoid/errors/no_parent_spec.rb +6 -4
- data/spec/mongoid/errors/readonly_attribute_spec.rb +5 -3
- data/spec/mongoid/errors/readonly_document_spec.rb +31 -0
- data/spec/mongoid/errors/scope_overwrite_spec.rb +5 -3
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +6 -4
- data/spec/mongoid/errors/unknown_attribute_spec.rb +7 -5
- data/spec/mongoid/errors/unsaved_document_spec.rb +6 -4
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +5 -3
- data/spec/mongoid/errors/validations_spec.rb +9 -7
- data/spec/mongoid/extensions/array_spec.rb +108 -116
- data/spec/mongoid/extensions/big_decimal_spec.rb +838 -49
- data/spec/mongoid/extensions/binary_spec.rb +55 -18
- data/spec/mongoid/extensions/boolean_spec.rb +76 -74
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +339 -0
- data/spec/mongoid/extensions/date_spec.rb +59 -145
- data/spec/mongoid/extensions/date_time_spec.rb +35 -76
- data/spec/mongoid/extensions/decimal128_spec.rb +46 -0
- data/spec/mongoid/extensions/false_class_spec.rb +7 -5
- data/spec/mongoid/extensions/float_spec.rb +69 -62
- data/spec/mongoid/extensions/hash_spec.rb +197 -30
- data/spec/mongoid/extensions/integer_spec.rb +63 -65
- data/spec/mongoid/extensions/module_spec.rb +4 -2
- data/spec/mongoid/extensions/nil_class_spec.rb +3 -1
- data/spec/mongoid/extensions/object_id_spec.rb +136 -134
- data/spec/mongoid/extensions/object_spec.rb +53 -57
- data/spec/mongoid/extensions/range_spec.rb +287 -28
- data/spec/mongoid/extensions/regexp_spec.rb +71 -21
- data/spec/mongoid/extensions/set_spec.rb +112 -4
- data/spec/mongoid/extensions/string_spec.rb +188 -89
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
- data/spec/mongoid/extensions/symbol_spec.rb +25 -30
- data/spec/mongoid/extensions/time_spec.rb +703 -110
- data/spec/mongoid/extensions/time_with_zone_spec.rb +82 -67
- data/spec/mongoid/extensions/true_class_spec.rb +7 -5
- data/spec/mongoid/extensions_spec.rb +43 -0
- data/spec/mongoid/factory_spec.rb +374 -25
- data/spec/mongoid/fields/foreign_key_spec.rb +116 -92
- data/spec/mongoid/fields/localized_spec.rb +177 -35
- data/spec/mongoid/fields/standard_spec.rb +15 -13
- data/spec/mongoid/fields_spec.rb +952 -238
- data/spec/mongoid/findable_spec.rb +632 -0
- data/spec/mongoid/indexable/specification_spec.rb +129 -0
- data/spec/mongoid/indexable_spec.rb +643 -0
- data/spec/mongoid/inspectable_spec.rb +86 -0
- data/spec/mongoid/interceptable_spec.rb +2373 -0
- data/spec/mongoid/interceptable_spec_models.rb +307 -0
- data/spec/mongoid/loggable_spec.rb +3 -1
- data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
- data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +239 -0
- data/spec/mongoid/matcher/extract_attribute_spec.rb +36 -0
- data/spec/mongoid/mongoizable_spec.rb +285 -0
- data/spec/mongoid/persistable/creatable_spec.rb +662 -0
- data/spec/mongoid/persistable/deletable_spec.rb +514 -0
- data/spec/mongoid/persistable/destroyable_spec.rb +455 -0
- data/spec/mongoid/persistable/incrementable_spec.rb +241 -0
- data/spec/mongoid/persistable/logical_spec.rb +159 -0
- data/spec/mongoid/persistable/poppable_spec.rb +131 -0
- data/spec/mongoid/persistable/pullable_spec.rb +258 -0
- data/spec/mongoid/persistable/pushable_spec.rb +353 -0
- data/spec/mongoid/persistable/renamable_spec.rb +151 -0
- data/spec/mongoid/persistable/savable_spec.rb +684 -0
- data/spec/mongoid/persistable/settable_spec.rb +544 -0
- data/spec/mongoid/persistable/unsettable_spec.rb +171 -0
- data/spec/mongoid/persistable/updatable_spec.rb +760 -0
- data/spec/mongoid/persistable/upsertable_spec.rb +122 -0
- data/spec/mongoid/persistable_spec.rb +321 -0
- data/spec/mongoid/persistence_context_spec.rb +745 -0
- data/spec/mongoid/positional_spec.rb +223 -0
- data/spec/mongoid/query_cache_middleware_spec.rb +50 -0
- data/spec/mongoid/query_cache_spec.rb +870 -0
- data/spec/mongoid/relations/proxy_spec.rb +125 -47
- data/spec/mongoid/reloadable_spec.rb +665 -0
- data/spec/mongoid/scopable_spec.rb +1234 -0
- data/spec/mongoid/selectable_spec.rb +136 -0
- data/spec/mongoid/serializable_spec.rb +963 -0
- data/spec/mongoid/shardable_models.rb +61 -0
- data/spec/mongoid/shardable_spec.rb +204 -0
- data/spec/mongoid/stateful_spec.rb +157 -0
- data/spec/mongoid/tasks/database_rake_spec.rb +287 -0
- data/spec/mongoid/tasks/database_spec.rb +181 -0
- data/spec/mongoid/threaded_spec.rb +88 -78
- data/spec/mongoid/timestamps/created/short_spec.rb +9 -7
- data/spec/mongoid/timestamps/created_spec.rb +8 -6
- data/spec/mongoid/timestamps/timeless_spec.rb +29 -10
- data/spec/mongoid/timestamps/updated/short_spec.rb +16 -14
- data/spec/mongoid/timestamps/updated_spec.rb +14 -16
- data/spec/mongoid/timestamps_spec.rb +406 -18
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +704 -0
- data/spec/mongoid/touchable_spec_models.rb +57 -0
- data/spec/mongoid/traversable_spec.rb +1410 -0
- data/spec/mongoid/validatable/associated_spec.rb +208 -0
- data/spec/mongoid/validatable/format_spec.rb +85 -0
- data/spec/mongoid/validatable/length_spec.rb +225 -0
- data/spec/mongoid/validatable/numericality_spec.rb +32 -0
- data/spec/mongoid/validatable/presence_spec.rb +592 -0
- data/spec/mongoid/validatable/uniqueness_spec.rb +2504 -0
- data/spec/mongoid/validatable_spec.rb +327 -0
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +20 -20
- data/spec/rails/controller_extension/controller_runtime_spec.rb +112 -0
- data/spec/rails/mongoid_spec.rb +37 -354
- 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 +378 -0
- data/spec/shared/lib/mrss/docker_runner.rb +291 -0
- data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +200 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +230 -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 +325 -0
- data/spec/shared/share/haproxy-1.conf +16 -0
- data/spec/shared/share/haproxy-2.conf +17 -0
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/distro.sh +74 -0
- data/spec/shared/shlib/server.sh +392 -0
- data/spec/shared/shlib/set_env.sh +169 -0
- data/spec/spec_helper.rb +163 -42
- data/spec/support/authorization.rb +15 -0
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +77 -0
- data/spec/support/expectations.rb +32 -0
- data/spec/support/helpers.rb +11 -0
- data/spec/support/macros.rb +81 -0
- data/spec/support/models/account.rb +38 -0
- data/spec/support/models/acolyte.rb +19 -0
- data/spec/support/models/actor.rb +20 -0
- data/spec/support/models/actress.rb +4 -0
- data/spec/support/models/address.rb +85 -0
- data/spec/support/models/address_component.rb +7 -0
- data/spec/support/models/address_number.rb +8 -0
- data/spec/support/models/agency.rb +7 -0
- data/spec/support/models/agent.rb +18 -0
- data/spec/support/models/album.rb +20 -0
- data/spec/support/models/alert.rb +9 -0
- data/spec/support/models/animal.rb +28 -0
- data/spec/support/models/answer.rb +8 -0
- data/spec/support/models/appointment.rb +9 -0
- data/spec/support/models/armrest.rb +9 -0
- data/spec/support/models/array_field.rb +7 -0
- data/spec/support/models/article.rb +14 -0
- data/spec/support/models/artist.rb +91 -0
- data/spec/support/models/artwork.rb +6 -0
- data/spec/support/models/audible_sound.rb +3 -0
- data/spec/support/models/audio.rb +7 -0
- data/spec/support/models/augmentation.rb +25 -0
- data/spec/support/models/author.rb +8 -0
- data/spec/support/models/baby.rb +6 -0
- data/spec/support/models/band.rb +40 -0
- data/spec/support/models/bar.rb +12 -0
- data/spec/support/models/basic.rb +8 -0
- data/spec/support/models/bed.rb +3 -0
- data/spec/support/models/big_palette.rb +4 -0
- data/spec/support/models/birthday.rb +15 -0
- data/spec/support/models/bolt.rb +7 -0
- data/spec/support/models/bomb.rb +6 -0
- data/spec/support/models/book.rb +18 -0
- data/spec/support/models/breed.rb +6 -0
- data/spec/support/models/browser.rb +8 -0
- data/spec/support/models/building.rb +8 -0
- data/spec/support/models/building_address.rb +9 -0
- data/spec/support/models/bus.rb +9 -0
- data/spec/support/models/business.rb +7 -0
- data/spec/support/models/callback_test.rb +11 -0
- data/spec/support/models/canvas.rb +27 -0
- data/spec/support/models/car.rb +3 -0
- data/spec/support/models/cat.rb +10 -0
- data/spec/support/models/catalog.rb +24 -0
- data/spec/support/models/category.rb +10 -0
- data/spec/support/models/child.rb +6 -0
- data/spec/support/models/child_doc.rb +24 -0
- data/spec/support/models/church.rb +8 -0
- data/spec/support/models/circle.rb +5 -0
- data/spec/support/models/circuit.rb +6 -0
- data/spec/support/models/circus.rb +12 -0
- data/spec/support/models/code.rb +15 -0
- data/spec/support/models/coding/pull_request.rb +11 -0
- data/spec/support/models/coding.rb +3 -0
- data/spec/support/models/comment.rb +18 -0
- data/spec/support/models/company.rb +7 -0
- data/spec/support/models/consumption_period.rb +9 -0
- data/spec/support/models/contextable_item.rb +7 -0
- data/spec/support/models/contractor.rb +7 -0
- data/spec/support/models/cookie.rb +8 -0
- data/spec/support/models/country_code.rb +12 -0
- data/spec/support/models/courier_job.rb +6 -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/support/models/definition.rb +11 -0
- data/spec/support/models/delegating_patient.rb +15 -0
- data/spec/support/models/description.rb +13 -0
- data/spec/support/models/dictionary.rb +18 -0
- data/spec/support/models/division.rb +12 -0
- data/spec/support/models/doctor.rb +14 -0
- data/spec/support/models/dog.rb +9 -0
- data/spec/support/models/dokument.rb +8 -0
- data/spec/support/models/draft.rb +11 -0
- data/spec/support/models/dragon.rb +6 -0
- data/spec/support/models/driver.rb +9 -0
- data/spec/support/models/drug.rb +8 -0
- data/spec/support/models/dungeon.rb +6 -0
- data/spec/support/models/edit.rb +7 -0
- data/spec/support/models/email.rb +8 -0
- data/spec/support/models/employer.rb +7 -0
- data/spec/support/models/entry.rb +8 -0
- data/spec/support/models/eraser.rb +3 -0
- data/spec/support/models/even.rb +9 -0
- data/spec/support/models/event.rb +24 -0
- data/spec/support/models/exhibition.rb +6 -0
- data/spec/support/models/exhibitor.rb +8 -0
- data/spec/support/models/explosion.rb +6 -0
- data/spec/support/models/eye.rb +11 -0
- data/spec/support/models/eye_bowl.rb +11 -0
- data/spec/support/models/face.rb +10 -0
- data/spec/support/models/fanatic.rb +8 -0
- data/spec/support/models/favorite.rb +8 -0
- data/spec/support/models/filesystem.rb +7 -0
- data/spec/support/models/fire_hydrant.rb +8 -0
- data/spec/support/models/firefox.rb +6 -0
- data/spec/support/models/fish.rb +9 -0
- data/spec/support/models/folder.rb +9 -0
- data/spec/support/models/folder_item.rb +11 -0
- data/spec/support/models/fruits.rb +36 -0
- data/spec/support/models/game.rb +21 -0
- data/spec/support/models/ghost.rb +9 -0
- data/spec/support/models/guitar.rb +4 -0
- data/spec/support/models/hole.rb +12 -0
- data/spec/support/models/home.rb +6 -0
- data/spec/support/models/house.rb +8 -0
- data/spec/support/models/html_writer.rb +5 -0
- data/spec/support/models/id_key.rb +8 -0
- data/spec/support/models/idnodef.rb +7 -0
- data/spec/support/models/image.rb +24 -0
- data/spec/support/models/implant.rb +27 -0
- data/spec/support/models/instrument.rb +8 -0
- data/spec/support/models/item.rb +10 -0
- data/spec/support/models/jar.rb +9 -0
- data/spec/support/models/kaleidoscope.rb +8 -0
- data/spec/support/models/kangaroo.rb +6 -0
- data/spec/support/models/label.rb +52 -0
- data/spec/support/models/language.rb +7 -0
- data/spec/support/models/lat_lng.rb +17 -0
- data/spec/support/models/league.rb +13 -0
- data/spec/support/models/learner.rb +4 -0
- data/spec/support/models/line_item.rb +8 -0
- data/spec/support/models/location.rb +10 -0
- data/spec/support/models/login.rb +10 -0
- data/spec/support/models/manufacturer.rb +9 -0
- data/spec/support/models/meat.rb +6 -0
- data/spec/support/models/membership.rb +7 -0
- data/spec/support/models/message.rb +13 -0
- data/spec/support/models/minim.rb +6 -0
- data/spec/support/models/mixed_drink.rb +6 -0
- data/spec/support/models/mop.rb +24 -0
- data/spec/support/models/movie.rb +15 -0
- data/spec/support/models/my_hash.rb +4 -0
- data/spec/support/models/name.rb +26 -0
- data/spec/support/models/name_only.rb +8 -0
- data/spec/support/models/node.rb +7 -0
- data/spec/support/models/note.rb +19 -0
- data/spec/support/models/nut.rb +7 -0
- data/spec/support/models/odd.rb +9 -0
- data/spec/support/models/order.rb +12 -0
- data/spec/support/models/ordered_post.rb +13 -0
- data/spec/support/models/ordered_preference.rb +8 -0
- data/spec/support/models/oscar.rb +16 -0
- data/spec/support/models/other_owner_object.rb +4 -0
- data/spec/support/models/override.rb +18 -0
- data/spec/support/models/ownable.rb +8 -0
- data/spec/support/models/owner.rb +10 -0
- data/spec/support/models/pack.rb +5 -0
- data/spec/support/models/page.rb +18 -0
- data/spec/support/models/page_question.rb +6 -0
- data/spec/support/models/palette.rb +9 -0
- data/spec/support/models/parent.rb +7 -0
- data/spec/support/models/parent_doc.rb +8 -0
- data/spec/support/models/passport.rb +22 -0
- data/spec/support/models/patient.rb +11 -0
- data/spec/support/models/pdf_writer.rb +5 -0
- data/spec/support/models/pencil.rb +3 -0
- data/spec/support/models/person.rb +231 -0
- data/spec/support/models/pet.rb +25 -0
- data/spec/support/models/pet_owner.rb +8 -0
- data/spec/support/models/phone.rb +13 -0
- data/spec/support/models/piano.rb +4 -0
- data/spec/support/models/pizza.rb +9 -0
- data/spec/support/models/player.rb +39 -0
- data/spec/support/models/post.rb +52 -0
- data/spec/support/models/post_genre.rb +8 -0
- data/spec/support/models/powerup.rb +25 -0
- data/spec/support/models/preference.rb +11 -0
- data/spec/support/models/princess.rb +12 -0
- data/spec/support/models/product.rb +19 -0
- data/spec/support/models/profile.rb +17 -0
- data/spec/support/models/pronunciation.rb +7 -0
- data/spec/support/models/pub.rb +8 -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/support/models/purchase.rb +6 -0
- data/spec/support/models/purchased_item.rb +10 -0
- data/spec/support/models/question.rb +10 -0
- data/spec/support/models/quiz.rb +9 -0
- data/spec/support/models/rating.rb +10 -0
- data/spec/support/models/record.rb +54 -0
- data/spec/support/models/registry.rb +7 -0
- data/spec/support/models/role.rb +9 -0
- data/spec/support/models/root_category.rb +6 -0
- data/spec/support/models/sandwich.rb +11 -0
- data/spec/support/models/scheduler.rb +9 -0
- data/spec/support/models/school.rb +14 -0
- data/spec/support/models/scribe.rb +7 -0
- data/spec/support/models/sealer.rb +7 -0
- data/spec/support/models/seat.rb +24 -0
- data/spec/support/models/seo.rb +9 -0
- data/spec/support/models/series.rb +7 -0
- data/spec/support/models/server.rb +15 -0
- data/spec/support/models/service.rb +24 -0
- data/spec/support/models/shape.rb +14 -0
- data/spec/support/models/shelf.rb +7 -0
- data/spec/support/models/shield.rb +18 -0
- data/spec/support/models/shipment_address.rb +5 -0
- data/spec/support/models/shipping_container.rb +7 -0
- data/spec/support/models/shipping_pack.rb +5 -0
- data/spec/support/models/shirt.rb +11 -0
- data/spec/support/models/shop.rb +8 -0
- data/spec/support/models/short_agent.rb +6 -0
- data/spec/support/models/short_quiz.rb +7 -0
- data/spec/support/models/simple.rb +7 -0
- data/spec/support/models/slave.rb +8 -0
- data/spec/support/models/song.rb +10 -0
- data/spec/support/models/sound.rb +7 -0
- data/spec/support/models/spacer.rb +7 -0
- data/spec/support/models/square.rb +6 -0
- data/spec/support/models/staff.rb +9 -0
- data/spec/support/models/store_as_dup_test1.rb +7 -0
- data/spec/support/models/store_as_dup_test2.rb +7 -0
- data/spec/support/models/store_as_dup_test3.rb +7 -0
- data/spec/support/models/store_as_dup_test4.rb +7 -0
- data/spec/support/models/strategy.rb +5 -0
- data/spec/support/models/student.rb +14 -0
- data/spec/support/models/sub_item.rb +5 -0
- data/spec/support/models/subscription.rb +7 -0
- data/spec/support/models/survey.rb +7 -0
- data/spec/support/models/symptom.rb +8 -0
- data/spec/support/models/system_role.rb +7 -0
- data/spec/support/models/tag.rb +10 -0
- data/spec/support/models/target.rb +7 -0
- data/spec/support/models/template.rb +7 -0
- data/spec/support/models/thing.rb +11 -0
- data/spec/support/models/threadlocker.rb +7 -0
- data/spec/support/models/title.rb +5 -0
- data/spec/support/models/tool.rb +10 -0
- data/spec/support/models/topping.rb +7 -0
- data/spec/support/models/toy.rb +9 -0
- data/spec/support/models/track.rb +40 -0
- data/spec/support/models/translation.rb +7 -0
- data/spec/support/models/tree.rb +11 -0
- data/spec/support/models/truck.rb +7 -0
- data/spec/support/models/updatable.rb +7 -0
- data/spec/support/models/user.rb +23 -0
- data/spec/support/models/user_account.rb +12 -0
- data/spec/support/models/validation_callback.rb +12 -0
- data/spec/support/models/vehicle.rb +18 -0
- data/spec/support/models/version.rb +7 -0
- data/spec/support/models/vertex.rb +8 -0
- data/spec/support/models/vet_visit.rb +7 -0
- data/spec/support/models/video.rb +15 -0
- data/spec/support/models/video_game.rb +3 -0
- data/spec/support/models/washer.rb +7 -0
- data/spec/support/models/weapon.rb +25 -0
- data/spec/support/models/wiki_page.rb +17 -0
- data/spec/support/models/word.rb +17 -0
- data/spec/support/models/word_origin.rb +13 -0
- data/spec/support/models/writer.rb +13 -0
- data/spec/support/schema_maps/schema_map_aws.json +17 -0
- data/spec/support/schema_maps/schema_map_aws_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_azure.json +17 -0
- data/spec/support/schema_maps/schema_map_azure_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_gcp.json +17 -0
- data/spec/support/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_kmip.json +17 -0
- data/spec/support/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_local.json +18 -0
- data/spec/support/schema_maps/schema_map_local_key_alt_names.json +12 -0
- data/spec/support/shared/time.rb +53 -0
- data/spec/support/spec_config.rb +64 -0
- data.tar.gz.sig +0 -0
- metadata +1582 -912
- metadata.gz.sig +0 -0
- data/lib/mongoid/atomic/positionable.rb +0 -73
- data/lib/mongoid/callbacks.rb +0 -314
- data/lib/mongoid/components.rb +0 -93
- data/lib/mongoid/config/inflections.rb +0 -6
- data/lib/mongoid/config/validators/session.rb +0 -140
- data/lib/mongoid/contextual/eager.rb +0 -158
- data/lib/mongoid/contextual/find_and_modify.rb +0 -69
- data/lib/mongoid/criterion/findable.rb +0 -179
- data/lib/mongoid/criterion/inspection.rb +0 -25
- data/lib/mongoid/criterion/marshalable.rb +0 -48
- data/lib/mongoid/criterion/modifiable.rb +0 -189
- data/lib/mongoid/criterion/scoping.rb +0 -158
- data/lib/mongoid/dirty.rb +0 -376
- data/lib/mongoid/errors/eager_load.rb +0 -22
- data/lib/mongoid/errors/mixed_session_configuration.rb +0 -28
- data/lib/mongoid/errors/no_default_session.rb +0 -23
- data/lib/mongoid/errors/no_session_config.rb +0 -22
- data/lib/mongoid/errors/no_session_database.rb +0 -27
- data/lib/mongoid/errors/no_session_hosts.rb +0 -27
- data/lib/mongoid/errors/no_sessions_config.rb +0 -20
- data/lib/mongoid/errors/versioning_not_on_root.rb +0 -23
- data/lib/mongoid/finders.rb +0 -130
- data/lib/mongoid/hierarchy.rb +0 -188
- data/lib/mongoid/identity_map.rb +0 -163
- data/lib/mongoid/indexes/validators/options.rb +0 -102
- data/lib/mongoid/indexes.rb +0 -154
- data/lib/mongoid/inspection.rb +0 -55
- data/lib/mongoid/json.rb +0 -16
- data/lib/mongoid/matchers/all.rb +0 -27
- data/lib/mongoid/matchers/and.rb +0 -30
- data/lib/mongoid/matchers/default.rb +0 -72
- data/lib/mongoid/matchers/exists.rb +0 -23
- data/lib/mongoid/matchers/gt.rb +0 -21
- data/lib/mongoid/matchers/gte.rb +0 -21
- data/lib/mongoid/matchers/in.rb +0 -24
- data/lib/mongoid/matchers/lt.rb +0 -21
- data/lib/mongoid/matchers/lte.rb +0 -21
- data/lib/mongoid/matchers/ne.rb +0 -21
- data/lib/mongoid/matchers/nin.rb +0 -21
- data/lib/mongoid/matchers/or.rb +0 -33
- data/lib/mongoid/matchers/size.rb +0 -21
- data/lib/mongoid/matchers/strategies.rb +0 -97
- data/lib/mongoid/matchers.rb +0 -32
- data/lib/mongoid/multi_parameter_attributes.rb +0 -105
- data/lib/mongoid/nested_attributes.rb +0 -78
- data/lib/mongoid/observer.rb +0 -192
- data/lib/mongoid/paranoia.rb +0 -137
- data/lib/mongoid/persistence/atomic/add_to_set.rb +0 -47
- data/lib/mongoid/persistence/atomic/bit.rb +0 -35
- data/lib/mongoid/persistence/atomic/inc.rb +0 -45
- data/lib/mongoid/persistence/atomic/operation.rb +0 -154
- data/lib/mongoid/persistence/atomic/pop.rb +0 -32
- data/lib/mongoid/persistence/atomic/pull.rb +0 -32
- data/lib/mongoid/persistence/atomic/pull_all.rb +0 -32
- data/lib/mongoid/persistence/atomic/push.rb +0 -25
- data/lib/mongoid/persistence/atomic/push_all.rb +0 -25
- data/lib/mongoid/persistence/atomic/rename.rb +0 -30
- data/lib/mongoid/persistence/atomic/sets.rb +0 -28
- data/lib/mongoid/persistence/atomic/unset.rb +0 -27
- data/lib/mongoid/persistence/atomic.rb +0 -231
- data/lib/mongoid/persistence/deletion.rb +0 -32
- data/lib/mongoid/persistence/insertion.rb +0 -38
- data/lib/mongoid/persistence/modification.rb +0 -35
- data/lib/mongoid/persistence/operations/embedded/insert.rb +0 -46
- data/lib/mongoid/persistence/operations/embedded/remove.rb +0 -43
- data/lib/mongoid/persistence/operations/insert.rb +0 -34
- data/lib/mongoid/persistence/operations/remove.rb +0 -33
- data/lib/mongoid/persistence/operations/update.rb +0 -59
- data/lib/mongoid/persistence/operations/upsert.rb +0 -28
- data/lib/mongoid/persistence/operations.rb +0 -214
- data/lib/mongoid/persistence/upsertion.rb +0 -31
- data/lib/mongoid/persistence.rb +0 -352
- data/lib/mongoid/railties/document.rb +0 -12
- data/lib/mongoid/relations/accessors.rb +0 -299
- data/lib/mongoid/relations/auto_save.rb +0 -107
- data/lib/mongoid/relations/binding.rb +0 -241
- data/lib/mongoid/relations/bindings/embedded/in.rb +0 -63
- data/lib/mongoid/relations/bindings/embedded/many.rb +0 -52
- data/lib/mongoid/relations/bindings/embedded/one.rb +0 -55
- data/lib/mongoid/relations/bindings/referenced/in.rb +0 -70
- data/lib/mongoid/relations/bindings/referenced/many.rb +0 -42
- data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +0 -67
- data/lib/mongoid/relations/bindings/referenced/one.rb +0 -44
- data/lib/mongoid/relations/bindings.rb +0 -9
- data/lib/mongoid/relations/builder.rb +0 -57
- data/lib/mongoid/relations/builders/embedded/in.rb +0 -29
- data/lib/mongoid/relations/builders/embedded/many.rb +0 -36
- data/lib/mongoid/relations/builders/embedded/one.rb +0 -30
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +0 -177
- data/lib/mongoid/relations/builders/nested_attributes/one.rb +0 -127
- data/lib/mongoid/relations/builders/referenced/in.rb +0 -26
- data/lib/mongoid/relations/builders/referenced/many.rb +0 -27
- data/lib/mongoid/relations/builders/referenced/many_to_many.rb +0 -40
- data/lib/mongoid/relations/builders/referenced/one.rb +0 -26
- data/lib/mongoid/relations/builders.rb +0 -104
- data/lib/mongoid/relations/cascading/delete.rb +0 -44
- data/lib/mongoid/relations/cascading/destroy.rb +0 -43
- data/lib/mongoid/relations/cascading/nullify.rb +0 -35
- data/lib/mongoid/relations/cascading/restrict.rb +0 -39
- data/lib/mongoid/relations/cascading.rb +0 -58
- data/lib/mongoid/relations/constraint.rb +0 -49
- data/lib/mongoid/relations/conversions.rb +0 -34
- data/lib/mongoid/relations/counter_cache.rb +0 -107
- data/lib/mongoid/relations/cyclic.rb +0 -107
- data/lib/mongoid/relations/embedded/batchable.rb +0 -356
- data/lib/mongoid/relations/embedded/in.rb +0 -231
- data/lib/mongoid/relations/embedded/many.rb +0 -659
- data/lib/mongoid/relations/embedded/one.rb +0 -223
- data/lib/mongoid/relations/macros.rb +0 -359
- data/lib/mongoid/relations/many.rb +0 -217
- data/lib/mongoid/relations/marshalable.rb +0 -32
- data/lib/mongoid/relations/metadata.rb +0 -1227
- data/lib/mongoid/relations/nested_builder.rb +0 -74
- data/lib/mongoid/relations/one.rb +0 -60
- data/lib/mongoid/relations/options.rb +0 -48
- data/lib/mongoid/relations/polymorphic.rb +0 -40
- data/lib/mongoid/relations/proxy.rb +0 -264
- data/lib/mongoid/relations/referenced/in.rb +0 -314
- data/lib/mongoid/relations/referenced/many.rb +0 -789
- data/lib/mongoid/relations/referenced/many_to_many.rb +0 -495
- data/lib/mongoid/relations/referenced/one.rb +0 -297
- data/lib/mongoid/relations/reflections.rb +0 -62
- data/lib/mongoid/relations/synchronization.rb +0 -169
- data/lib/mongoid/relations/targets/enumerable.rb +0 -473
- data/lib/mongoid/relations/targets.rb +0 -2
- data/lib/mongoid/relations/touchable.rb +0 -61
- data/lib/mongoid/relations.rb +0 -162
- data/lib/mongoid/reloading.rb +0 -92
- data/lib/mongoid/scoping.rb +0 -356
- data/lib/mongoid/serialization.rb +0 -161
- data/lib/mongoid/sessions/factory.rb +0 -129
- data/lib/mongoid/sessions/mongo_uri.rb +0 -93
- data/lib/mongoid/sessions/validators/storage.rb +0 -49
- data/lib/mongoid/sessions/validators.rb +0 -2
- data/lib/mongoid/sessions.rb +0 -433
- data/lib/mongoid/sharding.rb +0 -61
- data/lib/mongoid/state.rb +0 -97
- data/lib/mongoid/unit_of_work.rb +0 -61
- data/lib/mongoid/validations/associated.rb +0 -46
- data/lib/mongoid/validations/format.rb +0 -20
- data/lib/mongoid/validations/length.rb +0 -20
- data/lib/mongoid/validations/localizable.rb +0 -30
- data/lib/mongoid/validations/macros.rb +0 -93
- data/lib/mongoid/validations/presence.rb +0 -86
- data/lib/mongoid/validations/queryable.rb +0 -31
- data/lib/mongoid/validations/uniqueness.rb +0 -330
- data/lib/mongoid/validations.rb +0 -166
- data/lib/mongoid/versioning.rb +0 -217
- data/lib/rack/mongoid/middleware/identity_map.rb +0 -39
- data/lib/rack/mongoid.rb +0 -2
- data/lib/rails/generators/mongoid/observer/observer_generator.rb +0 -17
- data/lib/rails/generators/mongoid/observer/templates/observer.rb.tt +0 -4
- data/lib/support/ruby_version.rb +0 -26
- data/spec/app/models/account.rb +0 -32
- data/spec/app/models/acolyte.rb +0 -16
- data/spec/app/models/actor.rb +0 -19
- data/spec/app/models/actor_observer.rb +0 -15
- data/spec/app/models/actress.rb +0 -2
- data/spec/app/models/address.rb +0 -72
- data/spec/app/models/address_component.rb +0 -5
- data/spec/app/models/address_number.rb +0 -6
- data/spec/app/models/agency.rb +0 -5
- data/spec/app/models/agent.rb +0 -12
- data/spec/app/models/album.rb +0 -14
- data/spec/app/models/alert.rb +0 -5
- data/spec/app/models/animal.rb +0 -25
- data/spec/app/models/answer.rb +0 -4
- data/spec/app/models/appointment.rb +0 -7
- data/spec/app/models/article.rb +0 -13
- data/spec/app/models/artist.rb +0 -66
- data/spec/app/models/artwork.rb +0 -4
- data/spec/app/models/augmentation.rb +0 -11
- data/spec/app/models/author.rb +0 -6
- data/spec/app/models/band.rb +0 -25
- data/spec/app/models/bar.rb +0 -9
- data/spec/app/models/basic.rb +0 -6
- data/spec/app/models/bed.rb +0 -1
- data/spec/app/models/big_palette.rb +0 -2
- data/spec/app/models/birthday.rb +0 -13
- data/spec/app/models/book.rb +0 -12
- data/spec/app/models/breed.rb +0 -4
- data/spec/app/models/browser.rb +0 -6
- data/spec/app/models/building.rb +0 -7
- data/spec/app/models/building_address.rb +0 -7
- data/spec/app/models/bus.rb +0 -7
- data/spec/app/models/business.rb +0 -5
- data/spec/app/models/callback_recorder.rb +0 -25
- data/spec/app/models/callback_test.rb +0 -9
- data/spec/app/models/canvas.rb +0 -25
- data/spec/app/models/car.rb +0 -1
- data/spec/app/models/cat.rb +0 -8
- data/spec/app/models/category.rb +0 -8
- data/spec/app/models/child.rb +0 -4
- data/spec/app/models/child_doc.rb +0 -22
- data/spec/app/models/church.rb +0 -4
- data/spec/app/models/circle.rb +0 -3
- data/spec/app/models/circuit.rb +0 -4
- data/spec/app/models/circus.rb +0 -7
- data/spec/app/models/code.rb +0 -5
- data/spec/app/models/comment.rb +0 -16
- data/spec/app/models/contractor.rb +0 -7
- data/spec/app/models/cookie.rb +0 -6
- data/spec/app/models/country_code.rb +0 -8
- data/spec/app/models/definition.rb +0 -8
- data/spec/app/models/description.rb +0 -11
- data/spec/app/models/dictionary.rb +0 -10
- data/spec/app/models/division.rb +0 -10
- data/spec/app/models/doctor.rb +0 -12
- data/spec/app/models/dog.rb +0 -7
- data/spec/app/models/dokument.rb +0 -5
- data/spec/app/models/driver.rb +0 -7
- data/spec/app/models/drug.rb +0 -8
- data/spec/app/models/email.rb +0 -6
- data/spec/app/models/employer.rb +0 -5
- data/spec/app/models/entry.rb +0 -6
- data/spec/app/models/eraser.rb +0 -1
- data/spec/app/models/event.rb +0 -22
- data/spec/app/models/exhibition.rb +0 -4
- data/spec/app/models/exhibitor.rb +0 -5
- data/spec/app/models/eye.rb +0 -9
- data/spec/app/models/eye_bowl.rb +0 -9
- data/spec/app/models/face.rb +0 -8
- data/spec/app/models/favorite.rb +0 -6
- data/spec/app/models/filesystem.rb +0 -4
- data/spec/app/models/fire_hydrant.rb +0 -6
- data/spec/app/models/firefox.rb +0 -4
- data/spec/app/models/fish.rb +0 -8
- data/spec/app/models/folder.rb +0 -7
- data/spec/app/models/folder_item.rb +0 -9
- data/spec/app/models/fruits.rb +0 -28
- data/spec/app/models/game.rb +0 -21
- data/spec/app/models/ghost.rb +0 -7
- data/spec/app/models/home.rb +0 -4
- data/spec/app/models/house.rb +0 -8
- data/spec/app/models/html_writer.rb +0 -3
- data/spec/app/models/image.rb +0 -22
- data/spec/app/models/implant.rb +0 -16
- data/spec/app/models/item.rb +0 -12
- data/spec/app/models/jar.rb +0 -7
- data/spec/app/models/label.rb +0 -40
- data/spec/app/models/language.rb +0 -5
- data/spec/app/models/lat_lng.rb +0 -15
- data/spec/app/models/league.rb +0 -11
- data/spec/app/models/learner.rb +0 -2
- data/spec/app/models/line_item.rb +0 -6
- data/spec/app/models/location.rb +0 -8
- data/spec/app/models/login.rb +0 -8
- data/spec/app/models/manufacturer.rb +0 -7
- data/spec/app/models/meat.rb +0 -4
- data/spec/app/models/membership.rb +0 -4
- data/spec/app/models/mixed_drink.rb +0 -4
- data/spec/app/models/movie.rb +0 -12
- data/spec/app/models/my_hash.rb +0 -2
- data/spec/app/models/name.rb +0 -23
- data/spec/app/models/node.rb +0 -5
- data/spec/app/models/note.rb +0 -12
- data/spec/app/models/ordered_post.rb +0 -6
- data/spec/app/models/ordered_preference.rb +0 -6
- data/spec/app/models/oscar.rb +0 -15
- data/spec/app/models/override.rb +0 -16
- data/spec/app/models/ownable.rb +0 -6
- data/spec/app/models/owner.rb +0 -6
- data/spec/app/models/pack.rb +0 -3
- data/spec/app/models/page.rb +0 -5
- data/spec/app/models/page_question.rb +0 -4
- data/spec/app/models/palette.rb +0 -7
- data/spec/app/models/paranoid_phone.rb +0 -25
- data/spec/app/models/paranoid_post.rb +0 -36
- data/spec/app/models/parent.rb +0 -5
- data/spec/app/models/parent_doc.rb +0 -6
- data/spec/app/models/passport.rb +0 -5
- data/spec/app/models/patient.rb +0 -9
- data/spec/app/models/pdf_writer.rb +0 -3
- data/spec/app/models/pencil.rb +0 -1
- data/spec/app/models/person.rb +0 -201
- data/spec/app/models/pet.rb +0 -23
- data/spec/app/models/pet_owner.rb +0 -6
- data/spec/app/models/phone.rb +0 -11
- data/spec/app/models/phone_observer.rb +0 -6
- data/spec/app/models/pizza.rb +0 -7
- data/spec/app/models/player.rb +0 -35
- data/spec/app/models/post.rb +0 -43
- data/spec/app/models/powerup.rb +0 -11
- data/spec/app/models/preference.rb +0 -9
- data/spec/app/models/princess.rb +0 -8
- data/spec/app/models/product.rb +0 -17
- data/spec/app/models/profile.rb +0 -5
- data/spec/app/models/pronunciation.rb +0 -5
- data/spec/app/models/purchase.rb +0 -4
- data/spec/app/models/question.rb +0 -8
- data/spec/app/models/quiz.rb +0 -10
- data/spec/app/models/rating.rb +0 -8
- data/spec/app/models/record.rb +0 -46
- data/spec/app/models/registry.rb +0 -4
- data/spec/app/models/role.rb +0 -7
- data/spec/app/models/root_category.rb +0 -4
- data/spec/app/models/sandwich.rb +0 -4
- data/spec/app/models/scheduler.rb +0 -7
- data/spec/app/models/seo.rb +0 -7
- data/spec/app/models/series.rb +0 -4
- data/spec/app/models/server.rb +0 -13
- data/spec/app/models/service.rb +0 -22
- data/spec/app/models/shape.rb +0 -12
- data/spec/app/models/shelf.rb +0 -5
- data/spec/app/models/shipping_container.rb +0 -5
- data/spec/app/models/shipping_pack.rb +0 -3
- data/spec/app/models/shop.rb +0 -6
- data/spec/app/models/short_agent.rb +0 -4
- data/spec/app/models/short_quiz.rb +0 -5
- data/spec/app/models/slave.rb +0 -6
- data/spec/app/models/song.rb +0 -8
- data/spec/app/models/square.rb +0 -4
- data/spec/app/models/strategy.rb +0 -3
- data/spec/app/models/sub_item.rb +0 -3
- data/spec/app/models/subscription.rb +0 -4
- data/spec/app/models/survey.rb +0 -5
- data/spec/app/models/symptom.rb +0 -6
- data/spec/app/models/tag.rb +0 -8
- data/spec/app/models/target.rb +0 -5
- data/spec/app/models/template.rb +0 -5
- data/spec/app/models/thing.rb +0 -9
- data/spec/app/models/title.rb +0 -4
- data/spec/app/models/tool.rb +0 -8
- data/spec/app/models/topping.rb +0 -5
- data/spec/app/models/track.rb +0 -38
- data/spec/app/models/translation.rb +0 -5
- data/spec/app/models/tree.rb +0 -9
- data/spec/app/models/truck.rb +0 -3
- data/spec/app/models/user.rb +0 -21
- data/spec/app/models/user_account.rb +0 -10
- data/spec/app/models/validation_callback.rb +0 -10
- data/spec/app/models/vehicle.rb +0 -11
- data/spec/app/models/version.rb +0 -5
- data/spec/app/models/vet_visit.rb +0 -5
- data/spec/app/models/video.rb +0 -17
- data/spec/app/models/video_game.rb +0 -1
- data/spec/app/models/weapon.rb +0 -11
- data/spec/app/models/wiki_page.rb +0 -17
- data/spec/app/models/word.rb +0 -12
- data/spec/app/models/word_origin.rb +0 -11
- data/spec/app/models/writer.rb +0 -11
- data/spec/mongoid/atomic/positionable_spec.rb +0 -227
- data/spec/mongoid/attributes/processing_spec.rb +0 -149
- data/spec/mongoid/callbacks_spec.rb +0 -1564
- data/spec/mongoid/components_spec.rb +0 -24
- data/spec/mongoid/contextual/find_and_modify_spec.rb +0 -220
- data/spec/mongoid/criterion/destructive_spec.rb +0 -101
- data/spec/mongoid/criterion/inspection_spec.rb +0 -27
- data/spec/mongoid/criterion/marshalable_spec.rb +0 -28
- data/spec/mongoid/criterion/modifiable_spec.rb +0 -409
- data/spec/mongoid/criterion/modification_spec.rb +0 -402
- data/spec/mongoid/criterion/scoping_spec.rb +0 -391
- data/spec/mongoid/dirty_spec.rb +0 -1508
- data/spec/mongoid/errors/eager_load_spec.rb +0 -29
- data/spec/mongoid/errors/mixed_session_configuration_spec.rb +0 -29
- data/spec/mongoid/errors/no_session_config_spec.rb +0 -29
- data/spec/mongoid/errors/no_session_database_spec.rb +0 -29
- data/spec/mongoid/errors/no_session_hosts_spec.rb +0 -29
- data/spec/mongoid/errors/no_sessions_config_spec.rb +0 -29
- data/spec/mongoid/errors/versioning_not_on_root_spec.rb +0 -29
- data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +0 -184
- data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +0 -201
- data/spec/mongoid/finders_spec.rb +0 -321
- data/spec/mongoid/hierarchy_spec.rb +0 -244
- data/spec/mongoid/identity_map_spec.rb +0 -564
- data/spec/mongoid/indexes_spec.rb +0 -404
- data/spec/mongoid/inspection_spec.rb +0 -57
- data/spec/mongoid/json_spec.rb +0 -33
- data/spec/mongoid/matchers/all_spec.rb +0 -31
- data/spec/mongoid/matchers/and_spec.rb +0 -162
- data/spec/mongoid/matchers/default_spec.rb +0 -130
- data/spec/mongoid/matchers/exists_spec.rb +0 -57
- data/spec/mongoid/matchers/gt_spec.rb +0 -74
- data/spec/mongoid/matchers/gte_spec.rb +0 -74
- data/spec/mongoid/matchers/in_spec.rb +0 -25
- data/spec/mongoid/matchers/lt_spec.rb +0 -74
- data/spec/mongoid/matchers/lte_spec.rb +0 -74
- data/spec/mongoid/matchers/ne_spec.rb +0 -25
- data/spec/mongoid/matchers/nin_spec.rb +0 -25
- data/spec/mongoid/matchers/or_spec.rb +0 -106
- data/spec/mongoid/matchers/size_spec.rb +0 -25
- data/spec/mongoid/matchers_spec.rb +0 -532
- data/spec/mongoid/multi_parameter_attributes_spec.rb +0 -128
- data/spec/mongoid/nested_attributes_spec.rb +0 -4945
- data/spec/mongoid/observer_spec.rb +0 -290
- data/spec/mongoid/paranoia_spec.rb +0 -759
- data/spec/mongoid/persistence/atomic/add_to_set_spec.rb +0 -262
- data/spec/mongoid/persistence/atomic/bit_spec.rb +0 -88
- data/spec/mongoid/persistence/atomic/inc_spec.rb +0 -133
- data/spec/mongoid/persistence/atomic/pop_spec.rb +0 -111
- data/spec/mongoid/persistence/atomic/pull_all_spec.rb +0 -77
- data/spec/mongoid/persistence/atomic/pull_spec.rb +0 -80
- data/spec/mongoid/persistence/atomic/push_all_spec.rb +0 -77
- data/spec/mongoid/persistence/atomic/push_spec.rb +0 -77
- data/spec/mongoid/persistence/atomic/rename_spec.rb +0 -42
- data/spec/mongoid/persistence/atomic/sets_spec.rb +0 -154
- data/spec/mongoid/persistence/atomic/unset_spec.rb +0 -65
- data/spec/mongoid/persistence/atomic_spec.rb +0 -216
- data/spec/mongoid/persistence/operations/embedded/insert_spec.rb +0 -191
- data/spec/mongoid/persistence/operations/embedded/remove_spec.rb +0 -8
- data/spec/mongoid/persistence/operations/insert_spec.rb +0 -149
- data/spec/mongoid/persistence/operations/remove_spec.rb +0 -113
- data/spec/mongoid/persistence/operations/update_spec.rb +0 -141
- data/spec/mongoid/persistence/operations/upsert_spec.rb +0 -59
- data/spec/mongoid/persistence/operations_spec.rb +0 -313
- data/spec/mongoid/persistence_spec.rb +0 -2279
- data/spec/mongoid/railties/document_spec.rb +0 -24
- data/spec/mongoid/relations/accessors_spec.rb +0 -844
- data/spec/mongoid/relations/auto_save_spec.rb +0 -261
- data/spec/mongoid/relations/bindings/embedded/in_spec.rb +0 -171
- data/spec/mongoid/relations/bindings/embedded/many_spec.rb +0 -54
- data/spec/mongoid/relations/bindings/embedded/one_spec.rb +0 -77
- data/spec/mongoid/relations/bindings/referenced/in_spec.rb +0 -241
- data/spec/mongoid/relations/bindings/referenced/many_spec.rb +0 -153
- data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +0 -178
- data/spec/mongoid/relations/bindings/referenced/one_spec.rb +0 -131
- data/spec/mongoid/relations/builders/embedded/in_spec.rb +0 -34
- data/spec/mongoid/relations/builders/embedded/many_spec.rb +0 -132
- data/spec/mongoid/relations/builders/embedded/one_spec.rb +0 -99
- data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +0 -234
- data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +0 -250
- data/spec/mongoid/relations/builders/referenced/in_spec.rb +0 -241
- data/spec/mongoid/relations/builders/referenced/many_spec.rb +0 -137
- data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +0 -178
- data/spec/mongoid/relations/builders/referenced/one_spec.rb +0 -124
- data/spec/mongoid/relations/builders_spec.rb +0 -226
- data/spec/mongoid/relations/cascading/delete_spec.rb +0 -101
- data/spec/mongoid/relations/cascading/destroy_spec.rb +0 -47
- data/spec/mongoid/relations/cascading/nullify_spec.rb +0 -32
- data/spec/mongoid/relations/cascading/restrict_spec.rb +0 -68
- data/spec/mongoid/relations/cascading_spec.rb +0 -355
- data/spec/mongoid/relations/constraint_spec.rb +0 -74
- data/spec/mongoid/relations/conversions_spec.rb +0 -126
- data/spec/mongoid/relations/counter_cache_spec.rb +0 -205
- data/spec/mongoid/relations/cyclic_spec.rb +0 -156
- data/spec/mongoid/relations/embedded/dirty_spec.rb +0 -65
- data/spec/mongoid/relations/embedded/in_spec.rb +0 -580
- data/spec/mongoid/relations/embedded/many_spec.rb +0 -3841
- data/spec/mongoid/relations/embedded/one_spec.rb +0 -1055
- data/spec/mongoid/relations/macros_spec.rb +0 -625
- data/spec/mongoid/relations/metadata_spec.rb +0 -2030
- data/spec/mongoid/relations/options_spec.rb +0 -35
- data/spec/mongoid/relations/polymorphic_spec.rb +0 -132
- data/spec/mongoid/relations/referenced/in_spec.rb +0 -1501
- data/spec/mongoid/relations/referenced/many_spec.rb +0 -3632
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +0 -3561
- data/spec/mongoid/relations/referenced/one_spec.rb +0 -1331
- data/spec/mongoid/relations/reflections_spec.rb +0 -101
- data/spec/mongoid/relations/synchronization_spec.rb +0 -453
- data/spec/mongoid/relations/targets/enumerable_spec.rb +0 -1710
- data/spec/mongoid/relations_spec.rb +0 -188
- data/spec/mongoid/reloading_spec.rb +0 -305
- data/spec/mongoid/scoping_spec.rb +0 -978
- data/spec/mongoid/serialization_spec.rb +0 -833
- data/spec/mongoid/sessions/factory_spec.rb +0 -312
- data/spec/mongoid/sessions/mongo_uri_spec.rb +0 -103
- data/spec/mongoid/sessions_spec.rb +0 -1111
- data/spec/mongoid/sharding_spec.rb +0 -61
- data/spec/mongoid/state_spec.rb +0 -102
- data/spec/mongoid/unit_of_work_spec.rb +0 -196
- data/spec/mongoid/validations/associated_spec.rb +0 -183
- data/spec/mongoid/validations/format_spec.rb +0 -83
- data/spec/mongoid/validations/length_spec.rb +0 -223
- data/spec/mongoid/validations/numericality_spec.rb +0 -30
- data/spec/mongoid/validations/presence_spec.rb +0 -592
- data/spec/mongoid/validations/uniqueness_spec.rb +0 -2399
- data/spec/mongoid/validations_spec.rb +0 -309
- data/spec/mongoid/versioning_spec.rb +0 -540
- data/spec/rack/mongoid/middleware/identity_map_spec.rb +0 -72
|
@@ -1,62 +1,81 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
require "mongoid/contextual/atomic"
|
|
3
4
|
require "mongoid/contextual/aggregable/mongo"
|
|
4
5
|
require "mongoid/contextual/command"
|
|
5
|
-
require "mongoid/contextual/eager"
|
|
6
|
-
require "mongoid/contextual/find_and_modify"
|
|
7
6
|
require "mongoid/contextual/geo_near"
|
|
8
7
|
require "mongoid/contextual/map_reduce"
|
|
8
|
+
require "mongoid/association/eager_loadable"
|
|
9
9
|
|
|
10
10
|
module Mongoid
|
|
11
11
|
module Contextual
|
|
12
12
|
class Mongo
|
|
13
|
+
extend Forwardable
|
|
13
14
|
include Enumerable
|
|
14
15
|
include Aggregable::Mongo
|
|
15
16
|
include Atomic
|
|
16
|
-
include
|
|
17
|
+
include Association::EagerLoadable
|
|
17
18
|
include Queryable
|
|
18
19
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
20
|
+
Mongoid.deprecate(self, :geo_near)
|
|
21
|
+
|
|
22
|
+
# Options constant.
|
|
23
|
+
OPTIONS = [ :hint,
|
|
24
|
+
:limit,
|
|
25
|
+
:skip,
|
|
26
|
+
:sort,
|
|
27
|
+
:batch_size,
|
|
28
|
+
:max_scan,
|
|
29
|
+
:max_time_ms,
|
|
30
|
+
:snapshot,
|
|
31
|
+
:comment,
|
|
32
|
+
:read,
|
|
33
|
+
:cursor_type,
|
|
34
|
+
:collation
|
|
35
|
+
].freeze
|
|
36
|
+
|
|
37
|
+
# @attribute [r] view The Mongo collection view.
|
|
38
|
+
attr_reader :view
|
|
33
39
|
|
|
34
40
|
# Get the number of documents matching the query.
|
|
35
41
|
#
|
|
36
42
|
# @example Get the number of matching documents.
|
|
37
43
|
# context.count
|
|
38
44
|
#
|
|
39
|
-
# @example Get the count of documents
|
|
40
|
-
# context.count(
|
|
45
|
+
# @example Get the count of documents with the provided options.
|
|
46
|
+
# context.count(limit: 1)
|
|
41
47
|
#
|
|
42
48
|
# @example Get the count for where the provided block is true.
|
|
43
49
|
# context.count do |doc|
|
|
44
50
|
# doc.likes > 1
|
|
45
51
|
# end
|
|
46
52
|
#
|
|
47
|
-
# @param [
|
|
48
|
-
#
|
|
53
|
+
# @param [ Hash ] options The options, such as skip and limit to be factored
|
|
54
|
+
# into the count.
|
|
49
55
|
#
|
|
50
56
|
# @return [ Integer ] The number of matches.
|
|
51
|
-
|
|
52
|
-
# @since 3.0.0
|
|
53
|
-
def count(document = false, &block)
|
|
57
|
+
def count(options = {}, &block)
|
|
54
58
|
return super(&block) if block_given?
|
|
55
|
-
|
|
56
|
-
|
|
59
|
+
view.count_documents(options)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Get the estimated number of documents matching the query.
|
|
63
|
+
#
|
|
64
|
+
# Unlike count, estimated_count does not take a block because it is not
|
|
65
|
+
# traditionally defined (with a block) on Enumarable like count is.
|
|
66
|
+
#
|
|
67
|
+
# @example Get the estimated number of matching documents.
|
|
68
|
+
# context.estimated_count
|
|
69
|
+
#
|
|
70
|
+
# @param [ Hash ] options The options, such as maxTimeMS to be factored
|
|
71
|
+
# into the count.
|
|
72
|
+
#
|
|
73
|
+
# @return [ Integer ] The number of matches.
|
|
74
|
+
def estimated_count(options = {})
|
|
75
|
+
unless self.criteria.selector.empty?
|
|
76
|
+
raise Mongoid::Errors::InvalidEstimatedCountCriteria.new(self.klass)
|
|
57
77
|
end
|
|
58
|
-
|
|
59
|
-
cached? ? @count ||= query.count : query.count
|
|
78
|
+
view.estimated_document_count(options)
|
|
60
79
|
end
|
|
61
80
|
|
|
62
81
|
# Delete all documents in the database that match the selector.
|
|
@@ -65,12 +84,8 @@ module Mongoid
|
|
|
65
84
|
# context.delete
|
|
66
85
|
#
|
|
67
86
|
# @return [ nil ] Nil.
|
|
68
|
-
#
|
|
69
|
-
# @since 3.0.0
|
|
70
87
|
def delete
|
|
71
|
-
|
|
72
|
-
query.remove_all
|
|
73
|
-
end
|
|
88
|
+
view.delete_many.deleted_count
|
|
74
89
|
end
|
|
75
90
|
alias :delete_all :delete
|
|
76
91
|
|
|
@@ -80,14 +95,12 @@ module Mongoid
|
|
|
80
95
|
# context.destroy
|
|
81
96
|
#
|
|
82
97
|
# @return [ nil ] Nil.
|
|
83
|
-
#
|
|
84
|
-
# @since 3.0.0
|
|
85
98
|
def destroy
|
|
86
|
-
|
|
87
|
-
each do |doc|
|
|
99
|
+
each.inject(0) do |count, doc|
|
|
88
100
|
doc.destroy
|
|
101
|
+
count += 1 if acknowledged_write?
|
|
102
|
+
count
|
|
89
103
|
end
|
|
90
|
-
destroyed
|
|
91
104
|
end
|
|
92
105
|
alias :destroy_all :destroy
|
|
93
106
|
|
|
@@ -96,13 +109,24 @@ module Mongoid
|
|
|
96
109
|
# @example Get the distinct values.
|
|
97
110
|
# context.distinct(:name)
|
|
98
111
|
#
|
|
99
|
-
# @param [ String
|
|
112
|
+
# @param [ String | Symbol ] field The name of the field.
|
|
100
113
|
#
|
|
101
114
|
# @return [ Array<Object> ] The distinct values for the field.
|
|
102
|
-
#
|
|
103
|
-
# @since 3.0.0
|
|
104
115
|
def distinct(field)
|
|
105
|
-
|
|
116
|
+
name = if Mongoid.legacy_pluck_distinct
|
|
117
|
+
klass.database_field_name(field)
|
|
118
|
+
else
|
|
119
|
+
klass.cleanse_localized_field_names(field)
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
view.distinct(name).map do |value|
|
|
123
|
+
if Mongoid.legacy_pluck_distinct
|
|
124
|
+
value.class.demongoize(value)
|
|
125
|
+
else
|
|
126
|
+
is_translation = "#{name}_translations" == field.to_s
|
|
127
|
+
recursive_demongoize(name, value, is_translation)
|
|
128
|
+
end
|
|
129
|
+
end
|
|
106
130
|
end
|
|
107
131
|
|
|
108
132
|
# Iterate over the context. If provided a block, yield to a Mongoid
|
|
@@ -114,17 +138,12 @@ module Mongoid
|
|
|
114
138
|
# end
|
|
115
139
|
#
|
|
116
140
|
# @return [ Enumerator ] The enumerator.
|
|
117
|
-
#
|
|
118
|
-
# @since 3.0.0
|
|
119
141
|
def each(&block)
|
|
120
142
|
if block_given?
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
yield_document(doc, &block)
|
|
124
|
-
end
|
|
125
|
-
@cache_loaded = true
|
|
126
|
-
eager_loadable? ? docs : self
|
|
143
|
+
documents_for_iteration.each do |doc|
|
|
144
|
+
yield_document(doc, &block)
|
|
127
145
|
end
|
|
146
|
+
self
|
|
128
147
|
else
|
|
129
148
|
to_enum
|
|
130
149
|
end
|
|
@@ -136,14 +155,11 @@ module Mongoid
|
|
|
136
155
|
# context.exists?
|
|
137
156
|
#
|
|
138
157
|
# @note We don't use count here since Mongo does not use counted
|
|
139
|
-
# b-tree indexes
|
|
140
|
-
# used to determine the value.
|
|
158
|
+
# b-tree indexes.
|
|
141
159
|
#
|
|
142
|
-
# @return [ true
|
|
143
|
-
#
|
|
144
|
-
# @since 3.0.0
|
|
160
|
+
# @return [ true | false ] If the count is more than zero.
|
|
145
161
|
def exists?
|
|
146
|
-
|
|
162
|
+
!!(view.projection(_id: 1).limit(1).first)
|
|
147
163
|
end
|
|
148
164
|
|
|
149
165
|
# Run an explain on the criteria.
|
|
@@ -152,30 +168,59 @@ module Mongoid
|
|
|
152
168
|
# Band.where(name: "Depeche Mode").explain
|
|
153
169
|
#
|
|
154
170
|
# @return [ Hash ] The explain result.
|
|
155
|
-
#
|
|
156
|
-
# @since 3.0.0
|
|
157
171
|
def explain
|
|
158
|
-
|
|
172
|
+
view.explain
|
|
159
173
|
end
|
|
160
174
|
|
|
161
175
|
# Execute the find and modify command, used for MongoDB's
|
|
162
176
|
# $findAndModify.
|
|
163
177
|
#
|
|
164
178
|
# @example Execute the command.
|
|
165
|
-
# context.
|
|
179
|
+
# context.find_one_and_update({ "$inc" => { likes: 1 }})
|
|
166
180
|
#
|
|
167
181
|
# @param [ Hash ] update The updates.
|
|
168
182
|
# @param [ Hash ] options The command options.
|
|
169
183
|
#
|
|
170
|
-
# @option options [
|
|
171
|
-
#
|
|
172
|
-
# @option options [ true
|
|
184
|
+
# @option options [ :before | :after ] :return_document Return the updated document
|
|
185
|
+
# from before or after update.
|
|
186
|
+
# @option options [ true | false ] :upsert Create the document if it doesn't exist.
|
|
173
187
|
#
|
|
174
188
|
# @return [ Document ] The result of the command.
|
|
189
|
+
def find_one_and_update(update, options = {})
|
|
190
|
+
if doc = view.find_one_and_update(update, options)
|
|
191
|
+
Factory.from_db(klass, doc)
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
# Execute the find and modify command, used for MongoDB's
|
|
196
|
+
# $findAndModify.
|
|
197
|
+
#
|
|
198
|
+
# @example Execute the command.
|
|
199
|
+
# context.find_one_and_update({ likes: 1 })
|
|
175
200
|
#
|
|
176
|
-
# @
|
|
177
|
-
|
|
178
|
-
|
|
201
|
+
# @param [ Hash ] replacement The replacement.
|
|
202
|
+
# @param [ Hash ] options The command options.
|
|
203
|
+
#
|
|
204
|
+
# @option options [ :before | :after ] :return_document Return the updated document
|
|
205
|
+
# from before or after update.
|
|
206
|
+
# @option options [ true | false ] :upsert Create the document if it doesn't exist.
|
|
207
|
+
#
|
|
208
|
+
# @return [ Document ] The result of the command.
|
|
209
|
+
def find_one_and_replace(replacement, options = {})
|
|
210
|
+
if doc = view.find_one_and_replace(replacement, options)
|
|
211
|
+
Factory.from_db(klass, doc)
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
# Execute the find and modify command, used for MongoDB's
|
|
216
|
+
# $findAndModify. This deletes the found document.
|
|
217
|
+
#
|
|
218
|
+
# @example Execute the command.
|
|
219
|
+
# context.find_one_and_delete
|
|
220
|
+
#
|
|
221
|
+
# @return [ Document ] The result of the command.
|
|
222
|
+
def find_one_and_delete
|
|
223
|
+
if doc = view.find_one_and_delete
|
|
179
224
|
Factory.from_db(klass, doc)
|
|
180
225
|
end
|
|
181
226
|
end
|
|
@@ -185,20 +230,33 @@ module Mongoid
|
|
|
185
230
|
# @example Get the first document.
|
|
186
231
|
# context.first
|
|
187
232
|
#
|
|
188
|
-
# @
|
|
233
|
+
# @note Automatically adding a sort on _id when no other sort is
|
|
234
|
+
# defined on the criteria has the potential to cause bad performance issues.
|
|
235
|
+
# If you experience unexpected poor performance when using #first or #last
|
|
236
|
+
# and have no sort defined on the criteria, use #take instead.
|
|
237
|
+
# Be aware that #take won't guarantee order.
|
|
189
238
|
#
|
|
190
|
-
# @
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
end
|
|
239
|
+
# @param [ Integer ] limit The number of documents to return.
|
|
240
|
+
#
|
|
241
|
+
# @return [ Document ] The first document.
|
|
242
|
+
def first(limit = nil)
|
|
243
|
+
sort = view.sort || { _id: 1 }
|
|
244
|
+
if raw_docs = view.sort(sort).limit(limit || 1).to_a
|
|
245
|
+
process_raw_docs(raw_docs, limit)
|
|
198
246
|
end
|
|
199
247
|
end
|
|
200
248
|
alias :one :first
|
|
201
249
|
|
|
250
|
+
# Return the first result without applying sort
|
|
251
|
+
#
|
|
252
|
+
# @api private
|
|
253
|
+
def find_first
|
|
254
|
+
if raw_doc = view.first
|
|
255
|
+
doc = Factory.from_db(klass, raw_doc, criteria)
|
|
256
|
+
eager_load([doc]).first
|
|
257
|
+
end
|
|
258
|
+
end
|
|
259
|
+
|
|
202
260
|
# Execute a $geoNear command against the database.
|
|
203
261
|
#
|
|
204
262
|
# @example Find documents close to 10, 10.
|
|
@@ -217,78 +275,56 @@ module Mongoid
|
|
|
217
275
|
#
|
|
218
276
|
# @return [ GeoNear ] The GeoNear command.
|
|
219
277
|
#
|
|
220
|
-
# @
|
|
278
|
+
# @deprecated
|
|
221
279
|
def geo_near(coordinates)
|
|
222
280
|
GeoNear.new(collection, criteria, coordinates)
|
|
223
281
|
end
|
|
224
282
|
|
|
225
|
-
# Invoke the block for each element of Contextual. Create a new array
|
|
226
|
-
# containing the values returned by the block.
|
|
227
|
-
#
|
|
228
|
-
# If the symbol field name is passed instead of the block, additional
|
|
229
|
-
# optimizations would be used.
|
|
230
|
-
#
|
|
231
|
-
# @example Map by some field.
|
|
232
|
-
# context.map(:field1)
|
|
233
|
-
#
|
|
234
|
-
# @exmaple Map with block.
|
|
235
|
-
# context.map(&:field1)
|
|
236
|
-
#
|
|
237
|
-
# @param [ Symbol ] field The field name.
|
|
238
|
-
#
|
|
239
|
-
# @return [ Array ] The result of mapping.
|
|
240
|
-
def map(field = nil, &block)
|
|
241
|
-
if block_given?
|
|
242
|
-
super(&block)
|
|
243
|
-
else
|
|
244
|
-
field = field.to_sym
|
|
245
|
-
criteria.only(field).map(&field.to_proc)
|
|
246
|
-
end
|
|
247
|
-
end
|
|
248
|
-
|
|
249
283
|
# Create the new Mongo context. This delegates operations to the
|
|
250
|
-
# underlying driver
|
|
284
|
+
# underlying driver.
|
|
251
285
|
#
|
|
252
286
|
# @example Create the new context.
|
|
253
287
|
# Mongo.new(criteria)
|
|
254
288
|
#
|
|
255
289
|
# @param [ Criteria ] criteria The criteria.
|
|
256
|
-
#
|
|
257
|
-
# @since 3.0.0
|
|
258
290
|
def initialize(criteria)
|
|
259
|
-
@criteria, @klass
|
|
260
|
-
@collection = klass.collection
|
|
291
|
+
@criteria, @klass = criteria, criteria.klass
|
|
292
|
+
@collection = @klass.collection
|
|
261
293
|
criteria.send(:merge_type_selection)
|
|
262
|
-
@
|
|
294
|
+
@view = collection.find(criteria.selector, session: _session)
|
|
263
295
|
apply_options
|
|
264
296
|
end
|
|
265
297
|
|
|
266
|
-
|
|
298
|
+
def_delegator :@klass, :database_field_name
|
|
267
299
|
|
|
268
300
|
# Get the last document in the database for the criteria's selector.
|
|
269
301
|
#
|
|
270
302
|
# @example Get the last document.
|
|
271
303
|
# context.last
|
|
272
304
|
#
|
|
273
|
-
# @
|
|
305
|
+
# @note Automatically adding a sort on _id when no other sort is
|
|
306
|
+
# defined on the criteria has the potential to cause bad performance issues.
|
|
307
|
+
# If you experience unexpected poor performance when using #first or #last
|
|
308
|
+
# and have no sort defined on the criteria, use #take instead.
|
|
309
|
+
# Be aware that #take won't guarantee order.
|
|
274
310
|
#
|
|
275
|
-
# @
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
311
|
+
# @param [ Integer ] limit The number of documents to return.
|
|
312
|
+
#
|
|
313
|
+
# @return [ Document ] The last document.
|
|
314
|
+
def last(limit = nil)
|
|
315
|
+
raw_docs = view.sort(inverse_sorting).limit(limit || 1).to_a.reverse
|
|
316
|
+
process_raw_docs(raw_docs, limit)
|
|
280
317
|
end
|
|
281
318
|
|
|
282
|
-
#
|
|
319
|
+
# Returns the number of documents in the database matching
|
|
320
|
+
# the query selector.
|
|
283
321
|
#
|
|
284
322
|
# @example Get the length.
|
|
285
323
|
# context.length
|
|
286
324
|
#
|
|
287
325
|
# @return [ Integer ] The number of documents.
|
|
288
|
-
#
|
|
289
|
-
# @since 3.0.0
|
|
290
326
|
def length
|
|
291
|
-
|
|
327
|
+
self.count
|
|
292
328
|
end
|
|
293
329
|
alias :size :length
|
|
294
330
|
|
|
@@ -300,10 +336,46 @@ module Mongoid
|
|
|
300
336
|
# @param [ Integer ] value The number of documents to return.
|
|
301
337
|
#
|
|
302
338
|
# @return [ Mongo ] The context.
|
|
303
|
-
#
|
|
304
|
-
# @since 3.0.0
|
|
305
339
|
def limit(value)
|
|
306
|
-
|
|
340
|
+
@view = view.limit(value) and self
|
|
341
|
+
end
|
|
342
|
+
|
|
343
|
+
# Take the given number of documents from the database.
|
|
344
|
+
#
|
|
345
|
+
# @example Take 10 documents
|
|
346
|
+
# context.take(10)
|
|
347
|
+
#
|
|
348
|
+
# @param [ Integer | nil ] limit The number of documents to return or nil.
|
|
349
|
+
#
|
|
350
|
+
# @return [ Document | Array<Document> ] The list of documents, or one
|
|
351
|
+
# document if no value was given.
|
|
352
|
+
def take(limit = nil)
|
|
353
|
+
if limit
|
|
354
|
+
limit(limit).to_a
|
|
355
|
+
else
|
|
356
|
+
# Do to_a first so that the Mongo#first method is not used and the
|
|
357
|
+
# result is not sorted.
|
|
358
|
+
limit(1).to_a.first
|
|
359
|
+
end
|
|
360
|
+
end
|
|
361
|
+
|
|
362
|
+
# Take one document from the database and raise an error if there are none.
|
|
363
|
+
#
|
|
364
|
+
# @example Take a document
|
|
365
|
+
# context.take!
|
|
366
|
+
#
|
|
367
|
+
# @return [ Document ] The document.
|
|
368
|
+
#
|
|
369
|
+
# @raises [ Mongoid::Errors::DocumentNotFound ] raises when there are no
|
|
370
|
+
# documents to take.
|
|
371
|
+
def take!
|
|
372
|
+
# Do to_a first so that the Mongo#first method is not used and the
|
|
373
|
+
# result is not sorted.
|
|
374
|
+
if fst = limit(1).to_a.first
|
|
375
|
+
fst
|
|
376
|
+
else
|
|
377
|
+
raise Errors::DocumentNotFound.new(klass, nil, nil)
|
|
378
|
+
end
|
|
307
379
|
end
|
|
308
380
|
|
|
309
381
|
# Initiate a map/reduce operation from the context.
|
|
@@ -315,8 +387,6 @@ module Mongoid
|
|
|
315
387
|
# @param [ String ] reduce The reduce js function.
|
|
316
388
|
#
|
|
317
389
|
# @return [ MapReduce ] The map/reduce lazy wrapper.
|
|
318
|
-
#
|
|
319
|
-
# @since 3.0.0
|
|
320
390
|
def map_reduce(map, reduce)
|
|
321
391
|
MapReduce.new(collection, criteria, map, reduce)
|
|
322
392
|
end
|
|
@@ -327,17 +397,117 @@ module Mongoid
|
|
|
327
397
|
# @example Pluck a field.
|
|
328
398
|
# context.pluck(:_id)
|
|
329
399
|
#
|
|
330
|
-
# @
|
|
331
|
-
#
|
|
400
|
+
# @param [ String | Symbol ] *fields Field(s) to pluck.
|
|
401
|
+
#
|
|
402
|
+
# @return [ Array<Object> | Array<Array<Object>> ] The plucked values.
|
|
403
|
+
def pluck(*fields)
|
|
404
|
+
# Multiple fields can map to the same field name. For example, plucking
|
|
405
|
+
# a field and its _translations field map to the same field in the database.
|
|
406
|
+
# because of this, we need to keep track of the fields requested.
|
|
407
|
+
normalized_field_names = []
|
|
408
|
+
normalized_select = fields.inject({}) do |hash, f|
|
|
409
|
+
db_fn = klass.database_field_name(f)
|
|
410
|
+
normalized_field_names.push(db_fn)
|
|
411
|
+
|
|
412
|
+
if Mongoid.legacy_pluck_distinct
|
|
413
|
+
hash[db_fn] = true
|
|
414
|
+
else
|
|
415
|
+
hash[klass.cleanse_localized_field_names(f)] = true
|
|
416
|
+
end
|
|
417
|
+
hash
|
|
418
|
+
end
|
|
419
|
+
|
|
420
|
+
view.projection(normalized_select).reduce([]) do |plucked, doc|
|
|
421
|
+
values = normalized_field_names.map do |n|
|
|
422
|
+
if Mongoid.legacy_pluck_distinct
|
|
423
|
+
n.include?('.') ? doc[n.partition('.')[0]] : doc[n]
|
|
424
|
+
else
|
|
425
|
+
extract_value(doc, n)
|
|
426
|
+
end
|
|
427
|
+
end
|
|
428
|
+
plucked << (values.size == 1 ? values.first : values)
|
|
429
|
+
end
|
|
430
|
+
end
|
|
431
|
+
|
|
432
|
+
# Pick the single field values from the database.
|
|
433
|
+
#
|
|
434
|
+
# @example Pick a field.
|
|
435
|
+
# context.pick(:_id)
|
|
436
|
+
#
|
|
437
|
+
# @param [ String | Symbol ] *fields Field(s) to pick.
|
|
438
|
+
#
|
|
439
|
+
# @return [ Object | Array<Object> ] The picked values.
|
|
440
|
+
def pick(*fields)
|
|
441
|
+
limit(1).pluck(*fields).first
|
|
442
|
+
end
|
|
443
|
+
|
|
444
|
+
# Get a hash of counts for the values of a single field. For example,
|
|
445
|
+
# if the following documents were in the database:
|
|
446
|
+
#
|
|
447
|
+
# { _id: 1, age: 21 }
|
|
448
|
+
# { _id: 2, age: 21 }
|
|
449
|
+
# { _id: 3, age: 22 }
|
|
450
|
+
#
|
|
451
|
+
# Model.tally("age")
|
|
452
|
+
#
|
|
453
|
+
# would yield the following result:
|
|
454
|
+
#
|
|
455
|
+
# { 21 => 2, 22 => 1 }
|
|
456
|
+
#
|
|
457
|
+
# When tallying a field inside an array or embeds_many association:
|
|
458
|
+
#
|
|
459
|
+
# { _id: 1, array: [ { x: 1 }, { x: 2 } ] }
|
|
460
|
+
# { _id: 2, array: [ { x: 1 }, { x: 2 } ] }
|
|
461
|
+
# { _id: 3, array: [ { x: 1 }, { x: 3 } ] }
|
|
462
|
+
#
|
|
463
|
+
# Model.tally("array.x")
|
|
464
|
+
#
|
|
465
|
+
# The keys of the resulting hash are arrays:
|
|
466
|
+
#
|
|
467
|
+
# { [ 1, 2 ] => 2, [ 1, 3 ] => 1 }
|
|
332
468
|
#
|
|
333
|
-
#
|
|
469
|
+
# Note that if tallying an element in an array of hashes, and the key
|
|
470
|
+
# doesn't exist in some of the hashes, tally will not include those
|
|
471
|
+
# nil keys in the resulting hash:
|
|
334
472
|
#
|
|
335
|
-
#
|
|
473
|
+
# { _id: 1, array: [ { x: 1 }, { x: 2 }, { y: 3 } ] }
|
|
336
474
|
#
|
|
337
|
-
#
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
475
|
+
# Model.tally("array.x")
|
|
476
|
+
# # => { [ 1, 2 ] => 1 }
|
|
477
|
+
#
|
|
478
|
+
# @param [ String | Symbol ] field The field name.
|
|
479
|
+
#
|
|
480
|
+
# @return [ Hash ] The hash of counts.
|
|
481
|
+
def tally(field)
|
|
482
|
+
name = klass.cleanse_localized_field_names(field)
|
|
483
|
+
|
|
484
|
+
fld = klass.traverse_association_tree(name)
|
|
485
|
+
pipeline = [ { "$group" => { _id: "$#{name}", counts: { "$sum": 1 } } } ]
|
|
486
|
+
pipeline.unshift("$match" => view.filter) unless view.filter.blank?
|
|
487
|
+
|
|
488
|
+
collection.aggregate(pipeline).reduce({}) do |tallies, doc|
|
|
489
|
+
is_translation = "#{name}_translations" == field.to_s
|
|
490
|
+
val = doc["_id"]
|
|
491
|
+
|
|
492
|
+
key = if val.is_a?(Array)
|
|
493
|
+
val.map do |v|
|
|
494
|
+
demongoize_with_field(fld, v, is_translation)
|
|
495
|
+
end
|
|
496
|
+
else
|
|
497
|
+
demongoize_with_field(fld, val, is_translation)
|
|
498
|
+
end
|
|
499
|
+
|
|
500
|
+
# The only time where a key will already exist in the tallies hash
|
|
501
|
+
# is when the values are stored differently in the database, but
|
|
502
|
+
# demongoize to the same value. A good example of when this happens
|
|
503
|
+
# is when using localized fields. While the server query won't group
|
|
504
|
+
# together hashes that have other values in different languages, the
|
|
505
|
+
# demongoized value is just the translation in the current locale,
|
|
506
|
+
# which can be the same across multiple of those unequal hashes.
|
|
507
|
+
tallies[key] ||= 0
|
|
508
|
+
tallies[key] += doc["counts"]
|
|
509
|
+
tallies
|
|
510
|
+
end
|
|
341
511
|
end
|
|
342
512
|
|
|
343
513
|
# Skips the provided number of documents.
|
|
@@ -348,10 +518,8 @@ module Mongoid
|
|
|
348
518
|
# @param [ Integer ] value The number of documents to skip.
|
|
349
519
|
#
|
|
350
520
|
# @return [ Mongo ] The context.
|
|
351
|
-
#
|
|
352
|
-
# @since 3.0.0
|
|
353
521
|
def skip(value)
|
|
354
|
-
|
|
522
|
+
@view = view.skip(value) and self
|
|
355
523
|
end
|
|
356
524
|
|
|
357
525
|
# Sorts the documents by the provided spec.
|
|
@@ -363,8 +531,6 @@ module Mongoid
|
|
|
363
531
|
# pairs.
|
|
364
532
|
#
|
|
365
533
|
# @return [ Mongo ] The context.
|
|
366
|
-
#
|
|
367
|
-
# @since 3.0.0
|
|
368
534
|
def sort(values = nil, &block)
|
|
369
535
|
if block_given?
|
|
370
536
|
super(&block)
|
|
@@ -382,48 +548,34 @@ module Mongoid
|
|
|
382
548
|
# context.update({ "$set" => { name: "Smiths" }})
|
|
383
549
|
#
|
|
384
550
|
# @param [ Hash ] attributes The new attributes for the document.
|
|
551
|
+
# @param [ Hash ] opts The update operation options.
|
|
385
552
|
#
|
|
386
|
-
# @
|
|
553
|
+
# @option opts [ Array ] :array_filters A set of filters specifying to which array elements
|
|
554
|
+
# an update should apply.
|
|
387
555
|
#
|
|
388
|
-
# @
|
|
389
|
-
def update(attributes = nil)
|
|
390
|
-
update_documents(attributes)
|
|
556
|
+
# @return [ nil, false ] False if no attributes were provided.
|
|
557
|
+
def update(attributes = nil, opts = {})
|
|
558
|
+
update_documents(attributes, :update_one, opts)
|
|
391
559
|
end
|
|
392
560
|
|
|
393
561
|
# Update all the matching documents atomically.
|
|
394
562
|
#
|
|
395
563
|
# @example Update all the matching documents.
|
|
396
|
-
# context.
|
|
564
|
+
# context.update_all({ "$set" => { name: "Smiths" }})
|
|
397
565
|
#
|
|
398
566
|
# @param [ Hash ] attributes The new attributes for each document.
|
|
567
|
+
# @param [ Hash ] opts The update operation options.
|
|
399
568
|
#
|
|
400
|
-
# @
|
|
569
|
+
# @option opts [ Array ] :array_filters A set of filters specifying to which array elements
|
|
570
|
+
# an update should apply.
|
|
401
571
|
#
|
|
402
|
-
# @
|
|
403
|
-
def update_all(attributes = nil)
|
|
404
|
-
update_documents(attributes, :
|
|
572
|
+
# @return [ nil, false ] False if no attributes were provided.
|
|
573
|
+
def update_all(attributes = nil, opts = {})
|
|
574
|
+
update_documents(attributes, :update_many, opts)
|
|
405
575
|
end
|
|
406
576
|
|
|
407
577
|
private
|
|
408
578
|
|
|
409
|
-
# Checks if any documents exist in the database.
|
|
410
|
-
#
|
|
411
|
-
# @api private
|
|
412
|
-
#
|
|
413
|
-
# @example Check for document existsence.
|
|
414
|
-
# context.check_existence
|
|
415
|
-
#
|
|
416
|
-
# @return [ true, false ] If documents exist.
|
|
417
|
-
#
|
|
418
|
-
# @since 3.1.0
|
|
419
|
-
def check_existence
|
|
420
|
-
if cached? && cache_loaded?
|
|
421
|
-
!documents.empty?
|
|
422
|
-
else
|
|
423
|
-
@count ? @count > 0 : !query.dup.select(_id: 1).limit(1).entries.first.nil?
|
|
424
|
-
end
|
|
425
|
-
end
|
|
426
|
-
|
|
427
579
|
# Update the documents for the provided method.
|
|
428
580
|
#
|
|
429
581
|
# @api private
|
|
@@ -434,13 +586,11 @@ module Mongoid
|
|
|
434
586
|
# @param [ Hash ] attributes The updates.
|
|
435
587
|
# @param [ Symbol ] method The method to use.
|
|
436
588
|
#
|
|
437
|
-
# @return [ true
|
|
438
|
-
|
|
439
|
-
# @since 3.0.4
|
|
440
|
-
def update_documents(attributes, method = :update)
|
|
589
|
+
# @return [ true | false ] If the update succeeded.
|
|
590
|
+
def update_documents(attributes, method = :update_one, opts = {})
|
|
441
591
|
return false unless attributes
|
|
442
592
|
attributes = Hash[attributes.map { |k, v| [klass.database_field_name(k.to_s), v] }]
|
|
443
|
-
|
|
593
|
+
view.send(method, attributes.__consolidate__(klass), opts)
|
|
444
594
|
end
|
|
445
595
|
|
|
446
596
|
# Apply the field limitations.
|
|
@@ -449,11 +599,9 @@ module Mongoid
|
|
|
449
599
|
#
|
|
450
600
|
# @example Apply the field limitations.
|
|
451
601
|
# context.apply_fields
|
|
452
|
-
#
|
|
453
|
-
# @since 3.0.0
|
|
454
602
|
def apply_fields
|
|
455
603
|
if spec = criteria.options[:fields]
|
|
456
|
-
|
|
604
|
+
@view = view.projection(spec)
|
|
457
605
|
end
|
|
458
606
|
end
|
|
459
607
|
|
|
@@ -463,15 +611,13 @@ module Mongoid
|
|
|
463
611
|
#
|
|
464
612
|
# @example Apply all options.
|
|
465
613
|
# context.apply_options
|
|
466
|
-
#
|
|
467
|
-
# @since 3.1.0
|
|
468
614
|
def apply_options
|
|
469
615
|
apply_fields
|
|
470
|
-
|
|
616
|
+
OPTIONS.each do |name|
|
|
471
617
|
apply_option(name)
|
|
472
618
|
end
|
|
473
619
|
if criteria.options[:timeout] == false
|
|
474
|
-
|
|
620
|
+
@view = view.no_cursor_timeout
|
|
475
621
|
end
|
|
476
622
|
end
|
|
477
623
|
|
|
@@ -481,164 +627,191 @@ module Mongoid
|
|
|
481
627
|
#
|
|
482
628
|
# @example Apply the skip option.
|
|
483
629
|
# context.apply_option(:skip)
|
|
484
|
-
#
|
|
485
|
-
# @since 3.1.0
|
|
486
630
|
def apply_option(name)
|
|
487
631
|
if spec = criteria.options[name]
|
|
488
|
-
|
|
632
|
+
@view = view.send(name, spec)
|
|
489
633
|
end
|
|
490
634
|
end
|
|
491
635
|
|
|
492
|
-
#
|
|
493
|
-
# other sorting is provided.
|
|
636
|
+
# Map the inverse sort symbols to the correct MongoDB values.
|
|
494
637
|
#
|
|
495
638
|
# @api private
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
#
|
|
500
|
-
# @since 3.0.0
|
|
501
|
-
def with_sorting
|
|
502
|
-
begin
|
|
503
|
-
unless criteria.options.has_key?(:sort)
|
|
504
|
-
query.sort(_id: 1)
|
|
505
|
-
end
|
|
506
|
-
yield
|
|
507
|
-
ensure
|
|
508
|
-
apply_option(:sort)
|
|
509
|
-
end
|
|
639
|
+
def inverse_sorting
|
|
640
|
+
sort = view.sort || { _id: 1 }
|
|
641
|
+
Hash[sort.map{|k, v| [k, -1*v]}]
|
|
510
642
|
end
|
|
511
643
|
|
|
512
|
-
#
|
|
513
|
-
#
|
|
514
|
-
# @api private
|
|
515
|
-
#
|
|
516
|
-
# @example Apply the inverse sorting params to the given block
|
|
517
|
-
# context.with_inverse_sorting
|
|
644
|
+
# Get the documents the context should iterate. This follows 3 rules:
|
|
518
645
|
#
|
|
519
|
-
#
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
else
|
|
525
|
-
query.sort(_id: -1)
|
|
526
|
-
end
|
|
527
|
-
yield
|
|
528
|
-
ensure
|
|
529
|
-
apply_option(:sort)
|
|
530
|
-
end
|
|
531
|
-
end
|
|
532
|
-
|
|
533
|
-
# Is the cache able to be added to?
|
|
646
|
+
# 1. If the query is cached, and we already have documents loaded, use
|
|
647
|
+
# them.
|
|
648
|
+
# 2. If we are eager loading, then eager load the documents and use
|
|
649
|
+
# those.
|
|
650
|
+
# 3. Use the query.
|
|
534
651
|
#
|
|
535
652
|
# @api private
|
|
536
653
|
#
|
|
537
|
-
# @example
|
|
538
|
-
# context.
|
|
539
|
-
#
|
|
540
|
-
# @return [ true, false ] If caching, and the cache isn't loaded.
|
|
654
|
+
# @example Get the documents for iteration.
|
|
655
|
+
# context.documents_for_iteration
|
|
541
656
|
#
|
|
542
|
-
# @
|
|
543
|
-
def
|
|
544
|
-
|
|
657
|
+
# @return [ Array<Document> | Mongo::Collection::View ] The docs to iterate.
|
|
658
|
+
def documents_for_iteration
|
|
659
|
+
return view unless eager_loadable?
|
|
660
|
+
docs = view.map{ |doc| Factory.from_db(klass, doc, criteria) }
|
|
661
|
+
eager_load(docs)
|
|
545
662
|
end
|
|
546
663
|
|
|
547
|
-
#
|
|
548
|
-
# iteration.
|
|
664
|
+
# Yield to the document.
|
|
549
665
|
#
|
|
550
666
|
# @api private
|
|
551
667
|
#
|
|
552
|
-
# @example
|
|
553
|
-
# context.
|
|
554
|
-
#
|
|
555
|
-
#
|
|
668
|
+
# @example Yield the document.
|
|
669
|
+
# context.yield_document(doc) do |doc|
|
|
670
|
+
# ...
|
|
671
|
+
# end
|
|
556
672
|
#
|
|
557
|
-
# @
|
|
558
|
-
def
|
|
559
|
-
|
|
673
|
+
# @param [ Document ] document The document to yield to.
|
|
674
|
+
def yield_document(document, &block)
|
|
675
|
+
doc = document.respond_to?(:_id) ?
|
|
676
|
+
document : Factory.from_db(klass, document, criteria)
|
|
677
|
+
yield(doc)
|
|
560
678
|
end
|
|
561
679
|
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
# @example Get the cached documents.
|
|
567
|
-
# context.documents
|
|
568
|
-
#
|
|
569
|
-
# @return [ Array<Document> ] The documents.
|
|
570
|
-
#
|
|
571
|
-
# @since 3.0.0
|
|
572
|
-
def documents
|
|
573
|
-
@documents ||= []
|
|
680
|
+
private
|
|
681
|
+
|
|
682
|
+
def _session
|
|
683
|
+
@criteria.send(:_session)
|
|
574
684
|
end
|
|
575
685
|
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
#
|
|
581
|
-
#
|
|
582
|
-
#
|
|
583
|
-
#
|
|
584
|
-
# @api private
|
|
686
|
+
def acknowledged_write?
|
|
687
|
+
collection.write_concern.nil? || collection.write_concern.acknowledged?
|
|
688
|
+
end
|
|
689
|
+
|
|
690
|
+
# Fetch the element from the given hash and demongoize it using the
|
|
691
|
+
# given field. If the obj is an array, map over it and call this method
|
|
692
|
+
# on all of its elements.
|
|
585
693
|
#
|
|
586
|
-
# @
|
|
587
|
-
#
|
|
694
|
+
# @param [ Hash | Array<Hash> ] obj The hash or array of hashes to fetch from.
|
|
695
|
+
# @param [ String ] meth The key to fetch from the hash.
|
|
696
|
+
# @param [ Field ] field The field to use for demongoization.
|
|
588
697
|
#
|
|
589
|
-
# @return [
|
|
698
|
+
# @return [ Object ] The demongoized value.
|
|
590
699
|
#
|
|
591
|
-
# @
|
|
592
|
-
def
|
|
593
|
-
if
|
|
594
|
-
|
|
595
|
-
elsif eager_loadable?
|
|
596
|
-
docs = query.map{ |doc| Factory.from_db(klass, doc) }
|
|
597
|
-
eager_load(docs)
|
|
598
|
-
docs
|
|
700
|
+
# @api private
|
|
701
|
+
def fetch_and_demongoize(obj, meth, field)
|
|
702
|
+
if obj.is_a?(Array)
|
|
703
|
+
obj.map { |doc| fetch_and_demongoize(doc, meth, field) }
|
|
599
704
|
else
|
|
600
|
-
|
|
705
|
+
res = obj.try(:fetch, meth, nil)
|
|
706
|
+
field ? field.demongoize(res) : res.class.demongoize(res)
|
|
601
707
|
end
|
|
602
708
|
end
|
|
603
709
|
|
|
604
|
-
#
|
|
605
|
-
#
|
|
606
|
-
#
|
|
607
|
-
# @example Execute with selection.
|
|
608
|
-
# context.selecting do
|
|
609
|
-
# collection.find
|
|
610
|
-
# end
|
|
710
|
+
# Extracts the value for the given field name from the given attribute
|
|
711
|
+
# hash.
|
|
611
712
|
#
|
|
612
|
-
# @
|
|
713
|
+
# @param [ Hash ] attrs The attributes hash.
|
|
714
|
+
# @param [ String ] field_name The name of the field to extract.
|
|
613
715
|
#
|
|
614
|
-
# @
|
|
615
|
-
def
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
716
|
+
# @param [ Object ] The value for the given field name
|
|
717
|
+
def extract_value(attrs, field_name)
|
|
718
|
+
i = 1
|
|
719
|
+
num_meths = field_name.count('.') + 1
|
|
720
|
+
curr = attrs.dup
|
|
721
|
+
|
|
722
|
+
klass.traverse_association_tree(field_name) do |meth, obj, is_field|
|
|
723
|
+
field = obj if is_field
|
|
724
|
+
is_translation = false
|
|
725
|
+
# If no association or field was found, check if the meth is an
|
|
726
|
+
# _translations field.
|
|
727
|
+
if obj.nil? & tr = meth.match(/(.*)_translations\z/)&.captures&.first
|
|
728
|
+
is_translation = true
|
|
729
|
+
meth = tr
|
|
730
|
+
end
|
|
731
|
+
|
|
732
|
+
# 1. If curr is an array fetch from all elements in the array.
|
|
733
|
+
# 2. If the field is localized, and is not an _translations field
|
|
734
|
+
# (_translations fields don't show up in the fields hash).
|
|
735
|
+
# - If this is the end of the methods, return the translation for
|
|
736
|
+
# the current locale.
|
|
737
|
+
# - Otherwise, return the whole translations hash so the next method
|
|
738
|
+
# can select the language it wants.
|
|
739
|
+
# 3. If the meth is an _translations field, do not demongoize the
|
|
740
|
+
# value so the full hash is returned.
|
|
741
|
+
# 4. Otherwise, fetch and demongoize the value for the key meth.
|
|
742
|
+
curr = if curr.is_a? Array
|
|
743
|
+
res = fetch_and_demongoize(curr, meth, field)
|
|
744
|
+
res.empty? ? nil : res
|
|
745
|
+
elsif !is_translation && field&.localized?
|
|
746
|
+
if i < num_meths
|
|
747
|
+
curr.try(:fetch, meth, nil)
|
|
748
|
+
else
|
|
749
|
+
fetch_and_demongoize(curr, meth, field)
|
|
750
|
+
end
|
|
751
|
+
elsif is_translation
|
|
752
|
+
curr.try(:fetch, meth, nil)
|
|
753
|
+
else
|
|
754
|
+
fetch_and_demongoize(curr, meth, field)
|
|
755
|
+
end
|
|
756
|
+
|
|
757
|
+
i += 1
|
|
622
758
|
end
|
|
759
|
+
curr
|
|
623
760
|
end
|
|
624
761
|
|
|
625
|
-
#
|
|
762
|
+
# Recursively demongoize the given value. This method recursively traverses
|
|
763
|
+
# the class tree to find the correct field to use to demongoize the value.
|
|
626
764
|
#
|
|
627
|
-
# @
|
|
765
|
+
# @param [ String ] field_name The name of the field to demongoize.
|
|
766
|
+
# @param [ Object ] value The value to demongoize.
|
|
767
|
+
# @param [ true | false ] is_translation The field we are retrieving is an
|
|
768
|
+
# _translations field.
|
|
628
769
|
#
|
|
629
|
-
# @
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
770
|
+
# @return [ Object ] The demongoized value.
|
|
771
|
+
def recursive_demongoize(field_name, value, is_translation)
|
|
772
|
+
field = klass.traverse_association_tree(field_name)
|
|
773
|
+
demongoize_with_field(field, value, is_translation)
|
|
774
|
+
end
|
|
775
|
+
|
|
776
|
+
# Demongoize the value for the given field. If the field is nil or the
|
|
777
|
+
# field is a translations field, the value is demongoized using its class.
|
|
633
778
|
#
|
|
634
|
-
# @param [
|
|
779
|
+
# @param [ Field ] field The field to use to demongoize.
|
|
780
|
+
# @param [ Object ] value The value to demongoize.
|
|
781
|
+
# @param [ true | false ] is_translation The field we are retrieving is an
|
|
782
|
+
# _translations field.
|
|
635
783
|
#
|
|
636
|
-
# @
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
784
|
+
# @return [ Object ] The demongoized value.
|
|
785
|
+
#
|
|
786
|
+
# @api private
|
|
787
|
+
def demongoize_with_field(field, value, is_translation)
|
|
788
|
+
if field
|
|
789
|
+
# If it's a localized field that's not a hash, don't demongoize
|
|
790
|
+
# again, we already have the translation. If it's an _translations
|
|
791
|
+
# field, don't demongoize, we want the full hash not just a
|
|
792
|
+
# specific translation.
|
|
793
|
+
# If it is a hash, and it's not a translations field, we need to
|
|
794
|
+
# demongoize to get the correct translation.
|
|
795
|
+
if field.localized? && (!value.is_a?(Hash) || is_translation)
|
|
796
|
+
value.class.demongoize(value)
|
|
797
|
+
else
|
|
798
|
+
field.demongoize(value)
|
|
799
|
+
end
|
|
800
|
+
else
|
|
801
|
+
value.class.demongoize(value)
|
|
802
|
+
end
|
|
803
|
+
end
|
|
804
|
+
|
|
805
|
+
# Process the raw documents retrieved for #first/#last.
|
|
806
|
+
#
|
|
807
|
+
# @return [ Array<Document> | Document ] The list of documents or a
|
|
808
|
+
# single document.
|
|
809
|
+
def process_raw_docs(raw_docs, limit)
|
|
810
|
+
docs = raw_docs.map do |d|
|
|
811
|
+
Factory.from_db(klass, d, criteria)
|
|
812
|
+
end
|
|
813
|
+
docs = eager_load(docs)
|
|
814
|
+
limit ? docs : docs.first
|
|
642
815
|
end
|
|
643
816
|
end
|
|
644
817
|
end
|