mongoid 7.6.2 → 8.0.1
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 +2 -0
- data/README.md +3 -3
- data/Rakefile +21 -85
- data/lib/config/locales/en.yml +46 -56
- data/lib/mongoid/association/accessors.rb +32 -3
- data/lib/mongoid/association/bindable.rb +48 -0
- data/lib/mongoid/association/builders.rb +4 -2
- data/lib/mongoid/association/depending.rb +4 -8
- data/lib/mongoid/association/eager_loadable.rb +29 -7
- data/lib/mongoid/association/embedded/batchable.rb +28 -5
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
- data/lib/mongoid/association/embedded/embedded_in.rb +2 -1
- 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 +40 -18
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +18 -4
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +21 -2
- data/lib/mongoid/association/macros.rb +2 -1
- data/lib/mongoid/association/many.rb +5 -0
- data/lib/mongoid/association/nested/many.rb +5 -39
- data/lib/mongoid/association/nested/nested_buildable.rb +0 -14
- data/lib/mongoid/association/proxy.rb +12 -0
- data/lib/mongoid/association/referenced/auto_save.rb +3 -2
- 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.rb +1 -1
- data/lib/mongoid/association/referenced/counter_cache.rb +8 -8
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +64 -11
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +4 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +10 -18
- data/lib/mongoid/association/referenced/has_many/proxy.rb +11 -107
- data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/has_one/proxy.rb +8 -11
- data/lib/mongoid/association/referenced/syncable.rb +2 -2
- data/lib/mongoid/association/relatable.rb +38 -4
- data/lib/mongoid/attributes/processing.rb +9 -2
- data/lib/mongoid/attributes.rb +30 -27
- data/lib/mongoid/cacheable.rb +2 -2
- data/lib/mongoid/changeable.rb +37 -2
- data/lib/mongoid/clients/factory.rb +0 -4
- data/lib/mongoid/clients/options.rb +4 -0
- data/lib/mongoid/clients/sessions.rb +2 -14
- data/lib/mongoid/config.rb +15 -73
- data/lib/mongoid/contextual/aggregable/memory.rb +22 -20
- data/lib/mongoid/contextual/aggregable/mongo.rb +1 -1
- data/lib/mongoid/contextual/map_reduce.rb +2 -2
- data/lib/mongoid/contextual/memory.rb +63 -47
- data/lib/mongoid/contextual/mongo.rb +173 -287
- data/lib/mongoid/contextual/none.rb +33 -15
- data/lib/mongoid/copyable.rb +32 -8
- data/lib/mongoid/criteria/includable.rb +24 -20
- data/lib/mongoid/criteria/marshalable.rb +10 -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 +1 -1
- 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 +1 -1
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -1
- 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/mergeable.rb +0 -12
- data/lib/mongoid/criteria/queryable/optional.rb +3 -9
- data/lib/mongoid/criteria/queryable/options.rb +1 -1
- data/lib/mongoid/criteria/queryable/selectable.rb +2 -133
- data/lib/mongoid/criteria/queryable/selector.rb +90 -5
- data/lib/mongoid/criteria/queryable/smash.rb +39 -6
- data/lib/mongoid/criteria/queryable/storable.rb +1 -1
- data/lib/mongoid/criteria/queryable.rb +11 -6
- data/lib/mongoid/criteria.rb +1 -28
- data/lib/mongoid/deprecable.rb +36 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +88 -33
- data/lib/mongoid/equality.rb +4 -4
- data/lib/mongoid/errors/document_not_found.rb +6 -2
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
- data/lib/mongoid/errors/invalid_field.rb +5 -1
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
- data/lib/mongoid/errors.rb +2 -3
- data/lib/mongoid/extensions/array.rb +8 -6
- 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/float.rb +4 -5
- data/lib/mongoid/extensions/hash.rb +13 -32
- data/lib/mongoid/extensions/integer.rb +4 -5
- data/lib/mongoid/extensions/object.rb +2 -0
- 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 +2 -13
- data/lib/mongoid/extensions/symbol.rb +3 -14
- data/lib/mongoid/extensions/time.rb +27 -16
- data/lib/mongoid/extensions/time_with_zone.rb +1 -2
- data/lib/mongoid/extensions.rb +1 -0
- data/lib/mongoid/factory.rb +42 -7
- data/lib/mongoid/fields/foreign_key.rb +7 -0
- data/lib/mongoid/fields/validators/macro.rb +3 -9
- data/lib/mongoid/fields.rb +49 -7
- data/lib/mongoid/findable.rb +21 -16
- data/lib/mongoid/indexable/specification.rb +1 -1
- data/lib/mongoid/indexable/validators/options.rb +4 -1
- data/lib/mongoid/interceptable.rb +69 -9
- data/lib/mongoid/matchable.rb +1 -6
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +5 -3
- data/lib/mongoid/matcher/regex.rb +9 -8
- data/lib/mongoid/matcher.rb +0 -1
- data/lib/mongoid/persistable/creatable.rb +14 -5
- data/lib/mongoid/persistable/updatable.rb +12 -5
- data/lib/mongoid/persistence_context.rb +8 -42
- data/lib/mongoid/query_cache.rb +6 -258
- data/lib/mongoid/railties/controller_runtime.rb +1 -1
- data/lib/mongoid/reloadable.rb +7 -3
- data/lib/mongoid/scopable.rb +9 -11
- data/lib/mongoid/selectable.rb +1 -2
- data/lib/mongoid/shardable.rb +11 -35
- data/lib/mongoid/stateful.rb +27 -1
- data/lib/mongoid/threaded.rb +0 -3
- data/lib/mongoid/timestamps/created.rb +1 -1
- data/lib/mongoid/timestamps/updated.rb +1 -1
- data/lib/mongoid/touchable.rb +2 -3
- data/lib/mongoid/traversable.rb +1 -0
- data/lib/mongoid/validatable/uniqueness.rb +2 -1
- data/lib/mongoid/version.rb +1 -5
- data/lib/mongoid/warnings.rb +3 -5
- data/lib/mongoid.rb +1 -0
- data/spec/config/mongoid.yml +16 -0
- data/spec/integration/app_spec.rb +8 -20
- 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/regex.yml +0 -21
- 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 +198 -8
- 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 +36 -51
- 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 +60 -156
- 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 +73 -198
- 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 +480 -27
- data/spec/mongoid/cacheable_spec.rb +3 -3
- data/spec/mongoid/changeable_spec.rb +130 -13
- data/spec/mongoid/clients/factory_spec.rb +22 -60
- data/spec/mongoid/clients/sessions_spec.rb +0 -38
- data/spec/mongoid/clients_spec.rb +2 -2
- data/spec/mongoid/config_spec.rb +52 -15
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +371 -231
- 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 +467 -156
- data/spec/mongoid/contextual/mongo_spec.rb +566 -426
- data/spec/mongoid/contextual/none_spec.rb +11 -19
- data/spec/mongoid/copyable_spec.rb +451 -2
- 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/bignum_spec.rb +1 -2
- 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/fixnum_spec.rb +1 -2
- 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 -2
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +77 -85
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +0 -200
- data/spec/mongoid/criteria/queryable/selector_spec.rb +16 -77
- data/spec/mongoid/criteria/queryable/storable_spec.rb +0 -72
- data/spec/mongoid/criteria_spec.rb +469 -1203
- 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 -236
- 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 +16 -19
- 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 +24 -0
- data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
- data/spec/mongoid/query_cache_spec.rb +1 -156
- data/spec/mongoid/reloadable_spec.rb +35 -2
- data/spec/mongoid/scopable_spec.rb +36 -34
- data/spec/mongoid/serializable_spec.rb +14 -7
- data/spec/mongoid/shardable_models.rb +0 -14
- data/spec/mongoid/shardable_spec.rb +61 -153
- 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/mongoid_spec.rb +1 -7
- data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
- data/spec/rails/mongoid_spec.rb +4 -16
- data/spec/shared/lib/mrss/cluster_config.rb +40 -5
- data/spec/shared/lib/mrss/constraints.rb +46 -7
- data/spec/shared/lib/mrss/docker_runner.rb +21 -17
- data/spec/shared/lib/mrss/eg_config_utils.rb +31 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +5 -15
- data/spec/shared/lib/mrss/lite_constraints.rb +2 -10
- data/spec/shared/lib/mrss/server_version_registry.rb +29 -18
- data/spec/shared/lib/mrss/spec_organizer.rb +3 -32
- data/spec/shared/lib/mrss/utils.rb +6 -28
- data/spec/shared/share/Dockerfile.erb +114 -38
- data/spec/shared/shlib/distro.sh +0 -10
- data/spec/shared/shlib/server.sh +83 -64
- data/spec/shared/shlib/set_env.sh +81 -16
- data/spec/support/constraints.rb +24 -0
- data/spec/support/expectations.rb +17 -20
- 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 +695 -650
- metadata.gz.sig +0 -0
- data/lib/mongoid/errors/eager_load.rb +0 -23
- data/lib/mongoid/errors/in_memory_regexp_timeout.rb +0 -26
- data/lib/mongoid/errors/invalid_value.rb +0 -17
- data/lib/mongoid/field_readable.rb +0 -70
- data/lib/mongoid/matcher/regexp_budget.rb +0 -389
- data/spec/integration/matcher_regexp_timeout_spec.rb +0 -215
- data/spec/integration/query_operator_guard_spec.rb +0 -89
- data/spec/mongoid/errors/eager_load_spec.rb +0 -31
- data/spec/mongoid/matcher/regexp_budget_spec.rb +0 -570
- data/spec/shared/CANDIDATE.md +0 -28
- data/spec/shared/lib/mrss/release/candidate.rb +0 -287
- data/spec/shared/lib/mrss/release/product_data.rb +0 -144
- data/spec/shared/lib/tasks/candidate.rake +0 -64
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require "spec_helper"
|
|
4
|
+
require_relative '../belongs_to_models.rb'
|
|
4
5
|
|
|
5
6
|
describe Mongoid::Association::Referenced::BelongsTo::Proxy do
|
|
6
7
|
|
|
@@ -1368,6 +1369,20 @@ describe Mongoid::Association::Referenced::BelongsTo::Proxy do
|
|
|
1368
1369
|
game.person.set_personal_data(ssn: '123', age: 25)
|
|
1369
1370
|
end.not_to raise_error
|
|
1370
1371
|
end
|
|
1372
|
+
end
|
|
1373
|
+
|
|
1374
|
+
# This is a very specific case, see MONGOID-5089 for more details.
|
|
1375
|
+
context "when required is false, child is an orphan, and parent has explicit _id" do
|
|
1376
|
+
let(:comment) { BTMComment.create! }
|
|
1377
|
+
let(:article) do
|
|
1378
|
+
BTMArticle.new(
|
|
1379
|
+
comment_ids: [comment.id],
|
|
1380
|
+
id: 1
|
|
1381
|
+
)
|
|
1382
|
+
end
|
|
1371
1383
|
|
|
1384
|
+
it "uses the correct explicit id" do
|
|
1385
|
+
expect(article.comments.first.article_id).to eq(1)
|
|
1386
|
+
end
|
|
1372
1387
|
end
|
|
1373
1388
|
end
|
|
@@ -2019,8 +2019,8 @@ describe Mongoid::Association::Referenced::BelongsTo do
|
|
|
2019
2019
|
|
|
2020
2020
|
describe '#foreign_key_check' do
|
|
2021
2021
|
|
|
2022
|
-
it 'returns the foreign_key followed by "
|
|
2023
|
-
expect(association.foreign_key_check).to eq('
|
|
2022
|
+
it 'returns the foreign_key followed by "_previously_changed?"' do
|
|
2023
|
+
expect(association.foreign_key_check).to eq('owner_object_id_previously_changed?')
|
|
2024
2024
|
end
|
|
2025
2025
|
end
|
|
2026
2026
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require "spec_helper"
|
|
4
|
-
require_relative "../has_and_belongs_to_many_models
|
|
4
|
+
require_relative "../has_and_belongs_to_many_models"
|
|
5
5
|
|
|
6
6
|
describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
7
7
|
|
|
@@ -2353,13 +2353,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2353
2353
|
end
|
|
2354
2354
|
end
|
|
2355
2355
|
|
|
2356
|
-
# Whether the conditions carry a pattern decides which branch of remove_all
|
|
2357
|
-
# runs, so anything that has to behave the same on both is exercised twice.
|
|
2358
|
-
conditions_variants = [
|
|
2359
|
-
[ 'no regular expression', nil ],
|
|
2360
|
-
[ 'a regular expression', { name: /Test/ } ]
|
|
2361
|
-
].freeze
|
|
2362
|
-
|
|
2363
2356
|
[ :delete_all, :destroy_all ].each do |method|
|
|
2364
2357
|
|
|
2365
2358
|
describe "##{method}" do
|
|
@@ -2402,6 +2395,10 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2402
2395
|
it "removes the ids from the foreign key" do
|
|
2403
2396
|
expect(person.preference_ids).to eq([ preference_two.id ])
|
|
2404
2397
|
end
|
|
2398
|
+
|
|
2399
|
+
it "sets the association locally" do
|
|
2400
|
+
expect(person.preferences).to eq([preference_two])
|
|
2401
|
+
end
|
|
2405
2402
|
end
|
|
2406
2403
|
|
|
2407
2404
|
context "when conditions are not provided" do
|
|
@@ -2428,46 +2425,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2428
2425
|
it "returns the number of documents deleted" do
|
|
2429
2426
|
expect(deleted).to eq(2)
|
|
2430
2427
|
end
|
|
2431
|
-
end
|
|
2432
2428
|
|
|
2433
|
-
|
|
2434
|
-
|
|
2435
|
-
# the base dirty, so which documents get unbound is visible here.
|
|
2436
|
-
# Only what the association already held is unbound, and that has to
|
|
2437
|
-
# hold whether or not the conditions carry a regular expression:
|
|
2438
|
-
# scanning under a regexp budget loads the association first, and
|
|
2439
|
-
# that load must not turn into an unbind of its own. See the note in
|
|
2440
|
-
# HasMany::Proxy#remove_all_bounded.
|
|
2441
|
-
let!(:person) do
|
|
2442
|
-
Person.create!.tap do |base|
|
|
2443
|
-
base.preferences.create!(name: 'Testing')
|
|
2444
|
-
base.preferences.create!(name: 'Test')
|
|
2445
|
-
end
|
|
2446
|
-
end
|
|
2447
|
-
|
|
2448
|
-
let(:ids) { person.preference_ids.dup }
|
|
2449
|
-
|
|
2450
|
-
conditions_variants.each do |description, conditions|
|
|
2451
|
-
context "when the conditions carry #{description}" do
|
|
2452
|
-
context 'when the association is already in memory' do
|
|
2453
|
-
it 'unbinds the deleted documents' do
|
|
2454
|
-
person.preferences.send(method, conditions)
|
|
2455
|
-
expect(person.preference_ids).to eq([])
|
|
2456
|
-
expect(person).to be_changed
|
|
2457
|
-
end
|
|
2458
|
-
end
|
|
2459
|
-
|
|
2460
|
-
context 'when the association has not been loaded' do
|
|
2461
|
-
let(:cold) { Person.find(person._id) }
|
|
2462
|
-
|
|
2463
|
-
it 'leaves the foreign keys alone' do
|
|
2464
|
-
expect(ids.length).to eq(2)
|
|
2465
|
-
cold.preferences.send(method, conditions)
|
|
2466
|
-
expect(cold.preference_ids).to eq(ids)
|
|
2467
|
-
expect(cold).not_to be_changed
|
|
2468
|
-
end
|
|
2469
|
-
end
|
|
2470
|
-
end
|
|
2429
|
+
it "sets the association locally" do
|
|
2430
|
+
expect(person.preferences).to eq([])
|
|
2471
2431
|
end
|
|
2472
2432
|
end
|
|
2473
2433
|
end
|
|
@@ -2556,7 +2516,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2556
2516
|
it "raises an error" do
|
|
2557
2517
|
expect {
|
|
2558
2518
|
preference
|
|
2559
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
2519
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Preference with id\(s\)/)
|
|
2560
2520
|
end
|
|
2561
2521
|
end
|
|
2562
2522
|
|
|
@@ -2571,7 +2531,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2571
2531
|
it "raises an error" do
|
|
2572
2532
|
expect {
|
|
2573
2533
|
person.preferences.find(BSON::ObjectId.new)
|
|
2574
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
2534
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Preference with id\(s\)/)
|
|
2575
2535
|
end
|
|
2576
2536
|
end
|
|
2577
2537
|
|
|
@@ -2620,7 +2580,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2620
2580
|
it "raises an error" do
|
|
2621
2581
|
expect {
|
|
2622
2582
|
preferences
|
|
2623
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
2583
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Preference with id\(s\)/)
|
|
2624
2584
|
end
|
|
2625
2585
|
end
|
|
2626
2586
|
|
|
@@ -2635,7 +2595,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2635
2595
|
it "raises an error" do
|
|
2636
2596
|
expect {
|
|
2637
2597
|
person.preferences.find([ BSON::ObjectId.new ])
|
|
2638
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
2598
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Preference with id\(s\)/)
|
|
2639
2599
|
end
|
|
2640
2600
|
end
|
|
2641
2601
|
|
|
@@ -3820,6 +3780,31 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3820
3780
|
end
|
|
3821
3781
|
end
|
|
3822
3782
|
|
|
3783
|
+
context "when accesing own _id from parent's foreign key in default" do
|
|
3784
|
+
let!(:contract) { HabtmmContract.create! }
|
|
3785
|
+
let!(:signature) { contract.signatures.create! }
|
|
3786
|
+
|
|
3787
|
+
it "is nil" do
|
|
3788
|
+
expect(signature.favorite_signature).to be nil
|
|
3789
|
+
end
|
|
3790
|
+
end
|
|
3791
|
+
|
|
3792
|
+
context "when setting an association on a model that uses the class_name option" do
|
|
3793
|
+
let!(:contract) { HabtmmContract.create! }
|
|
3794
|
+
let!(:signature) { HabtmmSignature.create!(contracts: [contract]) }
|
|
3795
|
+
|
|
3796
|
+
it "populates the inverse foreign key" do
|
|
3797
|
+
expect(signature.contracts.first.signature_ids).to eq([signature.id])
|
|
3798
|
+
end
|
|
3799
|
+
end
|
|
3800
|
+
|
|
3801
|
+
context "when there is a foreign key in the aliased associations" do
|
|
3802
|
+
it "has the correct aliases" do
|
|
3803
|
+
expect(Dog.aliased_associations["breed_ids"]).to eq("breeds")
|
|
3804
|
+
expect(Breed.aliased_associations["dog_ids"]).to eq("dogs")
|
|
3805
|
+
end
|
|
3806
|
+
end
|
|
3807
|
+
|
|
3823
3808
|
# This test is for MONGOID-5344 which tests that the initial call to
|
|
3824
3809
|
# signature_ids refers to the same array as subsequent calls to signature_ids.
|
|
3825
3810
|
# Prior to the change in that ticket, this test broke because the array
|
|
@@ -32,6 +32,8 @@ end
|
|
|
32
32
|
class HabtmmSignature
|
|
33
33
|
include Mongoid::Document
|
|
34
34
|
|
|
35
|
+
field :favorite_signature, default: ->{ contracts.first.signature_ids.first if contracts.first }
|
|
36
|
+
|
|
35
37
|
has_and_belongs_to_many :contracts, class_name: 'HabtmmContract'
|
|
36
38
|
|
|
37
39
|
field :name, type: String
|
|
@@ -65,3 +67,26 @@ class HabtmmAnimal
|
|
|
65
67
|
|
|
66
68
|
has_and_belongs_to_many :trainers, inverse_of: :animals, class_name: 'HabtmmTrainer', scope: -> { where(name: 'Dave') }
|
|
67
69
|
end
|
|
70
|
+
|
|
71
|
+
class HabtmmSchool
|
|
72
|
+
include Mongoid::Document
|
|
73
|
+
include Mongoid::Timestamps
|
|
74
|
+
|
|
75
|
+
has_and_belongs_to_many :students, class_name: 'HabtmmStudent'
|
|
76
|
+
|
|
77
|
+
field :after_destroy_triggered, default: false
|
|
78
|
+
|
|
79
|
+
accepts_nested_attributes_for :students, allow_destroy: true
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
class HabtmmStudent
|
|
83
|
+
include Mongoid::Document
|
|
84
|
+
include Mongoid::Timestamps
|
|
85
|
+
|
|
86
|
+
has_and_belongs_to_many :schools, class_name: 'HabtmmSchool'
|
|
87
|
+
|
|
88
|
+
after_destroy do |doc|
|
|
89
|
+
schools.first.update_attributes!(after_destroy_triggered: true) unless schools.empty?
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require "spec_helper"
|
|
4
|
+
require_relative "./has_and_belongs_to_many_models"
|
|
4
5
|
|
|
5
6
|
describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
6
7
|
|
|
@@ -1008,8 +1009,8 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
1008
1009
|
|
|
1009
1010
|
describe '#foreign_key_check' do
|
|
1010
1011
|
|
|
1011
|
-
it 'returns the foreign_key followed by "
|
|
1012
|
-
expect(association.foreign_key_check).to eq('
|
|
1012
|
+
it 'returns the foreign_key followed by "_previously_changed?"' do
|
|
1013
|
+
expect(association.foreign_key_check).to eq('has_many_right_object_ids_previously_changed?')
|
|
1013
1014
|
end
|
|
1014
1015
|
end
|
|
1015
1016
|
|
|
@@ -1060,6 +1061,13 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
1060
1061
|
expect(association.inverse_foreign_key).to eq('bar_ref')
|
|
1061
1062
|
end
|
|
1062
1063
|
end
|
|
1064
|
+
|
|
1065
|
+
context "when using a model that uses the class_name option" do
|
|
1066
|
+
let(:inverse_foreign_key) { HabtmmSchool.relations[:students].inverse_foreign_key }
|
|
1067
|
+
it "gets the correct inverse foreign key" do
|
|
1068
|
+
expect(inverse_foreign_key).to eq("school_ids")
|
|
1069
|
+
end
|
|
1070
|
+
end
|
|
1063
1071
|
end
|
|
1064
1072
|
|
|
1065
1073
|
describe '#inverse_foreign_key_setter' do
|
|
@@ -1068,4 +1076,29 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
1068
1076
|
expect(association.inverse_foreign_key_setter).to eq('has_many_left_object_ids=')
|
|
1069
1077
|
end
|
|
1070
1078
|
end
|
|
1079
|
+
|
|
1080
|
+
context "when adding an object to the association" do
|
|
1081
|
+
let!(:start_time) { Timecop.freeze(Time.at(Time.now.to_i)) }
|
|
1082
|
+
|
|
1083
|
+
let(:update_time) do
|
|
1084
|
+
Timecop.freeze(Time.at(Time.now.to_i) + 2)
|
|
1085
|
+
end
|
|
1086
|
+
|
|
1087
|
+
after do
|
|
1088
|
+
Timecop.return
|
|
1089
|
+
end
|
|
1090
|
+
|
|
1091
|
+
let!(:school) { HabtmmSchool.create! }
|
|
1092
|
+
let!(:student) { HabtmmStudent.create! }
|
|
1093
|
+
|
|
1094
|
+
before do
|
|
1095
|
+
update_time
|
|
1096
|
+
school.update(students: [student])
|
|
1097
|
+
end
|
|
1098
|
+
|
|
1099
|
+
it "updates the updated at" do
|
|
1100
|
+
pending "MONGOID-4953"
|
|
1101
|
+
expect(school.updated_at).to eq(update_time)
|
|
1102
|
+
end
|
|
1103
|
+
end
|
|
1071
1104
|
end
|
|
@@ -138,5 +138,114 @@ describe Mongoid::Association::Referenced::HasMany::Buildable do
|
|
|
138
138
|
end
|
|
139
139
|
end
|
|
140
140
|
end
|
|
141
|
+
|
|
142
|
+
context 'when the object is already associated with another object' do
|
|
143
|
+
|
|
144
|
+
context "when using <<" do
|
|
145
|
+
|
|
146
|
+
let(:person1) do
|
|
147
|
+
Person.new
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
let(:person2) do
|
|
151
|
+
Person.new
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
let(:drug) do
|
|
155
|
+
Drug.new
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
before do
|
|
159
|
+
person1.drugs << drug
|
|
160
|
+
person2.drugs << drug
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
it 'clears the object of its previous association' do
|
|
164
|
+
expect(person1.drugs).to eq([])
|
|
165
|
+
expect(person1.drug_ids).to eq([])
|
|
166
|
+
expect(person2.drugs).to eq([drug])
|
|
167
|
+
expect(person2.drug_ids).to eq([drug._id])
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
context "when using concat" do
|
|
172
|
+
|
|
173
|
+
let(:person1) do
|
|
174
|
+
Person.new
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
let(:person2) do
|
|
178
|
+
Person.new
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
let(:drug) do
|
|
182
|
+
Drug.new
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
before do
|
|
186
|
+
person1.drugs.concat([drug])
|
|
187
|
+
person2.drugs.concat([drug])
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
it 'clears the object of its previous association' do
|
|
191
|
+
expect(person1.drugs).to eq([])
|
|
192
|
+
expect(person1.drug_ids).to eq([])
|
|
193
|
+
expect(person2.drugs).to eq([drug])
|
|
194
|
+
expect(person2.drug_ids).to eq([drug._id])
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
context "when using =" do
|
|
199
|
+
|
|
200
|
+
let(:person1) do
|
|
201
|
+
Person.new
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
let(:person2) do
|
|
205
|
+
Person.new
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
let(:drug) do
|
|
209
|
+
Drug.new
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
before do
|
|
213
|
+
person1.drugs = [drug]
|
|
214
|
+
person2.drugs = [drug]
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
it 'clears the object of its previous association' do
|
|
218
|
+
expect(person1.drugs).to eq([])
|
|
219
|
+
expect(person1.drug_ids).to eq([])
|
|
220
|
+
expect(person2.drugs).to eq([drug])
|
|
221
|
+
expect(person2.drug_ids).to eq([drug._id])
|
|
222
|
+
end
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
context "when using = on the same document twice" do
|
|
226
|
+
|
|
227
|
+
let(:person1) do
|
|
228
|
+
Person.new
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
let(:person2) do
|
|
232
|
+
Person.new
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
let(:drug) do
|
|
236
|
+
Drug.new
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
before do
|
|
240
|
+
person1.drugs = [drug]
|
|
241
|
+
person1.drugs = [drug]
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
it 'clears the object of its previous association' do
|
|
245
|
+
expect(person1.drugs).to eq([drug])
|
|
246
|
+
expect(person1.drug_ids).to eq([drug._id])
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
end
|
|
141
250
|
end
|
|
142
251
|
end
|
|
@@ -1237,33 +1237,6 @@ describe Mongoid::Association::Referenced::HasMany::Enumerable do
|
|
|
1237
1237
|
end
|
|
1238
1238
|
end
|
|
1239
1239
|
|
|
1240
|
-
context 'when the id_sort option is none' do
|
|
1241
|
-
|
|
1242
|
-
let(:person) do
|
|
1243
|
-
Person.create!
|
|
1244
|
-
end
|
|
1245
|
-
|
|
1246
|
-
let(:criteria) do
|
|
1247
|
-
Post.where(person_id: person.id)
|
|
1248
|
-
end
|
|
1249
|
-
|
|
1250
|
-
let(:enumerable) do
|
|
1251
|
-
described_class.new(criteria)
|
|
1252
|
-
end
|
|
1253
|
-
|
|
1254
|
-
let!(:first_post) do
|
|
1255
|
-
person.posts.create!(title: "One")
|
|
1256
|
-
end
|
|
1257
|
-
|
|
1258
|
-
let!(:second_post) do
|
|
1259
|
-
person.posts.create!(title: "Two")
|
|
1260
|
-
end
|
|
1261
|
-
|
|
1262
|
-
it 'does not use the sort on id' do
|
|
1263
|
-
expect(enumerable.first(id_sort: :none)).to eq(first_post)
|
|
1264
|
-
end
|
|
1265
|
-
end
|
|
1266
|
-
|
|
1267
1240
|
context 'when including a limit' do
|
|
1268
1241
|
|
|
1269
1242
|
let(:person) do
|
|
@@ -1291,7 +1264,7 @@ describe Mongoid::Association::Referenced::HasMany::Enumerable do
|
|
|
1291
1264
|
end
|
|
1292
1265
|
end
|
|
1293
1266
|
|
|
1294
|
-
context 'when
|
|
1267
|
+
context 'when no parameters are provided' do
|
|
1295
1268
|
|
|
1296
1269
|
let(:person) do
|
|
1297
1270
|
Person.create!
|
|
@@ -1761,34 +1734,7 @@ describe Mongoid::Association::Referenced::HasMany::Enumerable do
|
|
|
1761
1734
|
end
|
|
1762
1735
|
end
|
|
1763
1736
|
|
|
1764
|
-
context 'when
|
|
1765
|
-
|
|
1766
|
-
let(:person) do
|
|
1767
|
-
Person.create!
|
|
1768
|
-
end
|
|
1769
|
-
|
|
1770
|
-
let(:criteria) do
|
|
1771
|
-
Post.where(person_id: person.id)
|
|
1772
|
-
end
|
|
1773
|
-
|
|
1774
|
-
let(:enumerable) do
|
|
1775
|
-
described_class.new(criteria)
|
|
1776
|
-
end
|
|
1777
|
-
|
|
1778
|
-
let!(:first_post) do
|
|
1779
|
-
person.posts.create!(title: "One")
|
|
1780
|
-
end
|
|
1781
|
-
|
|
1782
|
-
let!(:second_post) do
|
|
1783
|
-
person.posts.create!(title: "Two")
|
|
1784
|
-
end
|
|
1785
|
-
|
|
1786
|
-
it 'does not use the sort on id' do
|
|
1787
|
-
expect(enumerable.last(id_sort: :none)).to eq(first_post)
|
|
1788
|
-
end
|
|
1789
|
-
end
|
|
1790
|
-
|
|
1791
|
-
context 'when the id_sort option is not provided' do
|
|
1737
|
+
context 'when no parameters are provided' do
|
|
1792
1738
|
|
|
1793
1739
|
let(:person) do
|
|
1794
1740
|
Person.create!
|