mongoid 7.5.0 → 8.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.md +3 -3
- data/lib/config/locales/en.yml +47 -30
- 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 +53 -13
- 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 +50 -28
- 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 +2 -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 +66 -13
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +6 -3
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +20 -28
- data/lib/mongoid/association/referenced/has_many/proxy.rb +24 -18
- 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/paths/embedded/many.rb +19 -0
- data/lib/mongoid/attributes/dynamic.rb +3 -3
- data/lib/mongoid/attributes/nested.rb +5 -5
- data/lib/mongoid/attributes/processing.rb +10 -3
- 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/changeable.rb +42 -7
- 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/validators/client.rb +6 -6
- data/lib/mongoid/config.rb +27 -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 +59 -32
- data/lib/mongoid/contextual/mongo.rb +184 -256
- data/lib/mongoid/contextual/none.rb +34 -16
- 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 +2 -15
- 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 +0 -16
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -1
- 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 +3 -3
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -2
- 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/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 +5 -27
- data/lib/mongoid/criteria/queryable/selector.rb +92 -7
- data/lib/mongoid/criteria/queryable/smash.rb +40 -7
- data/lib/mongoid/criteria/queryable.rb +12 -7
- data/lib/mongoid/criteria/scopable.rb +2 -2
- data/lib/mongoid/criteria.rb +15 -37
- data/lib/mongoid/deprecable.rb +36 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +98 -36
- data/lib/mongoid/equality.rb +12 -12
- data/lib/mongoid/errors/document_not_found.rb +10 -6
- 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 +29 -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 +4 -5
- data/lib/mongoid/extensions/hash.rb +13 -6
- data/lib/mongoid/extensions/integer.rb +4 -5
- 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 +42 -7
- data/lib/mongoid/fields/foreign_key.rb +11 -4
- data/lib/mongoid/fields/localized.rb +2 -2
- data/lib/mongoid/fields/standard.rb +7 -7
- data/lib/mongoid/fields/validators/macro.rb +3 -9
- data/lib/mongoid/fields.rb +57 -15
- data/lib/mongoid/findable.rb +28 -22
- data/lib/mongoid/indexable/specification.rb +2 -2
- data/lib/mongoid/indexable/validators/options.rb +6 -2
- data/lib/mongoid/interceptable.rb +73 -13
- data/lib/mongoid/matchable.rb +1 -1
- data/lib/mongoid/matcher.rb +12 -7
- 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 +22 -5
- data/lib/mongoid/query_cache.rb +8 -260
- data/lib/mongoid/railties/controller_runtime.rb +1 -1
- data/lib/mongoid/reloadable.rb +7 -3
- data/lib/mongoid/scopable.rb +17 -15
- data/lib/mongoid/selectable.rb +1 -2
- data/lib/mongoid/serializable.rb +10 -6
- 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 +9 -9
- 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 +4 -3
- 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 +3 -4
- data/lib/mongoid.rb +1 -0
- 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 +226 -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 -15
- 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 +219 -8
- data/spec/mongoid/association/embedded/embeds_many_models.rb +157 -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 +67 -4
- 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 +2 -56
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +82 -13
- 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 +524 -27
- data/spec/mongoid/changeable_spec.rb +130 -13
- data/spec/mongoid/clients/factory_spec.rb +23 -30
- data/spec/mongoid/clients/sessions_spec.rb +0 -38
- data/spec/mongoid/clients_spec.rb +32 -2
- data/spec/mongoid/config_spec.rb +58 -13
- 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 +521 -14
- data/spec/mongoid/contextual/mongo_spec.rb +564 -394
- data/spec/mongoid/contextual/none_spec.rb +11 -19
- 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/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 +0 -484
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +50 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +77 -85
- data/spec/mongoid/criteria/queryable/selector_spec.rb +14 -2
- data/spec/mongoid/criteria_spec.rb +469 -1201
- data/spec/mongoid/document_fields_spec.rb +173 -24
- data/spec/mongoid/document_spec.rb +32 -41
- data/spec/mongoid/equality_spec.rb +12 -12
- data/spec/mongoid/errors/document_not_found_spec.rb +29 -2
- 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 +697 -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 +48 -76
- data/spec/mongoid/extensions/hash_spec.rb +30 -0
- data/spec/mongoid/extensions/integer_spec.rb +45 -66
- 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_spec.rb +321 -50
- data/spec/mongoid/findable_spec.rb +64 -29
- data/spec/mongoid/indexable/specification_spec.rb +2 -2
- data/spec/mongoid/indexable_spec.rb +39 -20
- data/spec/mongoid/interceptable_spec.rb +584 -5
- 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 +35 -2
- data/spec/mongoid/scopable_spec.rb +54 -16
- data/spec/mongoid/shardable_spec.rb +14 -0
- 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 +60 -31
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
- data/spec/rails/mongoid_spec.rb +4 -16
- data/spec/shared/lib/mrss/event_subscriber.rb +5 -15
- data/spec/support/constraints.rb +24 -0
- data/spec/support/macros.rb +30 -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/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 +1 -0
- data/spec/support/models/player.rb +2 -0
- data/spec/support/models/powerup.rb +12 -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 +0 -0
- metadata +49 -13
- 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
@@ -555,6 +555,56 @@ describe Mongoid::Changeable do
|
|
555
555
|
end
|
556
556
|
end
|
557
557
|
|
558
|
+
describe '#attribute_previously_was' do
|
559
|
+
let(:previous_title) do
|
560
|
+
"Grand Poobah"
|
561
|
+
end
|
562
|
+
|
563
|
+
let(:age) do
|
564
|
+
10
|
565
|
+
end
|
566
|
+
|
567
|
+
let(:person) do
|
568
|
+
Person.create!(title: previous_title, age: age)
|
569
|
+
end
|
570
|
+
|
571
|
+
let(:updated_title) do
|
572
|
+
"Captain Obvious"
|
573
|
+
end
|
574
|
+
|
575
|
+
before do
|
576
|
+
person.title = updated_title
|
577
|
+
person.save!
|
578
|
+
end
|
579
|
+
|
580
|
+
context 'when attribute changed' do
|
581
|
+
it "returns the old value" do
|
582
|
+
expect(person.send(:attribute_previously_was, "title")).to eq(previous_title)
|
583
|
+
end
|
584
|
+
|
585
|
+
it "allows access via (attribute)_was" do
|
586
|
+
expect(person.title_previously_was).to eq(previous_title)
|
587
|
+
end
|
588
|
+
end
|
589
|
+
|
590
|
+
context 'when attribute did not change' do
|
591
|
+
it "returns the same value" do
|
592
|
+
expect(person.send(:attribute_previously_was, "age")).to eq(age)
|
593
|
+
end
|
594
|
+
|
595
|
+
it "allows access via (attribute)_was" do
|
596
|
+
expect(person.age_previously_was).to eq(age)
|
597
|
+
end
|
598
|
+
end
|
599
|
+
|
600
|
+
it 'clears after reload' do
|
601
|
+
person.reload
|
602
|
+
expect(person.title_previously_was).to be_nil
|
603
|
+
expect(person.age_previously_was).to be_nil
|
604
|
+
end
|
605
|
+
|
606
|
+
end
|
607
|
+
|
558
608
|
describe "#attribute_will_change!" do
|
559
609
|
|
560
610
|
let(:aliases) do
|
@@ -962,12 +1012,69 @@ describe Mongoid::Changeable do
|
|
962
1012
|
person.user_accounts << user_account
|
963
1013
|
end
|
964
1014
|
|
965
|
-
it '
|
966
|
-
|
1015
|
+
it 'should not add to the changes or changed_attributes hash' do
|
1016
|
+
person.changes.should == {}
|
1017
|
+
person.changed_attributes.should == {}
|
1018
|
+
end
|
1019
|
+
end
|
1020
|
+
|
1021
|
+
context 'when habtm association _ids changes' do
|
967
1022
|
|
968
|
-
|
969
|
-
|
970
|
-
|
1023
|
+
let(:person) do
|
1024
|
+
Person.create!(title: "Grand Poobah")
|
1025
|
+
end
|
1026
|
+
|
1027
|
+
let(:user_account) do
|
1028
|
+
UserAccount.create!
|
1029
|
+
end
|
1030
|
+
|
1031
|
+
before do
|
1032
|
+
person.user_account_ids << user_account._id
|
1033
|
+
end
|
1034
|
+
|
1035
|
+
it 'should add to the changes or changed_attributes hash' do
|
1036
|
+
person.changes.should == { "user_account_ids" => [ nil, [ user_account._id ] ] }
|
1037
|
+
person.changed_attributes.should == { "user_account_ids" => nil }
|
1038
|
+
end
|
1039
|
+
end
|
1040
|
+
|
1041
|
+
context 'when assigning empty list to habtm association' do
|
1042
|
+
|
1043
|
+
let(:person) do
|
1044
|
+
Person.create!(title: "Grand Poobah", user_accounts: [user_account])
|
1045
|
+
end
|
1046
|
+
|
1047
|
+
let(:user_account) do
|
1048
|
+
UserAccount.create!
|
1049
|
+
end
|
1050
|
+
|
1051
|
+
before do
|
1052
|
+
person.user_accounts = []
|
1053
|
+
end
|
1054
|
+
|
1055
|
+
it 'should not add to the changes or changed_attributes hash' do
|
1056
|
+
person.changes.should == {}
|
1057
|
+
person.changed_attributes.should == {}
|
1058
|
+
end
|
1059
|
+
end
|
1060
|
+
|
1061
|
+
context 'when assigning empty list to habtm association _ids' do
|
1062
|
+
|
1063
|
+
let(:person) do
|
1064
|
+
Person.create!(title: "Grand Poobah", user_accounts: [user_account])
|
1065
|
+
end
|
1066
|
+
|
1067
|
+
let(:user_account) do
|
1068
|
+
UserAccount.create!
|
1069
|
+
end
|
1070
|
+
|
1071
|
+
before do
|
1072
|
+
person.user_account_ids = []
|
1073
|
+
end
|
1074
|
+
|
1075
|
+
it 'should not add to the changes or changed_attributes hash' do
|
1076
|
+
person.changes.should == { "user_account_ids" => [ [ user_account._id ], [] ] }
|
1077
|
+
person.changed_attributes.should == { "user_account_ids" => [ user_account._id ] }
|
971
1078
|
end
|
972
1079
|
end
|
973
1080
|
|
@@ -1649,21 +1756,26 @@ describe Mongoid::Changeable do
|
|
1649
1756
|
|
1650
1757
|
before do
|
1651
1758
|
Acolyte.set_callback(:save, :after, if: :callback_test?) do |doc|
|
1652
|
-
doc[:
|
1759
|
+
doc[:changed_in_after_callback] = doc.changes.dup
|
1760
|
+
end
|
1761
|
+
|
1762
|
+
Acolyte.set_callback(:save, :before, if: :callback_test?) do |doc|
|
1763
|
+
doc[:changed_in_before_callback] = doc.changes.dup
|
1653
1764
|
end
|
1654
1765
|
end
|
1655
1766
|
|
1656
1767
|
after do
|
1657
1768
|
Acolyte._save_callbacks.select do |callback|
|
1658
|
-
callback.kind
|
1769
|
+
[:before, :after].include?(callback.kind)
|
1659
1770
|
end.each do |callback|
|
1660
1771
|
Acolyte._save_callbacks.delete(callback)
|
1661
1772
|
end
|
1662
1773
|
end
|
1663
1774
|
|
1664
|
-
it "
|
1775
|
+
it "does not retain the changes until after all callbacks" do
|
1665
1776
|
acolyte.update_attribute(:status, "testing")
|
1666
|
-
expect(acolyte.
|
1777
|
+
expect(acolyte.changed_in_before_callback).to eq({"status"=>[nil, "testing"]})
|
1778
|
+
expect(acolyte.changed_in_after_callback).to eq({ })
|
1667
1779
|
end
|
1668
1780
|
end
|
1669
1781
|
|
@@ -1675,21 +1787,26 @@ describe Mongoid::Changeable do
|
|
1675
1787
|
|
1676
1788
|
before do
|
1677
1789
|
Acolyte.set_callback(:save, :after, if: :callback_test?) do |doc|
|
1678
|
-
doc[:
|
1790
|
+
doc[:changed_after_in_callback] = doc.changes.dup
|
1791
|
+
end
|
1792
|
+
|
1793
|
+
Acolyte.set_callback(:save, :before, if: :callback_test?) do |doc|
|
1794
|
+
doc[:changed_before_in_callback] = doc.changes.dup
|
1679
1795
|
end
|
1680
1796
|
end
|
1681
1797
|
|
1682
1798
|
after do
|
1683
1799
|
Acolyte._save_callbacks.select do |callback|
|
1684
|
-
callback.kind
|
1800
|
+
[:before, :after].include?(callback.kind)
|
1685
1801
|
end.each do |callback|
|
1686
1802
|
Acolyte._save_callbacks.delete(callback)
|
1687
1803
|
end
|
1688
1804
|
end
|
1689
1805
|
|
1690
|
-
it "
|
1806
|
+
it "does not retain the changes until after all callbacks" do
|
1691
1807
|
acolyte.save!
|
1692
|
-
expect(acolyte.
|
1808
|
+
expect(acolyte.changed_before_in_callback["name"]).to eq([ nil, "callback-test" ])
|
1809
|
+
expect(acolyte.changed_after_in_callback["name"]).to be_nil
|
1693
1810
|
end
|
1694
1811
|
end
|
1695
1812
|
end
|
@@ -65,10 +65,7 @@ describe Mongoid::Clients::Factory do
|
|
65
65
|
expect(client).to be_a(Mongo::Client)
|
66
66
|
end
|
67
67
|
|
68
|
-
context 'not
|
69
|
-
# Run this test on JRuby when driver 2.16.0 is released -
|
70
|
-
# see RUBY-2771.
|
71
|
-
fails_on_jruby
|
68
|
+
context 'on driver versions that do not report spurious EOF errors' do
|
72
69
|
|
73
70
|
it 'does not produce driver warnings' do
|
74
71
|
Mongo::Logger.logger.should_not receive(:warn)
|
@@ -86,35 +83,31 @@ describe Mongoid::Clients::Factory do
|
|
86
83
|
expect(client.options[:platform]).to eq(Mongoid::PLATFORM_DETAILS)
|
87
84
|
end
|
88
85
|
|
89
|
-
|
90
|
-
|
86
|
+
it 'sets Mongoid as a wrapping library' do
|
87
|
+
client.options[:wrapping_libraries].should == [BSON::Document.new(
|
88
|
+
Mongoid::Clients::Factory::MONGOID_WRAPPING_LIBRARY)]
|
89
|
+
end
|
91
90
|
|
92
|
-
|
93
|
-
client.options[:wrapping_libraries].should == [BSON::Document.new(
|
94
|
-
Mongoid::Clients::Factory::MONGOID_WRAPPING_LIBRARY)]
|
95
|
-
end
|
91
|
+
context 'when configuration specifies a wrapping library' do
|
96
92
|
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
{
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
wrapping_libraries: [{name: 'Foo'}],
|
107
|
-
},
|
108
|
-
}
|
93
|
+
let(:config) do
|
94
|
+
{
|
95
|
+
default: { hosts: SpecConfig.instance.addresses, database: database_id },
|
96
|
+
analytics: {
|
97
|
+
hosts: SpecConfig.instance.addresses,
|
98
|
+
database: database_id,
|
99
|
+
options: {
|
100
|
+
wrapping_libraries: [{name: 'Foo'}],
|
101
|
+
},
|
109
102
|
}
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
103
|
+
}
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'adds Mongoid as another wrapping library' do
|
107
|
+
client.options[:wrapping_libraries].should == [
|
108
|
+
BSON::Document.new(Mongoid::Clients::Factory::MONGOID_WRAPPING_LIBRARY),
|
109
|
+
{'name' => 'Foo'},
|
110
|
+
]
|
118
111
|
end
|
119
112
|
end
|
120
113
|
end
|
@@ -166,25 +166,6 @@ describe Mongoid::Clients::Sessions do
|
|
166
166
|
end
|
167
167
|
end
|
168
168
|
end
|
169
|
-
|
170
|
-
context 'when sessions are not supported' do
|
171
|
-
max_server_version '3.4'
|
172
|
-
|
173
|
-
let!(:error) do
|
174
|
-
e = nil
|
175
|
-
begin
|
176
|
-
Person.with_session {}
|
177
|
-
rescue => ex
|
178
|
-
e = ex
|
179
|
-
end
|
180
|
-
e
|
181
|
-
end
|
182
|
-
|
183
|
-
it 'raises a sessions not supported error' do
|
184
|
-
expect(error).to be_a(Mongoid::Errors::InvalidSessionUse)
|
185
|
-
expect(error.message).to include('not supported')
|
186
|
-
end
|
187
|
-
end
|
188
169
|
end
|
189
170
|
|
190
171
|
context 'when a session is used on a model instance' do
|
@@ -312,24 +293,5 @@ describe Mongoid::Clients::Sessions do
|
|
312
293
|
end
|
313
294
|
end
|
314
295
|
end
|
315
|
-
|
316
|
-
context 'when sessions are not supported' do
|
317
|
-
max_server_version '3.4'
|
318
|
-
|
319
|
-
let!(:error) do
|
320
|
-
e = nil
|
321
|
-
begin
|
322
|
-
person.with_session {}
|
323
|
-
rescue => ex
|
324
|
-
e = ex
|
325
|
-
end
|
326
|
-
e
|
327
|
-
end
|
328
|
-
|
329
|
-
it 'raises a sessions not supported error' do
|
330
|
-
expect(error).to be_a(Mongoid::Errors::InvalidSessionUse)
|
331
|
-
expect(error.message).to include('not supported')
|
332
|
-
end
|
333
|
-
end
|
334
296
|
end
|
335
297
|
end
|
@@ -802,7 +802,7 @@ describe Mongoid::Clients do
|
|
802
802
|
it "does not persist to the default database" do
|
803
803
|
expect {
|
804
804
|
Band.find(band.id)
|
805
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
805
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Band with id\(s\)/)
|
806
806
|
end
|
807
807
|
|
808
808
|
let(:from_db) do
|
@@ -840,7 +840,7 @@ describe Mongoid::Clients do
|
|
840
840
|
it "does not persist to the default database" do
|
841
841
|
expect {
|
842
842
|
Band.find(band.id)
|
843
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
843
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Band with id\(s\)/)
|
844
844
|
end
|
845
845
|
|
846
846
|
let(:from_db) do
|
@@ -1012,6 +1012,36 @@ describe Mongoid::Clients do
|
|
1012
1012
|
end
|
1013
1013
|
end
|
1014
1014
|
end
|
1015
|
+
|
1016
|
+
context 'when requesting named client' do
|
1017
|
+
let(:secondary_client) do
|
1018
|
+
double(Mongo::Client).tap do |client|
|
1019
|
+
allow(client).to receive(:cluster).and_return(double("cluster"))
|
1020
|
+
end
|
1021
|
+
end
|
1022
|
+
|
1023
|
+
before do
|
1024
|
+
expect(Mongoid::Clients::Factory).to receive(:create)
|
1025
|
+
.with(:secondary)
|
1026
|
+
.and_return(secondary_client)
|
1027
|
+
end
|
1028
|
+
|
1029
|
+
after do
|
1030
|
+
Mongoid::Clients.clients.delete(:secondary)
|
1031
|
+
end
|
1032
|
+
|
1033
|
+
it 'does not close the client' do
|
1034
|
+
expect(secondary_client).not_to receive(:close)
|
1035
|
+
|
1036
|
+
Band.with(client: :default) do |klass|
|
1037
|
+
klass.mongo_client
|
1038
|
+
end
|
1039
|
+
|
1040
|
+
Band.with(client: :secondary) do |klass|
|
1041
|
+
klass.mongo_client
|
1042
|
+
end
|
1043
|
+
end
|
1044
|
+
end
|
1015
1045
|
end
|
1016
1046
|
|
1017
1047
|
context "when overriding the default database" do
|
data/spec/mongoid/config_spec.rb
CHANGED
@@ -265,72 +265,86 @@ describe Mongoid::Config do
|
|
265
265
|
end
|
266
266
|
end
|
267
267
|
|
268
|
+
context 'when setting the map_big_decimal_to_decimal128 option in the config' do
|
269
|
+
let(:option) { :map_big_decimal_to_decimal128 }
|
270
|
+
let(:default) { true }
|
271
|
+
|
272
|
+
it_behaves_like "a config option"
|
273
|
+
end
|
274
|
+
|
268
275
|
context 'when setting the broken_updates option in the config' do
|
269
276
|
let(:option) { :broken_updates }
|
270
|
-
let(:default) {
|
277
|
+
let(:default) { false }
|
271
278
|
|
272
279
|
it_behaves_like "a config option"
|
273
280
|
end
|
274
281
|
|
275
282
|
context 'when setting the legacy_triple_equals option in the config' do
|
276
283
|
let(:option) { :legacy_triple_equals }
|
277
|
-
let(:default) {
|
284
|
+
let(:default) { false }
|
278
285
|
|
279
286
|
it_behaves_like "a config option"
|
280
287
|
end
|
281
288
|
|
282
289
|
context 'when setting the broken_scoping option in the config' do
|
283
290
|
let(:option) { :broken_scoping }
|
284
|
-
let(:default) {
|
291
|
+
let(:default) { false }
|
285
292
|
|
286
293
|
it_behaves_like "a config option"
|
287
294
|
end
|
288
295
|
|
289
296
|
context 'when setting the broken_aggregables option in the config' do
|
290
297
|
let(:option) { :broken_aggregables }
|
291
|
-
let(:default) {
|
298
|
+
let(:default) { false }
|
292
299
|
|
293
300
|
it_behaves_like "a config option"
|
294
301
|
end
|
295
302
|
|
296
303
|
context 'when setting the broken_alias_handling option in the config' do
|
297
304
|
let(:option) { :broken_alias_handling }
|
298
|
-
let(:default) {
|
305
|
+
let(:default) { false }
|
299
306
|
|
300
307
|
it_behaves_like "a config option"
|
301
308
|
end
|
302
309
|
|
303
310
|
context 'when setting the broken_and option in the config' do
|
304
311
|
let(:option) { :broken_and }
|
305
|
-
let(:default) {
|
312
|
+
let(:default) { false }
|
306
313
|
|
307
314
|
it_behaves_like "a config option"
|
308
315
|
end
|
309
316
|
|
310
317
|
context 'when setting the compare_time_by_ms option in the config' do
|
311
318
|
let(:option) { :compare_time_by_ms }
|
312
|
-
let(:default) {
|
319
|
+
let(:default) { true }
|
313
320
|
|
314
321
|
it_behaves_like "a config option"
|
315
322
|
end
|
316
323
|
|
317
324
|
context 'when setting the object_id_as_json_oid option in the config' do
|
318
325
|
let(:option) { :object_id_as_json_oid }
|
319
|
-
let(:default) {
|
326
|
+
let(:default) { false }
|
320
327
|
|
321
328
|
it_behaves_like "a config option"
|
322
329
|
end
|
323
330
|
|
324
331
|
context 'when setting the legacy_pluck_distinct option in the config' do
|
325
332
|
let(:option) { :legacy_pluck_distinct }
|
326
|
-
let(:default) {
|
333
|
+
let(:default) { false }
|
327
334
|
|
328
335
|
it_behaves_like "a config option"
|
329
336
|
end
|
330
337
|
|
331
338
|
context 'when setting the overwrite_chained_operators option in the config' do
|
332
339
|
let(:option) { :overwrite_chained_operators }
|
333
|
-
let(:default) {
|
340
|
+
let(:default) { false }
|
341
|
+
|
342
|
+
it_behaves_like "a config option"
|
343
|
+
end
|
344
|
+
|
345
|
+
context 'when setting the legacy_attributes option in the config' do
|
346
|
+
let(:option) { :legacy_attributes }
|
347
|
+
let(:default) { false }
|
334
348
|
|
335
349
|
it_behaves_like "a config option"
|
336
350
|
end
|
@@ -455,6 +469,40 @@ describe Mongoid::Config do
|
|
455
469
|
end
|
456
470
|
end
|
457
471
|
|
472
|
+
context "when provided an environment with driver options" do
|
473
|
+
|
474
|
+
before do
|
475
|
+
described_class.load!(file, :test)
|
476
|
+
end
|
477
|
+
|
478
|
+
after do
|
479
|
+
described_class.reset
|
480
|
+
end
|
481
|
+
|
482
|
+
it "sets the Mongo.broken_view_options option" do
|
483
|
+
expect(Mongo.broken_view_options).to eq(false)
|
484
|
+
end
|
485
|
+
|
486
|
+
it "does not override the unset Mongo.validate_update_replace option" do
|
487
|
+
expect(Mongo.validate_update_replace).to eq(false)
|
488
|
+
end
|
489
|
+
end
|
490
|
+
|
491
|
+
context "when provided an environment with a nil driver option" do
|
492
|
+
|
493
|
+
before do
|
494
|
+
described_class.load!(file, :test_nil)
|
495
|
+
end
|
496
|
+
|
497
|
+
after do
|
498
|
+
described_class.reset
|
499
|
+
end
|
500
|
+
|
501
|
+
it "sets the Mongo.broken_view_options option to nil" do
|
502
|
+
expect(Mongo.broken_view_options).to be_nil
|
503
|
+
end
|
504
|
+
end
|
505
|
+
|
458
506
|
context "when the rack environment is set" do
|
459
507
|
|
460
508
|
before do
|
@@ -549,9 +597,6 @@ describe Mongoid::Config do
|
|
549
597
|
|
550
598
|
let(:client) { Mongoid.default_client }
|
551
599
|
|
552
|
-
# Wrapping libraries are only recognized by driver 2.13.0+.
|
553
|
-
min_driver_version '2.13'
|
554
|
-
|
555
600
|
it 'passes uuid to driver' do
|
556
601
|
Mongo::Client.should receive(:new).with(SpecConfig.instance.addresses,
|
557
602
|
auto_encryption_options: {
|