mongoid 7.4.3 → 8.0.7
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/README.md +3 -3
- data/Rakefile +25 -0
- data/lib/config/locales/en.yml +52 -28
- data/lib/mongoid/association/accessors.rb +38 -9
- data/lib/mongoid/association/bindable.rb +50 -2
- data/lib/mongoid/association/builders.rb +4 -2
- data/lib/mongoid/association/constrainable.rb +0 -1
- data/lib/mongoid/association/eager_loadable.rb +29 -7
- data/lib/mongoid/association/embedded/batchable.rb +33 -10
- data/lib/mongoid/association/embedded/cyclic.rb +1 -1
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +2 -2
- data/lib/mongoid/association/embedded/embedded_in.rb +3 -2
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +1 -1
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +65 -41
- data/lib/mongoid/association/embedded/embeds_many.rb +2 -2
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +18 -4
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +23 -4
- data/lib/mongoid/association/embedded/embeds_one.rb +3 -3
- data/lib/mongoid/association/macros.rb +28 -1
- data/lib/mongoid/association/many.rb +11 -7
- data/lib/mongoid/association/nested/many.rb +5 -4
- data/lib/mongoid/association/nested/nested_buildable.rb +4 -4
- data/lib/mongoid/association/nested/one.rb +5 -5
- data/lib/mongoid/association/one.rb +2 -2
- data/lib/mongoid/association/options.rb +9 -9
- data/lib/mongoid/association/proxy.rb +14 -3
- data/lib/mongoid/association/referenced/auto_save.rb +4 -3
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -6
- data/lib/mongoid/association/referenced/belongs_to.rb +2 -2
- data/lib/mongoid/association/referenced/counter_cache.rb +10 -10
- data/lib/mongoid/association/referenced/eager.rb +2 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +70 -13
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +6 -3
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +20 -24
- data/lib/mongoid/association/referenced/has_many/proxy.rb +26 -16
- data/lib/mongoid/association/referenced/has_many.rb +3 -3
- data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +5 -5
- data/lib/mongoid/association/referenced/has_one/proxy.rb +9 -12
- data/lib/mongoid/association/referenced/has_one.rb +3 -3
- data/lib/mongoid/association/referenced/syncable.rb +4 -4
- data/lib/mongoid/association/reflections.rb +2 -2
- data/lib/mongoid/association/relatable.rb +44 -10
- data/lib/mongoid/association.rb +5 -5
- data/lib/mongoid/atomic/modifiers.rb +2 -2
- data/lib/mongoid/atomic.rb +7 -0
- data/lib/mongoid/attributes/dynamic.rb +3 -3
- data/lib/mongoid/attributes/nested.rb +5 -5
- data/lib/mongoid/attributes/processing.rb +37 -6
- data/lib/mongoid/attributes/projector.rb +1 -1
- data/lib/mongoid/attributes/readonly.rb +2 -2
- data/lib/mongoid/attributes.rb +43 -40
- data/lib/mongoid/cacheable.rb +2 -2
- data/lib/mongoid/changeable.rb +43 -10
- data/lib/mongoid/clients/options.rb +5 -1
- data/lib/mongoid/clients/sessions.rb +2 -14
- data/lib/mongoid/clients/validators/storage.rb +3 -3
- data/lib/mongoid/config/options.rb +3 -0
- data/lib/mongoid/config/validators/client.rb +6 -6
- data/lib/mongoid/config.rb +62 -17
- data/lib/mongoid/contextual/aggregable/memory.rb +24 -16
- data/lib/mongoid/contextual/aggregable/mongo.rb +5 -5
- data/lib/mongoid/contextual/aggregable/none.rb +1 -1
- data/lib/mongoid/contextual/atomic.rb +1 -1
- data/lib/mongoid/contextual/geo_near.rb +7 -7
- data/lib/mongoid/contextual/map_reduce.rb +2 -2
- data/lib/mongoid/contextual/memory.rb +180 -21
- data/lib/mongoid/contextual/mongo.rb +260 -217
- data/lib/mongoid/contextual/none.rb +67 -5
- data/lib/mongoid/contextual/queryable.rb +1 -1
- data/lib/mongoid/contextual.rb +2 -2
- data/lib/mongoid/copyable.rb +32 -8
- data/lib/mongoid/criteria/findable.rb +7 -4
- data/lib/mongoid/criteria/includable.rb +24 -20
- data/lib/mongoid/criteria/marshalable.rb +10 -2
- data/lib/mongoid/criteria/permission.rb +1 -1
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -2
- data/lib/mongoid/criteria/queryable/extensions/array.rb +3 -14
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -2
- data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -15
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -9
- data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +3 -3
- data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -14
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -12
- data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
- data/lib/mongoid/criteria/queryable/key.rb +3 -3
- data/lib/mongoid/criteria/queryable/mergeable.rb +21 -0
- data/lib/mongoid/criteria/queryable/optional.rb +5 -11
- data/lib/mongoid/criteria/queryable/options.rb +2 -2
- data/lib/mongoid/criteria/queryable/pipeline.rb +1 -1
- data/lib/mongoid/criteria/queryable/selectable.rb +31 -37
- data/lib/mongoid/criteria/queryable/selector.rb +93 -8
- data/lib/mongoid/criteria/queryable/smash.rb +40 -7
- data/lib/mongoid/criteria/queryable/storable.rb +1 -1
- data/lib/mongoid/criteria/queryable.rb +12 -7
- data/lib/mongoid/criteria/scopable.rb +2 -2
- data/lib/mongoid/criteria/translator.rb +45 -0
- data/lib/mongoid/criteria.rb +16 -35
- data/lib/mongoid/deprecable.rb +37 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +135 -34
- data/lib/mongoid/equality.rb +8 -8
- data/lib/mongoid/errors/document_not_found.rb +33 -12
- data/lib/mongoid/errors/invalid_config_option.rb +1 -1
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -1
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
- data/lib/mongoid/errors/invalid_field.rb +6 -2
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/invalid_relation.rb +1 -1
- data/lib/mongoid/errors/invalid_relation_option.rb +1 -1
- data/lib/mongoid/errors/invalid_session_use.rb +1 -1
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
- data/lib/mongoid/errors/mongoid_error.rb +3 -3
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -1
- data/lib/mongoid/errors/no_client_database.rb +1 -1
- data/lib/mongoid/errors/no_client_hosts.rb +1 -1
- data/lib/mongoid/errors/readonly_attribute.rb +1 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
- data/lib/mongoid/errors/unknown_attribute.rb +1 -1
- data/lib/mongoid/errors.rb +2 -2
- data/lib/mongoid/extensions/array.rb +9 -7
- data/lib/mongoid/extensions/big_decimal.rb +33 -10
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +8 -2
- data/lib/mongoid/extensions/date.rb +26 -20
- data/lib/mongoid/extensions/date_time.rb +1 -1
- data/lib/mongoid/extensions/false_class.rb +1 -1
- data/lib/mongoid/extensions/float.rb +7 -4
- data/lib/mongoid/extensions/hash.rb +37 -8
- data/lib/mongoid/extensions/integer.rb +7 -4
- data/lib/mongoid/extensions/module.rb +1 -1
- data/lib/mongoid/extensions/object.rb +8 -6
- data/lib/mongoid/extensions/range.rb +41 -10
- data/lib/mongoid/extensions/regexp.rb +11 -4
- data/lib/mongoid/extensions/set.rb +11 -4
- data/lib/mongoid/extensions/string.rb +11 -22
- data/lib/mongoid/extensions/symbol.rb +4 -15
- data/lib/mongoid/extensions/time.rb +27 -16
- data/lib/mongoid/extensions/time_with_zone.rb +1 -2
- data/lib/mongoid/extensions/true_class.rb +1 -1
- data/lib/mongoid/extensions.rb +1 -0
- data/lib/mongoid/factory.rb +55 -7
- data/lib/mongoid/fields/foreign_key.rb +11 -4
- data/lib/mongoid/fields/localized.rb +9 -4
- data/lib/mongoid/fields/standard.rb +7 -7
- data/lib/mongoid/fields/validators/macro.rb +3 -9
- data/lib/mongoid/fields.rb +233 -40
- data/lib/mongoid/findable.rb +34 -13
- data/lib/mongoid/indexable/specification.rb +2 -2
- data/lib/mongoid/indexable/validators/options.rb +6 -2
- data/lib/mongoid/interceptable.rb +185 -16
- data/lib/mongoid/matchable.rb +1 -1
- data/lib/mongoid/matcher.rb +33 -13
- data/lib/mongoid/persistable/creatable.rb +18 -9
- data/lib/mongoid/persistable/deletable.rb +1 -1
- data/lib/mongoid/persistable/destroyable.rb +1 -1
- data/lib/mongoid/persistable/savable.rb +2 -2
- data/lib/mongoid/persistable/unsettable.rb +1 -1
- data/lib/mongoid/persistable/updatable.rb +19 -12
- data/lib/mongoid/persistable/upsertable.rb +1 -1
- data/lib/mongoid/persistable.rb +3 -3
- data/lib/mongoid/persistence_context.rb +63 -10
- data/lib/mongoid/query_cache.rb +8 -260
- data/lib/mongoid/railties/controller_runtime.rb +1 -1
- data/lib/mongoid/reloadable.rb +10 -8
- data/lib/mongoid/scopable.rb +26 -22
- data/lib/mongoid/selectable.rb +1 -2
- data/lib/mongoid/serializable.rb +10 -6
- data/lib/mongoid/shardable.rb +35 -11
- data/lib/mongoid/stateful.rb +35 -9
- data/lib/mongoid/tasks/database.rb +0 -2
- data/lib/mongoid/threaded/lifecycle.rb +5 -5
- data/lib/mongoid/threaded.rb +42 -12
- data/lib/mongoid/timestamps/created.rb +1 -1
- data/lib/mongoid/timestamps/updated.rb +2 -2
- data/lib/mongoid/touchable.rb +2 -3
- data/lib/mongoid/traversable.rb +5 -4
- data/lib/mongoid/validatable/localizable.rb +1 -1
- data/lib/mongoid/validatable/macros.rb +0 -2
- data/lib/mongoid/validatable/presence.rb +2 -2
- data/lib/mongoid/validatable/uniqueness.rb +9 -8
- data/lib/mongoid/validatable.rb +6 -6
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/warnings.rb +28 -0
- data/lib/mongoid.rb +2 -0
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +4 -3
- data/spec/config/mongoid.yml +16 -0
- data/spec/integration/app_spec.rb +8 -12
- data/spec/integration/associations/belongs_to_spec.rb +18 -0
- data/spec/integration/associations/embedded_spec.rb +15 -0
- data/spec/integration/associations/embeds_many_spec.rb +15 -2
- data/spec/integration/associations/embeds_one_spec.rb +18 -0
- data/spec/integration/associations/foreign_key_spec.rb +9 -0
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
- data/spec/integration/associations/has_one_spec.rb +97 -1
- data/spec/integration/associations/scope_option_spec.rb +1 -1
- data/spec/integration/callbacks_models.rb +95 -1
- data/spec/integration/callbacks_spec.rb +246 -4
- data/spec/integration/criteria/range_spec.rb +95 -1
- data/spec/integration/discriminator_key_spec.rb +115 -76
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +1 -17
- data/spec/integration/matcher_examples_spec.rb +20 -13
- data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
- data/spec/integration/matcher_operator_spec.rb +3 -5
- data/spec/integration/persistence/range_field_spec.rb +350 -0
- data/spec/mongoid/association/counter_cache_spec.rb +1 -1
- data/spec/mongoid/association/depending_spec.rb +9 -9
- data/spec/mongoid/association/eager_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +69 -9
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +235 -40
- data/spec/mongoid/association/embedded/embeds_many_models.rb +36 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +12 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +15 -0
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +202 -201
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +8 -8
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +160 -119
- data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
- data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
- data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
- data/spec/mongoid/association/syncable_spec.rb +14 -0
- data/spec/mongoid/atomic/paths_spec.rb +0 -14
- data/spec/mongoid/attributes/nested_spec.rb +80 -11
- data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
- data/spec/mongoid/attributes/projector_spec.rb +1 -5
- data/spec/mongoid/attributes_spec.rb +551 -27
- data/spec/mongoid/cacheable_spec.rb +3 -3
- data/spec/mongoid/changeable_spec.rb +130 -13
- data/spec/mongoid/clients/factory_spec.rb +23 -30
- data/spec/mongoid/clients/options_spec.rb +1 -0
- data/spec/mongoid/clients/sessions_spec.rb +0 -38
- data/spec/mongoid/clients_spec.rb +57 -2
- data/spec/mongoid/config_spec.rb +78 -18
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +396 -158
- 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/map_reduce_spec.rb +2 -16
- data/spec/mongoid/contextual/memory_spec.rb +1336 -69
- data/spec/mongoid/contextual/mongo_spec.rb +1253 -247
- data/spec/mongoid/contextual/none_spec.rb +38 -0
- data/spec/mongoid/copyable_spec.rb +451 -1
- data/spec/mongoid/criteria/findable_spec.rb +86 -210
- data/spec/mongoid/criteria/includable_spec.rb +1492 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +0 -59
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -59
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/optional_spec.rb +15 -484
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +50 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +289 -124
- data/spec/mongoid/criteria/queryable/selector_spec.rb +89 -4
- data/spec/mongoid/criteria/queryable/storable_spec.rb +72 -0
- data/spec/mongoid/criteria/translator_spec.rb +132 -0
- data/spec/mongoid/criteria_projection_spec.rb +0 -1
- data/spec/mongoid/criteria_spec.rb +475 -1199
- data/spec/mongoid/document_fields_spec.rb +173 -24
- data/spec/mongoid/document_spec.rb +32 -41
- data/spec/mongoid/errors/document_not_found_spec.rb +76 -0
- data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
- data/spec/mongoid/errors/no_environment_spec.rb +3 -3
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
- data/spec/mongoid/extensions/array_spec.rb +16 -2
- data/spec/mongoid/extensions/big_decimal_spec.rb +712 -212
- data/spec/mongoid/extensions/binary_spec.rb +44 -9
- data/spec/mongoid/extensions/boolean_spec.rb +68 -82
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
- data/spec/mongoid/extensions/date_spec.rb +71 -1
- data/spec/mongoid/extensions/date_time_spec.rb +15 -9
- data/spec/mongoid/extensions/float_spec.rb +53 -74
- data/spec/mongoid/extensions/hash_spec.rb +33 -3
- data/spec/mongoid/extensions/integer_spec.rb +50 -64
- data/spec/mongoid/extensions/range_spec.rb +255 -54
- data/spec/mongoid/extensions/regexp_spec.rb +58 -33
- data/spec/mongoid/extensions/set_spec.rb +106 -0
- data/spec/mongoid/extensions/string_spec.rb +53 -25
- data/spec/mongoid/extensions/symbol_spec.rb +18 -25
- data/spec/mongoid/extensions/time_spec.rb +634 -66
- data/spec/mongoid/extensions/time_with_zone_spec.rb +17 -31
- data/spec/mongoid/factory_spec.rb +61 -1
- data/spec/mongoid/fields/localized_spec.rb +37 -12
- data/spec/mongoid/fields_spec.rb +364 -50
- data/spec/mongoid/findable_spec.rb +80 -15
- data/spec/mongoid/indexable/specification_spec.rb +2 -2
- data/spec/mongoid/indexable_spec.rb +39 -20
- data/spec/mongoid/interceptable_spec.rb +807 -27
- data/spec/mongoid/interceptable_spec_models.rb +235 -4
- data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
- data/spec/mongoid/mongoizable_spec.rb +285 -0
- data/spec/mongoid/persistable/creatable_spec.rb +2 -2
- data/spec/mongoid/persistable/deletable_spec.rb +2 -2
- data/spec/mongoid/persistable/destroyable_spec.rb +2 -2
- data/spec/mongoid/persistable/upsertable_spec.rb +14 -0
- data/spec/mongoid/persistence_context_spec.rb +50 -1
- data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
- data/spec/mongoid/query_cache_spec.rb +0 -154
- data/spec/mongoid/reloadable_spec.rb +59 -2
- data/spec/mongoid/scopable_spec.rb +54 -16
- data/spec/mongoid/shardable_models.rb +14 -0
- data/spec/mongoid/shardable_spec.rb +157 -51
- data/spec/mongoid/stateful_spec.rb +28 -0
- data/spec/mongoid/timestamps_spec.rb +390 -0
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +116 -0
- data/spec/mongoid/touchable_spec_models.rb +12 -8
- data/spec/mongoid/traversable_spec.rb +4 -11
- data/spec/mongoid/validatable/presence_spec.rb +1 -1
- data/spec/mongoid/validatable/uniqueness_spec.rb +59 -31
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +1 -1
- data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
- data/spec/rails/mongoid_spec.rb +4 -16
- data/spec/shared/lib/mrss/docker_runner.rb +7 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +10 -2
- data/spec/shared/lib/mrss/server_version_registry.rb +16 -23
- data/spec/shared/lib/mrss/utils.rb +28 -6
- data/spec/shared/share/Dockerfile.erb +36 -40
- data/spec/shared/shlib/server.sh +32 -8
- data/spec/shared/shlib/set_env.sh +4 -4
- data/spec/support/constraints.rb +24 -0
- data/spec/support/macros.rb +46 -0
- data/spec/support/models/augmentation.rb +12 -0
- data/spec/support/models/band.rb +3 -0
- data/spec/support/models/catalog.rb +24 -0
- data/spec/support/models/circus.rb +3 -0
- data/spec/support/models/code.rb +2 -0
- data/spec/support/models/fanatic.rb +8 -0
- data/spec/support/models/implant.rb +9 -0
- data/spec/support/models/label.rb +2 -0
- data/spec/support/models/passport.rb +9 -0
- data/spec/support/models/person.rb +2 -0
- data/spec/support/models/player.rb +2 -0
- data/spec/support/models/powerup.rb +12 -0
- data/spec/support/models/purse.rb +9 -0
- data/spec/support/models/registry.rb +1 -0
- data/spec/support/models/school.rb +14 -0
- data/spec/support/models/shield.rb +18 -0
- data/spec/support/models/student.rb +14 -0
- data/spec/support/models/weapon.rb +12 -0
- data.tar.gz.sig +4 -1
- metadata +682 -635
- metadata.gz.sig +0 -0
- data/lib/mongoid/errors/eager_load.rb +0 -23
- data/lib/mongoid/errors/invalid_value.rb +0 -17
- data/spec/mongoid/errors/eager_load_spec.rb +0 -31
data/spec/mongoid/fields_spec.rb
CHANGED
@@ -393,6 +393,22 @@ describe Mongoid::Fields do
|
|
393
393
|
it "converts :time to Time" do
|
394
394
|
expect(klass.field(:test, type: :time).type).to be(Time)
|
395
395
|
end
|
396
|
+
|
397
|
+
context 'when using an unknown symbol' do
|
398
|
+
it 'raises InvalidFieldType' do
|
399
|
+
lambda do
|
400
|
+
klass.field(:test, type: :bogus)
|
401
|
+
end.should raise_error(Mongoid::Errors::InvalidFieldType, /defines a field 'test' with an unknown type value :bogus/)
|
402
|
+
end
|
403
|
+
end
|
404
|
+
|
405
|
+
context 'when using an unknown string' do
|
406
|
+
it 'raises InvalidFieldType' do
|
407
|
+
lambda do
|
408
|
+
klass.field(:test, type: 'bogus')
|
409
|
+
end.should raise_error(Mongoid::Errors::InvalidFieldType, /defines a field 'test' with an unknown type value "bogus"/)
|
410
|
+
end
|
411
|
+
end
|
396
412
|
end
|
397
413
|
|
398
414
|
context "when the options are valid" do
|
@@ -427,25 +443,25 @@ describe Mongoid::Fields do
|
|
427
443
|
context "when the Symbol type is used" do
|
428
444
|
|
429
445
|
before do
|
430
|
-
Mongoid::
|
431
|
-
@
|
446
|
+
Mongoid::Warnings.class_eval do
|
447
|
+
@symbol_type_deprecated = false
|
432
448
|
end
|
433
449
|
end
|
434
450
|
|
435
451
|
after do
|
436
|
-
|
452
|
+
Label.fields.delete("should_warn")
|
437
453
|
end
|
438
454
|
|
439
455
|
it "warns that the BSON symbol type is deprecated" do
|
440
456
|
expect(Mongoid.logger).to receive(:warn)
|
441
457
|
|
442
|
-
|
458
|
+
Label.field :should_warn, type: Symbol
|
443
459
|
end
|
444
460
|
|
445
461
|
it "warns on first use of Symbol type only" do
|
446
462
|
expect(Mongoid.logger).to receive(:warn).once
|
447
463
|
|
448
|
-
|
464
|
+
Label.field :should_warn, type: Symbol
|
449
465
|
end
|
450
466
|
|
451
467
|
context 'when using Symbol field type in multiple classes' do
|
@@ -456,7 +472,7 @@ describe Mongoid::Fields do
|
|
456
472
|
it "warns on first use of Symbol type only" do
|
457
473
|
expect(Mongoid.logger).to receive(:warn).once
|
458
474
|
|
459
|
-
|
475
|
+
Label.field :should_warn, type: Symbol
|
460
476
|
Truck.field :should_warn, type: Symbol
|
461
477
|
end
|
462
478
|
end
|
@@ -466,7 +482,7 @@ describe Mongoid::Fields do
|
|
466
482
|
|
467
483
|
it "raises an error" do
|
468
484
|
expect {
|
469
|
-
|
485
|
+
Label.field :unacceptable, bad: true
|
470
486
|
}.to raise_error(Mongoid::Errors::InvalidFieldOption)
|
471
487
|
end
|
472
488
|
end
|
@@ -551,6 +567,49 @@ describe Mongoid::Fields do
|
|
551
567
|
end
|
552
568
|
end
|
553
569
|
end
|
570
|
+
|
571
|
+
context 'when the field is declared as BSON::Decimal128' do
|
572
|
+
let(:document) { Mop.create!(decimal128_field: BSON::Decimal128.new(Math::PI.to_s)).reload }
|
573
|
+
|
574
|
+
shared_context 'BSON::Decimal128 is BigDecimal' do
|
575
|
+
it 'should return a BigDecimal' do
|
576
|
+
expect(document.decimal128_field).to be_a BigDecimal
|
577
|
+
end
|
578
|
+
end
|
579
|
+
|
580
|
+
shared_context 'BSON::Decimal128 is BSON::Decimal128' do
|
581
|
+
it 'should return a BSON::Decimal128' do
|
582
|
+
expect(document.decimal128_field).to be_a BSON::Decimal128
|
583
|
+
end
|
584
|
+
end
|
585
|
+
|
586
|
+
it 'is declared as BSON::Decimal128' do
|
587
|
+
expect(Mop.fields['decimal128_field'].type).to be == BSON::Decimal128
|
588
|
+
end
|
589
|
+
|
590
|
+
context 'when BSON version <= 4' do
|
591
|
+
max_bson_version '4.99.99'
|
592
|
+
it_behaves_like 'BSON::Decimal128 is BSON::Decimal128'
|
593
|
+
end
|
594
|
+
|
595
|
+
context 'when BSON version >= 5' do
|
596
|
+
min_bson_version '5.0.0'
|
597
|
+
|
598
|
+
context 'when allow_bson5_decimal128 is false' do
|
599
|
+
config_override :allow_bson5_decimal128, false
|
600
|
+
it_behaves_like 'BSON::Decimal128 is BigDecimal'
|
601
|
+
end
|
602
|
+
|
603
|
+
context 'when allow_bson5_decimal128 is true' do
|
604
|
+
config_override :allow_bson5_decimal128, true
|
605
|
+
it_behaves_like 'BSON::Decimal128 is BSON::Decimal128'
|
606
|
+
end
|
607
|
+
|
608
|
+
context 'when allow_bson5_decimal128 is default' do
|
609
|
+
it_behaves_like 'BSON::Decimal128 is BigDecimal'
|
610
|
+
end
|
611
|
+
end
|
612
|
+
end
|
554
613
|
end
|
555
614
|
|
556
615
|
describe "#getter_before_type_cast" do
|
@@ -568,8 +627,144 @@ describe Mongoid::Fields do
|
|
568
627
|
context "when the attribute has been assigned" do
|
569
628
|
|
570
629
|
it "returns the attribute before type cast" do
|
571
|
-
person.age = "
|
572
|
-
expect(person.age_before_type_cast).to eq("
|
630
|
+
person.age = "42"
|
631
|
+
expect(person.age_before_type_cast).to eq("42")
|
632
|
+
end
|
633
|
+
end
|
634
|
+
|
635
|
+
context "when reloading" do
|
636
|
+
|
637
|
+
let(:product) do
|
638
|
+
Product.create!(price: '1')
|
639
|
+
end
|
640
|
+
|
641
|
+
before do
|
642
|
+
product.reload
|
643
|
+
end
|
644
|
+
|
645
|
+
it "resets the attributes_before_type_cast to the attributes hash" do
|
646
|
+
expect(product.attributes_before_type_cast).to eq(product.attributes)
|
647
|
+
end
|
648
|
+
|
649
|
+
it "the *_before_type_cast method returns the demongoized value" do
|
650
|
+
expect(product.price_before_type_cast).to eq(1)
|
651
|
+
end
|
652
|
+
end
|
653
|
+
|
654
|
+
context "when reloading and writing a demongoizable value" do
|
655
|
+
|
656
|
+
let(:product) do
|
657
|
+
Product.create!.tap do |product|
|
658
|
+
Product.collection.update_one({ _id: product.id }, { :$set => { price: '1' }})
|
659
|
+
end
|
660
|
+
end
|
661
|
+
|
662
|
+
before do
|
663
|
+
product.reload
|
664
|
+
end
|
665
|
+
|
666
|
+
it "resets the attributes_before_type_cast to the attributes hash" do
|
667
|
+
expect(product.attributes_before_type_cast).to eq(product.attributes)
|
668
|
+
end
|
669
|
+
|
670
|
+
it "the *_before_type_cast method returns the mongoized value" do
|
671
|
+
expect(product.price_before_type_cast).to eq('1')
|
672
|
+
end
|
673
|
+
end
|
674
|
+
|
675
|
+
context "when reading from the db" do
|
676
|
+
|
677
|
+
let(:product) do
|
678
|
+
Product.create!(price: '1')
|
679
|
+
end
|
680
|
+
|
681
|
+
let(:from_db) do
|
682
|
+
Product.find(product.id)
|
683
|
+
end
|
684
|
+
|
685
|
+
it "resets the attributes_before_type_cast to the attributes hash" do
|
686
|
+
expect(from_db.attributes_before_type_cast).to eq(from_db.attributes)
|
687
|
+
end
|
688
|
+
|
689
|
+
it "the *_before_type_cast method returns the demongoized value" do
|
690
|
+
expect(from_db.price_before_type_cast).to eq(1)
|
691
|
+
end
|
692
|
+
end
|
693
|
+
|
694
|
+
context "when reading from the db after writing a demongoizable value" do
|
695
|
+
|
696
|
+
let(:product) do
|
697
|
+
Product.create!.tap do |product|
|
698
|
+
Product.collection.update_one({ _id: product.id }, { :$set => { price: '1' }})
|
699
|
+
end
|
700
|
+
end
|
701
|
+
|
702
|
+
let(:from_db) do
|
703
|
+
Product.find(product.id)
|
704
|
+
end
|
705
|
+
|
706
|
+
it "resets the attributes_before_type_cast to the attributes hash" do
|
707
|
+
expect(from_db.attributes_before_type_cast).to eq(from_db.attributes)
|
708
|
+
end
|
709
|
+
|
710
|
+
it "the *_before_type_cast method returns the mongoized value" do
|
711
|
+
expect(from_db.price_before_type_cast).to eq('1')
|
712
|
+
end
|
713
|
+
end
|
714
|
+
|
715
|
+
context "when making a new model" do
|
716
|
+
|
717
|
+
context "when using new with no options" do
|
718
|
+
let(:product) { Product.new }
|
719
|
+
|
720
|
+
it "sets the attributes_before_type_cast to the attributes hash" do
|
721
|
+
expect(product.attributes_before_type_cast).to eq(product.attributes)
|
722
|
+
end
|
723
|
+
end
|
724
|
+
|
725
|
+
context "when using new with options" do
|
726
|
+
let(:product) { Product.new(price: '1') }
|
727
|
+
|
728
|
+
let(:abtc) do
|
729
|
+
product.attributes.merge('price' => '1')
|
730
|
+
end
|
731
|
+
|
732
|
+
it "has the attributes before type cast" do
|
733
|
+
expect(product.attributes_before_type_cast).to eq(abtc)
|
734
|
+
end
|
735
|
+
end
|
736
|
+
|
737
|
+
context "when persisting the model" do
|
738
|
+
let(:product) { Product.new(price: '1') }
|
739
|
+
|
740
|
+
let(:abtc) do
|
741
|
+
product.attributes.merge('price' => '1')
|
742
|
+
end
|
743
|
+
|
744
|
+
before do
|
745
|
+
expect(product.attributes_before_type_cast).to eq(abtc)
|
746
|
+
product.save!
|
747
|
+
end
|
748
|
+
|
749
|
+
it "resets the attributes_before_type_cast to the attributes" do
|
750
|
+
expect(product.attributes_before_type_cast).to eq(product.attributes)
|
751
|
+
end
|
752
|
+
end
|
753
|
+
|
754
|
+
context "when using create! without options" do
|
755
|
+
let(:product) { Product.create! }
|
756
|
+
|
757
|
+
it "resets the attributes_before_type_cast to the attributes" do
|
758
|
+
expect(product.attributes_before_type_cast).to eq(product.attributes)
|
759
|
+
end
|
760
|
+
end
|
761
|
+
|
762
|
+
context "when using create! with options" do
|
763
|
+
let(:product) { Product.create!(price: '1') }
|
764
|
+
|
765
|
+
it "resets the attributes_before_type_cast to the attributes" do
|
766
|
+
expect(product.attributes_before_type_cast).to eq(product.attributes)
|
767
|
+
end
|
573
768
|
end
|
574
769
|
end
|
575
770
|
end
|
@@ -725,6 +920,22 @@ describe Mongoid::Fields do
|
|
725
920
|
end
|
726
921
|
end
|
727
922
|
end
|
923
|
+
|
924
|
+
context "when the field needs to be mongoized" do
|
925
|
+
|
926
|
+
before do
|
927
|
+
product.price = "1"
|
928
|
+
product.save!
|
929
|
+
end
|
930
|
+
|
931
|
+
it "mongoizes the value" do
|
932
|
+
expect(product.price).to eq(1)
|
933
|
+
end
|
934
|
+
|
935
|
+
it "stores the value in the mongoized form" do
|
936
|
+
expect(product.attributes_before_type_cast["price"]).to eq(1)
|
937
|
+
end
|
938
|
+
end
|
728
939
|
end
|
729
940
|
|
730
941
|
describe "#defaults" do
|
@@ -861,7 +1072,7 @@ describe Mongoid::Fields do
|
|
861
1072
|
it "raises an error" do
|
862
1073
|
expect {
|
863
1074
|
Person.field(meth)
|
864
|
-
}.to raise_error(Mongoid::Errors::InvalidField)
|
1075
|
+
}.to raise_error(Mongoid::Errors::InvalidField, /Defining a field named '#{meth}' is not allowed/)
|
865
1076
|
end
|
866
1077
|
end
|
867
1078
|
end
|
@@ -988,7 +1199,7 @@ describe Mongoid::Fields do
|
|
988
1199
|
end
|
989
1200
|
|
990
1201
|
it "uses the alias to write the attribute" do
|
991
|
-
(person.alias =
|
1202
|
+
expect(person.alias = true).to be true
|
992
1203
|
end
|
993
1204
|
|
994
1205
|
it "uses the alias to read the attribute" do
|
@@ -1000,7 +1211,7 @@ describe Mongoid::Fields do
|
|
1000
1211
|
end
|
1001
1212
|
|
1002
1213
|
it "uses the name to write the attribute" do
|
1003
|
-
(person.aliased =
|
1214
|
+
expect(person.aliased = true).to be true
|
1004
1215
|
end
|
1005
1216
|
|
1006
1217
|
it "uses the name to read the attribute" do
|
@@ -1229,71 +1440,147 @@ describe Mongoid::Fields do
|
|
1229
1440
|
|
1230
1441
|
context "when a field is defined as a big decimal" do
|
1231
1442
|
|
1232
|
-
|
1233
|
-
|
1234
|
-
end
|
1235
|
-
|
1236
|
-
let(:decimal) do
|
1237
|
-
BigDecimal("1000000.00")
|
1238
|
-
end
|
1443
|
+
context 'when Mongoid.map_big_decimal_to_decimal128 is false' do
|
1444
|
+
config_override :map_big_decimal_to_decimal128, false
|
1239
1445
|
|
1240
|
-
|
1241
|
-
|
1242
|
-
before do
|
1243
|
-
band.sales = decimal
|
1446
|
+
let(:band) do
|
1447
|
+
Band.new(name: "Tool")
|
1244
1448
|
end
|
1245
1449
|
|
1246
|
-
|
1247
|
-
|
1450
|
+
let(:decimal) do
|
1451
|
+
BigDecimal("1000000.00")
|
1248
1452
|
end
|
1249
1453
|
|
1250
|
-
|
1251
|
-
|
1454
|
+
context "when setting to a big decimal" do
|
1455
|
+
|
1456
|
+
before do
|
1457
|
+
band.sales = decimal
|
1458
|
+
end
|
1459
|
+
|
1460
|
+
it "properly persists as a string" do
|
1461
|
+
expect(band.attributes["sales"]).to eq(decimal.to_s)
|
1462
|
+
end
|
1463
|
+
|
1464
|
+
it "returns the proper big decimal" do
|
1465
|
+
expect(band.sales).to eq(decimal)
|
1466
|
+
end
|
1252
1467
|
end
|
1253
|
-
end
|
1254
1468
|
|
1255
|
-
|
1469
|
+
context "when setting to a string" do
|
1256
1470
|
|
1257
|
-
|
1258
|
-
|
1471
|
+
before do
|
1472
|
+
band.sales = decimal.to_s
|
1473
|
+
end
|
1474
|
+
|
1475
|
+
it "properly persists as a string" do
|
1476
|
+
expect(band.attributes["sales"]).to eq(decimal.to_s)
|
1477
|
+
end
|
1478
|
+
|
1479
|
+
it "returns the proper big decimal" do
|
1480
|
+
expect(band.sales).to eq(decimal)
|
1481
|
+
end
|
1259
1482
|
end
|
1260
1483
|
|
1261
|
-
|
1262
|
-
|
1484
|
+
context "when setting to an integer" do
|
1485
|
+
|
1486
|
+
before do
|
1487
|
+
band.sales = decimal.to_i
|
1488
|
+
end
|
1489
|
+
|
1490
|
+
it "properly persists as a string" do
|
1491
|
+
expect(band.attributes["sales"]).to eq("1000000")
|
1492
|
+
end
|
1493
|
+
|
1494
|
+
it "returns the proper big decimal" do
|
1495
|
+
expect(band.sales).to eq(decimal)
|
1496
|
+
end
|
1263
1497
|
end
|
1264
1498
|
|
1265
|
-
|
1266
|
-
|
1499
|
+
context "when setting to a float" do
|
1500
|
+
|
1501
|
+
before do
|
1502
|
+
band.sales = decimal.to_f
|
1503
|
+
end
|
1504
|
+
|
1505
|
+
it "properly persists as a string" do
|
1506
|
+
expect(band.attributes["sales"]).to eq(decimal.to_s)
|
1507
|
+
end
|
1508
|
+
|
1509
|
+
it "returns the proper big decimal" do
|
1510
|
+
expect(band.sales).to eq(decimal)
|
1511
|
+
end
|
1267
1512
|
end
|
1268
1513
|
end
|
1269
1514
|
|
1270
|
-
context
|
1515
|
+
context 'when Mongoid.map_big_decimal_to_decimal128 is true' do
|
1516
|
+
config_override :map_big_decimal_to_decimal128, true
|
1271
1517
|
|
1272
|
-
|
1273
|
-
|
1518
|
+
let(:band) do
|
1519
|
+
Band.new(name: "Tool")
|
1274
1520
|
end
|
1275
1521
|
|
1276
|
-
|
1277
|
-
|
1522
|
+
let(:decimal) do
|
1523
|
+
BigDecimal("1000000.00")
|
1278
1524
|
end
|
1279
1525
|
|
1280
|
-
|
1281
|
-
|
1526
|
+
context "when setting to a big decimal" do
|
1527
|
+
|
1528
|
+
before do
|
1529
|
+
band.sales = decimal
|
1530
|
+
end
|
1531
|
+
|
1532
|
+
it "properly persists as a BSON::Decimal128" do
|
1533
|
+
expect(band.attributes["sales"]).to eq(BSON::Decimal128.new(decimal))
|
1534
|
+
end
|
1535
|
+
|
1536
|
+
it "returns the proper big decimal" do
|
1537
|
+
expect(band.sales).to eq(decimal)
|
1538
|
+
end
|
1282
1539
|
end
|
1283
|
-
end
|
1284
1540
|
|
1285
|
-
|
1541
|
+
context "when setting to a string" do
|
1286
1542
|
|
1287
|
-
|
1288
|
-
|
1543
|
+
before do
|
1544
|
+
band.sales = decimal.to_s
|
1545
|
+
end
|
1546
|
+
|
1547
|
+
it "persists as a BSON::Decimal128" do
|
1548
|
+
expect(band.attributes["sales"]).to eq(BSON::Decimal128.new(decimal.to_s))
|
1549
|
+
end
|
1550
|
+
|
1551
|
+
it "returns the proper big decimal" do
|
1552
|
+
expect(band.sales).to eq(decimal)
|
1553
|
+
end
|
1289
1554
|
end
|
1290
1555
|
|
1291
|
-
|
1292
|
-
|
1556
|
+
context "when setting to an integer" do
|
1557
|
+
|
1558
|
+
before do
|
1559
|
+
band.sales = decimal.to_i
|
1560
|
+
end
|
1561
|
+
|
1562
|
+
it "persists as a BSON::Decimal128" do
|
1563
|
+
expect(band.attributes["sales"]).to eq(BSON::Decimal128.new(decimal.to_i.to_s))
|
1564
|
+
end
|
1565
|
+
|
1566
|
+
it "returns the proper big decimal" do
|
1567
|
+
expect(band.sales).to eq(decimal)
|
1568
|
+
end
|
1293
1569
|
end
|
1294
1570
|
|
1295
|
-
|
1296
|
-
|
1571
|
+
context "when setting to a float" do
|
1572
|
+
|
1573
|
+
before do
|
1574
|
+
band.sales = decimal.to_f
|
1575
|
+
end
|
1576
|
+
|
1577
|
+
it "properly persists as a BSON::Decimal128" do
|
1578
|
+
expect(band.attributes["sales"]).to eq(BSON::Decimal128.new(decimal.to_f.to_s))
|
1579
|
+
end
|
1580
|
+
|
1581
|
+
it "returns the proper big decimal" do
|
1582
|
+
expect(band.sales).to eq(decimal)
|
1583
|
+
end
|
1297
1584
|
end
|
1298
1585
|
end
|
1299
1586
|
end
|
@@ -1620,6 +1907,33 @@ describe Mongoid::Fields do
|
|
1620
1907
|
it_behaves_like 'pre-fix database_field_name'
|
1621
1908
|
end
|
1622
1909
|
end
|
1910
|
+
|
1911
|
+
context 'when getting the database field name of a belongs_to associations' do
|
1912
|
+
# These tests only apply when the flag is not set
|
1913
|
+
config_override :broken_alias_handling, false
|
1914
|
+
|
1915
|
+
context "when the broken_alias_handling is not set" do
|
1916
|
+
context "when the association is the last item" do
|
1917
|
+
let(:name) do
|
1918
|
+
Game.database_field_name("person")
|
1919
|
+
end
|
1920
|
+
|
1921
|
+
it "gets the alias" do
|
1922
|
+
expect(name).to eq("person_id")
|
1923
|
+
end
|
1924
|
+
end
|
1925
|
+
|
1926
|
+
context "when the association is not the last item" do
|
1927
|
+
let(:name) do
|
1928
|
+
Game.database_field_name("person.name")
|
1929
|
+
end
|
1930
|
+
|
1931
|
+
it "gets the alias" do
|
1932
|
+
expect(name).to eq("person.name")
|
1933
|
+
end
|
1934
|
+
end
|
1935
|
+
end
|
1936
|
+
end
|
1623
1937
|
end
|
1624
1938
|
|
1625
1939
|
describe "#get_field" do
|
@@ -85,7 +85,7 @@ describe Mongoid::Findable do
|
|
85
85
|
it "raises an error" do
|
86
86
|
expect {
|
87
87
|
person.messages.find_by(body: 'bar')
|
88
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
88
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document not found for class Message with attributes/)
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
@@ -144,7 +144,7 @@ describe Mongoid::Findable do
|
|
144
144
|
it "raises an error" do
|
145
145
|
expect {
|
146
146
|
Person.find_by(ssn: "333-22-1111")
|
147
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
147
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document not found for class Person with attributes/)
|
148
148
|
end
|
149
149
|
end
|
150
150
|
|
@@ -213,7 +213,7 @@ describe Mongoid::Findable do
|
|
213
213
|
it "raises an error" do
|
214
214
|
expect {
|
215
215
|
Person.find_by!(ssn: "333-22-1111")
|
216
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
216
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document not found for class Person with attributes/)
|
217
217
|
end
|
218
218
|
end
|
219
219
|
end
|
@@ -229,6 +229,24 @@ describe Mongoid::Findable do
|
|
229
229
|
it "returns the first matching document" do
|
230
230
|
expect(Person.send(method)).to eq(person)
|
231
231
|
end
|
232
|
+
|
233
|
+
it "passes the limit through" do
|
234
|
+
expect(Person.last(1)).to eq([ person ])
|
235
|
+
end
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
describe "#last" do
|
240
|
+
let!(:person) do
|
241
|
+
Person.create!
|
242
|
+
end
|
243
|
+
|
244
|
+
it "returns the first matching document" do
|
245
|
+
expect(Person.last).to eq(person)
|
246
|
+
end
|
247
|
+
|
248
|
+
it "passes the limit through" do
|
249
|
+
expect(Person.last(1)).to eq([ person ])
|
232
250
|
end
|
233
251
|
end
|
234
252
|
|
@@ -472,7 +490,7 @@ describe Mongoid::Findable do
|
|
472
490
|
Band.pluck(:follows)
|
473
491
|
end
|
474
492
|
|
475
|
-
it "returns
|
493
|
+
it "returns an array with nil values" do
|
476
494
|
expect(plucked).to eq([nil, nil, nil])
|
477
495
|
end
|
478
496
|
end
|
@@ -521,10 +539,10 @@ describe Mongoid::Findable do
|
|
521
539
|
end
|
522
540
|
|
523
541
|
context 'when Mongoid is configured to use activesupport time zone' do
|
542
|
+
config_override :use_utc, false
|
543
|
+
config_override :use_activesupport_time_zone, true
|
524
544
|
|
525
545
|
before do
|
526
|
-
Mongoid.use_utc = false
|
527
|
-
Mongoid.use_activesupport_time_zone = true
|
528
546
|
Time.zone = "Asia/Kolkata"
|
529
547
|
end
|
530
548
|
|
@@ -534,8 +552,33 @@ describe Mongoid::Findable do
|
|
534
552
|
end
|
535
553
|
end
|
536
554
|
|
537
|
-
|
538
|
-
|
555
|
+
context 'when distinct does not demongoize' do
|
556
|
+
config_override :legacy_pluck_distinct, true
|
557
|
+
|
558
|
+
let(:distinct) do
|
559
|
+
User.distinct(:last_login).first
|
560
|
+
end
|
561
|
+
|
562
|
+
it 'uses activesupport time zone' do
|
563
|
+
distinct.should be_a(ActiveSupport::TimeWithZone)
|
564
|
+
expect(distinct.to_s).to eql(time.in_time_zone('Asia/Kolkata').to_s)
|
565
|
+
end
|
566
|
+
end
|
567
|
+
|
568
|
+
context 'when distinct demongoizes' do
|
569
|
+
config_override :legacy_pluck_distinct, false
|
570
|
+
|
571
|
+
let(:distinct) do
|
572
|
+
User.distinct(:last_login).first
|
573
|
+
end
|
574
|
+
|
575
|
+
it 'uses activesupport time zone' do
|
576
|
+
distinct.should be_a(DateTime)
|
577
|
+
# Time and DateTime have different stringifications:
|
578
|
+
# 2022-03-16T21:12:32+00:00
|
579
|
+
# 2022-03-16 21:12:32 UTC
|
580
|
+
expect(distinct.to_s).to eql(time.in_time_zone('Asia/Kolkata').to_datetime.to_s)
|
581
|
+
end
|
539
582
|
end
|
540
583
|
|
541
584
|
it 'loads other fields accurately' do
|
@@ -544,11 +587,8 @@ describe Mongoid::Findable do
|
|
544
587
|
end
|
545
588
|
|
546
589
|
context 'when Mongoid is not configured to use activesupport time zone' do
|
547
|
-
|
548
|
-
|
549
|
-
Mongoid.use_utc = true
|
550
|
-
Mongoid.use_activesupport_time_zone = false
|
551
|
-
end
|
590
|
+
config_override :use_utc, true
|
591
|
+
config_override :use_activesupport_time_zone, false
|
552
592
|
|
553
593
|
let!(:time) do
|
554
594
|
Time.now.tap do |t|
|
@@ -556,8 +596,33 @@ describe Mongoid::Findable do
|
|
556
596
|
end
|
557
597
|
end
|
558
598
|
|
559
|
-
|
560
|
-
|
599
|
+
context 'when distinct does not demongoize' do
|
600
|
+
config_override :legacy_pluck_distinct, true
|
601
|
+
|
602
|
+
let(:distinct) do
|
603
|
+
User.distinct(:last_login).first
|
604
|
+
end
|
605
|
+
|
606
|
+
it 'uses utc' do
|
607
|
+
distinct.should be_a(Time)
|
608
|
+
expect(distinct.to_s).to eql(time.utc.to_s)
|
609
|
+
end
|
610
|
+
end
|
611
|
+
|
612
|
+
context 'when distinct demongoizes' do
|
613
|
+
config_override :legacy_pluck_distinct, false
|
614
|
+
|
615
|
+
let(:distinct) do
|
616
|
+
User.distinct(:last_login).first
|
617
|
+
end
|
618
|
+
|
619
|
+
it 'uses utc' do
|
620
|
+
distinct.should be_a(DateTime)
|
621
|
+
# Time and DateTime have different stringifications:
|
622
|
+
# 2022-03-16T21:12:32+00:00
|
623
|
+
# 2022-03-16 21:12:32 UTC
|
624
|
+
expect(distinct.to_s).to eql(time.utc.to_datetime.to_s)
|
625
|
+
end
|
561
626
|
end
|
562
627
|
|
563
628
|
it 'loads other fields accurately' do
|