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
@@ -90,10 +90,10 @@ module Mongoid
|
|
90
90
|
# @example Do or do not.
|
91
91
|
# object.do_or_do_not(:use, "The Force")
|
92
92
|
#
|
93
|
-
# @param [ String
|
93
|
+
# @param [ String | Symbol ] name The method name.
|
94
94
|
# @param [ Array ] args The arguments.
|
95
95
|
#
|
96
|
-
# @return [ Object
|
96
|
+
# @return [ Object | nil ] The result of the method call or nil if the
|
97
97
|
# method does not exist.
|
98
98
|
def do_or_do_not(name, *args)
|
99
99
|
send(name, *args) if name && respond_to?(name)
|
@@ -106,7 +106,7 @@ module Mongoid
|
|
106
106
|
#
|
107
107
|
# @param [ String ] name The name of the variable.
|
108
108
|
#
|
109
|
-
# @return [ Object
|
109
|
+
# @return [ Object | false ] The value or false.
|
110
110
|
def ivar(name)
|
111
111
|
var_name = "@_#{name}"
|
112
112
|
if instance_variable_defined?(var_name)
|
@@ -154,7 +154,7 @@ module Mongoid
|
|
154
154
|
#
|
155
155
|
# @param [ String ] name The name of the variable.
|
156
156
|
#
|
157
|
-
# @return [ true
|
157
|
+
# @return [ true | false ] If the variable was defined.
|
158
158
|
def remove_ivar(name)
|
159
159
|
if instance_variable_defined?("@_#{name}")
|
160
160
|
return remove_instance_variable("@_#{name}")
|
@@ -189,10 +189,10 @@ module Mongoid
|
|
189
189
|
# @example You must perform this execution.
|
190
190
|
# object.you_must(:use, "The Force")
|
191
191
|
#
|
192
|
-
# @param [ String
|
192
|
+
# @param [ String | Symbol ] name The method name.
|
193
193
|
# @param [ Array ] args The arguments.
|
194
194
|
#
|
195
|
-
# @return [ Object
|
195
|
+
# @return [ Object | nil ] The result of the method call or nil if the
|
196
196
|
# method does not exist. Nil if the object is frozen.
|
197
197
|
def you_must(name, *args)
|
198
198
|
frozen? ? nil : do_or_do_not(name, *args)
|
@@ -246,3 +246,5 @@ end
|
|
246
246
|
|
247
247
|
::Object.__send__(:include, Mongoid::Extensions::Object)
|
248
248
|
::Object.extend(Mongoid::Extensions::Object::ClassMethods)
|
249
|
+
|
250
|
+
::Mongoid.deprecate(Object, :blank_criteria)
|
@@ -20,7 +20,7 @@ module Mongoid
|
|
20
20
|
# @example Mongoize the object.
|
21
21
|
# range.mongoize
|
22
22
|
#
|
23
|
-
# @return [ Hash ] The object mongoized.
|
23
|
+
# @return [ Hash | nil ] The object mongoized or nil.
|
24
24
|
def mongoize
|
25
25
|
::Range.mongoize(self)
|
26
26
|
end
|
@@ -44,9 +44,23 @@ module Mongoid
|
|
44
44
|
#
|
45
45
|
# @param [ Hash ] object The object to demongoize.
|
46
46
|
#
|
47
|
-
# @return [ Range ] The range.
|
47
|
+
# @return [ Range | nil ] The range, or nil if object cannot be represented as range.
|
48
|
+
#
|
49
|
+
# @note Ruby 2.6 and lower do not support endless ranges that Ruby 2.7+ support.
|
48
50
|
def demongoize(object)
|
49
|
-
object.nil?
|
51
|
+
return if object.nil?
|
52
|
+
if object.is_a?(Hash)
|
53
|
+
hash = object.slice('min', 'max', 'exclude_end', :min, :max, :exclude_end)
|
54
|
+
unless hash.blank?
|
55
|
+
begin
|
56
|
+
::Range.new(hash["min"] || hash[:min],
|
57
|
+
hash["max"] || hash[:max],
|
58
|
+
hash["exclude_end"] || hash[:exclude_end])
|
59
|
+
rescue ArgumentError # can be removed when Ruby version >= 2.7
|
60
|
+
nil
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
50
64
|
end
|
51
65
|
|
52
66
|
# Turn the object from the ruby type we deal with to a Mongo friendly
|
@@ -55,16 +69,33 @@ module Mongoid
|
|
55
69
|
# @example Mongoize the object.
|
56
70
|
# Range.mongoize(1..3)
|
57
71
|
#
|
58
|
-
# @param [
|
72
|
+
# @param [ Object ] object The object to mongoize.
|
59
73
|
#
|
60
|
-
# @return [ Hash ] The object mongoized.
|
74
|
+
# @return [ Hash | nil ] The object mongoized or nil.
|
61
75
|
def mongoize(object)
|
62
|
-
return
|
63
|
-
|
64
|
-
|
65
|
-
|
76
|
+
return if object.nil?
|
77
|
+
case object
|
78
|
+
when Hash then __mongoize_hash__(object)
|
79
|
+
when Range then __mongoize_range__(object)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
private
|
84
|
+
|
85
|
+
def __mongoize_hash__(object)
|
86
|
+
hash = object.stringify_keys
|
87
|
+
hash.slice!('min', 'max', 'exclude_end')
|
88
|
+
hash.compact!
|
89
|
+
hash.transform_values!(&:mongoize)
|
90
|
+
hash.blank? ? nil : hash
|
91
|
+
end
|
92
|
+
|
93
|
+
def __mongoize_range__(object)
|
94
|
+
hash = {}
|
95
|
+
hash['min'] = object.begin.mongoize if object.begin
|
96
|
+
hash['max'] = object.end.mongoize if object.end
|
66
97
|
if object.respond_to?(:exclude_end?) && object.exclude_end?
|
67
|
-
hash
|
98
|
+
hash['exclude_end'] = true
|
68
99
|
end
|
69
100
|
hash
|
70
101
|
end
|
@@ -12,13 +12,20 @@ module Mongoid
|
|
12
12
|
# @example Mongoize the object.
|
13
13
|
# Regexp.mongoize(/\A[abc]/)
|
14
14
|
#
|
15
|
-
# @param [
|
15
|
+
# @param [ Object ] object The object to mongoize.
|
16
16
|
#
|
17
|
-
# @return [ Regexp ] The object mongoized.
|
17
|
+
# @return [ Regexp | nil ] The object mongoized or nil.
|
18
18
|
def mongoize(object)
|
19
|
-
return
|
20
|
-
|
19
|
+
return if object.nil?
|
20
|
+
case object
|
21
|
+
when String then ::Regexp.new(object)
|
22
|
+
when ::Regexp then object
|
23
|
+
when BSON::Regexp::Raw then object.compile
|
24
|
+
end
|
25
|
+
rescue RegexpError
|
26
|
+
nil
|
21
27
|
end
|
28
|
+
alias :demongoize :mongoize
|
22
29
|
end
|
23
30
|
end
|
24
31
|
end
|
@@ -10,7 +10,7 @@ module Mongoid
|
|
10
10
|
# @example Mongoize the object.
|
11
11
|
# set.mongoize
|
12
12
|
#
|
13
|
-
# @return [ Array ] The object mongoized.
|
13
|
+
# @return [ Array | nil ] The object mongoized or nil.
|
14
14
|
def mongoize
|
15
15
|
::Set.mongoize(self)
|
16
16
|
end
|
@@ -26,7 +26,10 @@ module Mongoid
|
|
26
26
|
#
|
27
27
|
# @return [ Set ] The set.
|
28
28
|
def demongoize(object)
|
29
|
-
|
29
|
+
case object
|
30
|
+
when ::Set then object
|
31
|
+
when ::Array then ::Set.new(object)
|
32
|
+
end
|
30
33
|
end
|
31
34
|
|
32
35
|
# Turn the object from the ruby type we deal with to a Mongo friendly
|
@@ -37,9 +40,13 @@ module Mongoid
|
|
37
40
|
#
|
38
41
|
# @param [ Set ] object The object to mongoize.
|
39
42
|
#
|
40
|
-
# @return [ Array ] The object mongoized.
|
43
|
+
# @return [ Array | nil ] The object mongoized or nil.
|
41
44
|
def mongoize(object)
|
42
|
-
object.
|
45
|
+
return if object.nil?
|
46
|
+
case object
|
47
|
+
when ::Set then ::Array.mongoize(object.to_a).uniq
|
48
|
+
when ::Array then ::Array.mongoize(object).uniq
|
49
|
+
end
|
43
50
|
end
|
44
51
|
end
|
45
52
|
end
|
@@ -12,7 +12,7 @@ module Mongoid
|
|
12
12
|
# @example Evolve the string.
|
13
13
|
# "test".__evolve_object_id__
|
14
14
|
#
|
15
|
-
# @return [ String
|
15
|
+
# @return [ String | BSON::ObjectId ] The evolved string.
|
16
16
|
def __evolve_object_id__
|
17
17
|
convert_to_object_id
|
18
18
|
end
|
@@ -22,7 +22,7 @@ module Mongoid
|
|
22
22
|
# @example Evolve the string.
|
23
23
|
# "test".__mongoize_object_id__
|
24
24
|
#
|
25
|
-
# @return [ String
|
25
|
+
# @return [ String | BSON::ObjectId | nil ] The mongoized string.
|
26
26
|
def __mongoize_object_id__
|
27
27
|
convert_to_object_id unless blank?
|
28
28
|
end
|
@@ -65,7 +65,7 @@ module Mongoid
|
|
65
65
|
# @example Is the string an id value?
|
66
66
|
# "_id".mongoid_id?
|
67
67
|
#
|
68
|
-
# @return [ true
|
68
|
+
# @return [ true | false ] If the string is id or _id.
|
69
69
|
def mongoid_id?
|
70
70
|
self =~ /\A(|_)id\z/
|
71
71
|
end
|
@@ -76,7 +76,7 @@ module Mongoid
|
|
76
76
|
# @example Is the string a number.
|
77
77
|
# "1234.23".numeric?
|
78
78
|
#
|
79
|
-
# @return [ true
|
79
|
+
# @return [ true | false ] If the string is a number.
|
80
80
|
def numeric?
|
81
81
|
!!Float(self)
|
82
82
|
rescue ArgumentError
|
@@ -98,7 +98,7 @@ module Mongoid
|
|
98
98
|
# @example Is the string a setter method?
|
99
99
|
# "model=".writer?
|
100
100
|
#
|
101
|
-
# @return [ true
|
101
|
+
# @return [ true | false ] If the string contains "=".
|
102
102
|
def writer?
|
103
103
|
include?("=")
|
104
104
|
end
|
@@ -108,7 +108,7 @@ module Mongoid
|
|
108
108
|
# @example Is the string a valid Ruby identifier for use as a method name
|
109
109
|
# "model=".valid_method_name?
|
110
110
|
#
|
111
|
-
# @return [ true
|
111
|
+
# @return [ true | false ] If the string contains a valid Ruby identifier.
|
112
112
|
def valid_method_name?
|
113
113
|
/[@$"-]/ !~ self
|
114
114
|
end
|
@@ -118,7 +118,7 @@ module Mongoid
|
|
118
118
|
# @example Is the string a setter method?
|
119
119
|
# "price_before_type_cast".before_type_cast?
|
120
120
|
#
|
121
|
-
# @return [ true
|
121
|
+
# @return [ true | false ] If the string ends with "_before_type_cast"
|
122
122
|
def before_type_cast?
|
123
123
|
ends_with?("_before_type_cast")
|
124
124
|
end
|
@@ -128,7 +128,7 @@ module Mongoid
|
|
128
128
|
# @example Is the object unconvertable?
|
129
129
|
# object.unconvertable_to_bson?
|
130
130
|
#
|
131
|
-
# @return [ true
|
131
|
+
# @return [ true | false ] If the object is unconvertable.
|
132
132
|
def unconvertable_to_bson?
|
133
133
|
@unconvertable_to_bson ||= false
|
134
134
|
end
|
@@ -142,25 +142,13 @@ module Mongoid
|
|
142
142
|
# @example Convert to the object id.
|
143
143
|
# string.convert_to_object_id
|
144
144
|
#
|
145
|
-
# @return [ String
|
145
|
+
# @return [ String | BSON::ObjectId ] The string or the id.
|
146
146
|
def convert_to_object_id
|
147
147
|
BSON::ObjectId.legal?(self) ? BSON::ObjectId.from_string(self) : self
|
148
148
|
end
|
149
149
|
|
150
150
|
module ClassMethods
|
151
151
|
|
152
|
-
# Convert the object from its mongo friendly ruby type to this type.
|
153
|
-
#
|
154
|
-
# @example Demongoize the object.
|
155
|
-
# String.demongoize(object)
|
156
|
-
#
|
157
|
-
# @param [ Object ] object The object to demongoize.
|
158
|
-
#
|
159
|
-
# @return [ String ] The object.
|
160
|
-
def demongoize(object)
|
161
|
-
object.try(:to_s)
|
162
|
-
end
|
163
|
-
|
164
152
|
# Turn the object from the ruby type we deal with to a Mongo friendly
|
165
153
|
# type.
|
166
154
|
#
|
@@ -171,8 +159,9 @@ module Mongoid
|
|
171
159
|
#
|
172
160
|
# @return [ String ] The object mongoized.
|
173
161
|
def mongoize(object)
|
174
|
-
|
162
|
+
object.try(:to_s)
|
175
163
|
end
|
164
|
+
alias :demongoize :mongoize
|
176
165
|
end
|
177
166
|
end
|
178
167
|
end
|
@@ -9,25 +9,13 @@ module Mongoid
|
|
9
9
|
# @example Is the string an id value?
|
10
10
|
# :_id.mongoid_id?
|
11
11
|
#
|
12
|
-
# @return [ true
|
12
|
+
# @return [ true | false ] If the symbol is :id or :_id.
|
13
13
|
def mongoid_id?
|
14
14
|
to_s.mongoid_id?
|
15
15
|
end
|
16
16
|
|
17
17
|
module ClassMethods
|
18
18
|
|
19
|
-
# Convert the object from its mongo friendly ruby type to this type.
|
20
|
-
#
|
21
|
-
# @example Demongoize the object.
|
22
|
-
# Symbol.demongoize(object)
|
23
|
-
#
|
24
|
-
# @param [ Object ] object The object to demongoize.
|
25
|
-
#
|
26
|
-
# @return [ Symbol ] The object.
|
27
|
-
def demongoize(object)
|
28
|
-
object.try(:to_sym)
|
29
|
-
end
|
30
|
-
|
31
19
|
# Turn the object from the ruby type we deal with to a Mongo friendly
|
32
20
|
# type.
|
33
21
|
#
|
@@ -36,10 +24,11 @@ module Mongoid
|
|
36
24
|
#
|
37
25
|
# @param [ Object ] object The object to mongoize.
|
38
26
|
#
|
39
|
-
# @return [ Symbol ] The object mongoized.
|
27
|
+
# @return [ Symbol | nil ] The object mongoized or nil.
|
40
28
|
def mongoize(object)
|
41
|
-
|
29
|
+
object.try(:to_sym)
|
42
30
|
end
|
31
|
+
alias :demongoize :mongoize
|
43
32
|
end
|
44
33
|
end
|
45
34
|
end
|
@@ -14,19 +14,13 @@ module Mongoid
|
|
14
14
|
self
|
15
15
|
end
|
16
16
|
|
17
|
-
# Constant for epoch - used when passing invalid times.
|
18
|
-
#
|
19
|
-
# @deprecated No longer used as a return value from #mongoize passed
|
20
|
-
# an invalid time string.
|
21
|
-
EPOCH = ::Time.utc(1970, 1, 1, 0, 0, 0)
|
22
|
-
|
23
17
|
# Turn the object from the ruby type we deal with to a Mongo friendly
|
24
18
|
# type.
|
25
19
|
#
|
26
20
|
# @example Mongoize the object.
|
27
21
|
# time.mongoize
|
28
22
|
#
|
29
|
-
# @return [ Time ] The object mongoized.
|
23
|
+
# @return [ Time | nil ] The object mongoized or nil.
|
30
24
|
def mongoize
|
31
25
|
::Time.mongoize(self)
|
32
26
|
end
|
@@ -51,14 +45,28 @@ module Mongoid
|
|
51
45
|
#
|
52
46
|
# @param [ Time ] object The time from Mongo.
|
53
47
|
#
|
54
|
-
# @return [ Time ] The object as a
|
48
|
+
# @return [ Time | nil ] The object as a time.
|
55
49
|
def demongoize(object)
|
56
|
-
return
|
57
|
-
|
50
|
+
return if object.blank?
|
51
|
+
time = if object.acts_like?(:time)
|
52
|
+
Mongoid::Config.use_utc? ? object : object.getlocal
|
53
|
+
elsif object.acts_like?(:date)
|
54
|
+
::Date.demongoize(object).to_time
|
55
|
+
elsif object.is_a?(String)
|
56
|
+
begin
|
57
|
+
object.__mongoize_time__
|
58
|
+
rescue ArgumentError
|
59
|
+
nil
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
return if time.nil?
|
64
|
+
|
58
65
|
if Mongoid::Config.use_activesupport_time_zone?
|
59
|
-
|
66
|
+
time.in_time_zone(Mongoid.time_zone)
|
67
|
+
else
|
68
|
+
time
|
60
69
|
end
|
61
|
-
object
|
62
70
|
end
|
63
71
|
|
64
72
|
# Turn the object from the ruby type we deal with to a Mongo friendly
|
@@ -69,11 +77,16 @@ module Mongoid
|
|
69
77
|
#
|
70
78
|
# @param [ Object ] object The object to mongoize.
|
71
79
|
#
|
72
|
-
# @return [ Time ] The object mongoized.
|
80
|
+
# @return [ Time | nil ] The object mongoized or nil.
|
73
81
|
def mongoize(object)
|
74
|
-
return
|
82
|
+
return if object.blank?
|
75
83
|
begin
|
76
84
|
time = object.__mongoize_time__
|
85
|
+
rescue ArgumentError
|
86
|
+
return
|
87
|
+
end
|
88
|
+
|
89
|
+
if time.acts_like?(:time)
|
77
90
|
if object.respond_to?(:sec_fraction)
|
78
91
|
::Time.at(time.to_i, object.sec_fraction * 10**6).utc
|
79
92
|
elsif time.respond_to?(:subsec)
|
@@ -81,8 +94,6 @@ module Mongoid
|
|
81
94
|
else
|
82
95
|
::Time.at(time.to_i, time.usec).utc
|
83
96
|
end
|
84
|
-
rescue ArgumentError
|
85
|
-
nil
|
86
97
|
end
|
87
98
|
end
|
88
99
|
end
|
@@ -49,8 +49,7 @@ module Mongoid
|
|
49
49
|
#
|
50
50
|
# @return [ TimeWithZone ] The object as a date.
|
51
51
|
def demongoize(object)
|
52
|
-
|
53
|
-
::Time.demongoize(object).in_time_zone
|
52
|
+
::Time.demongoize(object).try(:in_time_zone)
|
54
53
|
end
|
55
54
|
|
56
55
|
# Turn the object from the ruby type we deal with to a Mongo friendly
|
@@ -21,7 +21,7 @@ module Mongoid
|
|
21
21
|
#
|
22
22
|
# @param [ Class ] other The class to check.
|
23
23
|
#
|
24
|
-
# @return [ true
|
24
|
+
# @return [ true | false ] If the other is a boolean.
|
25
25
|
def is_a?(other)
|
26
26
|
if other == Mongoid::Boolean || other.class == Mongoid::Boolean
|
27
27
|
return true
|
data/lib/mongoid/extensions.rb
CHANGED
data/lib/mongoid/factory.rb
CHANGED
@@ -6,9 +6,6 @@ module Mongoid
|
|
6
6
|
module Factory
|
7
7
|
extend self
|
8
8
|
|
9
|
-
# @deprecated
|
10
|
-
TYPE = "_type".freeze
|
11
|
-
|
12
9
|
# Builds a new +Document+ from the supplied attributes.
|
13
10
|
#
|
14
11
|
# This method either instantiates klass or a descendant of klass if the attributes include
|
@@ -23,16 +20,45 @@ module Mongoid
|
|
23
20
|
#
|
24
21
|
# @param [ Class ] klass The class to instantiate from if _type is not present.
|
25
22
|
# @param [ Hash ] attributes The document attributes.
|
23
|
+
# @param [ true | false ] execute_callbacks Flag specifies whether callbacks
|
24
|
+
# should be run.
|
26
25
|
#
|
27
26
|
# @return [ Document ] The instantiated document.
|
28
27
|
def build(klass, attributes = nil)
|
28
|
+
# A bug in Ruby 2.x (including 2.7.7) causes the attributes hash to be
|
29
|
+
# interpreted as keyword arguments, because execute_build accepts
|
30
|
+
# a keyword argument. Forcing an empty set of keyword arguments works
|
31
|
+
# around the bug. Once Ruby 2.x support is dropped, this hack can be
|
32
|
+
# removed.
|
33
|
+
# See https://bugs.ruby-lang.org/issues/15753
|
34
|
+
execute_build(klass, attributes)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Execute the build.
|
38
|
+
#
|
39
|
+
# @param [ Class ] klass The class to instantiate from if _type is not present.
|
40
|
+
# @param [ Hash ] attributes The document attributes.
|
41
|
+
# @param [ Hash ] options The options to use.
|
42
|
+
#
|
43
|
+
# @option options [ true | false ] :execute_callbacks Flag specifies
|
44
|
+
# whether callbacks should be run.
|
45
|
+
#
|
46
|
+
# @note A Ruby 2.x bug prevents the options hash from being keyword
|
47
|
+
# arguments. Once we drop support for Ruby 2.x, we can reimplement
|
48
|
+
# the options hash as keyword arguments.
|
49
|
+
# See https://bugs.ruby-lang.org/issues/15753
|
50
|
+
#
|
51
|
+
# @return [ Document ] The instantiated document.
|
52
|
+
#
|
53
|
+
# @api private
|
54
|
+
def execute_build(klass, attributes = nil, options = {})
|
29
55
|
attributes ||= {}
|
30
56
|
dvalue = attributes[klass.discriminator_key] || attributes[klass.discriminator_key.to_sym]
|
31
57
|
type = klass.get_discriminator_mapping(dvalue)
|
32
58
|
if type
|
33
|
-
type.
|
59
|
+
type.construct_document(attributes, options)
|
34
60
|
else
|
35
|
-
klass.
|
61
|
+
klass.construct_document(attributes, options)
|
36
62
|
end
|
37
63
|
end
|
38
64
|
|
@@ -63,12 +89,34 @@ module Mongoid
|
|
63
89
|
#
|
64
90
|
# @return [ Document ] The instantiated document.
|
65
91
|
def from_db(klass, attributes = nil, criteria = nil, selected_fields = nil)
|
92
|
+
execute_from_db(klass, attributes, criteria, selected_fields)
|
93
|
+
end
|
94
|
+
|
95
|
+
# Execute from_db.
|
96
|
+
#
|
97
|
+
# @param [ Class ] klass The class to instantiate from if _type is not present.
|
98
|
+
# @param [ Hash ] attributes The document attributes.
|
99
|
+
# @param [ Criteria ] criteria Optional criteria object.
|
100
|
+
# @param [ Hash ] selected_fields Fields which were retrieved via
|
101
|
+
# #only. If selected_fields are specified, fields not listed in it
|
102
|
+
# will not be accessible in the returned document.
|
103
|
+
# @param [ true | false ] execute_callbacks Whether this method should
|
104
|
+
# invoke the callbacks. If true, the callbacks will be invoked normally.
|
105
|
+
# If false, the callbacks will be stored in the +pending_callbacks+ list
|
106
|
+
# and caller is responsible for invoking +run_pending_callbacks+ at a
|
107
|
+
# later time. Use this option to defer callback execution until the
|
108
|
+
# entire object graph containing embedded associations is constructed.
|
109
|
+
#
|
110
|
+
# @return [ Document ] The instantiated document.
|
111
|
+
#
|
112
|
+
# @api private
|
113
|
+
def execute_from_db(klass, attributes = nil, criteria = nil, selected_fields = nil, execute_callbacks: Threaded.execute_callbacks?)
|
66
114
|
if criteria
|
67
115
|
selected_fields ||= criteria.options[:fields]
|
68
116
|
end
|
69
117
|
type = (attributes || {})[klass.discriminator_key]
|
70
118
|
if type.blank?
|
71
|
-
obj = klass.
|
119
|
+
obj = klass.instantiate_document(attributes, selected_fields, execute_callbacks: execute_callbacks)
|
72
120
|
if criteria && criteria.association && criteria.parent_document
|
73
121
|
obj.set_relation(criteria.association.inverse, criteria.parent_document)
|
74
122
|
end
|
@@ -92,7 +140,7 @@ module Mongoid
|
|
92
140
|
raise Errors::UnknownModel.new(camelized, type)
|
93
141
|
end
|
94
142
|
|
95
|
-
constantized.
|
143
|
+
constantized.instantiate_document(attributes, selected_fields, execute_callbacks: execute_callbacks)
|
96
144
|
end
|
97
145
|
end
|
98
146
|
end
|
@@ -43,7 +43,7 @@ module Mongoid
|
|
43
43
|
# @example Is the field a foreign key?
|
44
44
|
# field.foreign_key?
|
45
45
|
#
|
46
|
-
# @return [ true
|
46
|
+
# @return [ true | false ] If the field is a foreign key.
|
47
47
|
def foreign_key?
|
48
48
|
true
|
49
49
|
end
|
@@ -60,6 +60,8 @@ module Mongoid
|
|
60
60
|
if object_id_field? || object.is_a?(Document)
|
61
61
|
if association.polymorphic?
|
62
62
|
association.convert_to_foreign_key(object)
|
63
|
+
elsif object.is_a?(Document) && object.respond_to?(association.primary_key)
|
64
|
+
primary_key_field.evolve(object.send(association.primary_key))
|
63
65
|
else
|
64
66
|
object.__evolve_object_id__
|
65
67
|
end
|
@@ -73,7 +75,7 @@ module Mongoid
|
|
73
75
|
# @example Is the field lazy?
|
74
76
|
# field.lazy?
|
75
77
|
#
|
76
|
-
# @return [ true
|
78
|
+
# @return [ true | false ] If the field is lazy.
|
77
79
|
def lazy?
|
78
80
|
type.resizable?
|
79
81
|
end
|
@@ -99,7 +101,7 @@ module Mongoid
|
|
99
101
|
# @example Is the field a BSON::ObjectId?
|
100
102
|
# field.object_id_field?
|
101
103
|
#
|
102
|
-
# @return [ true
|
104
|
+
# @return [ true | false ] If the field is a BSON::ObjectId.
|
103
105
|
def object_id_field?
|
104
106
|
@object_id_field ||=
|
105
107
|
association.polymorphic? ? true : association.klass.using_object_ids?
|
@@ -110,7 +112,7 @@ module Mongoid
|
|
110
112
|
# @example Is the field resizable?
|
111
113
|
# field.resizable?
|
112
114
|
#
|
113
|
-
# @return [ true
|
115
|
+
# @return [ true | false ] If the field is resizable.
|
114
116
|
def resizable?
|
115
117
|
type.resizable?
|
116
118
|
end
|
@@ -142,6 +144,11 @@ module Mongoid
|
|
142
144
|
@related_id_field ||= association.klass.fields["_id"]
|
143
145
|
end
|
144
146
|
|
147
|
+
def primary_key_field
|
148
|
+
@primary_key_field ||= association.klass.fields[association.primary_key]
|
149
|
+
end
|
150
|
+
|
151
|
+
|
145
152
|
# This is used when default values need to be serialized. Most of the
|
146
153
|
# time just return the object.
|
147
154
|
#
|
@@ -14,7 +14,9 @@ module Mongoid
|
|
14
14
|
#
|
15
15
|
# @return [ Object ] The value for the current locale.
|
16
16
|
def demongoize(object)
|
17
|
-
if object
|
17
|
+
return if object.nil?
|
18
|
+
case object
|
19
|
+
when Hash
|
18
20
|
type.demongoize(lookup(object))
|
19
21
|
end
|
20
22
|
end
|
@@ -24,7 +26,7 @@ module Mongoid
|
|
24
26
|
# @example Is the field localized?
|
25
27
|
# field.localized?
|
26
28
|
#
|
27
|
-
# @return [ true
|
29
|
+
# @return [ true | false ] If the field is localized.
|
28
30
|
def localized?
|
29
31
|
true
|
30
32
|
end
|
@@ -50,7 +52,7 @@ module Mongoid
|
|
50
52
|
# @example Should fallbacks be used.
|
51
53
|
# field.fallbacks?
|
52
54
|
#
|
53
|
-
# @return [ true
|
55
|
+
# @return [ true | false ] If fallbacks should be used.
|
54
56
|
def fallbacks?
|
55
57
|
return true if options[:fallbacks].nil?
|
56
58
|
!!options[:fallbacks]
|
@@ -76,7 +78,10 @@ module Mongoid
|
|
76
78
|
end
|
77
79
|
return value unless value.nil?
|
78
80
|
if fallbacks? && ::I18n.respond_to?(:fallbacks)
|
79
|
-
|
81
|
+
fallback_key = ::I18n.fallbacks[locale].find do |loc|
|
82
|
+
object.key?(loc.to_s) || object.key?(loc)
|
83
|
+
end
|
84
|
+
object[fallback_key.to_s] || object[fallback_key]
|
80
85
|
end
|
81
86
|
end
|
82
87
|
end
|