mongoid 7.1.1 → 8.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +20 -20
- data/README.md +15 -8
- data/Rakefile +61 -5
- data/lib/config/locales/en.yml +162 -56
- data/lib/mongoid/association/accessors.rb +89 -40
- data/lib/mongoid/association/bindable.rb +50 -23
- data/lib/mongoid/association/builders.rb +5 -12
- data/lib/mongoid/association/constrainable.rb +1 -5
- data/lib/mongoid/association/depending.rb +5 -17
- data/lib/mongoid/association/eager_loadable.rb +29 -10
- data/lib/mongoid/association/embedded/batchable.rb +64 -52
- data/lib/mongoid/association/embedded/cyclic.rb +3 -12
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -9
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -5
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +4 -16
- data/lib/mongoid/association/embedded/embedded_in.rb +4 -26
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -7
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +4 -6
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +110 -92
- data/lib/mongoid/association/embedded/embeds_many.rb +4 -34
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +0 -7
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +19 -8
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +50 -19
- data/lib/mongoid/association/embedded/embeds_one.rb +5 -31
- data/lib/mongoid/association/embedded.rb +0 -1
- data/lib/mongoid/association/macros.rb +27 -5
- data/lib/mongoid/association/many.rb +14 -27
- data/lib/mongoid/association/marshalable.rb +0 -5
- data/lib/mongoid/association/nested/many.rb +6 -16
- data/lib/mongoid/association/nested/nested_buildable.rb +4 -13
- data/lib/mongoid/association/nested/one.rb +48 -23
- data/lib/mongoid/association/nested.rb +0 -3
- data/lib/mongoid/association/one.rb +2 -11
- data/lib/mongoid/association/options.rb +9 -42
- data/lib/mongoid/association/proxy.rb +22 -27
- data/lib/mongoid/association/referenced/auto_save.rb +6 -14
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +2 -8
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +5 -6
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +0 -1
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -19
- data/lib/mongoid/association/referenced/belongs_to.rb +11 -36
- data/lib/mongoid/association/referenced/counter_cache.rb +12 -25
- data/lib/mongoid/association/referenced/eager.rb +5 -26
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +0 -5
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +0 -3
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +0 -1
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +81 -51
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +17 -41
- data/lib/mongoid/association/referenced/has_many/binding.rb +0 -5
- data/lib/mongoid/association/referenced/has_many/buildable.rb +0 -3
- data/lib/mongoid/association/referenced/has_many/eager.rb +0 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +438 -461
- data/lib/mongoid/association/referenced/has_many/proxy.rb +58 -84
- data/lib/mongoid/association/referenced/has_many.rb +15 -42
- data/lib/mongoid/association/referenced/has_one/binding.rb +0 -7
- data/lib/mongoid/association/referenced/has_one/buildable.rb +12 -5
- data/lib/mongoid/association/referenced/has_one/eager.rb +0 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +7 -22
- data/lib/mongoid/association/referenced/has_one/proxy.rb +9 -16
- data/lib/mongoid/association/referenced/has_one.rb +12 -35
- data/lib/mongoid/association/referenced/syncable.rb +4 -21
- data/lib/mongoid/association/referenced.rb +0 -1
- data/lib/mongoid/association/reflections.rb +4 -5
- data/lib/mongoid/association/relatable.rb +46 -71
- data/lib/mongoid/association.rb +5 -22
- data/lib/mongoid/atomic/modifiers.rb +7 -54
- data/lib/mongoid/atomic/paths/embedded/many.rb +19 -5
- data/lib/mongoid/atomic/paths/embedded/one.rb +0 -5
- data/lib/mongoid/atomic/paths/embedded.rb +0 -3
- data/lib/mongoid/atomic/paths/root.rb +0 -5
- data/lib/mongoid/atomic/paths.rb +0 -1
- data/lib/mongoid/atomic.rb +40 -47
- data/lib/mongoid/attributes/dynamic.rb +5 -22
- data/lib/mongoid/attributes/nested.rb +6 -11
- data/lib/mongoid/attributes/processing.rb +11 -21
- data/lib/mongoid/attributes/projector.rb +119 -0
- data/lib/mongoid/attributes/readonly.rb +3 -8
- data/lib/mongoid/attributes.rb +82 -88
- data/lib/mongoid/cacheable.rb +4 -9
- data/lib/mongoid/changeable.rb +148 -69
- data/lib/mongoid/clients/factory.rb +41 -17
- data/lib/mongoid/clients/options.rb +13 -14
- data/lib/mongoid/clients/sessions.rb +8 -11
- data/lib/mongoid/clients/storage_options.rb +7 -17
- data/lib/mongoid/clients/validators/storage.rb +3 -24
- data/lib/mongoid/clients/validators.rb +0 -1
- data/lib/mongoid/clients.rb +1 -10
- data/lib/mongoid/collection_configurable.rb +58 -0
- data/lib/mongoid/composable.rb +3 -7
- data/lib/mongoid/config/defaults.rb +60 -0
- data/lib/mongoid/config/environment.rb +28 -5
- data/lib/mongoid/config/options.rb +0 -11
- data/lib/mongoid/config/validators/async_query_executor.rb +24 -0
- data/lib/mongoid/config/validators/client.rb +6 -23
- data/lib/mongoid/config/validators/option.rb +0 -3
- data/lib/mongoid/config/validators.rb +1 -1
- data/lib/mongoid/config.rb +183 -39
- data/lib/mongoid/contextual/aggregable/memory.rb +37 -26
- data/lib/mongoid/contextual/aggregable/mongo.rb +29 -32
- data/lib/mongoid/contextual/aggregable/none.rb +65 -0
- data/lib/mongoid/contextual/aggregable.rb +17 -0
- data/lib/mongoid/contextual/atomic.rb +7 -27
- data/lib/mongoid/contextual/command.rb +0 -5
- data/lib/mongoid/contextual/geo_near.rb +8 -41
- data/lib/mongoid/contextual/map_reduce.rb +2 -33
- data/lib/mongoid/contextual/memory.rb +383 -79
- data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
- data/lib/mongoid/contextual/mongo.rb +636 -283
- data/lib/mongoid/contextual/none.rb +262 -31
- data/lib/mongoid/contextual/queryable.rb +1 -4
- data/lib/mongoid/contextual.rb +14 -7
- data/lib/mongoid/copyable.rb +39 -16
- data/lib/mongoid/criteria/findable.rb +9 -19
- data/lib/mongoid/criteria/includable.rb +27 -31
- data/lib/mongoid/criteria/inspectable.rb +0 -3
- data/lib/mongoid/criteria/marshalable.rb +10 -7
- data/lib/mongoid/criteria/modifiable.rb +2 -20
- data/lib/mongoid/criteria/options.rb +0 -3
- data/lib/mongoid/criteria/permission.rb +1 -2
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -15
- data/lib/mongoid/criteria/queryable/expandable.rb +0 -25
- data/lib/mongoid/criteria/queryable/extensions/array.rb +4 -40
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -7
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +3 -6
- data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -8
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -6
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -40
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +0 -13
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -20
- data/lib/mongoid/criteria/queryable/extensions/object.rb +3 -29
- data/lib/mongoid/criteria/queryable/extensions/range.rb +46 -16
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +9 -18
- data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -4
- data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -31
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -21
- data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -8
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +16 -6
- data/lib/mongoid/criteria/queryable/extensions.rb +0 -5
- data/lib/mongoid/criteria/queryable/key.rb +6 -19
- data/lib/mongoid/criteria/queryable/macroable.rb +0 -3
- data/lib/mongoid/criteria/queryable/mergeable.rb +123 -38
- data/lib/mongoid/criteria/queryable/optional.rb +11 -62
- data/lib/mongoid/criteria/queryable/options.rb +2 -21
- data/lib/mongoid/criteria/queryable/pipeline.rb +1 -14
- data/lib/mongoid/criteria/queryable/selectable.rb +138 -125
- data/lib/mongoid/criteria/queryable/selector.rb +94 -30
- data/lib/mongoid/criteria/queryable/smash.rb +40 -18
- data/lib/mongoid/criteria/queryable/storable.rb +14 -10
- data/lib/mongoid/criteria/queryable.rb +11 -13
- data/lib/mongoid/criteria/scopable.rb +27 -21
- data/lib/mongoid/criteria/translator.rb +45 -0
- data/lib/mongoid/criteria.rb +88 -108
- data/lib/mongoid/deprecable.rb +36 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +149 -99
- data/lib/mongoid/equality.rb +32 -16
- data/lib/mongoid/errors/ambiguous_relationship.rb +2 -5
- data/lib/mongoid/errors/callback.rb +0 -3
- data/lib/mongoid/errors/create_collection_failure.rb +33 -0
- data/lib/mongoid/errors/criteria_argument_required.rb +0 -1
- data/lib/mongoid/errors/delete_restriction.rb +8 -12
- data/lib/mongoid/errors/document_not_destroyed.rb +2 -7
- data/lib/mongoid/errors/document_not_found.rb +33 -21
- data/lib/mongoid/errors/drop_collection_failure.rb +27 -0
- data/lib/mongoid/errors/empty_config_file.rb +25 -0
- data/lib/mongoid/errors/immutable_attribute.rb +26 -0
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +0 -3
- data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
- data/lib/mongoid/errors/invalid_collection.rb +0 -1
- data/lib/mongoid/errors/invalid_config_file.rb +25 -0
- data/lib/mongoid/errors/invalid_config_option.rb +1 -4
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -4
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +24 -0
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +25 -0
- data/lib/mongoid/errors/invalid_expression_operator.rb +27 -0
- data/lib/mongoid/errors/invalid_field.rb +6 -7
- data/lib/mongoid/errors/invalid_field_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_field_option.rb +0 -3
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/invalid_find.rb +0 -3
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
- data/lib/mongoid/errors/invalid_includes.rb +0 -3
- data/lib/mongoid/errors/invalid_index.rb +0 -3
- data/lib/mongoid/errors/invalid_options.rb +0 -3
- data/lib/mongoid/errors/invalid_path.rb +0 -3
- data/lib/mongoid/errors/invalid_persistence_option.rb +0 -5
- data/lib/mongoid/errors/invalid_query.rb +40 -0
- data/lib/mongoid/errors/invalid_relation.rb +1 -8
- data/lib/mongoid/errors/invalid_relation_option.rb +1 -4
- data/lib/mongoid/errors/invalid_scope.rb +0 -3
- data/lib/mongoid/errors/invalid_session_use.rb +1 -6
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +0 -1
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -4
- data/lib/mongoid/errors/invalid_storage_parent.rb +2 -3
- data/lib/mongoid/errors/invalid_time.rb +0 -3
- data/lib/mongoid/errors/inverse_not_found.rb +0 -3
- data/lib/mongoid/errors/mixed_client_configuration.rb +0 -3
- data/lib/mongoid/errors/mixed_relations.rb +0 -3
- data/lib/mongoid/errors/mongoid_error.rb +4 -13
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -4
- data/lib/mongoid/errors/no_client_config.rb +2 -5
- data/lib/mongoid/errors/no_client_database.rb +1 -4
- data/lib/mongoid/errors/no_client_hosts.rb +1 -4
- data/lib/mongoid/errors/no_clients_config.rb +0 -3
- data/lib/mongoid/errors/no_default_client.rb +1 -4
- data/lib/mongoid/errors/no_environment.rb +0 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +0 -3
- data/lib/mongoid/errors/no_metadata.rb +0 -3
- data/lib/mongoid/errors/no_parent.rb +0 -3
- data/lib/mongoid/errors/readonly_attribute.rb +1 -4
- data/lib/mongoid/errors/readonly_document.rb +1 -6
- data/lib/mongoid/errors/scope_overwrite.rb +0 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -2
- data/lib/mongoid/errors/unknown_attribute.rb +1 -4
- data/lib/mongoid/errors/unknown_model.rb +0 -3
- data/lib/mongoid/errors/unsaved_document.rb +1 -2
- data/lib/mongoid/errors/unsupported_javascript.rb +0 -3
- data/lib/mongoid/errors/validations.rb +0 -1
- data/lib/mongoid/errors.rb +15 -4
- data/lib/mongoid/evolvable.rb +1 -4
- data/lib/mongoid/extensions/array.rb +12 -36
- data/lib/mongoid/extensions/big_decimal.rb +33 -21
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +8 -6
- data/lib/mongoid/extensions/date.rb +26 -29
- data/lib/mongoid/extensions/date_time.rb +1 -10
- data/lib/mongoid/extensions/decimal128.rb +0 -5
- data/lib/mongoid/extensions/false_class.rb +3 -8
- data/lib/mongoid/extensions/float.rb +7 -11
- data/lib/mongoid/extensions/hash.rb +19 -37
- data/lib/mongoid/extensions/integer.rb +7 -13
- data/lib/mongoid/extensions/module.rb +1 -4
- data/lib/mongoid/extensions/nil_class.rb +0 -5
- data/lib/mongoid/extensions/object.rb +11 -48
- data/lib/mongoid/extensions/object_id.rb +0 -7
- data/lib/mongoid/extensions/range.rb +40 -20
- data/lib/mongoid/extensions/regexp.rb +12 -8
- data/lib/mongoid/extensions/set.rb +11 -11
- data/lib/mongoid/extensions/string.rb +12 -52
- data/lib/mongoid/extensions/symbol.rb +4 -22
- data/lib/mongoid/extensions/time.rb +28 -26
- data/lib/mongoid/extensions/time_with_zone.rb +14 -11
- data/lib/mongoid/extensions/true_class.rb +3 -8
- data/lib/mongoid/extensions.rb +17 -3
- data/lib/mongoid/factory.rb +80 -16
- data/lib/mongoid/fields/foreign_key.rb +11 -25
- data/lib/mongoid/fields/localized.rb +19 -15
- data/lib/mongoid/fields/standard.rb +17 -40
- data/lib/mongoid/fields/validators/macro.rb +25 -24
- data/lib/mongoid/fields/validators.rb +0 -1
- data/lib/mongoid/fields.rb +346 -75
- data/lib/mongoid/findable.rb +107 -31
- data/lib/mongoid/indexable/specification.rb +2 -17
- data/lib/mongoid/indexable/validators/options.rb +6 -9
- data/lib/mongoid/indexable.rb +3 -20
- data/lib/mongoid/inspectable.rb +2 -11
- data/lib/mongoid/interceptable.rb +79 -41
- data/lib/mongoid/loggable.rb +0 -9
- data/lib/mongoid/matchable.rb +2 -155
- data/lib/mongoid/matcher/all.rb +22 -0
- data/lib/mongoid/matcher/and.rb +21 -0
- data/lib/mongoid/matcher/bits.rb +41 -0
- data/lib/mongoid/matcher/bits_all_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_all_set.rb +20 -0
- data/lib/mongoid/matcher/bits_any_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_any_set.rb +20 -0
- data/lib/mongoid/matcher/elem_match.rb +36 -0
- data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
- data/lib/mongoid/matcher/eq.rb +11 -0
- data/lib/mongoid/matcher/eq_impl.rb +67 -0
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +26 -0
- data/lib/mongoid/matcher/exists.rb +15 -0
- data/lib/mongoid/matcher/expression.rb +35 -0
- data/lib/mongoid/matcher/expression_operator.rb +19 -0
- data/lib/mongoid/matcher/field_expression.rb +62 -0
- data/lib/mongoid/matcher/field_operator.rb +54 -0
- data/lib/mongoid/matcher/gt.rb +17 -0
- data/lib/mongoid/matcher/gte.rb +17 -0
- data/lib/mongoid/matcher/in.rb +25 -0
- data/lib/mongoid/matcher/lt.rb +17 -0
- data/lib/mongoid/matcher/lte.rb +17 -0
- data/lib/mongoid/matcher/mod.rb +17 -0
- data/lib/mongoid/matcher/ne.rb +16 -0
- data/lib/mongoid/matcher/nin.rb +11 -0
- data/lib/mongoid/matcher/nor.rb +25 -0
- data/lib/mongoid/matcher/not.rb +29 -0
- data/lib/mongoid/matcher/or.rb +21 -0
- data/lib/mongoid/matcher/regex.rb +41 -0
- data/lib/mongoid/matcher/size.rb +26 -0
- data/lib/mongoid/matcher/type.rb +99 -0
- data/lib/mongoid/matcher.rb +130 -0
- data/lib/mongoid/persistable/creatable.rb +20 -29
- data/lib/mongoid/persistable/deletable.rb +4 -22
- data/lib/mongoid/persistable/destroyable.rb +9 -10
- data/lib/mongoid/persistable/incrementable.rb +0 -5
- data/lib/mongoid/persistable/logical.rb +0 -5
- data/lib/mongoid/persistable/poppable.rb +0 -5
- data/lib/mongoid/persistable/pullable.rb +0 -7
- data/lib/mongoid/persistable/pushable.rb +4 -8
- data/lib/mongoid/persistable/renamable.rb +0 -5
- data/lib/mongoid/persistable/savable.rb +13 -8
- data/lib/mongoid/persistable/settable.rb +0 -5
- data/lib/mongoid/persistable/unsettable.rb +2 -7
- data/lib/mongoid/persistable/updatable.rb +96 -29
- data/lib/mongoid/persistable/upsertable.rb +20 -8
- data/lib/mongoid/persistable.rb +6 -26
- data/lib/mongoid/persistence_context.rb +71 -43
- data/lib/mongoid/positional.rb +0 -5
- data/lib/mongoid/query_cache.rb +16 -236
- data/lib/mongoid/railtie.rb +0 -15
- data/lib/mongoid/railties/controller_runtime.rb +1 -2
- data/lib/mongoid/railties/database.rake +7 -2
- data/lib/mongoid/reloadable.rb +17 -20
- data/lib/mongoid/scopable.rb +32 -56
- data/lib/mongoid/selectable.rb +5 -17
- data/lib/mongoid/serializable.rb +11 -22
- data/lib/mongoid/shardable.rb +49 -16
- data/lib/mongoid/stateful.rb +57 -19
- data/lib/mongoid/stringified_symbol.rb +52 -0
- data/lib/mongoid/tasks/database.rake +12 -0
- data/lib/mongoid/tasks/database.rb +59 -11
- data/lib/mongoid/threaded/lifecycle.rb +5 -26
- data/lib/mongoid/threaded.rb +42 -67
- data/lib/mongoid/timestamps/created/short.rb +0 -1
- data/lib/mongoid/timestamps/created.rb +1 -2
- data/lib/mongoid/timestamps/short.rb +0 -1
- data/lib/mongoid/timestamps/timeless.rb +0 -7
- data/lib/mongoid/timestamps/updated/short.rb +0 -1
- data/lib/mongoid/timestamps/updated.rb +2 -5
- data/lib/mongoid/timestamps.rb +0 -1
- data/lib/mongoid/touchable.rb +34 -13
- data/lib/mongoid/traversable.rb +181 -59
- data/lib/mongoid/utils.rb +22 -0
- data/lib/mongoid/validatable/associated.rb +1 -4
- data/lib/mongoid/validatable/format.rb +0 -1
- data/lib/mongoid/validatable/length.rb +0 -1
- data/lib/mongoid/validatable/localizable.rb +1 -4
- data/lib/mongoid/validatable/macros.rb +5 -14
- data/lib/mongoid/validatable/presence.rb +6 -13
- data/lib/mongoid/validatable/queryable.rb +0 -3
- data/lib/mongoid/validatable/uniqueness.rb +26 -40
- data/lib/mongoid/validatable.rb +9 -27
- data/lib/mongoid/version.rb +1 -2
- data/lib/mongoid/warnings.rb +44 -0
- data/lib/mongoid.rb +42 -18
- data/lib/rails/generators/mongoid/config/config_generator.rb +8 -2
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +12 -6
- data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -1
- data/lib/rails/generators/mongoid_generator.rb +0 -1
- data/lib/rails/mongoid.rb +0 -3
- data/spec/README.md +19 -4
- data/spec/config/mongoid.yml +16 -0
- 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 +18 -1
- data/spec/integration/associations/embedded_dirty_spec.rb +57 -0
- data/spec/integration/associations/embedded_spec.rb +163 -1
- 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 +9 -1
- data/spec/integration/associations/foreign_key_spec_models.rb +0 -1
- 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 +0 -1
- data/spec/integration/associations/reverse_population_spec_models.rb +0 -1
- 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 +192 -0
- data/spec/integration/callbacks_spec.rb +584 -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 +51 -0
- data/spec/integration/criteria/logical_spec.rb +43 -0
- data/spec/integration/criteria/range_spec.rb +359 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +125 -15
- data/spec/integration/discriminator_key_spec.rb +391 -0
- data/spec/integration/discriminator_value_spec.rb +206 -0
- data/spec/integration/document_spec.rb +30 -1
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +3 -19
- data/spec/integration/{matchable_spec.rb → matcher_examples_spec.rb} +130 -45
- data/spec/integration/matcher_operator_data/all.yml +140 -0
- data/spec/integration/matcher_operator_data/and.yml +93 -0
- data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
- data/spec/integration/matcher_operator_data/comment.yml +22 -0
- data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
- data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
- data/spec/integration/matcher_operator_data/eq.yml +191 -0
- data/spec/integration/matcher_operator_data/exists.yml +213 -0
- data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
- data/spec/integration/matcher_operator_data/gt.yml +132 -0
- data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
- data/spec/integration/matcher_operator_data/gte.yml +132 -0
- data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/implicit.yml +331 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
- data/spec/integration/matcher_operator_data/in.yml +210 -0
- data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
- data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
- data/spec/integration/matcher_operator_data/lt.yml +132 -0
- data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
- data/spec/integration/matcher_operator_data/lte.yml +132 -0
- data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/mod.yml +55 -0
- data/spec/integration/matcher_operator_data/multiple.yml +29 -0
- data/spec/integration/matcher_operator_data/ne.yml +150 -0
- data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
- data/spec/integration/matcher_operator_data/nin.yml +114 -0
- data/spec/integration/matcher_operator_data/nor.yml +126 -0
- data/spec/integration/matcher_operator_data/not.yml +196 -0
- data/spec/integration/matcher_operator_data/or.yml +137 -0
- data/spec/integration/matcher_operator_data/regex.yml +174 -0
- data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
- data/spec/integration/matcher_operator_data/size.yml +174 -0
- data/spec/integration/matcher_operator_data/type.yml +70 -0
- data/spec/integration/matcher_operator_data/type_array.yml +16 -0
- data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
- data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
- data/spec/integration/matcher_operator_data/type_code.yml +26 -0
- data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
- data/spec/integration/matcher_operator_data/type_date.yml +39 -0
- data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
- data/spec/integration/matcher_operator_data/type_decimal.yml +41 -0
- data/spec/integration/matcher_operator_data/type_double.yml +15 -0
- data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
- data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
- data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_null.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
- data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
- data/spec/integration/matcher_operator_data/type_string.yml +15 -0
- data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
- data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
- data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
- data/spec/integration/matcher_operator_spec.rb +122 -0
- data/spec/integration/matcher_spec.rb +283 -0
- data/spec/integration/persistence/range_field_spec.rb +350 -0
- data/spec/integration/server_query_spec.rb +141 -0
- data/spec/integration/shardable_spec.rb +20 -5
- data/spec/integration/stringified_symbol_field_spec.rb +203 -0
- data/spec/lite_spec_helper.rb +25 -9
- data/spec/mongoid/association/accessors_spec.rb +282 -78
- data/spec/mongoid/association/auto_save_spec.rb +72 -34
- data/spec/mongoid/association/builders_spec.rb +1 -2
- data/spec/mongoid/association/constrainable_spec.rb +0 -1
- data/spec/mongoid/association/counter_cache_spec.rb +33 -34
- data/spec/mongoid/association/depending_spec.rb +429 -339
- data/spec/mongoid/association/eager_spec.rb +6 -6
- data/spec/mongoid/association/embedded/cyclic_spec.rb +2 -3
- data/spec/mongoid/association/embedded/dirty_spec.rb +2 -3
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -2
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -1
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +150 -14
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -1
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +704 -198
- data/spec/mongoid/association/embedded/embeds_many_models.rb +194 -1
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +12 -1
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +78 -1
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -1
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +36 -24
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_models.rb +20 -1
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -3
- data/spec/mongoid/association/macros_spec.rb +9 -10
- data/spec/mongoid/association/nested/many_spec.rb +0 -1
- data/spec/mongoid/association/nested/one_spec.rb +16 -13
- data/spec/mongoid/association/options_spec.rb +0 -1
- data/spec/mongoid/association/polymorphic_spec.rb +0 -1
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -2
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +109 -17
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +50 -15
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +112 -59
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +20 -1
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +26 -22
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +1 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +26 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +31 -3
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +523 -372
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +43 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +56 -3
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +1 -2
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +130 -1
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +23 -7
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +413 -130
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +857 -503
- data/spec/mongoid/association/referenced/has_many_models.rb +59 -2
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_many_spec.rb +46 -1
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +53 -10
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +17 -2
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +133 -28
- data/spec/mongoid/association/referenced/has_one_models.rb +63 -1
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_one_spec.rb +22 -2
- data/spec/mongoid/association/reflections_spec.rb +0 -1
- data/spec/mongoid/association/syncable_spec.rb +46 -33
- data/spec/mongoid/association_spec.rb +0 -1
- data/spec/mongoid/atomic/modifiers_spec.rb +47 -1
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +0 -1
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +0 -1
- data/spec/mongoid/atomic/paths/root_spec.rb +0 -1
- data/spec/mongoid/atomic/paths_spec.rb +91 -13
- data/spec/mongoid/atomic_spec.rb +51 -7
- data/spec/mongoid/attributes/dynamic_spec.rb +0 -1
- data/spec/mongoid/attributes/nested_spec.rb +147 -79
- 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 +22 -23
- data/spec/mongoid/attributes_spec.rb +888 -62
- data/spec/mongoid/cacheable_spec.rb +4 -5
- data/spec/mongoid/changeable_spec.rb +464 -73
- data/spec/mongoid/clients/factory_spec.rb +91 -9
- data/spec/mongoid/clients/options_spec.rb +27 -19
- data/spec/mongoid/clients/sessions_spec.rb +27 -67
- data/spec/mongoid/clients/transactions_spec.rb +69 -35
- data/spec/mongoid/clients_spec.rb +187 -24
- data/spec/mongoid/collection_configurable_spec.rb +158 -0
- data/spec/mongoid/composable_spec.rb +0 -1
- data/spec/mongoid/config/defaults_spec.rb +160 -0
- data/spec/mongoid/config/environment_spec.rb +124 -9
- data/spec/mongoid/config/options_spec.rb +0 -1
- data/spec/mongoid/config_spec.rb +465 -1
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +431 -154
- 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 +120 -21
- data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
- data/spec/mongoid/contextual/atomic_spec.rb +148 -86
- data/spec/mongoid/contextual/geo_near_spec.rb +28 -20
- data/spec/mongoid/contextual/map_reduce_spec.rb +20 -20
- data/spec/mongoid/contextual/memory_spec.rb +1826 -304
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
- data/spec/mongoid/contextual/mongo_spec.rb +3501 -1272
- data/spec/mongoid/contextual/none_spec.rb +78 -68
- data/spec/mongoid/copyable_spec.rb +657 -37
- data/spec/mongoid/copyable_spec_models.rb +28 -1
- data/spec/mongoid/criteria/findable_spec.rb +109 -234
- 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 +0 -1
- data/spec/mongoid/criteria/marshalable_spec.rb +18 -2
- data/spec/mongoid/criteria/modifiable_spec.rb +37 -38
- data/spec/mongoid/criteria/options_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +0 -74
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -20
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -27
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -1
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -1
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -16
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -8
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +237 -179
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +7 -8
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +5 -71
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -60
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +30 -8
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +39 -2
- data/spec/mongoid/criteria/queryable/key_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +143 -13
- data/spec/mongoid/criteria/queryable/optional_spec.rb +16 -486
- data/spec/mongoid/criteria/queryable/options_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +1186 -195
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +307 -705
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +15 -4
- data/spec/mongoid/criteria/queryable/smash_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/storable_spec.rb +37 -1
- data/spec/mongoid/criteria/scopable_spec.rb +127 -1
- data/spec/mongoid/criteria/translator_spec.rb +132 -0
- data/spec/mongoid/criteria_projection_spec.rb +406 -0
- data/spec/mongoid/criteria_spec.rb +1267 -1739
- data/spec/mongoid/document_fields_spec.rb +179 -5
- data/spec/mongoid/document_persistence_context_spec.rb +32 -0
- data/spec/mongoid/document_query_spec.rb +51 -1
- data/spec/mongoid/document_spec.rb +151 -88
- data/spec/mongoid/equality_spec.rb +142 -42
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +0 -1
- data/spec/mongoid/errors/callback_spec.rb +0 -1
- data/spec/mongoid/errors/delete_restriction_spec.rb +2 -3
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +0 -1
- data/spec/mongoid/errors/document_not_found_spec.rb +76 -1
- data/spec/mongoid/errors/invalid_collection_spec.rb +0 -1
- data/spec/mongoid/errors/{eager_load_spec.rb → invalid_config_file_spec.rb} +5 -6
- data/spec/mongoid/errors/invalid_config_option_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_field_option_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_field_spec.rb +1 -2
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_includes_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_index_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_options_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_path_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_relation_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_scope_spec.rb +1 -2
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_time_spec.rb +0 -1
- data/spec/mongoid/errors/inverse_not_found_spec.rb +0 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +0 -1
- data/spec/mongoid/errors/mixed_relations_spec.rb +0 -1
- data/spec/mongoid/errors/mongoid_error_spec.rb +22 -9
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +0 -1
- data/spec/mongoid/errors/no_client_config_spec.rb +2 -3
- data/spec/mongoid/errors/no_client_database_spec.rb +3 -4
- data/spec/mongoid/errors/no_client_hosts_spec.rb +3 -4
- data/spec/mongoid/errors/no_clients_config_spec.rb +0 -1
- data/spec/mongoid/errors/no_environment_spec.rb +3 -4
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +0 -1
- data/spec/mongoid/errors/no_metadata_spec.rb +0 -1
- data/spec/mongoid/errors/no_parent_spec.rb +0 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +0 -1
- data/spec/mongoid/errors/readonly_document_spec.rb +2 -3
- data/spec/mongoid/errors/scope_overwrite_spec.rb +0 -1
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -2
- data/spec/mongoid/errors/unknown_attribute_spec.rb +2 -3
- data/spec/mongoid/errors/unsaved_document_spec.rb +0 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +0 -1
- data/spec/mongoid/errors/validations_spec.rb +0 -1
- data/spec/mongoid/extensions/array_spec.rb +16 -3
- data/spec/mongoid/extensions/big_decimal_spec.rb +712 -213
- data/spec/mongoid/extensions/binary_spec.rb +44 -10
- data/spec/mongoid/extensions/boolean_spec.rb +68 -83
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -4
- data/spec/mongoid/extensions/date_spec.rb +71 -2
- data/spec/mongoid/extensions/date_time_spec.rb +15 -10
- data/spec/mongoid/extensions/decimal128_spec.rb +0 -1
- data/spec/mongoid/extensions/false_class_spec.rb +1 -2
- data/spec/mongoid/extensions/float_spec.rb +53 -75
- data/spec/mongoid/extensions/hash_spec.rb +30 -1
- data/spec/mongoid/extensions/integer_spec.rb +50 -65
- data/spec/mongoid/extensions/module_spec.rb +0 -1
- data/spec/mongoid/extensions/nil_class_spec.rb +0 -1
- data/spec/mongoid/extensions/object_id_spec.rb +0 -1
- data/spec/mongoid/extensions/object_spec.rb +0 -1
- data/spec/mongoid/extensions/range_spec.rb +255 -55
- data/spec/mongoid/extensions/regexp_spec.rb +58 -34
- data/spec/mongoid/extensions/set_spec.rb +106 -1
- data/spec/mongoid/extensions/string_spec.rb +58 -31
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
- data/spec/mongoid/extensions/symbol_spec.rb +18 -26
- data/spec/mongoid/extensions/time_spec.rb +639 -107
- data/spec/mongoid/extensions/time_with_zone_spec.rb +24 -84
- data/spec/mongoid/extensions/true_class_spec.rb +1 -2
- data/spec/mongoid/extensions_spec.rb +14 -3
- data/spec/mongoid/factory_spec.rb +323 -30
- data/spec/mongoid/fields/foreign_key_spec.rb +0 -1
- data/spec/mongoid/fields/localized_spec.rb +84 -42
- data/spec/mongoid/fields/standard_spec.rb +0 -1
- data/spec/mongoid/fields_spec.rb +855 -118
- data/spec/mongoid/findable_spec.rb +518 -65
- data/spec/mongoid/indexable/specification_spec.rb +2 -3
- data/spec/mongoid/indexable_spec.rb +85 -33
- data/spec/mongoid/inspectable_spec.rb +37 -3
- data/spec/mongoid/interceptable_spec.rb +702 -104
- data/spec/mongoid/interceptable_spec_models.rb +235 -4
- data/spec/mongoid/loggable_spec.rb +0 -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 +112 -30
- data/spec/mongoid/persistable/deletable_spec.rb +298 -19
- data/spec/mongoid/persistable/destroyable_spec.rb +226 -19
- data/spec/mongoid/persistable/incrementable_spec.rb +45 -9
- data/spec/mongoid/persistable/logical_spec.rb +41 -5
- data/spec/mongoid/persistable/poppable_spec.rb +40 -5
- data/spec/mongoid/persistable/pullable_spec.rb +80 -9
- data/spec/mongoid/persistable/pushable_spec.rb +80 -9
- data/spec/mongoid/persistable/renamable_spec.rb +39 -4
- data/spec/mongoid/persistable/savable_spec.rb +282 -26
- data/spec/mongoid/persistable/settable_spec.rb +76 -10
- data/spec/mongoid/persistable/unsettable_spec.rb +40 -5
- data/spec/mongoid/persistable/updatable_spec.rb +61 -50
- data/spec/mongoid/persistable/upsertable_spec.rb +91 -4
- data/spec/mongoid/persistable_spec.rb +3 -4
- data/spec/mongoid/persistence_context_spec.rb +57 -59
- data/spec/mongoid/positional_spec.rb +0 -1
- data/spec/mongoid/query_cache_middleware_spec.rb +7 -5
- data/spec/mongoid/query_cache_spec.rb +424 -68
- data/spec/mongoid/relations/proxy_spec.rb +7 -8
- data/spec/mongoid/reloadable_spec.rb +355 -27
- data/spec/mongoid/scopable_spec.rb +191 -39
- data/spec/mongoid/selectable_spec.rb +6 -7
- data/spec/mongoid/serializable_spec.rb +35 -39
- data/spec/mongoid/shardable_models.rb +15 -1
- data/spec/mongoid/shardable_spec.rb +181 -32
- data/spec/mongoid/stateful_spec.rb +151 -10
- data/spec/mongoid/tasks/database_rake_spec.rb +87 -14
- data/spec/mongoid/tasks/database_spec.rb +128 -2
- data/spec/mongoid/threaded_spec.rb +2 -3
- data/spec/mongoid/timestamps/created/short_spec.rb +1 -2
- data/spec/mongoid/timestamps/created_spec.rb +1 -2
- data/spec/mongoid/timestamps/timeless_spec.rb +2 -3
- data/spec/mongoid/timestamps/updated/short_spec.rb +3 -4
- data/spec/mongoid/timestamps/updated_spec.rb +3 -4
- data/spec/mongoid/timestamps_spec.rb +398 -11
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +525 -36
- data/spec/mongoid/touchable_spec_models.rb +59 -0
- data/spec/mongoid/traversable_spec.rb +1143 -2
- data/spec/mongoid/validatable/associated_spec.rb +0 -1
- data/spec/mongoid/validatable/format_spec.rb +0 -1
- data/spec/mongoid/validatable/length_spec.rb +0 -1
- data/spec/mongoid/validatable/numericality_spec.rb +0 -1
- data/spec/mongoid/validatable/presence_spec.rb +26 -23
- data/spec/mongoid/validatable/uniqueness_spec.rb +125 -99
- data/spec/mongoid/validatable_spec.rb +3 -4
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +35 -10
- data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -3
- data/spec/rails/mongoid_spec.rb +4 -17
- 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 +298 -0
- data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +210 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +238 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +113 -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 +37 -0
- data/spec/shared/share/Dockerfile.erb +321 -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 +416 -0
- data/spec/shared/shlib/set_env.sh +169 -0
- data/spec/spec_helper.rb +24 -54
- data/spec/support/authorization.rb +0 -1
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +34 -197
- data/spec/support/expectations.rb +0 -1
- data/spec/support/helpers.rb +1 -1
- data/spec/support/immutable_ids.rb +118 -0
- data/spec/support/macros.rb +109 -1
- data/spec/{app → support}/models/account.rb +1 -2
- data/spec/{app → support}/models/acolyte.rb +0 -1
- data/spec/{app → support}/models/actor.rb +1 -2
- data/spec/{app → support}/models/actress.rb +0 -1
- data/spec/{app → support}/models/address.rb +4 -1
- data/spec/{app → support}/models/address_component.rb +0 -1
- data/spec/{app → support}/models/address_number.rb +0 -1
- data/spec/{app → support}/models/agency.rb +0 -1
- data/spec/{app → support}/models/agent.rb +0 -1
- data/spec/{app → support}/models/album.rb +0 -1
- data/spec/{app → support}/models/alert.rb +0 -1
- data/spec/{app → support}/models/animal.rb +0 -1
- data/spec/{app → support}/models/answer.rb +0 -1
- data/spec/{app → support}/models/appointment.rb +0 -1
- data/spec/support/models/armrest.rb +9 -0
- data/spec/{app → support}/models/array_field.rb +0 -1
- data/spec/{app → support}/models/article.rb +0 -1
- data/spec/{app → support}/models/artist.rb +2 -2
- data/spec/{app → support}/models/artwork.rb +0 -1
- data/spec/support/models/audible_sound.rb +3 -0
- data/spec/{app → support}/models/audio.rb +0 -1
- data/spec/support/models/augmentation.rb +25 -0
- data/spec/{app → support}/models/author.rb +0 -1
- data/spec/{app → support}/models/baby.rb +0 -1
- data/spec/{app → support}/models/band.rb +8 -1
- data/spec/{app → support}/models/bar.rb +0 -1
- data/spec/{app → support}/models/basic.rb +0 -1
- data/spec/{app → support}/models/bed.rb +0 -1
- data/spec/{app → support}/models/big_palette.rb +0 -1
- data/spec/{app → support}/models/birthday.rb +0 -1
- data/spec/support/models/bolt.rb +7 -0
- data/spec/{app → support}/models/bomb.rb +0 -1
- data/spec/{app → support}/models/book.rb +1 -1
- data/spec/{app → support}/models/breed.rb +0 -1
- data/spec/{app → support}/models/browser.rb +1 -2
- data/spec/{app → support}/models/building.rb +2 -1
- data/spec/{app → support}/models/building_address.rb +0 -1
- data/spec/{app → support}/models/bus.rb +0 -1
- data/spec/{app → support}/models/business.rb +0 -1
- data/spec/{app → support}/models/callback_test.rb +0 -1
- data/spec/{app → support}/models/canvas.rb +1 -2
- data/spec/{app → support}/models/car.rb +0 -1
- data/spec/{app → support}/models/cat.rb +0 -1
- data/spec/support/models/catalog.rb +24 -0
- data/spec/{app → support}/models/category.rb +0 -1
- data/spec/{app → support}/models/child.rb +0 -1
- data/spec/{app → support}/models/child_doc.rb +3 -4
- data/spec/{app → support}/models/church.rb +0 -1
- data/spec/{app → support}/models/circle.rb +0 -1
- data/spec/{app → support}/models/circuit.rb +0 -1
- data/spec/{app → support}/models/circus.rb +3 -1
- data/spec/{app → support}/models/code.rb +2 -1
- data/spec/{app → support}/models/coding/pull_request.rb +0 -1
- data/spec/support/models/coding.rb +3 -0
- data/spec/{app → support}/models/comment.rb +0 -1
- data/spec/{app → support}/models/company.rb +0 -1
- data/spec/{app → support}/models/consumption_period.rb +0 -1
- data/spec/{app → support}/models/contextable_item.rb +0 -1
- data/spec/{app → support}/models/contractor.rb +0 -1
- data/spec/{app → support}/models/cookie.rb +0 -1
- data/spec/{app → support}/models/country_code.rb +2 -1
- data/spec/{app → support}/models/courier_job.rb +0 -1
- data/spec/support/models/cover.rb +10 -0
- data/spec/support/models/crate.rb +12 -0
- data/spec/support/models/customer.rb +10 -0
- data/spec/support/models/customer_address.rb +11 -0
- data/spec/support/models/deed.rb +7 -0
- data/spec/{app → support}/models/definition.rb +0 -1
- data/spec/{app → support}/models/delegating_patient.rb +0 -1
- data/spec/{app → support}/models/description.rb +0 -1
- data/spec/{app → support}/models/dictionary.rb +6 -1
- data/spec/{app → support}/models/division.rb +0 -1
- data/spec/{app → support}/models/doctor.rb +0 -1
- data/spec/{app → support}/models/dog.rb +0 -1
- data/spec/{app → support}/models/dokument.rb +0 -1
- data/spec/{app → support}/models/draft.rb +0 -1
- data/spec/{app → support}/models/dragon.rb +0 -1
- data/spec/{app → support}/models/driver.rb +1 -2
- data/spec/{app → support}/models/drug.rb +0 -1
- data/spec/{app → support}/models/dungeon.rb +0 -1
- data/spec/{app → support}/models/edit.rb +0 -1
- data/spec/{app → support}/models/email.rb +0 -1
- data/spec/{app → support}/models/employer.rb +0 -1
- data/spec/{app → support}/models/entry.rb +0 -1
- data/spec/{app → support}/models/eraser.rb +0 -1
- data/spec/{app → support}/models/even.rb +0 -1
- data/spec/{app → support}/models/event.rb +0 -1
- data/spec/{app → support}/models/exhibition.rb +0 -1
- data/spec/{app → support}/models/exhibitor.rb +0 -1
- data/spec/{app → support}/models/explosion.rb +0 -1
- data/spec/{app → support}/models/eye.rb +0 -1
- data/spec/{app → support}/models/eye_bowl.rb +0 -1
- data/spec/{app → support}/models/face.rb +0 -1
- data/spec/support/models/fanatic.rb +8 -0
- data/spec/{app → support}/models/favorite.rb +0 -1
- data/spec/{app → support}/models/filesystem.rb +0 -1
- data/spec/{app → support}/models/fire_hydrant.rb +0 -1
- data/spec/{app → support}/models/firefox.rb +0 -1
- data/spec/{app → support}/models/fish.rb +0 -1
- data/spec/{app → support}/models/folder.rb +0 -1
- data/spec/{app → support}/models/folder_item.rb +0 -1
- data/spec/{app → support}/models/fruits.rb +0 -1
- data/spec/{app → support}/models/game.rb +0 -1
- data/spec/{app → support}/models/ghost.rb +0 -1
- data/spec/support/models/guitar.rb +4 -0
- data/spec/support/models/hole.rb +12 -0
- data/spec/{app → support}/models/home.rb +0 -1
- data/spec/{app → support}/models/house.rb +0 -1
- data/spec/{app → support}/models/html_writer.rb +0 -1
- data/spec/{app → support}/models/id_key.rb +0 -1
- data/spec/support/models/idnodef.rb +7 -0
- data/spec/{app → support}/models/image.rb +0 -1
- data/spec/{app → support}/models/implant.rb +9 -1
- data/spec/support/models/instrument.rb +8 -0
- data/spec/{app → support}/models/item.rb +1 -2
- data/spec/{app → support}/models/jar.rb +0 -1
- data/spec/{app → support}/models/kaleidoscope.rb +0 -1
- data/spec/{app → support}/models/kangaroo.rb +0 -1
- data/spec/{app → support}/models/label.rb +4 -2
- data/spec/{app → support}/models/language.rb +0 -1
- data/spec/{app → support}/models/lat_lng.rb +0 -1
- data/spec/{app → support}/models/league.rb +0 -1
- data/spec/{app → support}/models/learner.rb +0 -1
- data/spec/{app → support}/models/line_item.rb +0 -1
- data/spec/{app → support}/models/location.rb +0 -1
- data/spec/{app → support}/models/login.rb +0 -1
- data/spec/{app → support}/models/manufacturer.rb +0 -1
- data/spec/{app → support}/models/meat.rb +0 -1
- data/spec/{app → support}/models/membership.rb +1 -1
- data/spec/{app → support}/models/message.rb +0 -1
- data/spec/{app → support}/models/minim.rb +0 -1
- data/spec/{app → support}/models/mixed_drink.rb +0 -1
- data/spec/support/models/mop.rb +24 -0
- data/spec/{app → support}/models/movie.rb +0 -1
- data/spec/{app → support}/models/my_hash.rb +0 -1
- data/spec/{app → support}/models/name.rb +0 -1
- data/spec/{app → support}/models/name_only.rb +0 -1
- data/spec/{app → support}/models/node.rb +0 -1
- data/spec/{app → support}/models/note.rb +0 -1
- data/spec/support/models/nut.rb +7 -0
- data/spec/{app → support}/models/odd.rb +0 -1
- data/spec/support/models/order.rb +12 -0
- data/spec/{app → support}/models/ordered_post.rb +1 -2
- data/spec/{app → support}/models/ordered_preference.rb +0 -1
- data/spec/{app → support}/models/oscar.rb +0 -1
- data/spec/{app → support}/models/other_owner_object.rb +0 -1
- data/spec/{app → support}/models/override.rb +0 -1
- data/spec/{app → support}/models/ownable.rb +0 -1
- data/spec/{app → support}/models/owner.rb +2 -1
- data/spec/{app → support}/models/pack.rb +0 -1
- data/spec/{app → support}/models/page.rb +0 -1
- data/spec/{app → support}/models/page_question.rb +0 -1
- data/spec/{app → support}/models/palette.rb +1 -2
- data/spec/{app → support}/models/parent.rb +0 -1
- data/spec/{app → support}/models/parent_doc.rb +0 -1
- data/spec/support/models/passport.rb +22 -0
- data/spec/{app → support}/models/patient.rb +0 -1
- data/spec/{app → support}/models/pdf_writer.rb +0 -1
- data/spec/{app → support}/models/pencil.rb +0 -1
- data/spec/{app → support}/models/person.rb +20 -2
- data/spec/{app → support}/models/pet.rb +0 -1
- data/spec/{app → support}/models/pet_owner.rb +0 -1
- data/spec/{app → support}/models/phone.rb +3 -2
- data/spec/support/models/piano.rb +4 -0
- data/spec/{app → support}/models/pizza.rb +0 -1
- data/spec/{app → support}/models/player.rb +2 -1
- data/spec/{app → support}/models/post.rb +0 -1
- data/spec/{app → support}/models/post_genre.rb +0 -1
- data/spec/support/models/powerup.rb +25 -0
- data/spec/{app → support}/models/preference.rb +0 -1
- data/spec/{app → support}/models/princess.rb +0 -1
- data/spec/{app → support}/models/product.rb +1 -1
- data/spec/support/models/profile.rb +17 -0
- data/spec/{app → support}/models/pronunciation.rb +0 -1
- data/spec/{app → support}/models/pub.rb +0 -1
- data/spec/{app → support}/models/publication/encyclopedia.rb +0 -1
- data/spec/{app → support}/models/publication/review.rb +0 -1
- data/spec/support/models/publication.rb +4 -0
- data/spec/{app → support}/models/purchase.rb +0 -1
- data/spec/support/models/purchased_item.rb +10 -0
- data/spec/{app → support}/models/question.rb +0 -1
- data/spec/{app → support}/models/quiz.rb +0 -1
- data/spec/{app → support}/models/rating.rb +0 -1
- data/spec/{app → support}/models/record.rb +0 -1
- data/spec/{app → support}/models/registry.rb +1 -1
- data/spec/{app → support}/models/role.rb +0 -1
- data/spec/{app → support}/models/root_category.rb +0 -1
- data/spec/{app → support}/models/sandwich.rb +0 -1
- data/spec/{app → support}/models/scheduler.rb +0 -1
- data/spec/support/models/school.rb +14 -0
- data/spec/{app/models/profile.rb → support/models/scribe.rb} +2 -3
- data/spec/support/models/sealer.rb +7 -0
- data/spec/support/models/seat.rb +24 -0
- data/spec/{app → support}/models/seo.rb +0 -1
- data/spec/{app → support}/models/series.rb +1 -1
- data/spec/{app → support}/models/server.rb +0 -1
- data/spec/{app → support}/models/service.rb +0 -1
- data/spec/{app → support}/models/shape.rb +2 -3
- data/spec/{app → support}/models/shelf.rb +0 -1
- data/spec/support/models/shield.rb +18 -0
- data/spec/{app → support}/models/shipment_address.rb +0 -1
- data/spec/{app → support}/models/shipping_container.rb +0 -1
- data/spec/{app → support}/models/shipping_pack.rb +0 -1
- data/spec/support/models/shirt.rb +11 -0
- data/spec/{app → support}/models/shop.rb +0 -1
- data/spec/{app → support}/models/short_agent.rb +0 -1
- data/spec/{app → support}/models/short_quiz.rb +0 -1
- data/spec/{app → support}/models/simple.rb +0 -1
- data/spec/{app → support}/models/slave.rb +0 -1
- data/spec/{app → support}/models/song.rb +0 -1
- data/spec/{app → support}/models/sound.rb +0 -1
- data/spec/support/models/spacer.rb +7 -0
- data/spec/{app → support}/models/square.rb +0 -1
- data/spec/{app → support}/models/staff.rb +0 -1
- data/spec/{app → support}/models/store_as_dup_test1.rb +0 -1
- data/spec/{app → support}/models/store_as_dup_test2.rb +0 -1
- data/spec/{app → support}/models/store_as_dup_test3.rb +0 -1
- data/spec/{app → support}/models/store_as_dup_test4.rb +0 -1
- data/spec/{app → support}/models/strategy.rb +0 -1
- data/spec/support/models/student.rb +14 -0
- data/spec/{app → support}/models/sub_item.rb +0 -1
- data/spec/{app → support}/models/subscription.rb +0 -1
- data/spec/{app → support}/models/survey.rb +0 -1
- data/spec/{app → support}/models/symptom.rb +0 -1
- data/spec/support/models/system_role.rb +7 -0
- data/spec/{app → support}/models/tag.rb +0 -1
- data/spec/{app → support}/models/target.rb +0 -1
- data/spec/{app → support}/models/template.rb +0 -1
- data/spec/{app → support}/models/thing.rb +0 -1
- data/spec/support/models/threadlocker.rb +7 -0
- data/spec/{app → support}/models/title.rb +0 -1
- data/spec/{app → support}/models/tool.rb +2 -3
- data/spec/{app → support}/models/topping.rb +0 -1
- data/spec/support/models/toy.rb +9 -0
- data/spec/{app → support}/models/track.rb +0 -1
- data/spec/{app → support}/models/translation.rb +0 -1
- data/spec/{app → support}/models/tree.rb +0 -1
- data/spec/{app → support}/models/truck.rb +2 -1
- data/spec/{app → support}/models/updatable.rb +0 -1
- data/spec/{app → support}/models/user.rb +0 -1
- data/spec/{app → support}/models/user_account.rb +0 -1
- data/spec/{app → support}/models/validation_callback.rb +0 -1
- data/spec/{app → support}/models/vehicle.rb +7 -3
- data/spec/{app → support}/models/version.rb +0 -1
- data/spec/{app → support}/models/vertex.rb +0 -1
- data/spec/{app → support}/models/vet_visit.rb +0 -1
- data/spec/{app → support}/models/video.rb +0 -1
- data/spec/{app → support}/models/video_game.rb +0 -1
- data/spec/support/models/washer.rb +7 -0
- data/spec/support/models/weapon.rb +25 -0
- data/spec/{app → support}/models/wiki_page.rb +1 -1
- data/spec/{app → support}/models/word.rb +0 -1
- data/spec/{app → support}/models/word_origin.rb +0 -1
- data/spec/{app → support}/models/writer.rb +2 -3
- 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 +0 -1
- data/spec/support/spec_config.rb +28 -6
- data.tar.gz.sig +0 -0
- metadata +1216 -799
- metadata.gz.sig +0 -0
- data/lib/mongoid/errors/eager_load.rb +0 -26
- data/lib/mongoid/errors/invalid_value.rb +0 -18
- data/lib/mongoid/matchable/all.rb +0 -30
- data/lib/mongoid/matchable/and.rb +0 -32
- data/lib/mongoid/matchable/default.rb +0 -121
- data/lib/mongoid/matchable/elem_match.rb +0 -36
- data/lib/mongoid/matchable/eq.rb +0 -23
- data/lib/mongoid/matchable/exists.rb +0 -25
- data/lib/mongoid/matchable/gt.rb +0 -25
- data/lib/mongoid/matchable/gte.rb +0 -25
- data/lib/mongoid/matchable/in.rb +0 -26
- data/lib/mongoid/matchable/lt.rb +0 -25
- data/lib/mongoid/matchable/lte.rb +0 -25
- data/lib/mongoid/matchable/ne.rb +0 -23
- data/lib/mongoid/matchable/nin.rb +0 -24
- data/lib/mongoid/matchable/nor.rb +0 -38
- data/lib/mongoid/matchable/or.rb +0 -35
- data/lib/mongoid/matchable/regexp.rb +0 -30
- data/lib/mongoid/matchable/size.rb +0 -23
- data/lib/support/ruby_version.rb +0 -29
- data/spec/app/models/augmentation.rb +0 -14
- data/spec/app/models/coding.rb +0 -4
- data/spec/app/models/passport.rb +0 -8
- data/spec/app/models/powerup.rb +0 -14
- data/spec/app/models/publication.rb +0 -5
- data/spec/app/models/weapon.rb +0 -14
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -61
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -61
- data/spec/mongoid/matchable/all_spec.rb +0 -34
- data/spec/mongoid/matchable/and_spec.rb +0 -190
- data/spec/mongoid/matchable/default_spec.rb +0 -140
- data/spec/mongoid/matchable/elem_match_spec.rb +0 -109
- data/spec/mongoid/matchable/eq_spec.rb +0 -49
- data/spec/mongoid/matchable/exists_spec.rb +0 -60
- data/spec/mongoid/matchable/gt_spec.rb +0 -89
- data/spec/mongoid/matchable/gte_spec.rb +0 -87
- data/spec/mongoid/matchable/in_spec.rb +0 -52
- data/spec/mongoid/matchable/lt_spec.rb +0 -88
- data/spec/mongoid/matchable/lte_spec.rb +0 -88
- data/spec/mongoid/matchable/ne_spec.rb +0 -49
- data/spec/mongoid/matchable/nin_spec.rb +0 -51
- data/spec/mongoid/matchable/nor_spec.rb +0 -210
- data/spec/mongoid/matchable/or_spec.rb +0 -134
- data/spec/mongoid/matchable/regexp_spec.rb +0 -62
- data/spec/mongoid/matchable/size_spec.rb +0 -28
- data/spec/mongoid/matchable_spec.rb +0 -856
- data/spec/support/cluster_config.rb +0 -158
- data/spec/support/lite_constraints.rb +0 -22
data/spec/mongoid/fields_spec.rb
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# encoding: utf-8
|
|
3
2
|
|
|
4
3
|
require "spec_helper"
|
|
5
4
|
|
|
6
5
|
describe Mongoid::Fields do
|
|
7
|
-
|
|
8
|
-
before(:all) do
|
|
9
|
-
Mongoid.use_activesupport_time_zone = false
|
|
10
|
-
end
|
|
6
|
+
config_override :use_activesupport_time_zone, false
|
|
11
7
|
|
|
12
8
|
describe "#\{field}_translations" do
|
|
13
9
|
|
|
@@ -18,18 +14,15 @@ describe Mongoid::Fields do
|
|
|
18
14
|
context "when the field is localized" do
|
|
19
15
|
|
|
20
16
|
context "when translations exist" do
|
|
17
|
+
with_default_i18n_configs
|
|
21
18
|
|
|
22
19
|
before do
|
|
20
|
+
I18n.locale = :en
|
|
23
21
|
product.description = "test"
|
|
24
|
-
I18n.
|
|
25
|
-
::I18n.locale = :de
|
|
22
|
+
I18n.locale = :de
|
|
26
23
|
product.description = "The best"
|
|
27
24
|
end
|
|
28
25
|
|
|
29
|
-
after do
|
|
30
|
-
::I18n.locale = :en
|
|
31
|
-
end
|
|
32
|
-
|
|
33
26
|
let(:translations) do
|
|
34
27
|
product.description_translations
|
|
35
28
|
end
|
|
@@ -110,7 +103,7 @@ describe Mongoid::Fields do
|
|
|
110
103
|
context "when saving the new translations" do
|
|
111
104
|
|
|
112
105
|
before do
|
|
113
|
-
product.save
|
|
106
|
+
product.save!
|
|
114
107
|
end
|
|
115
108
|
|
|
116
109
|
it "persists the changes" do
|
|
@@ -121,7 +114,7 @@ describe Mongoid::Fields do
|
|
|
121
114
|
|
|
122
115
|
before do
|
|
123
116
|
product.description_translations = { "en" => "overwritten" }
|
|
124
|
-
product.save
|
|
117
|
+
product.save!
|
|
125
118
|
end
|
|
126
119
|
|
|
127
120
|
it "persists the changes" do
|
|
@@ -152,7 +145,7 @@ describe Mongoid::Fields do
|
|
|
152
145
|
context "when saving the new translations" do
|
|
153
146
|
|
|
154
147
|
before do
|
|
155
|
-
dictionary.save
|
|
148
|
+
dictionary.save!
|
|
156
149
|
end
|
|
157
150
|
|
|
158
151
|
it "persists the changes" do
|
|
@@ -165,7 +158,7 @@ describe Mongoid::Fields do
|
|
|
165
158
|
|
|
166
159
|
before do
|
|
167
160
|
dictionary.description_translations = { "en" => "overwritten" }
|
|
168
|
-
dictionary.save
|
|
161
|
+
dictionary.save!
|
|
169
162
|
end
|
|
170
163
|
|
|
171
164
|
it "persists the changes" do
|
|
@@ -322,7 +315,7 @@ describe Mongoid::Fields do
|
|
|
322
315
|
end
|
|
323
316
|
|
|
324
317
|
it "converts to Mongoid::Boolean" do
|
|
325
|
-
expect(klass.field(:test, type: Boolean).type).to be(Mongoid::Boolean)
|
|
318
|
+
expect(klass.field(:test, type: Mongoid::Boolean).type).to be(Mongoid::Boolean)
|
|
326
319
|
end
|
|
327
320
|
end
|
|
328
321
|
|
|
@@ -397,6 +390,22 @@ describe Mongoid::Fields do
|
|
|
397
390
|
it "converts :time to Time" do
|
|
398
391
|
expect(klass.field(:test, type: :time).type).to be(Time)
|
|
399
392
|
end
|
|
393
|
+
|
|
394
|
+
context 'when using an unknown symbol' do
|
|
395
|
+
it 'raises InvalidFieldType' do
|
|
396
|
+
lambda do
|
|
397
|
+
klass.field(:test, type: :bogus)
|
|
398
|
+
end.should raise_error(Mongoid::Errors::InvalidFieldType, /defines a field 'test' with an unknown type value :bogus/)
|
|
399
|
+
end
|
|
400
|
+
end
|
|
401
|
+
|
|
402
|
+
context 'when using an unknown string' do
|
|
403
|
+
it 'raises InvalidFieldType' do
|
|
404
|
+
lambda do
|
|
405
|
+
klass.field(:test, type: 'bogus')
|
|
406
|
+
end.should raise_error(Mongoid::Errors::InvalidFieldType, /defines a field 'test' with an unknown type value "bogus"/)
|
|
407
|
+
end
|
|
408
|
+
end
|
|
400
409
|
end
|
|
401
410
|
|
|
402
411
|
context "when the options are valid" do
|
|
@@ -404,7 +413,7 @@ describe Mongoid::Fields do
|
|
|
404
413
|
context "when the options are all standard" do
|
|
405
414
|
|
|
406
415
|
before do
|
|
407
|
-
Band.field :acceptable, type: Boolean
|
|
416
|
+
Band.field :acceptable, type: Mongoid::Boolean
|
|
408
417
|
end
|
|
409
418
|
|
|
410
419
|
after do
|
|
@@ -419,7 +428,7 @@ describe Mongoid::Fields do
|
|
|
419
428
|
context "when a custom option is provided" do
|
|
420
429
|
|
|
421
430
|
before do
|
|
422
|
-
Band.field :acceptable, type: Boolean, custom: true
|
|
431
|
+
Band.field :acceptable, type: Mongoid::Boolean, custom: true
|
|
423
432
|
end
|
|
424
433
|
|
|
425
434
|
it "adds the field to the model" do
|
|
@@ -431,15 +440,38 @@ describe Mongoid::Fields do
|
|
|
431
440
|
context "when the Symbol type is used" do
|
|
432
441
|
|
|
433
442
|
before do
|
|
434
|
-
|
|
443
|
+
Mongoid::Warnings.class_eval do
|
|
444
|
+
@symbol_type_deprecated = false
|
|
445
|
+
end
|
|
435
446
|
end
|
|
436
447
|
|
|
437
448
|
after do
|
|
438
|
-
|
|
449
|
+
Label.fields.delete("should_warn")
|
|
439
450
|
end
|
|
440
451
|
|
|
441
452
|
it "warns that the BSON symbol type is deprecated" do
|
|
442
|
-
|
|
453
|
+
expect(Mongoid.logger).to receive(:warn)
|
|
454
|
+
|
|
455
|
+
Label.field :should_warn, type: Symbol
|
|
456
|
+
end
|
|
457
|
+
|
|
458
|
+
it "warns on first use of Symbol type only" do
|
|
459
|
+
expect(Mongoid.logger).to receive(:warn).once
|
|
460
|
+
|
|
461
|
+
Label.field :should_warn, type: Symbol
|
|
462
|
+
end
|
|
463
|
+
|
|
464
|
+
context 'when using Symbol field type in multiple classes' do
|
|
465
|
+
after do
|
|
466
|
+
Truck.fields.delete("should_warn")
|
|
467
|
+
end
|
|
468
|
+
|
|
469
|
+
it "warns on first use of Symbol type only" do
|
|
470
|
+
expect(Mongoid.logger).to receive(:warn).once
|
|
471
|
+
|
|
472
|
+
Label.field :should_warn, type: Symbol
|
|
473
|
+
Truck.field :should_warn, type: Symbol
|
|
474
|
+
end
|
|
443
475
|
end
|
|
444
476
|
end
|
|
445
477
|
|
|
@@ -447,7 +479,7 @@ describe Mongoid::Fields do
|
|
|
447
479
|
|
|
448
480
|
it "raises an error" do
|
|
449
481
|
expect {
|
|
450
|
-
|
|
482
|
+
Label.field :unacceptable, bad: true
|
|
451
483
|
}.to raise_error(Mongoid::Errors::InvalidFieldOption)
|
|
452
484
|
end
|
|
453
485
|
end
|
|
@@ -492,16 +524,13 @@ describe Mongoid::Fields do
|
|
|
492
524
|
end
|
|
493
525
|
|
|
494
526
|
context "when a single locale is set" do
|
|
527
|
+
with_default_i18n_configs
|
|
495
528
|
|
|
496
529
|
before do
|
|
497
|
-
|
|
530
|
+
I18n.locale = :de
|
|
498
531
|
product.description = "The best"
|
|
499
532
|
end
|
|
500
533
|
|
|
501
|
-
after do
|
|
502
|
-
::I18n.locale = :en
|
|
503
|
-
end
|
|
504
|
-
|
|
505
534
|
let(:description) do
|
|
506
535
|
product.description
|
|
507
536
|
end
|
|
@@ -512,17 +541,15 @@ describe Mongoid::Fields do
|
|
|
512
541
|
end
|
|
513
542
|
|
|
514
543
|
context "when multiple locales are set" do
|
|
544
|
+
with_default_i18n_configs
|
|
515
545
|
|
|
516
546
|
before do
|
|
547
|
+
I18n.locale = :end
|
|
517
548
|
product.description = "Cheap drinks"
|
|
518
|
-
|
|
549
|
+
I18n.locale = :de
|
|
519
550
|
product.description = "Cheaper drinks"
|
|
520
551
|
end
|
|
521
552
|
|
|
522
|
-
after do
|
|
523
|
-
::I18n.locale = :en
|
|
524
|
-
end
|
|
525
|
-
|
|
526
553
|
let(:description) do
|
|
527
554
|
product.description
|
|
528
555
|
end
|
|
@@ -549,8 +576,144 @@ describe Mongoid::Fields do
|
|
|
549
576
|
context "when the attribute has been assigned" do
|
|
550
577
|
|
|
551
578
|
it "returns the attribute before type cast" do
|
|
552
|
-
person.age = "
|
|
553
|
-
expect(person.age_before_type_cast).to eq("
|
|
579
|
+
person.age = "42"
|
|
580
|
+
expect(person.age_before_type_cast).to eq("42")
|
|
581
|
+
end
|
|
582
|
+
end
|
|
583
|
+
|
|
584
|
+
context "when reloading" do
|
|
585
|
+
|
|
586
|
+
let(:product) do
|
|
587
|
+
Product.create!(price: '1')
|
|
588
|
+
end
|
|
589
|
+
|
|
590
|
+
before do
|
|
591
|
+
product.reload
|
|
592
|
+
end
|
|
593
|
+
|
|
594
|
+
it "resets the attributes_before_type_cast to the attributes hash" do
|
|
595
|
+
expect(product.attributes_before_type_cast).to eq(product.attributes)
|
|
596
|
+
end
|
|
597
|
+
|
|
598
|
+
it "the *_before_type_cast method returns the demongoized value" do
|
|
599
|
+
expect(product.price_before_type_cast).to eq(1)
|
|
600
|
+
end
|
|
601
|
+
end
|
|
602
|
+
|
|
603
|
+
context "when reloading and writing a demongoizable value" do
|
|
604
|
+
|
|
605
|
+
let(:product) do
|
|
606
|
+
Product.create!.tap do |product|
|
|
607
|
+
Product.collection.update_one({ _id: product.id }, { :$set => { price: '1' }})
|
|
608
|
+
end
|
|
609
|
+
end
|
|
610
|
+
|
|
611
|
+
before do
|
|
612
|
+
product.reload
|
|
613
|
+
end
|
|
614
|
+
|
|
615
|
+
it "resets the attributes_before_type_cast to the attributes hash" do
|
|
616
|
+
expect(product.attributes_before_type_cast).to eq(product.attributes)
|
|
617
|
+
end
|
|
618
|
+
|
|
619
|
+
it "the *_before_type_cast method returns the mongoized value" do
|
|
620
|
+
expect(product.price_before_type_cast).to eq('1')
|
|
621
|
+
end
|
|
622
|
+
end
|
|
623
|
+
|
|
624
|
+
context "when reading from the db" do
|
|
625
|
+
|
|
626
|
+
let(:product) do
|
|
627
|
+
Product.create!(price: '1')
|
|
628
|
+
end
|
|
629
|
+
|
|
630
|
+
let(:from_db) do
|
|
631
|
+
Product.find(product.id)
|
|
632
|
+
end
|
|
633
|
+
|
|
634
|
+
it "resets the attributes_before_type_cast to the attributes hash" do
|
|
635
|
+
expect(from_db.attributes_before_type_cast).to eq(from_db.attributes)
|
|
636
|
+
end
|
|
637
|
+
|
|
638
|
+
it "the *_before_type_cast method returns the demongoized value" do
|
|
639
|
+
expect(from_db.price_before_type_cast).to eq(1)
|
|
640
|
+
end
|
|
641
|
+
end
|
|
642
|
+
|
|
643
|
+
context "when reading from the db after writing a demongoizable value" do
|
|
644
|
+
|
|
645
|
+
let(:product) do
|
|
646
|
+
Product.create!.tap do |product|
|
|
647
|
+
Product.collection.update_one({ _id: product.id }, { :$set => { price: '1' }})
|
|
648
|
+
end
|
|
649
|
+
end
|
|
650
|
+
|
|
651
|
+
let(:from_db) do
|
|
652
|
+
Product.find(product.id)
|
|
653
|
+
end
|
|
654
|
+
|
|
655
|
+
it "resets the attributes_before_type_cast to the attributes hash" do
|
|
656
|
+
expect(from_db.attributes_before_type_cast).to eq(from_db.attributes)
|
|
657
|
+
end
|
|
658
|
+
|
|
659
|
+
it "the *_before_type_cast method returns the mongoized value" do
|
|
660
|
+
expect(from_db.price_before_type_cast).to eq('1')
|
|
661
|
+
end
|
|
662
|
+
end
|
|
663
|
+
|
|
664
|
+
context "when making a new model" do
|
|
665
|
+
|
|
666
|
+
context "when using new with no options" do
|
|
667
|
+
let(:product) { Product.new }
|
|
668
|
+
|
|
669
|
+
it "sets the attributes_before_type_cast to the attributes hash" do
|
|
670
|
+
expect(product.attributes_before_type_cast).to eq(product.attributes)
|
|
671
|
+
end
|
|
672
|
+
end
|
|
673
|
+
|
|
674
|
+
context "when using new with options" do
|
|
675
|
+
let(:product) { Product.new(price: '1') }
|
|
676
|
+
|
|
677
|
+
let(:abtc) do
|
|
678
|
+
product.attributes.merge('price' => '1')
|
|
679
|
+
end
|
|
680
|
+
|
|
681
|
+
it "has the attributes before type cast" do
|
|
682
|
+
expect(product.attributes_before_type_cast).to eq(abtc)
|
|
683
|
+
end
|
|
684
|
+
end
|
|
685
|
+
|
|
686
|
+
context "when persisting the model" do
|
|
687
|
+
let(:product) { Product.new(price: '1') }
|
|
688
|
+
|
|
689
|
+
let(:abtc) do
|
|
690
|
+
product.attributes.merge('price' => '1')
|
|
691
|
+
end
|
|
692
|
+
|
|
693
|
+
before do
|
|
694
|
+
expect(product.attributes_before_type_cast).to eq(abtc)
|
|
695
|
+
product.save!
|
|
696
|
+
end
|
|
697
|
+
|
|
698
|
+
it "resets the attributes_before_type_cast to the attributes" do
|
|
699
|
+
expect(product.attributes_before_type_cast).to eq(product.attributes)
|
|
700
|
+
end
|
|
701
|
+
end
|
|
702
|
+
|
|
703
|
+
context "when using create! without options" do
|
|
704
|
+
let(:product) { Product.create! }
|
|
705
|
+
|
|
706
|
+
it "resets the attributes_before_type_cast to the attributes" do
|
|
707
|
+
expect(product.attributes_before_type_cast).to eq(product.attributes)
|
|
708
|
+
end
|
|
709
|
+
end
|
|
710
|
+
|
|
711
|
+
context "when using create! with options" do
|
|
712
|
+
let(:product) { Product.create!(price: '1') }
|
|
713
|
+
|
|
714
|
+
it "resets the attributes_before_type_cast to the attributes" do
|
|
715
|
+
expect(product.attributes_before_type_cast).to eq(product.attributes)
|
|
716
|
+
end
|
|
554
717
|
end
|
|
555
718
|
end
|
|
556
719
|
end
|
|
@@ -598,14 +761,14 @@ describe Mongoid::Fields do
|
|
|
598
761
|
|
|
599
762
|
before do
|
|
600
763
|
product.stores = [ "kadewe", "karstadt" ]
|
|
601
|
-
product.save
|
|
764
|
+
product.save!
|
|
602
765
|
end
|
|
603
766
|
|
|
604
767
|
context "when setting the value to nil" do
|
|
605
768
|
|
|
606
769
|
before do
|
|
607
770
|
product.stores = nil
|
|
608
|
-
product.save
|
|
771
|
+
product.save!
|
|
609
772
|
end
|
|
610
773
|
|
|
611
774
|
it "allows the set" do
|
|
@@ -617,7 +780,7 @@ describe Mongoid::Fields do
|
|
|
617
780
|
|
|
618
781
|
before do
|
|
619
782
|
product.stores = [ "kadewe", nil ]
|
|
620
|
-
product.save
|
|
783
|
+
product.save!
|
|
621
784
|
end
|
|
622
785
|
|
|
623
786
|
it "allows the set of nil values" do
|
|
@@ -633,7 +796,7 @@ describe Mongoid::Fields do
|
|
|
633
796
|
|
|
634
797
|
before do
|
|
635
798
|
product.stores = [ "karstadt", "kadewe" ]
|
|
636
|
-
product.save
|
|
799
|
+
product.save!
|
|
637
800
|
end
|
|
638
801
|
|
|
639
802
|
it "reverses the values" do
|
|
@@ -664,16 +827,13 @@ describe Mongoid::Fields do
|
|
|
664
827
|
end
|
|
665
828
|
|
|
666
829
|
context "when a locale is set" do
|
|
830
|
+
with_default_i18n_configs
|
|
667
831
|
|
|
668
832
|
before do
|
|
669
|
-
|
|
833
|
+
I18n.locale = :de
|
|
670
834
|
product.description = "Cheaper drinks"
|
|
671
835
|
end
|
|
672
836
|
|
|
673
|
-
after do
|
|
674
|
-
::I18n.locale = :en
|
|
675
|
-
end
|
|
676
|
-
|
|
677
837
|
let(:description) do
|
|
678
838
|
product.attributes["description"]
|
|
679
839
|
end
|
|
@@ -684,17 +844,15 @@ describe Mongoid::Fields do
|
|
|
684
844
|
end
|
|
685
845
|
|
|
686
846
|
context "when having multiple locales" do
|
|
847
|
+
with_default_i18n_configs
|
|
687
848
|
|
|
688
849
|
before do
|
|
850
|
+
I18n.locale = :en
|
|
689
851
|
product.description = "Cheap drinks"
|
|
690
|
-
|
|
852
|
+
I18n.locale = :de
|
|
691
853
|
product.description = "Cheaper drinks"
|
|
692
854
|
end
|
|
693
855
|
|
|
694
|
-
after do
|
|
695
|
-
::I18n.locale = :en
|
|
696
|
-
end
|
|
697
|
-
|
|
698
856
|
let(:description) do
|
|
699
857
|
product.attributes["description"]
|
|
700
858
|
end
|
|
@@ -706,6 +864,22 @@ describe Mongoid::Fields do
|
|
|
706
864
|
end
|
|
707
865
|
end
|
|
708
866
|
end
|
|
867
|
+
|
|
868
|
+
context "when the field needs to be mongoized" do
|
|
869
|
+
|
|
870
|
+
before do
|
|
871
|
+
product.price = "1"
|
|
872
|
+
product.save!
|
|
873
|
+
end
|
|
874
|
+
|
|
875
|
+
it "mongoizes the value" do
|
|
876
|
+
expect(product.price).to eq(1)
|
|
877
|
+
end
|
|
878
|
+
|
|
879
|
+
it "stores the value in the mongoized form" do
|
|
880
|
+
expect(product.attributes_before_type_cast["price"]).to eq(1)
|
|
881
|
+
end
|
|
882
|
+
end
|
|
709
883
|
end
|
|
710
884
|
|
|
711
885
|
describe "#defaults" do
|
|
@@ -810,7 +984,8 @@ describe Mongoid::Fields do
|
|
|
810
984
|
end
|
|
811
985
|
|
|
812
986
|
it "does not return subclass defaults" do
|
|
813
|
-
expect(shape.pre_processed_defaults).to eq([ "_id", "x", "y"
|
|
987
|
+
expect(shape.pre_processed_defaults).to eq([ "_id", "x", "y" ])
|
|
988
|
+
expect(shape.post_processed_defaults).to eq([ "_type" ])
|
|
814
989
|
end
|
|
815
990
|
end
|
|
816
991
|
|
|
@@ -821,7 +996,8 @@ describe Mongoid::Fields do
|
|
|
821
996
|
end
|
|
822
997
|
|
|
823
998
|
it "has the parent and child defaults" do
|
|
824
|
-
expect(circle.pre_processed_defaults).to eq([ "_id", "x", "y", "
|
|
999
|
+
expect(circle.pre_processed_defaults).to eq([ "_id", "x", "y", "radius" ])
|
|
1000
|
+
expect(circle.post_processed_defaults).to eq([ "_type" ])
|
|
825
1001
|
end
|
|
826
1002
|
end
|
|
827
1003
|
end
|
|
@@ -840,32 +1016,30 @@ describe Mongoid::Fields do
|
|
|
840
1016
|
it "raises an error" do
|
|
841
1017
|
expect {
|
|
842
1018
|
Person.field(meth)
|
|
843
|
-
}.to raise_error(Mongoid::Errors::InvalidField)
|
|
1019
|
+
}.to raise_error(Mongoid::Errors::InvalidField, /Defining a field named '#{meth}' is not allowed/)
|
|
844
1020
|
end
|
|
845
1021
|
end
|
|
846
1022
|
end
|
|
847
1023
|
end
|
|
848
1024
|
|
|
849
1025
|
context "when field already exist and validate_duplicate is enable" do
|
|
1026
|
+
context 'when exception is enabled' do
|
|
1027
|
+
config_override :duplicate_fields_exception, true
|
|
850
1028
|
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
Mongoid.duplicate_fields_exception = false
|
|
857
|
-
end
|
|
858
|
-
|
|
859
|
-
it "raises an error" do
|
|
860
|
-
expect {
|
|
861
|
-
Person.field(:title)
|
|
862
|
-
}.to raise_error(Mongoid::Errors::InvalidField)
|
|
1029
|
+
it "raises an error" do
|
|
1030
|
+
expect {
|
|
1031
|
+
Person.field(:title)
|
|
1032
|
+
}.to raise_error(Mongoid::Errors::InvalidField)
|
|
1033
|
+
end
|
|
863
1034
|
end
|
|
864
1035
|
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
1036
|
+
context 'when exception is disabled' do
|
|
1037
|
+
config_override :duplicate_fields_exception, false
|
|
1038
|
+
it "doesn't raise an error" do
|
|
1039
|
+
expect {
|
|
1040
|
+
Class.new(Person)
|
|
1041
|
+
}.to_not raise_error
|
|
1042
|
+
end
|
|
869
1043
|
end
|
|
870
1044
|
end
|
|
871
1045
|
|
|
@@ -880,14 +1054,7 @@ describe Mongoid::Fields do
|
|
|
880
1054
|
end
|
|
881
1055
|
|
|
882
1056
|
context "when reading the field" do
|
|
883
|
-
|
|
884
|
-
before do
|
|
885
|
-
Time.zone = "Berlin"
|
|
886
|
-
end
|
|
887
|
-
|
|
888
|
-
after do
|
|
889
|
-
Time.zone = nil
|
|
890
|
-
end
|
|
1057
|
+
time_zone_override "Berlin"
|
|
891
1058
|
|
|
892
1059
|
it "performs the necessary time conversions" do
|
|
893
1060
|
expect(person.lunch_time.to_s).to eq(time.getlocal.to_s)
|
|
@@ -965,11 +1132,11 @@ describe Mongoid::Fields do
|
|
|
965
1132
|
end
|
|
966
1133
|
|
|
967
1134
|
before do
|
|
968
|
-
Person.field :aliased, as: :alias, type: Boolean, overwrite: true
|
|
1135
|
+
Person.field :aliased, as: :alias, type: Mongoid::Boolean, overwrite: true
|
|
969
1136
|
end
|
|
970
1137
|
|
|
971
1138
|
it "uses the alias to write the attribute" do
|
|
972
|
-
(person.alias =
|
|
1139
|
+
expect(person.alias = true).to be true
|
|
973
1140
|
end
|
|
974
1141
|
|
|
975
1142
|
it "uses the alias to read the attribute" do
|
|
@@ -981,7 +1148,7 @@ describe Mongoid::Fields do
|
|
|
981
1148
|
end
|
|
982
1149
|
|
|
983
1150
|
it "uses the name to write the attribute" do
|
|
984
|
-
(person.aliased =
|
|
1151
|
+
expect(person.aliased = true).to be true
|
|
985
1152
|
end
|
|
986
1153
|
|
|
987
1154
|
it "uses the name to read the attribute" do
|
|
@@ -1093,6 +1260,10 @@ describe Mongoid::Fields do
|
|
|
1093
1260
|
it "does not return subclass fields" do
|
|
1094
1261
|
expect(shape.fields.keys).to_not include("radius")
|
|
1095
1262
|
end
|
|
1263
|
+
|
|
1264
|
+
it 'includes _type field' do
|
|
1265
|
+
expect(shape.fields.keys).to include("_type")
|
|
1266
|
+
end
|
|
1096
1267
|
end
|
|
1097
1268
|
|
|
1098
1269
|
context "on subclasses" do
|
|
@@ -1112,6 +1283,28 @@ describe Mongoid::Fields do
|
|
|
1112
1283
|
it "includes the child fields" do
|
|
1113
1284
|
expect(circle.fields.keys).to include("radius")
|
|
1114
1285
|
end
|
|
1286
|
+
|
|
1287
|
+
it 'includes _type field' do
|
|
1288
|
+
expect(circle.fields.keys).to include("_type")
|
|
1289
|
+
end
|
|
1290
|
+
end
|
|
1291
|
+
|
|
1292
|
+
context "on new subclasses" do
|
|
1293
|
+
it "all subclasses get the discriminator key" do
|
|
1294
|
+
class DiscriminatorParent
|
|
1295
|
+
include Mongoid::Document
|
|
1296
|
+
end
|
|
1297
|
+
|
|
1298
|
+
class DiscriminatorChild1 < DiscriminatorParent
|
|
1299
|
+
end
|
|
1300
|
+
|
|
1301
|
+
class DiscriminatorChild2 < DiscriminatorParent
|
|
1302
|
+
end
|
|
1303
|
+
|
|
1304
|
+
expect(DiscriminatorParent.fields.keys).to include("_type")
|
|
1305
|
+
expect(DiscriminatorChild1.fields.keys).to include("_type")
|
|
1306
|
+
expect(DiscriminatorChild2.fields.keys).to include("_type")
|
|
1307
|
+
end
|
|
1115
1308
|
end
|
|
1116
1309
|
end
|
|
1117
1310
|
|
|
@@ -1184,71 +1377,147 @@ describe Mongoid::Fields do
|
|
|
1184
1377
|
|
|
1185
1378
|
context "when a field is defined as a big decimal" do
|
|
1186
1379
|
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
end
|
|
1380
|
+
context 'when Mongoid.map_big_decimal_to_decimal128 is false' do
|
|
1381
|
+
config_override :map_big_decimal_to_decimal128, false
|
|
1190
1382
|
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
end
|
|
1194
|
-
|
|
1195
|
-
context "when setting to a big decimal" do
|
|
1196
|
-
|
|
1197
|
-
before do
|
|
1198
|
-
band.sales = decimal
|
|
1383
|
+
let(:band) do
|
|
1384
|
+
Band.new(name: "Tool")
|
|
1199
1385
|
end
|
|
1200
1386
|
|
|
1201
|
-
|
|
1202
|
-
|
|
1387
|
+
let(:decimal) do
|
|
1388
|
+
BigDecimal("1000000.00")
|
|
1203
1389
|
end
|
|
1204
1390
|
|
|
1205
|
-
|
|
1206
|
-
|
|
1391
|
+
context "when setting to a big decimal" do
|
|
1392
|
+
|
|
1393
|
+
before do
|
|
1394
|
+
band.sales = decimal
|
|
1395
|
+
end
|
|
1396
|
+
|
|
1397
|
+
it "properly persists as a string" do
|
|
1398
|
+
expect(band.attributes["sales"]).to eq(decimal.to_s)
|
|
1399
|
+
end
|
|
1400
|
+
|
|
1401
|
+
it "returns the proper big decimal" do
|
|
1402
|
+
expect(band.sales).to eq(decimal)
|
|
1403
|
+
end
|
|
1207
1404
|
end
|
|
1208
|
-
end
|
|
1209
1405
|
|
|
1210
|
-
|
|
1406
|
+
context "when setting to a string" do
|
|
1211
1407
|
|
|
1212
|
-
|
|
1213
|
-
|
|
1408
|
+
before do
|
|
1409
|
+
band.sales = decimal.to_s
|
|
1410
|
+
end
|
|
1411
|
+
|
|
1412
|
+
it "properly persists as a string" do
|
|
1413
|
+
expect(band.attributes["sales"]).to eq(decimal.to_s)
|
|
1414
|
+
end
|
|
1415
|
+
|
|
1416
|
+
it "returns the proper big decimal" do
|
|
1417
|
+
expect(band.sales).to eq(decimal)
|
|
1418
|
+
end
|
|
1214
1419
|
end
|
|
1215
1420
|
|
|
1216
|
-
|
|
1217
|
-
|
|
1421
|
+
context "when setting to an integer" do
|
|
1422
|
+
|
|
1423
|
+
before do
|
|
1424
|
+
band.sales = decimal.to_i
|
|
1425
|
+
end
|
|
1426
|
+
|
|
1427
|
+
it "properly persists as a string" do
|
|
1428
|
+
expect(band.attributes["sales"]).to eq("1000000")
|
|
1429
|
+
end
|
|
1430
|
+
|
|
1431
|
+
it "returns the proper big decimal" do
|
|
1432
|
+
expect(band.sales).to eq(decimal)
|
|
1433
|
+
end
|
|
1218
1434
|
end
|
|
1219
1435
|
|
|
1220
|
-
|
|
1221
|
-
|
|
1436
|
+
context "when setting to a float" do
|
|
1437
|
+
|
|
1438
|
+
before do
|
|
1439
|
+
band.sales = decimal.to_f
|
|
1440
|
+
end
|
|
1441
|
+
|
|
1442
|
+
it "properly persists as a string" do
|
|
1443
|
+
expect(band.attributes["sales"]).to eq(decimal.to_s)
|
|
1444
|
+
end
|
|
1445
|
+
|
|
1446
|
+
it "returns the proper big decimal" do
|
|
1447
|
+
expect(band.sales).to eq(decimal)
|
|
1448
|
+
end
|
|
1222
1449
|
end
|
|
1223
1450
|
end
|
|
1224
1451
|
|
|
1225
|
-
context
|
|
1452
|
+
context 'when Mongoid.map_big_decimal_to_decimal128 is true' do
|
|
1453
|
+
config_override :map_big_decimal_to_decimal128, true
|
|
1226
1454
|
|
|
1227
|
-
|
|
1228
|
-
|
|
1455
|
+
let(:band) do
|
|
1456
|
+
Band.new(name: "Tool")
|
|
1229
1457
|
end
|
|
1230
1458
|
|
|
1231
|
-
|
|
1232
|
-
|
|
1459
|
+
let(:decimal) do
|
|
1460
|
+
BigDecimal("1000000.00")
|
|
1233
1461
|
end
|
|
1234
1462
|
|
|
1235
|
-
|
|
1236
|
-
|
|
1463
|
+
context "when setting to a big decimal" do
|
|
1464
|
+
|
|
1465
|
+
before do
|
|
1466
|
+
band.sales = decimal
|
|
1467
|
+
end
|
|
1468
|
+
|
|
1469
|
+
it "properly persists as a BSON::Decimal128" do
|
|
1470
|
+
expect(band.attributes["sales"]).to eq(BSON::Decimal128.new(decimal))
|
|
1471
|
+
end
|
|
1472
|
+
|
|
1473
|
+
it "returns the proper big decimal" do
|
|
1474
|
+
expect(band.sales).to eq(decimal)
|
|
1475
|
+
end
|
|
1237
1476
|
end
|
|
1238
|
-
end
|
|
1239
1477
|
|
|
1240
|
-
|
|
1478
|
+
context "when setting to a string" do
|
|
1241
1479
|
|
|
1242
|
-
|
|
1243
|
-
|
|
1480
|
+
before do
|
|
1481
|
+
band.sales = decimal.to_s
|
|
1482
|
+
end
|
|
1483
|
+
|
|
1484
|
+
it "persists as a BSON::Decimal128" do
|
|
1485
|
+
expect(band.attributes["sales"]).to eq(BSON::Decimal128.new(decimal.to_s))
|
|
1486
|
+
end
|
|
1487
|
+
|
|
1488
|
+
it "returns the proper big decimal" do
|
|
1489
|
+
expect(band.sales).to eq(decimal)
|
|
1490
|
+
end
|
|
1244
1491
|
end
|
|
1245
1492
|
|
|
1246
|
-
|
|
1247
|
-
|
|
1493
|
+
context "when setting to an integer" do
|
|
1494
|
+
|
|
1495
|
+
before do
|
|
1496
|
+
band.sales = decimal.to_i
|
|
1497
|
+
end
|
|
1498
|
+
|
|
1499
|
+
it "persists as a BSON::Decimal128" do
|
|
1500
|
+
expect(band.attributes["sales"]).to eq(BSON::Decimal128.new(decimal.to_i.to_s))
|
|
1501
|
+
end
|
|
1502
|
+
|
|
1503
|
+
it "returns the proper big decimal" do
|
|
1504
|
+
expect(band.sales).to eq(decimal)
|
|
1505
|
+
end
|
|
1248
1506
|
end
|
|
1249
1507
|
|
|
1250
|
-
|
|
1251
|
-
|
|
1508
|
+
context "when setting to a float" do
|
|
1509
|
+
|
|
1510
|
+
before do
|
|
1511
|
+
band.sales = decimal.to_f
|
|
1512
|
+
end
|
|
1513
|
+
|
|
1514
|
+
it "properly persists as a BSON::Decimal128" do
|
|
1515
|
+
expect(band.attributes["sales"]).to eq(BSON::Decimal128.new(decimal.to_f.to_s))
|
|
1516
|
+
end
|
|
1517
|
+
|
|
1518
|
+
it "returns the proper big decimal" do
|
|
1519
|
+
expect(band.sales).to eq(decimal)
|
|
1520
|
+
end
|
|
1252
1521
|
end
|
|
1253
1522
|
end
|
|
1254
1523
|
end
|
|
@@ -1256,7 +1525,7 @@ describe Mongoid::Fields do
|
|
|
1256
1525
|
context "when the field is a hash of arrays" do
|
|
1257
1526
|
|
|
1258
1527
|
let(:person) do
|
|
1259
|
-
Person.create
|
|
1528
|
+
Person.create!
|
|
1260
1529
|
end
|
|
1261
1530
|
|
|
1262
1531
|
let(:map) do
|
|
@@ -1270,7 +1539,7 @@ describe Mongoid::Fields do
|
|
|
1270
1539
|
before do
|
|
1271
1540
|
person.map = map
|
|
1272
1541
|
person.map["stack1"].reverse!
|
|
1273
|
-
person.save
|
|
1542
|
+
person.save!
|
|
1274
1543
|
end
|
|
1275
1544
|
|
|
1276
1545
|
it "properly updates the hash" do
|
|
@@ -1329,4 +1598,472 @@ describe Mongoid::Fields do
|
|
|
1329
1598
|
end
|
|
1330
1599
|
end
|
|
1331
1600
|
end
|
|
1601
|
+
|
|
1602
|
+
describe '_type field' do
|
|
1603
|
+
context 'on parent class' do
|
|
1604
|
+
let(:shape) { Shape.new }
|
|
1605
|
+
|
|
1606
|
+
it 'is correctly set' do
|
|
1607
|
+
shape.attributes['_type'].should == 'Shape'
|
|
1608
|
+
end
|
|
1609
|
+
end
|
|
1610
|
+
|
|
1611
|
+
context 'on child class' do
|
|
1612
|
+
let(:circle) { Circle.new }
|
|
1613
|
+
|
|
1614
|
+
it 'is correctly set' do
|
|
1615
|
+
circle.attributes['_type'].should == 'Circle'
|
|
1616
|
+
end
|
|
1617
|
+
end
|
|
1618
|
+
end
|
|
1619
|
+
|
|
1620
|
+
describe '.database_field_name' do
|
|
1621
|
+
|
|
1622
|
+
shared_examples_for 'database_field_name' do
|
|
1623
|
+
subject { Person.database_field_name(key) }
|
|
1624
|
+
|
|
1625
|
+
context 'non-aliased field name' do
|
|
1626
|
+
let(:key) { 't' }
|
|
1627
|
+
it { is_expected.to eq 't' }
|
|
1628
|
+
end
|
|
1629
|
+
|
|
1630
|
+
context 'aliased field name' do
|
|
1631
|
+
let(:key) { 'test' }
|
|
1632
|
+
it { is_expected.to eq 't' }
|
|
1633
|
+
end
|
|
1634
|
+
|
|
1635
|
+
context 'non-aliased embeds one relation' do
|
|
1636
|
+
let(:key) { 'pass' }
|
|
1637
|
+
it { is_expected.to eq 'pass' }
|
|
1638
|
+
end
|
|
1639
|
+
|
|
1640
|
+
context 'aliased embeds one relation' do
|
|
1641
|
+
let(:key) { 'passport' }
|
|
1642
|
+
it { is_expected.to eq 'pass' }
|
|
1643
|
+
end
|
|
1644
|
+
|
|
1645
|
+
context 'non-aliased embeds many relation' do
|
|
1646
|
+
let(:key) { 'mobile_phones' }
|
|
1647
|
+
it { is_expected.to eq 'mobile_phones' }
|
|
1648
|
+
end
|
|
1649
|
+
|
|
1650
|
+
context 'aliased embeds many relation' do
|
|
1651
|
+
let(:key) { 'phones' }
|
|
1652
|
+
it { is_expected.to eq 'mobile_phones' }
|
|
1653
|
+
end
|
|
1654
|
+
|
|
1655
|
+
context 'non-aliased embeds one field' do
|
|
1656
|
+
let(:key) { 'pass.exp' }
|
|
1657
|
+
it { is_expected.to eq 'pass.exp' }
|
|
1658
|
+
end
|
|
1659
|
+
|
|
1660
|
+
context 'aliased embeds one field' do
|
|
1661
|
+
let(:key) { 'passport.expiration_date' }
|
|
1662
|
+
it { is_expected.to eq 'pass.exp' }
|
|
1663
|
+
end
|
|
1664
|
+
|
|
1665
|
+
context 'non-aliased embeds many field' do
|
|
1666
|
+
let(:key) { 'mobile_phones.landline' }
|
|
1667
|
+
it { is_expected.to eq 'mobile_phones.landline' }
|
|
1668
|
+
end
|
|
1669
|
+
|
|
1670
|
+
context 'aliased embeds many field' do
|
|
1671
|
+
let(:key) { 'phones.extension' }
|
|
1672
|
+
it { is_expected.to eq 'mobile_phones.ext' }
|
|
1673
|
+
end
|
|
1674
|
+
|
|
1675
|
+
context 'aliased multi-level embedded document' do
|
|
1676
|
+
let(:key) { 'phones.extension' }
|
|
1677
|
+
it { is_expected.to eq 'mobile_phones.ext' }
|
|
1678
|
+
end
|
|
1679
|
+
|
|
1680
|
+
context 'non-aliased multi-level embedded document' do
|
|
1681
|
+
let(:key) { 'phones.extension' }
|
|
1682
|
+
it { is_expected.to eq 'mobile_phones.ext' }
|
|
1683
|
+
end
|
|
1684
|
+
|
|
1685
|
+
context 'aliased multi-level embedded document field' do
|
|
1686
|
+
let(:key) { 'mobile_phones.country_code.code' }
|
|
1687
|
+
it { is_expected.to eq 'mobile_phones.country_code.code' }
|
|
1688
|
+
end
|
|
1689
|
+
|
|
1690
|
+
context 'non-aliased multi-level embedded document field' do
|
|
1691
|
+
let(:key) { 'phones.country_code.iso_alpha2_code' }
|
|
1692
|
+
it { is_expected.to eq 'mobile_phones.country_code.iso' }
|
|
1693
|
+
end
|
|
1694
|
+
|
|
1695
|
+
context 'when field is unknown' do
|
|
1696
|
+
let(:key) { 'shenanigans' }
|
|
1697
|
+
it { is_expected.to eq 'shenanigans' }
|
|
1698
|
+
end
|
|
1699
|
+
|
|
1700
|
+
context 'when embedded field is unknown' do
|
|
1701
|
+
let(:key) { 'phones.bamboozle' }
|
|
1702
|
+
it { is_expected.to eq 'mobile_phones.bamboozle' }
|
|
1703
|
+
end
|
|
1704
|
+
|
|
1705
|
+
context 'when multi-level embedded field is unknown' do
|
|
1706
|
+
let(:key) { 'phones.bamboozle.brouhaha' }
|
|
1707
|
+
it { is_expected.to eq 'mobile_phones.bamboozle.brouhaha' }
|
|
1708
|
+
end
|
|
1709
|
+
end
|
|
1710
|
+
|
|
1711
|
+
shared_examples_for 'pre-fix database_field_name' do
|
|
1712
|
+
subject { Person.database_field_name(key) }
|
|
1713
|
+
|
|
1714
|
+
context 'non-aliased field name' do
|
|
1715
|
+
let(:key) { 't' }
|
|
1716
|
+
it { is_expected.to eq 't' }
|
|
1717
|
+
end
|
|
1718
|
+
|
|
1719
|
+
context 'aliased field name' do
|
|
1720
|
+
let(:key) { 'test' }
|
|
1721
|
+
it { is_expected.to eq 't' }
|
|
1722
|
+
end
|
|
1723
|
+
|
|
1724
|
+
context 'non-aliased embeds one relation' do
|
|
1725
|
+
let(:key) { 'pass' }
|
|
1726
|
+
it { is_expected.to eq 'pass' }
|
|
1727
|
+
end
|
|
1728
|
+
|
|
1729
|
+
context 'aliased embeds one relation' do
|
|
1730
|
+
let(:key) { 'passport' }
|
|
1731
|
+
it { is_expected.to eq 'pass' }
|
|
1732
|
+
end
|
|
1733
|
+
|
|
1734
|
+
context 'non-aliased embeds many relation' do
|
|
1735
|
+
let(:key) { 'mobile_phones' }
|
|
1736
|
+
it { is_expected.to eq 'mobile_phones' }
|
|
1737
|
+
end
|
|
1738
|
+
|
|
1739
|
+
context 'aliased embeds many relation' do
|
|
1740
|
+
let(:key) { 'phones' }
|
|
1741
|
+
it { is_expected.to eq 'mobile_phones' }
|
|
1742
|
+
end
|
|
1743
|
+
|
|
1744
|
+
context 'non-aliased embeds one field' do
|
|
1745
|
+
let(:key) { 'pass.exp' }
|
|
1746
|
+
it { is_expected.to eq 'pass.exp' }
|
|
1747
|
+
end
|
|
1748
|
+
|
|
1749
|
+
context 'aliased embeds one field' do
|
|
1750
|
+
let(:key) { 'passport.expiration_date' }
|
|
1751
|
+
it { is_expected.to eq 'passport.expiration_date' }
|
|
1752
|
+
end
|
|
1753
|
+
|
|
1754
|
+
context 'non-aliased embeds many field' do
|
|
1755
|
+
let(:key) { 'mobile_phones.landline' }
|
|
1756
|
+
it { is_expected.to eq 'mobile_phones.landline' }
|
|
1757
|
+
end
|
|
1758
|
+
|
|
1759
|
+
context 'aliased embeds many field' do
|
|
1760
|
+
let(:key) { 'phones.extension' }
|
|
1761
|
+
it { is_expected.to eq 'phones.extension' }
|
|
1762
|
+
end
|
|
1763
|
+
|
|
1764
|
+
context 'aliased multi-level embedded document' do
|
|
1765
|
+
let(:key) { 'phones.extension' }
|
|
1766
|
+
it { is_expected.to eq 'phones.extension' }
|
|
1767
|
+
end
|
|
1768
|
+
|
|
1769
|
+
context 'non-aliased multi-level embedded document' do
|
|
1770
|
+
let(:key) { 'phones.extension' }
|
|
1771
|
+
it { is_expected.to eq 'phones.extension' }
|
|
1772
|
+
end
|
|
1773
|
+
|
|
1774
|
+
context 'aliased multi-level embedded document field' do
|
|
1775
|
+
let(:key) { 'mobile_phones.country_code.code' }
|
|
1776
|
+
it { is_expected.to eq 'mobile_phones.country_code.code' }
|
|
1777
|
+
end
|
|
1778
|
+
|
|
1779
|
+
context 'non-aliased multi-level embedded document field' do
|
|
1780
|
+
let(:key) { 'phones.country_code.iso_alpha2_code' }
|
|
1781
|
+
it { is_expected.to eq 'phones.country_code.iso_alpha2_code' }
|
|
1782
|
+
end
|
|
1783
|
+
|
|
1784
|
+
context 'when field is unknown' do
|
|
1785
|
+
let(:key) { 'shenanigans' }
|
|
1786
|
+
it { is_expected.to eq 'shenanigans' }
|
|
1787
|
+
end
|
|
1788
|
+
|
|
1789
|
+
context 'when embedded field is unknown' do
|
|
1790
|
+
let(:key) { 'phones.bamboozle' }
|
|
1791
|
+
it { is_expected.to eq 'phones.bamboozle' }
|
|
1792
|
+
end
|
|
1793
|
+
|
|
1794
|
+
context 'when multi-level embedded field is unknown' do
|
|
1795
|
+
let(:key) { 'phones.bamboozle.brouhaha' }
|
|
1796
|
+
it { is_expected.to eq 'phones.bamboozle.brouhaha' }
|
|
1797
|
+
end
|
|
1798
|
+
end
|
|
1799
|
+
|
|
1800
|
+
context "when the broken_alias_handling is not set" do
|
|
1801
|
+
config_override :broken_alias_handling, false
|
|
1802
|
+
|
|
1803
|
+
context 'given nil' do
|
|
1804
|
+
subject { Person.database_field_name(nil) }
|
|
1805
|
+
it { is_expected.to eq nil }
|
|
1806
|
+
end
|
|
1807
|
+
|
|
1808
|
+
context 'given an empty String' do
|
|
1809
|
+
subject { Person.database_field_name('') }
|
|
1810
|
+
it { is_expected.to eq nil }
|
|
1811
|
+
end
|
|
1812
|
+
|
|
1813
|
+
context 'given a String' do
|
|
1814
|
+
subject { Person.database_field_name(key.to_s) }
|
|
1815
|
+
it_behaves_like 'database_field_name'
|
|
1816
|
+
end
|
|
1817
|
+
|
|
1818
|
+
context 'given a Symbol' do
|
|
1819
|
+
subject { Person.database_field_name(key.to_sym) }
|
|
1820
|
+
it_behaves_like 'database_field_name'
|
|
1821
|
+
end
|
|
1822
|
+
end
|
|
1823
|
+
|
|
1824
|
+
context "when the broken_alias_handling is set" do
|
|
1825
|
+
config_override :broken_alias_handling, true
|
|
1826
|
+
|
|
1827
|
+
context 'given nil' do
|
|
1828
|
+
subject { Person.database_field_name(nil) }
|
|
1829
|
+
it { is_expected.to eq nil }
|
|
1830
|
+
end
|
|
1831
|
+
|
|
1832
|
+
context 'given an empty String' do
|
|
1833
|
+
subject { Person.database_field_name('') }
|
|
1834
|
+
it { is_expected.to eq "" }
|
|
1835
|
+
end
|
|
1836
|
+
|
|
1837
|
+
context 'given a String' do
|
|
1838
|
+
subject { Person.database_field_name(key.to_s) }
|
|
1839
|
+
it_behaves_like 'pre-fix database_field_name'
|
|
1840
|
+
end
|
|
1841
|
+
|
|
1842
|
+
context 'given a Symbol' do
|
|
1843
|
+
subject { Person.database_field_name(key.to_sym) }
|
|
1844
|
+
it_behaves_like 'pre-fix database_field_name'
|
|
1845
|
+
end
|
|
1846
|
+
end
|
|
1847
|
+
|
|
1848
|
+
context 'when getting the database field name of a belongs_to associations' do
|
|
1849
|
+
# These tests only apply when the flag is not set
|
|
1850
|
+
config_override :broken_alias_handling, false
|
|
1851
|
+
|
|
1852
|
+
context "when the broken_alias_handling is not set" do
|
|
1853
|
+
context "when the association is the last item" do
|
|
1854
|
+
let(:name) do
|
|
1855
|
+
Game.database_field_name("person")
|
|
1856
|
+
end
|
|
1857
|
+
|
|
1858
|
+
it "gets the alias" do
|
|
1859
|
+
expect(name).to eq("person_id")
|
|
1860
|
+
end
|
|
1861
|
+
end
|
|
1862
|
+
|
|
1863
|
+
context "when the association is not the last item" do
|
|
1864
|
+
let(:name) do
|
|
1865
|
+
Game.database_field_name("person.name")
|
|
1866
|
+
end
|
|
1867
|
+
|
|
1868
|
+
it "gets the alias" do
|
|
1869
|
+
expect(name).to eq("person.name")
|
|
1870
|
+
end
|
|
1871
|
+
end
|
|
1872
|
+
end
|
|
1873
|
+
end
|
|
1874
|
+
end
|
|
1875
|
+
|
|
1876
|
+
describe "#get_field" do
|
|
1877
|
+
|
|
1878
|
+
let(:klass) { Person }
|
|
1879
|
+
let(:field) { klass.cleanse_localized_field_names(field_name) }
|
|
1880
|
+
|
|
1881
|
+
context "when cleansing a field" do
|
|
1882
|
+
let(:field_name) { "employer_id" }
|
|
1883
|
+
it "returns the correct field name" do
|
|
1884
|
+
expect(field).to eq(field_name)
|
|
1885
|
+
end
|
|
1886
|
+
end
|
|
1887
|
+
|
|
1888
|
+
context "when cleansing a localized field" do
|
|
1889
|
+
let(:field_name) { "desc" }
|
|
1890
|
+
it "returns the correct field name" do
|
|
1891
|
+
expect(field).to eq(field_name)
|
|
1892
|
+
end
|
|
1893
|
+
end
|
|
1894
|
+
|
|
1895
|
+
context "when cleansing a translation field" do
|
|
1896
|
+
let(:field_name) { "desc_translations" }
|
|
1897
|
+
it "returns the correct field name" do
|
|
1898
|
+
expect(field).to eq("desc")
|
|
1899
|
+
end
|
|
1900
|
+
end
|
|
1901
|
+
|
|
1902
|
+
context "when cleansing an existing translation field" do
|
|
1903
|
+
let(:field_name) { "localized_translations" }
|
|
1904
|
+
it "returns the correct field name" do
|
|
1905
|
+
expect(field).to eq(field_name)
|
|
1906
|
+
end
|
|
1907
|
+
end
|
|
1908
|
+
|
|
1909
|
+
context "when cleansing an existing translation field with a _translations" do
|
|
1910
|
+
let(:field_name) { "localized_translations_translations" }
|
|
1911
|
+
it "returns the correct field name" do
|
|
1912
|
+
expect(field).to eq("localized_translations")
|
|
1913
|
+
end
|
|
1914
|
+
end
|
|
1915
|
+
|
|
1916
|
+
context "when cleansing dotted translation field" do
|
|
1917
|
+
config_override :broken_alias_handling, false
|
|
1918
|
+
let(:field_name) { "passport.name_translations.asd" }
|
|
1919
|
+
it "returns the correct field name" do
|
|
1920
|
+
expect(field).to eq("pass.name.asd")
|
|
1921
|
+
end
|
|
1922
|
+
end
|
|
1923
|
+
|
|
1924
|
+
context "when cleansing dotted translation field as a symbol" do
|
|
1925
|
+
config_override :broken_alias_handling, false
|
|
1926
|
+
let(:field_name) { "passport.name_translations.asd".to_sym }
|
|
1927
|
+
it "returns the correct field name" do
|
|
1928
|
+
expect(field).to eq("pass.name.asd")
|
|
1929
|
+
end
|
|
1930
|
+
end
|
|
1931
|
+
|
|
1932
|
+
context "when cleansing dotted existing translation field" do
|
|
1933
|
+
config_override :broken_alias_handling, false
|
|
1934
|
+
let(:field_name) { "passport.localized_translations.asd" }
|
|
1935
|
+
it "returns the correct field name" do
|
|
1936
|
+
expect(field).to eq("pass.localized_translations.asd")
|
|
1937
|
+
end
|
|
1938
|
+
end
|
|
1939
|
+
|
|
1940
|
+
context "when cleansing aliased dotted translation field" do
|
|
1941
|
+
let(:field_name) { "pass.name_translations.asd" }
|
|
1942
|
+
it "returns the correct field name" do
|
|
1943
|
+
expect(field).to eq("pass.name.asd")
|
|
1944
|
+
end
|
|
1945
|
+
end
|
|
1946
|
+
end
|
|
1947
|
+
|
|
1948
|
+
describe "localize: :present" do
|
|
1949
|
+
|
|
1950
|
+
let(:product) do
|
|
1951
|
+
Product.new
|
|
1952
|
+
end
|
|
1953
|
+
|
|
1954
|
+
context "when assigning a non blank value" do
|
|
1955
|
+
|
|
1956
|
+
before do
|
|
1957
|
+
product.title = "hello"
|
|
1958
|
+
end
|
|
1959
|
+
|
|
1960
|
+
it "assigns the value" do
|
|
1961
|
+
expect(product.title).to eq("hello")
|
|
1962
|
+
end
|
|
1963
|
+
|
|
1964
|
+
it "populates the translations hash" do
|
|
1965
|
+
expect(product.title_translations).to eq({ "en" => "hello" })
|
|
1966
|
+
end
|
|
1967
|
+
end
|
|
1968
|
+
|
|
1969
|
+
context "when assigning an empty string" do
|
|
1970
|
+
with_default_i18n_configs
|
|
1971
|
+
|
|
1972
|
+
before do
|
|
1973
|
+
I18n.locale = :en
|
|
1974
|
+
product.title = "hello"
|
|
1975
|
+
I18n.locale = :de
|
|
1976
|
+
product.title = "hello there!"
|
|
1977
|
+
product.title = ""
|
|
1978
|
+
end
|
|
1979
|
+
|
|
1980
|
+
it "assigns the value" do
|
|
1981
|
+
expect(product.title).to eq(nil)
|
|
1982
|
+
end
|
|
1983
|
+
|
|
1984
|
+
it "populates the translations hash" do
|
|
1985
|
+
expect(product.title_translations).to eq({ "en" => "hello" })
|
|
1986
|
+
end
|
|
1987
|
+
end
|
|
1988
|
+
|
|
1989
|
+
context "when assigning nil" do
|
|
1990
|
+
with_default_i18n_configs
|
|
1991
|
+
|
|
1992
|
+
before do
|
|
1993
|
+
I18n.locale = :en
|
|
1994
|
+
product.title = "hello"
|
|
1995
|
+
I18n.locale = :de
|
|
1996
|
+
product.title = "hello there!"
|
|
1997
|
+
product.title = nil
|
|
1998
|
+
end
|
|
1999
|
+
|
|
2000
|
+
it "assigns the value" do
|
|
2001
|
+
expect(product.title).to eq(nil)
|
|
2002
|
+
end
|
|
2003
|
+
|
|
2004
|
+
it "populates the translations hash" do
|
|
2005
|
+
expect(product.title_translations).to eq({ "en" => "hello" })
|
|
2006
|
+
end
|
|
2007
|
+
end
|
|
2008
|
+
|
|
2009
|
+
context "when assigning an empty array" do
|
|
2010
|
+
with_default_i18n_configs
|
|
2011
|
+
|
|
2012
|
+
before do
|
|
2013
|
+
I18n.locale = :en
|
|
2014
|
+
product.title = "hello"
|
|
2015
|
+
I18n.locale = :de
|
|
2016
|
+
product.title = "hello there!"
|
|
2017
|
+
product.title = []
|
|
2018
|
+
end
|
|
2019
|
+
|
|
2020
|
+
it "assigns the value" do
|
|
2021
|
+
expect(product.title).to eq(nil)
|
|
2022
|
+
end
|
|
2023
|
+
|
|
2024
|
+
it "populates the translations hash" do
|
|
2025
|
+
expect(product.title_translations).to eq({ "en" => "hello" })
|
|
2026
|
+
end
|
|
2027
|
+
end
|
|
2028
|
+
|
|
2029
|
+
context "when assigning an empty string first" do
|
|
2030
|
+
with_default_i18n_configs
|
|
2031
|
+
|
|
2032
|
+
before do
|
|
2033
|
+
product.title = ""
|
|
2034
|
+
end
|
|
2035
|
+
|
|
2036
|
+
it "assigns the value" do
|
|
2037
|
+
expect(product.title).to eq(nil)
|
|
2038
|
+
end
|
|
2039
|
+
|
|
2040
|
+
it "populates the translations hash" do
|
|
2041
|
+
expect(product.title_translations).to eq({})
|
|
2042
|
+
end
|
|
2043
|
+
end
|
|
2044
|
+
|
|
2045
|
+
context "when assigning an empty string with only one translation" do
|
|
2046
|
+
with_default_i18n_configs
|
|
2047
|
+
|
|
2048
|
+
before do
|
|
2049
|
+
product.title = "Hello"
|
|
2050
|
+
product.title = ""
|
|
2051
|
+
product.save!
|
|
2052
|
+
end
|
|
2053
|
+
|
|
2054
|
+
let(:from_db) { Product.first }
|
|
2055
|
+
|
|
2056
|
+
it "assigns the value" do
|
|
2057
|
+
expect(product.title).to eq(nil)
|
|
2058
|
+
end
|
|
2059
|
+
|
|
2060
|
+
it "populates the translations hash" do
|
|
2061
|
+
expect(product.title_translations).to eq({})
|
|
2062
|
+
end
|
|
2063
|
+
|
|
2064
|
+
it "round trips an empty hash" do
|
|
2065
|
+
expect(from_db.title_translations).to eq({})
|
|
2066
|
+
end
|
|
2067
|
+
end
|
|
2068
|
+
end
|
|
1332
2069
|
end
|