mongoid 8.0.10 → 8.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +3 -3
- data/README.md +3 -3
- data/Rakefile +18 -67
- data/lib/config/locales/en.yml +46 -14
- data/lib/mongoid/association/accessors.rb +3 -7
- data/lib/mongoid/association/builders.rb +1 -1
- data/lib/mongoid/association/eager_loadable.rb +0 -3
- data/lib/mongoid/association/embedded/batchable.rb +2 -2
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -2
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +2 -1
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +3 -2
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +6 -6
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +1 -1
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +1 -1
- data/lib/mongoid/association/macros.rb +0 -6
- data/lib/mongoid/association/nested/one.rb +40 -2
- data/lib/mongoid/association/proxy.rb +1 -1
- data/lib/mongoid/association/referenced/counter_cache.rb +2 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +1 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +6 -23
- data/lib/mongoid/association/referenced/has_many/proxy.rb +3 -3
- data/lib/mongoid/association/reflections.rb +2 -2
- data/lib/mongoid/atomic.rb +7 -16
- data/lib/mongoid/attributes/dynamic.rb +1 -1
- data/lib/mongoid/attributes/nested.rb +2 -2
- data/lib/mongoid/attributes/processing.rb +5 -29
- data/lib/mongoid/attributes/projector.rb +1 -1
- data/lib/mongoid/attributes/readonly.rb +1 -1
- data/lib/mongoid/attributes.rb +8 -2
- data/lib/mongoid/changeable.rb +107 -5
- data/lib/mongoid/clients/storage_options.rb +2 -5
- data/lib/mongoid/clients/validators/storage.rb +1 -13
- data/lib/mongoid/collection_configurable.rb +58 -0
- data/lib/mongoid/composable.rb +2 -0
- data/lib/mongoid/config/defaults.rb +60 -0
- data/lib/mongoid/config/options.rb +0 -3
- data/lib/mongoid/config/validators/async_query_executor.rb +24 -0
- data/lib/mongoid/config/validators.rb +1 -0
- data/lib/mongoid/config.rb +88 -27
- data/lib/mongoid/contextual/atomic.rb +1 -1
- data/lib/mongoid/contextual/memory.rb +233 -33
- data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
- data/lib/mongoid/contextual/mongo.rb +370 -133
- data/lib/mongoid/contextual/none.rb +162 -7
- data/lib/mongoid/contextual.rb +12 -0
- data/lib/mongoid/criteria/findable.rb +2 -2
- data/lib/mongoid/criteria/includable.rb +4 -3
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -15
- data/lib/mongoid/criteria/queryable/key.rb +1 -1
- data/lib/mongoid/criteria/queryable/mergeable.rb +1 -1
- data/lib/mongoid/criteria/queryable/optional.rb +8 -8
- data/lib/mongoid/criteria/queryable/selectable.rb +43 -12
- data/lib/mongoid/criteria/queryable/selector.rb +1 -1
- data/lib/mongoid/criteria/queryable/storable.rb +1 -1
- data/lib/mongoid/criteria.rb +6 -5
- data/lib/mongoid/deprecable.rb +1 -2
- data/lib/mongoid/deprecation.rb +3 -3
- data/lib/mongoid/document.rb +1 -8
- data/lib/mongoid/errors/create_collection_failure.rb +33 -0
- data/lib/mongoid/errors/drop_collection_failure.rb +27 -0
- data/lib/mongoid/errors/immutable_attribute.rb +26 -0
- data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
- data/lib/mongoid/errors/invalid_storage_parent.rb +2 -0
- data/lib/mongoid/errors.rb +4 -1
- data/lib/mongoid/extensions/hash.rb +2 -24
- data/lib/mongoid/extensions/object.rb +2 -2
- data/lib/mongoid/extensions/time.rb +2 -0
- data/lib/mongoid/fields/localized.rb +10 -0
- data/lib/mongoid/fields/standard.rb +10 -0
- data/lib/mongoid/fields.rb +59 -35
- data/lib/mongoid/findable.rb +27 -3
- data/lib/mongoid/interceptable.rb +6 -116
- data/lib/mongoid/matcher/eq_impl.rb +1 -1
- data/lib/mongoid/matcher/type.rb +1 -1
- data/lib/mongoid/persistable/creatable.rb +1 -0
- data/lib/mongoid/persistable/deletable.rb +1 -1
- data/lib/mongoid/persistable/savable.rb +13 -1
- data/lib/mongoid/persistable/unsettable.rb +2 -2
- data/lib/mongoid/persistable/updatable.rb +51 -1
- data/lib/mongoid/persistable/upsertable.rb +20 -1
- data/lib/mongoid/persistable.rb +3 -0
- data/lib/mongoid/query_cache.rb +5 -1
- data/lib/mongoid/railties/database.rake +7 -2
- data/lib/mongoid/reloadable.rb +5 -3
- data/lib/mongoid/stateful.rb +22 -1
- data/lib/mongoid/tasks/database.rake +12 -0
- data/lib/mongoid/tasks/database.rb +20 -0
- data/lib/mongoid/timestamps/created.rb +1 -8
- data/lib/mongoid/traversable.rb +0 -12
- data/lib/mongoid/utils.rb +22 -0
- data/lib/mongoid/validatable/associated.rb +17 -98
- data/lib/mongoid/validatable/macros.rb +5 -5
- data/lib/mongoid/validatable.rb +4 -9
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/warnings.rb +17 -1
- data/lib/mongoid.rb +16 -3
- data/spec/integration/app_spec.rb +2 -6
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +0 -40
- data/spec/integration/callbacks_spec.rb +99 -12
- data/spec/integration/discriminator_key_spec.rb +4 -5
- data/spec/integration/i18n_fallbacks_spec.rb +3 -2
- data/spec/mongoid/association/eager_spec.rb +2 -24
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +27 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +20 -25
- data/spec/mongoid/association/embedded/embeds_many_models.rb +1 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +0 -4
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +15 -2
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +2 -18
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +42 -55
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +9 -50
- data/spec/mongoid/association/syncable_spec.rb +1 -1
- data/spec/mongoid/association_spec.rb +0 -60
- data/spec/mongoid/attributes_spec.rb +3 -33
- data/spec/mongoid/changeable_spec.rb +299 -24
- data/spec/mongoid/clients_spec.rb +122 -13
- data/spec/mongoid/collection_configurable_spec.rb +158 -0
- data/spec/mongoid/config/defaults_spec.rb +160 -0
- data/spec/mongoid/config_spec.rb +154 -27
- data/spec/mongoid/contextual/memory_spec.rb +332 -76
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
- data/spec/mongoid/contextual/mongo_spec.rb +1009 -125
- data/spec/mongoid/contextual/none_spec.rb +49 -2
- data/spec/mongoid/copyable_spec.rb +2 -10
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +4 -10
- data/spec/mongoid/criteria/queryable/options_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +419 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/selector_spec.rb +3 -76
- data/spec/mongoid/criteria/queryable/storable_spec.rb +0 -72
- data/spec/mongoid/criteria_projection_spec.rb +1 -4
- data/spec/mongoid/criteria_spec.rb +5 -9
- data/spec/mongoid/document_spec.rb +0 -27
- data/spec/mongoid/errors/readonly_document_spec.rb +2 -2
- data/spec/mongoid/extensions/hash_spec.rb +3 -3
- data/spec/mongoid/extensions/time_spec.rb +8 -43
- data/spec/mongoid/extensions/time_with_zone_spec.rb +7 -52
- data/spec/mongoid/fields/localized_spec.rb +46 -28
- data/spec/mongoid/fields_spec.rb +136 -77
- data/spec/mongoid/findable_spec.rb +391 -34
- data/spec/mongoid/indexable_spec.rb +16 -10
- data/spec/mongoid/interceptable_spec.rb +153 -442
- data/spec/mongoid/interceptable_spec_models.rb +111 -51
- data/spec/mongoid/persistable/deletable_spec.rb +26 -6
- data/spec/mongoid/persistable/destroyable_spec.rb +26 -6
- data/spec/mongoid/persistable/incrementable_spec.rb +37 -0
- data/spec/mongoid/persistable/logical_spec.rb +37 -0
- data/spec/mongoid/persistable/poppable_spec.rb +36 -0
- data/spec/mongoid/persistable/pullable_spec.rb +72 -0
- data/spec/mongoid/persistable/pushable_spec.rb +72 -0
- data/spec/mongoid/persistable/renamable_spec.rb +36 -0
- data/spec/mongoid/persistable/savable_spec.rb +96 -0
- data/spec/mongoid/persistable/settable_spec.rb +37 -0
- data/spec/mongoid/persistable/unsettable_spec.rb +36 -0
- data/spec/mongoid/persistable/updatable_spec.rb +20 -28
- data/spec/mongoid/persistable/upsertable_spec.rb +80 -6
- data/spec/mongoid/persistence_context_spec.rb +7 -57
- data/spec/mongoid/query_cache_spec.rb +56 -61
- data/spec/mongoid/reloadable_spec.rb +24 -28
- data/spec/mongoid/scopable_spec.rb +70 -0
- data/spec/mongoid/serializable_spec.rb +23 -44
- data/spec/mongoid/stateful_spec.rb +122 -8
- data/spec/mongoid/tasks/database_rake_spec.rb +74 -0
- data/spec/mongoid/tasks/database_spec.rb +127 -0
- data/spec/mongoid/timestamps/created_spec.rb +0 -23
- data/spec/mongoid/timestamps_spec.rb +9 -11
- data/spec/mongoid/touchable_spec.rb +277 -5
- data/spec/mongoid/touchable_spec_models.rb +3 -1
- data/spec/mongoid/traversable_spec.rb +9 -24
- data/spec/mongoid/validatable/associated_spec.rb +34 -27
- data/spec/mongoid/validatable/uniqueness_spec.rb +2 -3
- data/spec/mongoid_spec.rb +36 -10
- data/spec/shared/LICENSE +20 -0
- data/spec/shared/bin/get-mongodb-download-url +17 -0
- data/spec/shared/bin/s3-copy +45 -0
- data/spec/shared/bin/s3-upload +69 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/cluster_config.rb +231 -0
- data/spec/shared/lib/mrss/constraints.rb +378 -0
- data/spec/shared/lib/mrss/docker_runner.rb +298 -0
- data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +210 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +238 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +113 -0
- data/spec/shared/lib/mrss/session_registry.rb +69 -0
- data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
- data/spec/shared/lib/mrss/utils.rb +37 -0
- data/spec/shared/share/Dockerfile.erb +321 -0
- data/spec/shared/share/haproxy-1.conf +16 -0
- data/spec/shared/share/haproxy-2.conf +17 -0
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/distro.sh +74 -0
- data/spec/shared/shlib/server.sh +416 -0
- data/spec/shared/shlib/set_env.sh +169 -0
- data/spec/spec_helper.rb +5 -0
- data/spec/support/immutable_ids.rb +118 -0
- data/spec/support/macros.rb +47 -15
- data/spec/support/models/artist.rb +0 -1
- data/spec/support/models/band.rb +1 -0
- data/spec/support/models/building.rb +2 -0
- data/spec/support/models/name.rb +0 -10
- data/spec/support/models/person.rb +0 -1
- data/spec/support/models/product.rb +1 -0
- data.tar.gz.sig +0 -0
- metadata +745 -637
- metadata.gz.sig +2 -0
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -60
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -60
- data/spec/support/models/purse.rb +0 -9
@@ -1,8 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "spec_helper"
|
4
|
+
require "support/immutable_ids"
|
4
5
|
|
5
6
|
describe Mongoid::Persistable::Savable do
|
7
|
+
extend Mongoid::ImmutableIds
|
8
|
+
immutable_id_examples_as "persisted _ids are immutable"
|
6
9
|
|
7
10
|
describe "#save" do
|
8
11
|
|
@@ -520,6 +523,99 @@ describe Mongoid::Persistable::Savable do
|
|
520
523
|
end
|
521
524
|
end
|
522
525
|
end
|
526
|
+
|
527
|
+
context "when saving a readonly document" do
|
528
|
+
|
529
|
+
context "when legacy_readonly is true" do
|
530
|
+
config_override :legacy_readonly, true
|
531
|
+
|
532
|
+
context "when its a new document" do
|
533
|
+
|
534
|
+
let(:document) do
|
535
|
+
Band.new
|
536
|
+
end
|
537
|
+
|
538
|
+
before do
|
539
|
+
document.__selected_fields = { 'test' => 1 }
|
540
|
+
expect(document).to be_readonly
|
541
|
+
end
|
542
|
+
|
543
|
+
it "persists the document" do
|
544
|
+
expect(Band.count).to eq(0)
|
545
|
+
document.save!
|
546
|
+
expect(Band.count).to eq(1)
|
547
|
+
end
|
548
|
+
end
|
549
|
+
|
550
|
+
context "when its an old document" do
|
551
|
+
|
552
|
+
let(:document) do
|
553
|
+
Band.only(:name).first
|
554
|
+
end
|
555
|
+
|
556
|
+
before do
|
557
|
+
Band.create!
|
558
|
+
expect(document).to be_readonly
|
559
|
+
end
|
560
|
+
|
561
|
+
it "updates the document" do
|
562
|
+
document.name = "The Rolling Stones"
|
563
|
+
document.save!
|
564
|
+
expect(Band.first.name).to eq("The Rolling Stones")
|
565
|
+
end
|
566
|
+
end
|
567
|
+
end
|
568
|
+
|
569
|
+
context "when legacy_readonly is false" do
|
570
|
+
config_override :legacy_readonly, false
|
571
|
+
|
572
|
+
context "when its a new document" do
|
573
|
+
|
574
|
+
let(:document) do
|
575
|
+
Band.new
|
576
|
+
end
|
577
|
+
|
578
|
+
before do
|
579
|
+
document.readonly!
|
580
|
+
expect(document).to be_readonly
|
581
|
+
end
|
582
|
+
|
583
|
+
it "raises a readonly error" do
|
584
|
+
expect do
|
585
|
+
document.save!
|
586
|
+
end.to raise_error(Mongoid::Errors::ReadonlyDocument)
|
587
|
+
end
|
588
|
+
end
|
589
|
+
|
590
|
+
context "when its an old document" do
|
591
|
+
|
592
|
+
let(:document) do
|
593
|
+
Band.first.tap(&:readonly!)
|
594
|
+
end
|
595
|
+
|
596
|
+
before do
|
597
|
+
Band.create!
|
598
|
+
expect(document).to be_readonly
|
599
|
+
end
|
600
|
+
|
601
|
+
it "raises a readonly error" do
|
602
|
+
document.name = "The Rolling Stones"
|
603
|
+
expect do
|
604
|
+
document.save!
|
605
|
+
end.to raise_error(Mongoid::Errors::ReadonlyDocument)
|
606
|
+
end
|
607
|
+
end
|
608
|
+
end
|
609
|
+
end
|
610
|
+
|
611
|
+
context "when the _id has been modified" do
|
612
|
+
def invoke_operation!
|
613
|
+
object._id = new_id_value
|
614
|
+
object.save
|
615
|
+
end
|
616
|
+
|
617
|
+
it_behaves_like "persisted _ids are immutable"
|
618
|
+
end
|
523
619
|
end
|
524
620
|
|
525
621
|
describe "save!" do
|
@@ -180,6 +180,43 @@ describe Mongoid::Persistable::Settable do
|
|
180
180
|
end
|
181
181
|
end
|
182
182
|
end
|
183
|
+
|
184
|
+
context "when executing on a readonly document" do
|
185
|
+
|
186
|
+
let(:person) do
|
187
|
+
Person.create!(title: "sir", age: 30)
|
188
|
+
end
|
189
|
+
|
190
|
+
context "when legacy_readonly is true" do
|
191
|
+
config_override :legacy_readonly, true
|
192
|
+
|
193
|
+
before do
|
194
|
+
person.__selected_fields = { "title" => 1, "age" => 1 }
|
195
|
+
end
|
196
|
+
|
197
|
+
it "persists the changes" do
|
198
|
+
expect(person).to be_readonly
|
199
|
+
person.set(title: "miss", age: 21)
|
200
|
+
expect(person.title).to eq("miss")
|
201
|
+
expect(person.age).to eq(21)
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
context "when legacy_readonly is false" do
|
206
|
+
config_override :legacy_readonly, false
|
207
|
+
|
208
|
+
before do
|
209
|
+
person.readonly!
|
210
|
+
end
|
211
|
+
|
212
|
+
it "raises a ReadonlyDocument error" do
|
213
|
+
expect(person).to be_readonly
|
214
|
+
expect do
|
215
|
+
person.set(title: "miss", age: 21)
|
216
|
+
end.to raise_error(Mongoid::Errors::ReadonlyDocument)
|
217
|
+
end
|
218
|
+
end
|
219
|
+
end
|
183
220
|
end
|
184
221
|
|
185
222
|
context "when dynamic attributes are not enabled" do
|
@@ -167,5 +167,41 @@ describe Mongoid::Persistable::Unsettable do
|
|
167
167
|
end
|
168
168
|
end
|
169
169
|
end
|
170
|
+
|
171
|
+
context "when executing on a readonly document" do
|
172
|
+
|
173
|
+
let(:person) do
|
174
|
+
Person.create!(title: "sir", age: 30)
|
175
|
+
end
|
176
|
+
|
177
|
+
context "when legacy_readonly is true" do
|
178
|
+
config_override :legacy_readonly, true
|
179
|
+
|
180
|
+
before do
|
181
|
+
person.__selected_fields = { "title" => 1, "age" => 1 }
|
182
|
+
end
|
183
|
+
|
184
|
+
it "persists the changes" do
|
185
|
+
expect(person).to be_readonly
|
186
|
+
person.unset(:title)
|
187
|
+
expect(person.title).to be nil
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
context "when legacy_readonly is false" do
|
192
|
+
config_override :legacy_readonly, false
|
193
|
+
|
194
|
+
before do
|
195
|
+
person.readonly!
|
196
|
+
end
|
197
|
+
|
198
|
+
it "raises a ReadonlyDocument error" do
|
199
|
+
expect(person).to be_readonly
|
200
|
+
expect do
|
201
|
+
person.unset(:title)
|
202
|
+
end.to raise_error(Mongoid::Errors::ReadonlyDocument)
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
170
206
|
end
|
171
207
|
end
|
@@ -1,8 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "spec_helper"
|
4
|
+
require "support/immutable_ids"
|
4
5
|
|
5
6
|
describe Mongoid::Persistable::Updatable do
|
7
|
+
extend Mongoid::ImmutableIds
|
8
|
+
immutable_id_examples_as "persisted _ids are immutable"
|
6
9
|
|
7
10
|
describe "#update_attribute" do
|
8
11
|
|
@@ -231,21 +234,17 @@ describe Mongoid::Persistable::Updatable do
|
|
231
234
|
end
|
232
235
|
|
233
236
|
context "when persisting a localized field" do
|
237
|
+
with_default_i18n_configs
|
234
238
|
|
235
239
|
let!(:product) do
|
236
240
|
Product.create!(description: "The bomb")
|
237
241
|
end
|
238
242
|
|
239
243
|
before do
|
240
|
-
I18n.enforce_available_locales = false
|
241
244
|
::I18n.locale = :de
|
242
245
|
product.update_attribute(:description, "Die Bombe")
|
243
246
|
end
|
244
247
|
|
245
|
-
after do
|
246
|
-
::I18n.locale = :en
|
247
|
-
end
|
248
|
-
|
249
248
|
let(:attributes) do
|
250
249
|
product.attributes["description"]
|
251
250
|
end
|
@@ -450,6 +449,14 @@ describe Mongoid::Persistable::Updatable do
|
|
450
449
|
end
|
451
450
|
end
|
452
451
|
end
|
452
|
+
|
453
|
+
context 'when the field is _id' do
|
454
|
+
def invoke_operation!
|
455
|
+
object.update_attribute "_id", new_id_value
|
456
|
+
end
|
457
|
+
|
458
|
+
it_behaves_like "persisted _ids are immutable"
|
459
|
+
end
|
453
460
|
end
|
454
461
|
|
455
462
|
[:update_attributes, :update].each do |method|
|
@@ -470,29 +477,6 @@ describe Mongoid::Persistable::Updatable do
|
|
470
477
|
end
|
471
478
|
end
|
472
479
|
|
473
|
-
context "when validation passes" do
|
474
|
-
|
475
|
-
let(:person) do
|
476
|
-
Person.create!
|
477
|
-
end
|
478
|
-
|
479
|
-
let!(:saved) do
|
480
|
-
person.update_attributes!(pets: false)
|
481
|
-
end
|
482
|
-
|
483
|
-
let(:from_db) do
|
484
|
-
Person.find(person.id)
|
485
|
-
end
|
486
|
-
|
487
|
-
it "returns true" do
|
488
|
-
expect(saved).to be true
|
489
|
-
end
|
490
|
-
|
491
|
-
it "saves the attributes" do
|
492
|
-
expect(from_db.pets).to be false
|
493
|
-
end
|
494
|
-
end
|
495
|
-
|
496
480
|
context "when the document has been destroyed" do
|
497
481
|
max_server_version '4.9'
|
498
482
|
|
@@ -721,6 +705,14 @@ describe Mongoid::Persistable::Updatable do
|
|
721
705
|
end
|
722
706
|
end
|
723
707
|
end
|
708
|
+
|
709
|
+
context 'when the _id is one of the fields' do
|
710
|
+
def invoke_operation!
|
711
|
+
object.update_attributes _id: new_id_value
|
712
|
+
end
|
713
|
+
|
714
|
+
it_behaves_like "persisted _ids are immutable"
|
715
|
+
end
|
724
716
|
end
|
725
717
|
end
|
726
718
|
|
@@ -42,8 +42,10 @@ describe Mongoid::Persistable::Upsertable do
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
+
let(:options) { {} }
|
46
|
+
|
45
47
|
before do
|
46
|
-
updated.upsert
|
48
|
+
updated.upsert(options)
|
47
49
|
end
|
48
50
|
|
49
51
|
it "updates the existing document" do
|
@@ -54,19 +56,46 @@ describe Mongoid::Persistable::Upsertable do
|
|
54
56
|
expect(existing).to be_persisted
|
55
57
|
end
|
56
58
|
|
57
|
-
|
58
|
-
|
59
|
-
Band.
|
59
|
+
shared_examples "replaces the existing fields" do
|
60
|
+
it 'replaces the existing fields' do
|
61
|
+
Band.count.should == 1
|
62
|
+
|
63
|
+
existing.reload
|
64
|
+
existing.views.should be nil
|
65
|
+
existing.name.should == 'Tool'
|
60
66
|
end
|
67
|
+
end
|
61
68
|
|
62
|
-
|
69
|
+
shared_examples "retains the existing fields" do
|
70
|
+
it 'retains the existing fields' do
|
63
71
|
Band.count.should == 1
|
64
72
|
|
65
73
|
existing.reload
|
66
|
-
existing.views.should
|
74
|
+
existing.views.should eq(42)
|
67
75
|
existing.name.should == 'Tool'
|
68
76
|
end
|
69
77
|
end
|
78
|
+
|
79
|
+
context 'when existing document contains other fields' do
|
80
|
+
let!(:existing) do
|
81
|
+
Band.create!(name: "Photek", views: 42)
|
82
|
+
end
|
83
|
+
|
84
|
+
context "when not passing any options" do
|
85
|
+
let(:options) { {} }
|
86
|
+
it_behaves_like "replaces the existing fields"
|
87
|
+
end
|
88
|
+
|
89
|
+
context "when passing replace: false" do
|
90
|
+
let(:options) { { replace: false } }
|
91
|
+
it_behaves_like "retains the existing fields"
|
92
|
+
end
|
93
|
+
|
94
|
+
context "when passing replace: true" do
|
95
|
+
let(:options) { { replace: true } }
|
96
|
+
it_behaves_like "replaces the existing fields"
|
97
|
+
end
|
98
|
+
end
|
70
99
|
end
|
71
100
|
|
72
101
|
context "when no matching document exists in the db" do
|
@@ -118,5 +147,50 @@ describe Mongoid::Persistable::Upsertable do
|
|
118
147
|
end
|
119
148
|
end
|
120
149
|
end
|
150
|
+
|
151
|
+
context "when the document is readonly" do
|
152
|
+
|
153
|
+
context "when legacy_readonly is true" do
|
154
|
+
config_override :legacy_readonly, true
|
155
|
+
|
156
|
+
let!(:existing) do
|
157
|
+
Band.create!(name: "Photek")
|
158
|
+
end
|
159
|
+
|
160
|
+
before do
|
161
|
+
existing.name = "Depeche Mode"
|
162
|
+
end
|
163
|
+
|
164
|
+
let!(:upsert) do
|
165
|
+
existing.upsert
|
166
|
+
end
|
167
|
+
|
168
|
+
it "updates the existing document" do
|
169
|
+
expect(existing.reload.name).to eq("Depeche Mode")
|
170
|
+
end
|
171
|
+
|
172
|
+
it "returns true" do
|
173
|
+
expect(upsert).to be true
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
context "when legacy_readonly is false" do
|
178
|
+
config_override :legacy_readonly, false
|
179
|
+
|
180
|
+
let!(:existing) do
|
181
|
+
Band.create!(name: "Photek").tap(&:readonly!)
|
182
|
+
end
|
183
|
+
|
184
|
+
before do
|
185
|
+
existing.name = "Depeche Mode"
|
186
|
+
end
|
187
|
+
|
188
|
+
it 'raises a ReadonlyDocument error' do
|
189
|
+
expect do
|
190
|
+
existing.upsert
|
191
|
+
end.to raise_error(Mongoid::Errors::ReadonlyDocument)
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
121
195
|
end
|
122
196
|
end
|
@@ -411,19 +411,12 @@ describe Mongoid::PersistenceContext do
|
|
411
411
|
end
|
412
412
|
|
413
413
|
context 'when there is a database override' do
|
414
|
+
persistence_context_override :database, :other
|
414
415
|
|
415
416
|
before do
|
416
417
|
object.store_in database: :musique
|
417
418
|
end
|
418
419
|
|
419
|
-
before do
|
420
|
-
Mongoid::Threaded.database_override = :other
|
421
|
-
end
|
422
|
-
|
423
|
-
after do
|
424
|
-
Mongoid::Threaded.database_override = nil
|
425
|
-
end
|
426
|
-
|
427
420
|
it 'uses the override' do
|
428
421
|
expect(persistence_context.database_name).to eq(:other)
|
429
422
|
end
|
@@ -458,14 +451,7 @@ describe Mongoid::PersistenceContext do
|
|
458
451
|
end
|
459
452
|
|
460
453
|
context 'when there is a database override' do
|
461
|
-
|
462
|
-
before do
|
463
|
-
Mongoid::Threaded.database_override = :other
|
464
|
-
end
|
465
|
-
|
466
|
-
after do
|
467
|
-
Mongoid::Threaded.database_override = nil
|
468
|
-
end
|
454
|
+
persistence_context_override :database, :other
|
469
455
|
|
470
456
|
it 'uses the persistence context options' do
|
471
457
|
expect(persistence_context.database_name).to eq(:musique)
|
@@ -517,14 +503,7 @@ describe Mongoid::PersistenceContext do
|
|
517
503
|
end
|
518
504
|
|
519
505
|
context 'when there is a database override' do
|
520
|
-
|
521
|
-
before do
|
522
|
-
Mongoid::Threaded.database_override = :other
|
523
|
-
end
|
524
|
-
|
525
|
-
after do
|
526
|
-
Mongoid::Threaded.database_override = nil
|
527
|
-
end
|
506
|
+
persistence_context_override :database, :other
|
528
507
|
|
529
508
|
it 'uses the persistence context options' do
|
530
509
|
expect(persistence_context.database_name).to eq(:musique)
|
@@ -535,14 +514,7 @@ describe Mongoid::PersistenceContext do
|
|
535
514
|
context 'when there are no options passed to the Persistence Context' do
|
536
515
|
|
537
516
|
context 'when there is a database override' do
|
538
|
-
|
539
|
-
before do
|
540
|
-
Mongoid::Threaded.database_override = :other
|
541
|
-
end
|
542
|
-
|
543
|
-
after do
|
544
|
-
Mongoid::Threaded.database_override = nil
|
545
|
-
end
|
517
|
+
persistence_context_override :database, :other
|
546
518
|
|
547
519
|
it 'uses the database override options' do
|
548
520
|
expect(persistence_context.database_name).to eq(Mongoid::Threaded.database_override)
|
@@ -585,15 +557,7 @@ describe Mongoid::PersistenceContext do
|
|
585
557
|
end
|
586
558
|
|
587
559
|
context 'when there is a client override' do
|
588
|
-
|
589
|
-
before do
|
590
|
-
Mongoid::Threaded.client_override = :other
|
591
|
-
end
|
592
|
-
|
593
|
-
after do
|
594
|
-
persistence_context.client.close
|
595
|
-
Mongoid::Threaded.client_override = nil
|
596
|
-
end
|
560
|
+
persistence_context_override :client, :other
|
597
561
|
|
598
562
|
it 'uses the client option' do
|
599
563
|
expect(persistence_context.client).to eq(Mongoid::Clients.with_name(:alternative))
|
@@ -637,14 +601,7 @@ describe Mongoid::PersistenceContext do
|
|
637
601
|
end
|
638
602
|
|
639
603
|
context 'when there is a client override' do
|
640
|
-
|
641
|
-
before do
|
642
|
-
Mongoid::Threaded.client_override = :alternative
|
643
|
-
end
|
644
|
-
|
645
|
-
after do
|
646
|
-
Mongoid::Threaded.client_override = nil
|
647
|
-
end
|
604
|
+
persistence_context_override :client, :alternative
|
648
605
|
|
649
606
|
it 'uses the client override' do
|
650
607
|
expect(persistence_context.client).to eq(Mongoid::Clients.with_name(:alternative))
|
@@ -680,14 +637,7 @@ describe Mongoid::PersistenceContext do
|
|
680
637
|
end
|
681
638
|
|
682
639
|
context 'when there is a client override' do
|
683
|
-
|
684
|
-
before do
|
685
|
-
Mongoid::Threaded.client_override = :alternative
|
686
|
-
end
|
687
|
-
|
688
|
-
after do
|
689
|
-
Mongoid::Threaded.client_override = nil
|
690
|
-
end
|
640
|
+
persistence_context_override :client, :alternative
|
691
641
|
|
692
642
|
it 'uses the client override' do
|
693
643
|
expect(persistence_context.client).to eq(Mongoid::Clients.with_name(:alternative))
|