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,36 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require "spec_helper"
|
|
4
|
+
require_relative '../association/referenced/has_many_models'
|
|
5
|
+
require_relative '../association/referenced/has_and_belongs_to_many_models'
|
|
6
|
+
require_relative './nested_spec_models'
|
|
4
7
|
|
|
5
8
|
describe Mongoid::Attributes::Nested do
|
|
6
9
|
|
|
7
|
-
# Expects the enclosing context to define `build_with_id`, taking an id
|
|
8
|
-
# value and returning the document built with it in nested attributes.
|
|
9
|
-
shared_examples 'rejects non-scalar ids' do |klass_name|
|
|
10
|
-
not_found = /not found for class #{klass_name}/
|
|
11
|
-
|
|
12
|
-
context 'when the id is an operator hash' do
|
|
13
|
-
it 'raises a document not found error' do
|
|
14
|
-
expect { build_with_id({ '$ne' => nil }) }
|
|
15
|
-
.to raise_error(Mongoid::Errors::DocumentNotFound, not_found)
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
context 'when the id is an array' do
|
|
20
|
-
it 'raises a document not found error' do
|
|
21
|
-
expect { build_with_id([BSON::ObjectId.new]) }
|
|
22
|
-
.to raise_error(Mongoid::Errors::DocumentNotFound, not_found)
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
context 'when the id is a malformed object id hash' do
|
|
27
|
-
it 'raises a document not found error' do
|
|
28
|
-
expect { build_with_id({ '$oid' => 'junk' }) }
|
|
29
|
-
.to raise_error(Mongoid::Errors::DocumentNotFound, not_found)
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
10
|
describe ".accepts_nested_attributes_for" do
|
|
35
11
|
|
|
36
12
|
context "when the autosave option is not defined" do
|
|
@@ -202,30 +178,6 @@ describe Mongoid::Attributes::Nested do
|
|
|
202
178
|
end
|
|
203
179
|
end
|
|
204
180
|
|
|
205
|
-
context 'when the id in the attributes is not a scalar' do
|
|
206
|
-
let(:person) { Person.create! }
|
|
207
|
-
|
|
208
|
-
def build_with_id(id)
|
|
209
|
-
person.update!(posts_attributes: { '0' => { id: id, title: 'Crafted' } })
|
|
210
|
-
end
|
|
211
|
-
|
|
212
|
-
context 'when the association is empty' do
|
|
213
|
-
include_examples 'rejects non-scalar ids', 'Post'
|
|
214
|
-
end
|
|
215
|
-
|
|
216
|
-
context 'when the association is not empty' do
|
|
217
|
-
before { person.posts.create!(title: 'Existing') }
|
|
218
|
-
|
|
219
|
-
include_examples 'rejects non-scalar ids', 'Post'
|
|
220
|
-
end
|
|
221
|
-
|
|
222
|
-
context 'when allow_reparenting_via_nested_attributes is true' do
|
|
223
|
-
config_override :allow_reparenting_via_nested_attributes, true
|
|
224
|
-
|
|
225
|
-
include_examples 'rejects non-scalar ids', 'Post'
|
|
226
|
-
end
|
|
227
|
-
end
|
|
228
|
-
|
|
229
181
|
context "when the relation is a references and referenced in many" do
|
|
230
182
|
|
|
231
183
|
before do
|
|
@@ -249,100 +201,16 @@ describe Mongoid::Attributes::Nested do
|
|
|
249
201
|
)
|
|
250
202
|
end
|
|
251
203
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
it 'raises a document not found error' do
|
|
256
|
-
expect { person }.to raise_error(Mongoid::Errors::DocumentNotFound,
|
|
257
|
-
/Document\(s\) not found for class Preference/)
|
|
258
|
-
end
|
|
259
|
-
end
|
|
260
|
-
|
|
261
|
-
context 'when allow_reparenting_via_nested_attributes is true' do
|
|
262
|
-
config_override :allow_reparenting_via_nested_attributes, true
|
|
263
|
-
|
|
264
|
-
it 'sets the nested attributes' do
|
|
265
|
-
expect(person.preferences.map(&:name)).to eq([preference.name])
|
|
266
|
-
end
|
|
267
|
-
|
|
268
|
-
it 'updates attributes of existing document which is added to relation' do
|
|
269
|
-
preference_name = 'updated preference'
|
|
270
|
-
person = Person.new(
|
|
271
|
-
preferences_attributes: { 0 => { id: preference.id, name: preference_name } }
|
|
272
|
-
)
|
|
273
|
-
expect(person.preferences.map(&:name)).to eq([preference_name])
|
|
274
|
-
end
|
|
275
|
-
|
|
276
|
-
context 'when the id does not correspond to an existing document' do
|
|
277
|
-
let(:person) do
|
|
278
|
-
Person.new(
|
|
279
|
-
preferences_attributes: { 0 => { id: BSON::ObjectId.new, name: 'Ghost' } }
|
|
280
|
-
)
|
|
281
|
-
end
|
|
282
|
-
|
|
283
|
-
context 'when raise_not_found_error is true' do
|
|
284
|
-
config_override :raise_not_found_error, true
|
|
285
|
-
|
|
286
|
-
it 'raises a document not found error' do
|
|
287
|
-
expect { person }.to raise_error(Mongoid::Errors::DocumentNotFound,
|
|
288
|
-
/Document\(s\) not found for class Preference/)
|
|
289
|
-
end
|
|
290
|
-
end
|
|
291
|
-
|
|
292
|
-
context 'when raise_not_found_error is false' do
|
|
293
|
-
config_override :raise_not_found_error, false
|
|
294
|
-
|
|
295
|
-
it 'raises a document not found error' do
|
|
296
|
-
expect { person }.to raise_error(Mongoid::Errors::DocumentNotFound,
|
|
297
|
-
/Document\(s\) not found for class Preference/)
|
|
298
|
-
end
|
|
299
|
-
end
|
|
300
|
-
end
|
|
301
|
-
end
|
|
302
|
-
|
|
303
|
-
context 'when _destroy is true for a document not in the relation' do
|
|
304
|
-
before do
|
|
305
|
-
Person.send(:undef_method, :preferences_attributes=)
|
|
306
|
-
Person.accepts_nested_attributes_for :preferences, allow_destroy: true
|
|
307
|
-
end
|
|
308
|
-
|
|
309
|
-
let(:person) do
|
|
310
|
-
Person.new(
|
|
311
|
-
preferences_attributes: { 0 => { id: preference.id, _destroy: '1' } }
|
|
312
|
-
)
|
|
313
|
-
end
|
|
314
|
-
|
|
315
|
-
it 'does not raise UnknownAttribute' do
|
|
316
|
-
expect { person }.not_to raise_error
|
|
317
|
-
end
|
|
318
|
-
|
|
319
|
-
it 'does not add the document to the relation' do
|
|
320
|
-
expect(person.preferences).to be_empty
|
|
321
|
-
end
|
|
322
|
-
end
|
|
323
|
-
end
|
|
324
|
-
|
|
325
|
-
context 'when the id in the attributes is not a scalar' do
|
|
326
|
-
let(:target) { Person.create! }
|
|
327
|
-
|
|
328
|
-
def build_with_id(id)
|
|
329
|
-
target.update!(preferences_attributes: { 0 => { id: id, name: 'Crafted' } })
|
|
330
|
-
end
|
|
331
|
-
|
|
332
|
-
context 'when the association is empty' do
|
|
333
|
-
include_examples 'rejects non-scalar ids', 'Preference'
|
|
334
|
-
end
|
|
335
|
-
|
|
336
|
-
context 'when the association is not empty' do
|
|
337
|
-
before { target.preferences.create!(name: 'Existing') }
|
|
338
|
-
|
|
339
|
-
include_examples 'rejects non-scalar ids', 'Preference'
|
|
204
|
+
it "sets the nested attributes" do
|
|
205
|
+
expect(person.preferences.map(&:name)).to eq([preference.name])
|
|
340
206
|
end
|
|
341
207
|
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
208
|
+
it "updates attributes of existing document which is added to relation" do
|
|
209
|
+
preference_name = 'updated preference'
|
|
210
|
+
person = Person.new(
|
|
211
|
+
preferences_attributes: { 0 => { id: preference.id, name: preference_name } }
|
|
212
|
+
)
|
|
213
|
+
expect(person.preferences.map(&:name)).to eq([preference_name])
|
|
346
214
|
end
|
|
347
215
|
end
|
|
348
216
|
end
|
|
@@ -1488,7 +1356,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
1488
1356
|
expect {
|
|
1489
1357
|
person.addresses_attributes =
|
|
1490
1358
|
{ "foo" => { "id" => "test", "street" => "Test" } }
|
|
1491
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
1359
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Address with id\(s\)/)
|
|
1492
1360
|
end
|
|
1493
1361
|
end
|
|
1494
1362
|
end
|
|
@@ -3147,7 +3015,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
3147
3015
|
{ "0" =>
|
|
3148
3016
|
{ "id" => BSON::ObjectId.new.to_s, "title" => "Rogue" }
|
|
3149
3017
|
}
|
|
3150
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
3018
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Post with id\(s\)/)
|
|
3151
3019
|
end
|
|
3152
3020
|
end
|
|
3153
3021
|
end
|
|
@@ -3181,7 +3049,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
3181
3049
|
expect {
|
|
3182
3050
|
person.posts_attributes =
|
|
3183
3051
|
{ "foo" => { "id" => "test", "title" => "Test" } }
|
|
3184
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
3052
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Post with id\(s\)/)
|
|
3185
3053
|
end
|
|
3186
3054
|
end
|
|
3187
3055
|
end
|
|
@@ -3898,7 +3766,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
3898
3766
|
expect {
|
|
3899
3767
|
person.preferences_attributes =
|
|
3900
3768
|
{ "foo" => { "id" => "test", "name" => "Test" } }
|
|
3901
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
3769
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Preference with id\(s\)/)
|
|
3902
3770
|
end
|
|
3903
3771
|
end
|
|
3904
3772
|
end
|
|
@@ -4530,13 +4398,6 @@ describe Mongoid::Attributes::Nested do
|
|
|
4530
4398
|
|
|
4531
4399
|
context "when nesting multiple levels and parent is timestamped" do
|
|
4532
4400
|
|
|
4533
|
-
around do |example|
|
|
4534
|
-
original_relations = Location.relations
|
|
4535
|
-
Location.embedded_in :address, touch: true
|
|
4536
|
-
example.run
|
|
4537
|
-
Location.relations = original_relations
|
|
4538
|
-
end
|
|
4539
|
-
|
|
4540
4401
|
after do
|
|
4541
4402
|
Address.reset_callbacks(:save)
|
|
4542
4403
|
end
|
|
@@ -5064,61 +4925,75 @@ describe Mongoid::Attributes::Nested do
|
|
|
5064
4925
|
end
|
|
5065
4926
|
end
|
|
5066
4927
|
|
|
5067
|
-
context
|
|
5068
|
-
let(:
|
|
5069
|
-
|
|
4928
|
+
context "when destroying has_many child using nested attributes" do
|
|
4929
|
+
let(:school) do
|
|
4930
|
+
School.create
|
|
4931
|
+
end
|
|
5070
4932
|
|
|
5071
|
-
|
|
5072
|
-
|
|
5073
|
-
|
|
5074
|
-
Person.accepts_nested_attributes_for :posts
|
|
5075
|
-
end
|
|
4933
|
+
let!(:student) do
|
|
4934
|
+
school.students.create
|
|
4935
|
+
end
|
|
5076
4936
|
|
|
5077
|
-
|
|
4937
|
+
before do
|
|
4938
|
+
school.attributes = {
|
|
4939
|
+
'_id': school.id,
|
|
4940
|
+
'students_attributes': [{
|
|
4941
|
+
'_id': student.id,
|
|
4942
|
+
'_destroy': 1
|
|
4943
|
+
}]
|
|
4944
|
+
}
|
|
4945
|
+
end
|
|
5078
4946
|
|
|
5079
|
-
|
|
5080
|
-
|
|
5081
|
-
|
|
5082
|
-
|
|
5083
|
-
end
|
|
4947
|
+
it "is able to access the parent in the after_destroy callback" do
|
|
4948
|
+
expect(school.after_destroy_triggered).to eq(true)
|
|
4949
|
+
end
|
|
4950
|
+
end
|
|
5084
4951
|
|
|
5085
|
-
|
|
5086
|
-
|
|
5087
|
-
|
|
5088
|
-
|
|
5089
|
-
end
|
|
4952
|
+
context "when destroying has_many child using nested attributes" do
|
|
4953
|
+
let(:school) do
|
|
4954
|
+
HabtmmSchool.create!(students: [student])
|
|
4955
|
+
end
|
|
5090
4956
|
|
|
5091
|
-
|
|
5092
|
-
|
|
5093
|
-
.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
5094
|
-
expect(victim_post.reload.title).to eq('Private')
|
|
5095
|
-
end
|
|
4957
|
+
let(:student) do
|
|
4958
|
+
HabtmmStudent.create!
|
|
5096
4959
|
end
|
|
5097
4960
|
|
|
5098
|
-
|
|
5099
|
-
|
|
5100
|
-
|
|
5101
|
-
|
|
5102
|
-
|
|
4961
|
+
before do
|
|
4962
|
+
student.schools << school
|
|
4963
|
+
school.attributes = {
|
|
4964
|
+
'_id': school.id,
|
|
4965
|
+
'students_attributes': [{
|
|
4966
|
+
'_id': student.id,
|
|
4967
|
+
'_destroy': 1
|
|
4968
|
+
}]
|
|
4969
|
+
}
|
|
4970
|
+
end
|
|
4971
|
+
|
|
4972
|
+
it "is able to access the parent in the after_destroy callback" do
|
|
4973
|
+
expect(school.reload.after_destroy_triggered).to eq(true)
|
|
4974
|
+
end
|
|
4975
|
+
end
|
|
5103
4976
|
|
|
5104
|
-
|
|
4977
|
+
context "when using a multi-leveled nested attribute on a referenced association" do
|
|
4978
|
+
let(:author) { NestedAuthor.create }
|
|
4979
|
+
let(:one_level_params) { { post_attributes: { title: 'test' } } }
|
|
4980
|
+
let(:two_levels_params) { { post_attributes: { comments_attributes: [ { body: 'test' } ] } } }
|
|
5105
4981
|
|
|
5106
|
-
|
|
5107
|
-
|
|
5108
|
-
|
|
5109
|
-
|
|
5110
|
-
end
|
|
4982
|
+
it "creates a 1st-depth child model" do
|
|
4983
|
+
author.update_attributes(one_level_params)
|
|
4984
|
+
expect(author.post.persisted?).to be true
|
|
4985
|
+
end
|
|
5111
4986
|
|
|
5112
|
-
|
|
5113
|
-
|
|
5114
|
-
|
|
5115
|
-
|
|
5116
|
-
end
|
|
4987
|
+
it "creates a 1st-depth child model, and a 2nd-depth child model" do
|
|
4988
|
+
author.update_attributes(two_levels_params)
|
|
4989
|
+
expect(author.post.comments.count).to eq 1
|
|
4990
|
+
end
|
|
5117
4991
|
|
|
5118
|
-
|
|
5119
|
-
|
|
5120
|
-
|
|
5121
|
-
|
|
4992
|
+
context "the 1st-depth child model already exists" do
|
|
4993
|
+
it "creates a 2nd-depth child model" do
|
|
4994
|
+
author.create_post(title: 'test')
|
|
4995
|
+
author.update_attributes(two_levels_params)
|
|
4996
|
+
expect(author.post.comments.count).to eq 1
|
|
5122
4997
|
end
|
|
5123
4998
|
end
|
|
5124
4999
|
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class NestedAuthor
|
|
4
|
+
include Mongoid::Document
|
|
5
|
+
|
|
6
|
+
field :name, type: String
|
|
7
|
+
has_one :post, class_name: "NestedPost"
|
|
8
|
+
accepts_nested_attributes_for :post
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class NestedComment
|
|
12
|
+
include Mongoid::Document
|
|
13
|
+
|
|
14
|
+
field :body, type: String
|
|
15
|
+
belongs_to :post, class_name: "NestedPost"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
class NestedPost
|
|
19
|
+
include Mongoid::Document
|
|
20
|
+
|
|
21
|
+
field :title, type: String
|
|
22
|
+
belongs_to :author, class_name: "NestedAuthor"
|
|
23
|
+
has_many :comments, class_name: "NestedComment"
|
|
24
|
+
accepts_nested_attributes_for :comments
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
class NestedBook
|
|
28
|
+
include Mongoid::Document
|
|
29
|
+
|
|
30
|
+
embeds_one :cover, class_name: "NestedCover"
|
|
31
|
+
embeds_many :pages, class_name: "NestedPage"
|
|
32
|
+
|
|
33
|
+
accepts_nested_attributes_for :cover, :pages
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
class NestedCover
|
|
37
|
+
include Mongoid::Document
|
|
38
|
+
|
|
39
|
+
field :title, type: String
|
|
40
|
+
embedded_in :book, class_name: "NestedBook"
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
class NestedPage
|
|
44
|
+
include Mongoid::Document
|
|
45
|
+
|
|
46
|
+
field :number, type: Integer
|
|
47
|
+
embedded_in :book, class_name: "NestedBook"
|
|
48
|
+
end
|
|
@@ -5,11 +5,7 @@ require "spec_helper"
|
|
|
5
5
|
describe Mongoid::Attributes::Projector do
|
|
6
6
|
Dir[File.join(File.dirname(__FILE__), 'projector_data', '*.yml')].sort.each do |path|
|
|
7
7
|
context File.basename(path) do
|
|
8
|
-
specs =
|
|
9
|
-
YAML.safe_load(File.read(path), [], [], true)
|
|
10
|
-
else
|
|
11
|
-
YAML.safe_load(File.read(path), aliases: true)
|
|
12
|
-
end
|
|
8
|
+
specs = YAML.safe_load(File.read(path), aliases: true)
|
|
13
9
|
|
|
14
10
|
specs.each do |spec|
|
|
15
11
|
context spec['name'] do
|