mongoid 4.0.1 → 4.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +30 -0
- data/README.md +1 -1
- data/lib/mongoid/contextual/memory.rb +5 -5
- data/lib/mongoid/contextual/mongo.rb +10 -0
- data/lib/mongoid/document.rb +2 -2
- data/lib/mongoid/extensions.rb +13 -0
- data/lib/mongoid/findable.rb +27 -5
- data/lib/mongoid/persistable/creatable.rb +2 -1
- data/lib/mongoid/persistable/settable.rb +1 -1
- data/lib/mongoid/persistable/updatable.rb +2 -1
- data/lib/mongoid/relations/many.rb +21 -0
- data/lib/mongoid/sessions/options.rb +7 -2
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +32 -0
- data/spec/app/models/contextable_item.rb +5 -0
- data/spec/mongoid/attributes/nested_spec.rb +139 -144
- data/spec/mongoid/contextual/memory_spec.rb +7 -2
- data/spec/mongoid/criteria/modifiable_spec.rb +5 -8
- data/spec/mongoid/document_spec.rb +7 -3
- data/spec/mongoid/extensions_spec.rb +14 -0
- data/spec/mongoid/findable_spec.rb +97 -9
- data/spec/mongoid/persistable/creatable_spec.rb +41 -0
- data/spec/mongoid/persistable/savable_spec.rb +37 -0
- data/spec/mongoid/persistable/settable_spec.rb +23 -0
- data/spec/mongoid/relations/embedded/many_spec.rb +74 -0
- data/spec/mongoid/relations/referenced/many_spec.rb +130 -0
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +49 -0
- data/spec/mongoid/sessions/options_spec.rb +2 -1
- data/spec/mongoid/sessions_spec.rb +30 -0
- metadata +5 -3
@@ -2560,6 +2560,136 @@ describe Mongoid::Relations::Referenced::Many do
|
|
2560
2560
|
end
|
2561
2561
|
end
|
2562
2562
|
|
2563
|
+
describe "#find_or_create_by!" do
|
2564
|
+
|
2565
|
+
context "when the relation is not polymorphic" do
|
2566
|
+
|
2567
|
+
let(:person) do
|
2568
|
+
Person.create
|
2569
|
+
end
|
2570
|
+
|
2571
|
+
let!(:post) do
|
2572
|
+
person.posts.create(title: "Testing")
|
2573
|
+
end
|
2574
|
+
|
2575
|
+
context "when the document exists" do
|
2576
|
+
|
2577
|
+
let(:found) do
|
2578
|
+
person.posts.find_or_create_by!(title: "Testing")
|
2579
|
+
end
|
2580
|
+
|
2581
|
+
it "returns the document" do
|
2582
|
+
expect(found).to eq(post)
|
2583
|
+
end
|
2584
|
+
|
2585
|
+
it "keeps the document in the relation" do
|
2586
|
+
expect(found.person).to eq(person)
|
2587
|
+
end
|
2588
|
+
end
|
2589
|
+
|
2590
|
+
context "when the document does not exist" do
|
2591
|
+
|
2592
|
+
context "when there is no criteria attached" do
|
2593
|
+
|
2594
|
+
let(:found) do
|
2595
|
+
person.posts.find_or_create_by!(title: "Test") do |post|
|
2596
|
+
post.content = "The Content"
|
2597
|
+
end
|
2598
|
+
end
|
2599
|
+
|
2600
|
+
it "sets the new document attributes" do
|
2601
|
+
expect(found.title).to eq("Test")
|
2602
|
+
end
|
2603
|
+
|
2604
|
+
it "returns a newly persisted document" do
|
2605
|
+
expect(found).to be_persisted
|
2606
|
+
end
|
2607
|
+
|
2608
|
+
it "calls the passed block" do
|
2609
|
+
expect(found.content).to eq("The Content")
|
2610
|
+
end
|
2611
|
+
|
2612
|
+
it "keeps the document in the relation" do
|
2613
|
+
expect(found.person).to eq(person)
|
2614
|
+
end
|
2615
|
+
end
|
2616
|
+
|
2617
|
+
context "when a criteria is attached" do
|
2618
|
+
|
2619
|
+
let(:found) do
|
2620
|
+
person.posts.recent.find_or_create_by!(title: "Test")
|
2621
|
+
end
|
2622
|
+
|
2623
|
+
it "sets the new document attributes" do
|
2624
|
+
expect(found.title).to eq("Test")
|
2625
|
+
end
|
2626
|
+
|
2627
|
+
it "returns a newly persisted document" do
|
2628
|
+
expect(found).to be_persisted
|
2629
|
+
end
|
2630
|
+
|
2631
|
+
it "keeps the document in the relation" do
|
2632
|
+
expect(found.person).to eq(person)
|
2633
|
+
end
|
2634
|
+
end
|
2635
|
+
end
|
2636
|
+
end
|
2637
|
+
|
2638
|
+
context "when the relation is polymorphic" do
|
2639
|
+
|
2640
|
+
let(:movie) do
|
2641
|
+
Movie.create
|
2642
|
+
end
|
2643
|
+
|
2644
|
+
let!(:rating) do
|
2645
|
+
movie.ratings.create(value: 1)
|
2646
|
+
end
|
2647
|
+
|
2648
|
+
context "when the document exists" do
|
2649
|
+
|
2650
|
+
let(:found) do
|
2651
|
+
movie.ratings.find_or_create_by!(value: 1)
|
2652
|
+
end
|
2653
|
+
|
2654
|
+
it "returns the document" do
|
2655
|
+
expect(found).to eq(rating)
|
2656
|
+
end
|
2657
|
+
|
2658
|
+
it "keeps the document in the relation" do
|
2659
|
+
expect(found.ratable).to eq(movie)
|
2660
|
+
end
|
2661
|
+
end
|
2662
|
+
|
2663
|
+
context "when the document does not exist" do
|
2664
|
+
|
2665
|
+
let(:found) do
|
2666
|
+
movie.ratings.find_or_create_by!(value: 3)
|
2667
|
+
end
|
2668
|
+
|
2669
|
+
it "sets the new document attributes" do
|
2670
|
+
expect(found.value).to eq(3)
|
2671
|
+
end
|
2672
|
+
|
2673
|
+
it "returns a newly persisted document" do
|
2674
|
+
expect(found).to be_persisted
|
2675
|
+
end
|
2676
|
+
|
2677
|
+
it "keeps the document in the relation" do
|
2678
|
+
expect(found.ratable).to eq(movie)
|
2679
|
+
end
|
2680
|
+
|
2681
|
+
context "when validation fails" do
|
2682
|
+
|
2683
|
+
it "raises an error" do
|
2684
|
+
expect {
|
2685
|
+
movie.comments.find_or_create_by!(title: "")
|
2686
|
+
}.to raise_error(Mongoid::Errors::Validations)
|
2687
|
+
end
|
2688
|
+
end
|
2689
|
+
end
|
2690
|
+
end
|
2691
|
+
end
|
2692
|
+
|
2563
2693
|
describe "#find_or_initialize_by" do
|
2564
2694
|
|
2565
2695
|
context "when the relation is not polymorphic" do
|
@@ -2466,6 +2466,55 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
2466
2466
|
end
|
2467
2467
|
end
|
2468
2468
|
|
2469
|
+
describe "#find_or_create_by!" do
|
2470
|
+
|
2471
|
+
context "when the relation is not polymorphic" do
|
2472
|
+
|
2473
|
+
let(:person) do
|
2474
|
+
Person.create
|
2475
|
+
end
|
2476
|
+
|
2477
|
+
let!(:preference) do
|
2478
|
+
person.preferences.create(name: "Testing")
|
2479
|
+
end
|
2480
|
+
|
2481
|
+
context "when the document exists" do
|
2482
|
+
|
2483
|
+
let(:found) do
|
2484
|
+
person.preferences.find_or_create_by!(name: "Testing")
|
2485
|
+
end
|
2486
|
+
|
2487
|
+
it "returns the document" do
|
2488
|
+
expect(found).to eq(preference)
|
2489
|
+
end
|
2490
|
+
end
|
2491
|
+
|
2492
|
+
context "when the document does not exist" do
|
2493
|
+
|
2494
|
+
let(:found) do
|
2495
|
+
person.preferences.find_or_create_by!(name: "Test")
|
2496
|
+
end
|
2497
|
+
|
2498
|
+
it "sets the new document attributes" do
|
2499
|
+
expect(found.name).to eq("Test")
|
2500
|
+
end
|
2501
|
+
|
2502
|
+
it "returns a newly persisted document" do
|
2503
|
+
expect(found).to be_persisted
|
2504
|
+
end
|
2505
|
+
|
2506
|
+
context "when validation fails" do
|
2507
|
+
|
2508
|
+
it "raises an error" do
|
2509
|
+
expect {
|
2510
|
+
person.preferences.find_or_create_by!(name: "A")
|
2511
|
+
}.to raise_error(Mongoid::Errors::Validations)
|
2512
|
+
end
|
2513
|
+
end
|
2514
|
+
end
|
2515
|
+
end
|
2516
|
+
end
|
2517
|
+
|
2469
2518
|
describe "#find_or_initialize_by" do
|
2470
2519
|
|
2471
2520
|
context "when the relation is not polymorphic" do
|
@@ -65,7 +65,8 @@ describe Mongoid::Sessions::Options do
|
|
65
65
|
end
|
66
66
|
|
67
67
|
it "passes down the options to collection" do
|
68
|
-
|
68
|
+
session = Band.mongo_session
|
69
|
+
expect_any_instance_of(Moped::Session).to receive(:with).with(options).and_return(session)
|
69
70
|
instance.collection
|
70
71
|
end
|
71
72
|
end
|
@@ -409,6 +409,36 @@ describe Mongoid::Sessions do
|
|
409
409
|
end
|
410
410
|
end
|
411
411
|
|
412
|
+
context "when overridden the database with store_in" do
|
413
|
+
|
414
|
+
before do
|
415
|
+
Band.store_in(database: database_id_alt)
|
416
|
+
end
|
417
|
+
|
418
|
+
context "on instance level" do
|
419
|
+
|
420
|
+
let(:band) do
|
421
|
+
Band.new.with({:read=>:primary})
|
422
|
+
end
|
423
|
+
|
424
|
+
it "uses the new database" do
|
425
|
+
expect(band.mongo_session.send(:current_database).name).to eq database_id_alt
|
426
|
+
end
|
427
|
+
|
428
|
+
context "when using another database before" do
|
429
|
+
|
430
|
+
before do
|
431
|
+
band
|
432
|
+
User.create!
|
433
|
+
end
|
434
|
+
|
435
|
+
it "uses the new database" do
|
436
|
+
expect(band.mongo_session.send(:current_database).name).to eq database_id_alt
|
437
|
+
end
|
438
|
+
end
|
439
|
+
end
|
440
|
+
end
|
441
|
+
|
412
442
|
context "when overriding to a monghq single server", config: :mongohq do
|
413
443
|
|
414
444
|
shared_examples_for "an overridden session to a mongohq single server" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.
|
4
|
+
version: 4.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Durran Jordan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-02-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -390,6 +390,7 @@ files:
|
|
390
390
|
- spec/app/models/circus.rb
|
391
391
|
- spec/app/models/code.rb
|
392
392
|
- spec/app/models/comment.rb
|
393
|
+
- spec/app/models/contextable_item.rb
|
393
394
|
- spec/app/models/contractor.rb
|
394
395
|
- spec/app/models/cookie.rb
|
395
396
|
- spec/app/models/country_code.rb
|
@@ -783,7 +784,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
783
784
|
version: 1.3.6
|
784
785
|
requirements: []
|
785
786
|
rubyforge_project: mongoid
|
786
|
-
rubygems_version: 2.
|
787
|
+
rubygems_version: 2.4.5
|
787
788
|
signing_key:
|
788
789
|
specification_version: 4
|
789
790
|
summary: Elegant Persistance in Ruby for MongoDB.
|
@@ -834,6 +835,7 @@ test_files:
|
|
834
835
|
- spec/app/models/circus.rb
|
835
836
|
- spec/app/models/code.rb
|
836
837
|
- spec/app/models/comment.rb
|
838
|
+
- spec/app/models/contextable_item.rb
|
837
839
|
- spec/app/models/contractor.rb
|
838
840
|
- spec/app/models/cookie.rb
|
839
841
|
- spec/app/models/country_code.rb
|