mongoid 7.6.0 → 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 -30
- 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/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 +2 -1
- 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 +12 -9
- 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/options.rb +4 -0
- data/lib/mongoid/clients/sessions.rb +2 -14
- data/lib/mongoid/config.rb +15 -11
- data/lib/mongoid/contextual/aggregable/memory.rb +23 -15
- data/lib/mongoid/contextual/aggregable/mongo.rb +1 -1
- data/lib/mongoid/contextual/map_reduce.rb +2 -2
- data/lib/mongoid/contextual/memory.rb +55 -28
- 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/optional.rb +3 -9
- data/lib/mongoid/criteria/queryable/options.rb +1 -1
- data/lib/mongoid/criteria/queryable/selectable.rb +2 -24
- 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 -2
- 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 +12 -5
- 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/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/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 -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 +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 +38 -5
- 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 +62 -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 +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 +23 -30
- 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 +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 +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 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +77 -85
- 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 -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 +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/docker_runner.rb +1 -8
- 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 +24 -17
- 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 +107 -33
- data/spec/shared/shlib/distro.sh +0 -10
- data/spec/shared/shlib/server.sh +33 -64
- data/spec/shared/shlib/set_env.sh +71 -12
- 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 -641
- metadata.gz.sig +0 -0
- data/lib/mongoid/errors/eager_load.rb +0 -23
- data/lib/mongoid/errors/invalid_value.rb +0 -17
- data/spec/mongoid/errors/eager_load_spec.rb +0 -31
- data/spec/shared/CANDIDATE.md +0 -28
- data/spec/shared/lib/mrss/release/candidate.rb +0 -281
- data/spec/shared/lib/mrss/release/product_data.rb +0 -144
- data/spec/shared/lib/tasks/candidate.rake +0 -64
|
@@ -133,7 +133,7 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
|
|
|
133
133
|
it "detaches the previous relation" do
|
|
134
134
|
expect {
|
|
135
135
|
game.reload
|
|
136
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
136
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Game with id\(s\)/)
|
|
137
137
|
end
|
|
138
138
|
end
|
|
139
139
|
end
|
|
@@ -1139,4 +1139,110 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
|
|
|
1139
1139
|
end
|
|
1140
1140
|
end
|
|
1141
1141
|
end
|
|
1142
|
+
|
|
1143
|
+
context "when there is a foreign key in the aliased associations" do
|
|
1144
|
+
it "has the correct aliases" do
|
|
1145
|
+
# Instances of Driver do not respond to vehicle_id.
|
|
1146
|
+
expect(Driver.aliased_associations.key?("vehicle_id")).to be false
|
|
1147
|
+
expect(Vehicle.aliased_associations.key?("driver_id")).to be false
|
|
1148
|
+
expect(Vehicle.aliased_fields["driver"]).to eq("driver_id")
|
|
1149
|
+
end
|
|
1150
|
+
end
|
|
1151
|
+
|
|
1152
|
+
context "when the document is not persisted and the association is invalid" do
|
|
1153
|
+
|
|
1154
|
+
before do
|
|
1155
|
+
class HomParent
|
|
1156
|
+
include Mongoid::Document
|
|
1157
|
+
has_one :child, class_name: "HomChild"
|
|
1158
|
+
field :name
|
|
1159
|
+
validates :name, presence: true
|
|
1160
|
+
end
|
|
1161
|
+
|
|
1162
|
+
class HomChild; include Mongoid::Document; end
|
|
1163
|
+
|
|
1164
|
+
belongs_to
|
|
1165
|
+
child.parent = parent
|
|
1166
|
+
child.save
|
|
1167
|
+
end
|
|
1168
|
+
|
|
1169
|
+
after do
|
|
1170
|
+
Object.send(:remove_const, :HomParent)
|
|
1171
|
+
Object.send(:remove_const, :HomChild)
|
|
1172
|
+
end
|
|
1173
|
+
|
|
1174
|
+
let(:belongs_to) do
|
|
1175
|
+
HomChild.belongs_to :parent, autosave: true, validate: false, optional: optional
|
|
1176
|
+
end
|
|
1177
|
+
|
|
1178
|
+
let(:child) { HomChild.new }
|
|
1179
|
+
let(:parent) { HomParent.new }
|
|
1180
|
+
|
|
1181
|
+
|
|
1182
|
+
context "when belongs_to_required_by_default is true" do
|
|
1183
|
+
config_override :belongs_to_required_by_default, true
|
|
1184
|
+
|
|
1185
|
+
context "when optional is true" do
|
|
1186
|
+
let(:optional) { true }
|
|
1187
|
+
|
|
1188
|
+
it "persists the child with the parent_id" do
|
|
1189
|
+
expect(HomChild.first.parent_id).to eq(parent._id)
|
|
1190
|
+
expect(HomParent.count).to eq(0)
|
|
1191
|
+
end
|
|
1192
|
+
end
|
|
1193
|
+
|
|
1194
|
+
context "when optional is false" do
|
|
1195
|
+
let(:optional) { false }
|
|
1196
|
+
|
|
1197
|
+
it "doesn't persist the parent or the child" do
|
|
1198
|
+
expect(HomChild.count).to eq(0)
|
|
1199
|
+
expect(HomParent.count).to eq(0)
|
|
1200
|
+
end
|
|
1201
|
+
end
|
|
1202
|
+
|
|
1203
|
+
context "when optional is not set" do
|
|
1204
|
+
let(:belongs_to) do
|
|
1205
|
+
HomChild.belongs_to :parent, autosave: true, validate: false
|
|
1206
|
+
end
|
|
1207
|
+
|
|
1208
|
+
it "doesn't persist the parent or the child" do
|
|
1209
|
+
expect(HomChild.count).to eq(0)
|
|
1210
|
+
expect(HomParent.count).to eq(0)
|
|
1211
|
+
end
|
|
1212
|
+
end
|
|
1213
|
+
end
|
|
1214
|
+
|
|
1215
|
+
context "when belongs_to_required_by_default is false" do
|
|
1216
|
+
config_override :belongs_to_required_by_default, false
|
|
1217
|
+
|
|
1218
|
+
context "when optional is true" do
|
|
1219
|
+
let(:optional) { true }
|
|
1220
|
+
|
|
1221
|
+
it "persists the child with the parent_id" do
|
|
1222
|
+
expect(HomChild.first.parent_id).to eq(parent._id)
|
|
1223
|
+
expect(HomParent.count).to eq(0)
|
|
1224
|
+
end
|
|
1225
|
+
end
|
|
1226
|
+
|
|
1227
|
+
context "when optional is false" do
|
|
1228
|
+
let(:optional) { false }
|
|
1229
|
+
|
|
1230
|
+
it "doesn't persist the parent or the child" do
|
|
1231
|
+
expect(HomChild.count).to eq(0)
|
|
1232
|
+
expect(HomParent.count).to eq(0)
|
|
1233
|
+
end
|
|
1234
|
+
end
|
|
1235
|
+
|
|
1236
|
+
context "when optional is not set" do
|
|
1237
|
+
let(:belongs_to) do
|
|
1238
|
+
HomChild.belongs_to :parent, autosave: true, validate: false
|
|
1239
|
+
end
|
|
1240
|
+
|
|
1241
|
+
it "persists the child with the parent_id" do
|
|
1242
|
+
expect(HomChild.first.parent_id).to eq(parent._id)
|
|
1243
|
+
expect(HomParent.count).to eq(0)
|
|
1244
|
+
end
|
|
1245
|
+
end
|
|
1246
|
+
end
|
|
1247
|
+
end
|
|
1142
1248
|
end
|
|
@@ -95,3 +95,19 @@ class HomAnimal
|
|
|
95
95
|
|
|
96
96
|
belongs_to :trainer, class_name: 'HomTrainer', scope: -> { where(name: 'Dave') }
|
|
97
97
|
end
|
|
98
|
+
|
|
99
|
+
class HomPost
|
|
100
|
+
include Mongoid::Document
|
|
101
|
+
|
|
102
|
+
field :title, type: String
|
|
103
|
+
|
|
104
|
+
has_one :comment, inverse_of: :post, class_name: 'HomComment'
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
class HomComment
|
|
108
|
+
include Mongoid::Document
|
|
109
|
+
|
|
110
|
+
field :content, type: String
|
|
111
|
+
|
|
112
|
+
belongs_to :post, inverse_of: :comment, optional: true, class_name: 'HomPost'
|
|
113
|
+
end
|
|
@@ -496,4 +496,18 @@ describe "Syncable Association" do
|
|
|
496
496
|
expect(dog.reload.breed_ids).to eq([ breed.id ])
|
|
497
497
|
end
|
|
498
498
|
end
|
|
499
|
+
|
|
500
|
+
context "when setting one document on unpersisted HABTM association" do
|
|
501
|
+
let!(:dog) { Dog.create! }
|
|
502
|
+
let!(:breed) { Breed.new }
|
|
503
|
+
|
|
504
|
+
before do
|
|
505
|
+
breed.dogs = Dog.all
|
|
506
|
+
breed.save!
|
|
507
|
+
end
|
|
508
|
+
|
|
509
|
+
it "sets the foreign key on the other side" do
|
|
510
|
+
expect(dog.reload.breed_ids).to eq([breed._id])
|
|
511
|
+
end
|
|
512
|
+
end
|
|
499
513
|
end
|
|
@@ -329,7 +329,6 @@ describe Mongoid::Atomic::Paths do
|
|
|
329
329
|
context "assignment after saving" do
|
|
330
330
|
|
|
331
331
|
it "correctly sets the association for the embedded class" do
|
|
332
|
-
pending 'MONGOID-5039'
|
|
333
332
|
|
|
334
333
|
customer.home_address = CustomerAddress.new
|
|
335
334
|
customer.work_address = CustomerAddress.new
|
|
@@ -346,19 +345,6 @@ describe Mongoid::Atomic::Paths do
|
|
|
346
345
|
expect(customer.work_address.atomic_path).to eq("work_address")
|
|
347
346
|
end
|
|
348
347
|
end
|
|
349
|
-
|
|
350
|
-
context "inverse assignment" do
|
|
351
|
-
|
|
352
|
-
it "correctly returns the path for each embedded class" do
|
|
353
|
-
pending 'MONGOID-5039'
|
|
354
|
-
|
|
355
|
-
customer.work_address = CustomerAddress.new
|
|
356
|
-
customer.work_address.addressable = customer
|
|
357
|
-
|
|
358
|
-
expect(customer.home_address.atomic_path).to eq("home_address")
|
|
359
|
-
expect(customer.work_address.atomic_path).to eq("work_address")
|
|
360
|
-
end
|
|
361
|
-
end
|
|
362
348
|
end
|
|
363
349
|
end
|
|
364
350
|
end
|
|
@@ -1,6 +1,9 @@
|
|
|
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
|
|
|
@@ -1353,7 +1356,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
1353
1356
|
expect {
|
|
1354
1357
|
person.addresses_attributes =
|
|
1355
1358
|
{ "foo" => { "id" => "test", "street" => "Test" } }
|
|
1356
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
1359
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Address with id\(s\)/)
|
|
1357
1360
|
end
|
|
1358
1361
|
end
|
|
1359
1362
|
end
|
|
@@ -3012,7 +3015,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
3012
3015
|
{ "0" =>
|
|
3013
3016
|
{ "id" => BSON::ObjectId.new.to_s, "title" => "Rogue" }
|
|
3014
3017
|
}
|
|
3015
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
3018
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Post with id\(s\)/)
|
|
3016
3019
|
end
|
|
3017
3020
|
end
|
|
3018
3021
|
end
|
|
@@ -3046,7 +3049,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
3046
3049
|
expect {
|
|
3047
3050
|
person.posts_attributes =
|
|
3048
3051
|
{ "foo" => { "id" => "test", "title" => "Test" } }
|
|
3049
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
3052
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Post with id\(s\)/)
|
|
3050
3053
|
end
|
|
3051
3054
|
end
|
|
3052
3055
|
end
|
|
@@ -3763,7 +3766,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
3763
3766
|
expect {
|
|
3764
3767
|
person.preferences_attributes =
|
|
3765
3768
|
{ "foo" => { "id" => "test", "name" => "Test" } }
|
|
3766
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
3769
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Preference with id\(s\)/)
|
|
3767
3770
|
end
|
|
3768
3771
|
end
|
|
3769
3772
|
end
|
|
@@ -4395,13 +4398,6 @@ describe Mongoid::Attributes::Nested do
|
|
|
4395
4398
|
|
|
4396
4399
|
context "when nesting multiple levels and parent is timestamped" do
|
|
4397
4400
|
|
|
4398
|
-
around do |example|
|
|
4399
|
-
original_relations = Location.relations
|
|
4400
|
-
Location.embedded_in :address, touch: true
|
|
4401
|
-
example.run
|
|
4402
|
-
Location.relations = original_relations
|
|
4403
|
-
end
|
|
4404
|
-
|
|
4405
4401
|
after do
|
|
4406
4402
|
Address.reset_callbacks(:save)
|
|
4407
4403
|
end
|
|
@@ -4928,4 +4924,77 @@ describe Mongoid::Attributes::Nested do
|
|
|
4928
4924
|
end
|
|
4929
4925
|
end
|
|
4930
4926
|
end
|
|
4927
|
+
|
|
4928
|
+
context "when destroying has_many child using nested attributes" do
|
|
4929
|
+
let(:school) do
|
|
4930
|
+
School.create
|
|
4931
|
+
end
|
|
4932
|
+
|
|
4933
|
+
let!(:student) do
|
|
4934
|
+
school.students.create
|
|
4935
|
+
end
|
|
4936
|
+
|
|
4937
|
+
before do
|
|
4938
|
+
school.attributes = {
|
|
4939
|
+
'_id': school.id,
|
|
4940
|
+
'students_attributes': [{
|
|
4941
|
+
'_id': student.id,
|
|
4942
|
+
'_destroy': 1
|
|
4943
|
+
}]
|
|
4944
|
+
}
|
|
4945
|
+
end
|
|
4946
|
+
|
|
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
|
|
4951
|
+
|
|
4952
|
+
context "when destroying has_many child using nested attributes" do
|
|
4953
|
+
let(:school) do
|
|
4954
|
+
HabtmmSchool.create!(students: [student])
|
|
4955
|
+
end
|
|
4956
|
+
|
|
4957
|
+
let(:student) do
|
|
4958
|
+
HabtmmStudent.create!
|
|
4959
|
+
end
|
|
4960
|
+
|
|
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
|
|
4976
|
+
|
|
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' } ] } } }
|
|
4981
|
+
|
|
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
|
|
4986
|
+
|
|
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
|
|
4991
|
+
|
|
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
|
|
4997
|
+
end
|
|
4998
|
+
end
|
|
4999
|
+
end
|
|
4931
5000
|
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
|