mongoid 4.0.2 → 5.0.0.beta
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 +66 -1
- data/README.md +14 -13
- data/lib/config/locales/en.yml +28 -28
- data/lib/mongoid.rb +28 -21
- data/lib/mongoid/atomic.rb +2 -4
- data/lib/mongoid/attributes.rb +7 -7
- data/lib/mongoid/attributes/processing.rb +4 -1
- data/lib/mongoid/attributes/readonly.rb +2 -2
- data/lib/mongoid/changeable.rb +4 -6
- data/lib/mongoid/clients.rb +142 -0
- data/lib/mongoid/clients/factory.rb +78 -0
- data/lib/mongoid/{sessions → clients}/options.rb +30 -19
- data/lib/mongoid/{sessions → clients}/storage_options.rb +27 -13
- data/lib/mongoid/{sessions → clients}/thread_options.rb +6 -3
- data/lib/mongoid/clients/validators.rb +2 -0
- data/lib/mongoid/{sessions → clients}/validators/storage.rb +5 -2
- data/lib/mongoid/composable.rb +3 -3
- data/lib/mongoid/config.rb +39 -41
- data/lib/mongoid/config/environment.rb +1 -1
- data/lib/mongoid/config/validators.rb +1 -1
- data/lib/mongoid/config/validators/{session.rb → client.rb} +31 -28
- data/lib/mongoid/contextual/aggregable/mongo.rb +1 -1
- data/lib/mongoid/contextual/atomic.rb +11 -11
- data/lib/mongoid/contextual/command.rb +9 -6
- data/lib/mongoid/contextual/geo_near.rb +17 -1
- data/lib/mongoid/contextual/map_reduce.rb +12 -11
- data/lib/mongoid/contextual/memory.rb +2 -5
- data/lib/mongoid/contextual/mongo.rb +92 -82
- data/lib/mongoid/contextual/none.rb +13 -0
- data/lib/mongoid/copyable.rb +6 -1
- data/lib/mongoid/criteria.rb +36 -3
- data/lib/mongoid/document.rb +3 -4
- data/lib/mongoid/errors.rb +6 -6
- data/lib/mongoid/errors/{mixed_session_configuration.rb → mixed_client_configuration.rb} +5 -5
- data/lib/mongoid/errors/no_client_config.rb +22 -0
- data/lib/mongoid/errors/{no_session_database.rb → no_client_database.rb} +4 -4
- data/lib/mongoid/errors/{no_session_hosts.rb → no_client_hosts.rb} +4 -4
- data/lib/mongoid/errors/{no_sessions_config.rb → no_clients_config.rb} +4 -4
- data/lib/mongoid/errors/no_default_client.rb +23 -0
- data/lib/mongoid/extensions/hash.rb +5 -1
- data/lib/mongoid/extensions/object.rb +3 -2
- data/lib/mongoid/extensions/set.rb +5 -5
- data/lib/mongoid/factory.rb +4 -2
- data/lib/mongoid/fields.rb +7 -2
- data/lib/mongoid/findable.rb +4 -1
- data/lib/mongoid/indexable.rb +15 -9
- data/lib/mongoid/persistable.rb +1 -2
- data/lib/mongoid/persistable/creatable.rb +2 -2
- data/lib/mongoid/persistable/deletable.rb +3 -3
- data/lib/mongoid/persistable/incrementable.rb +1 -1
- data/lib/mongoid/persistable/logical.rb +1 -1
- data/lib/mongoid/persistable/poppable.rb +1 -1
- data/lib/mongoid/persistable/pullable.rb +2 -2
- data/lib/mongoid/persistable/pushable.rb +2 -2
- data/lib/mongoid/persistable/renamable.rb +1 -1
- data/lib/mongoid/persistable/settable.rb +1 -1
- data/lib/mongoid/persistable/unsettable.rb +1 -1
- data/lib/mongoid/persistable/updatable.rb +2 -2
- data/lib/mongoid/persistable/upsertable.rb +1 -1
- data/lib/mongoid/query_cache.rb +98 -104
- data/lib/mongoid/railtie.rb +1 -21
- data/lib/mongoid/railties/database.rake +1 -1
- data/lib/mongoid/relations/builders.rb +3 -1
- data/lib/mongoid/relations/counter_cache.rb +1 -1
- data/lib/mongoid/relations/embedded/batchable.rb +3 -10
- data/lib/mongoid/relations/embedded/many.rb +4 -2
- data/lib/mongoid/relations/many.rb +1 -0
- data/lib/mongoid/relations/proxy.rb +6 -6
- data/lib/mongoid/relations/referenced/many.rb +2 -1
- data/lib/mongoid/relations/targets/enumerable.rb +11 -11
- data/lib/mongoid/relations/touchable.rb +1 -1
- data/lib/mongoid/reloadable.rb +2 -2
- data/lib/mongoid/scopable.rb +6 -17
- data/lib/mongoid/selectable.rb +1 -36
- data/lib/mongoid/serializable.rb +2 -2
- data/lib/mongoid/stateful.rb +0 -1
- data/lib/mongoid/tasks/database.rake +2 -2
- data/lib/mongoid/tasks/database.rb +23 -16
- data/lib/mongoid/threaded.rb +54 -33
- data/lib/mongoid/threaded/lifecycle.rb +21 -16
- data/lib/mongoid/traversable.rb +16 -1
- data/lib/mongoid/validatable.rb +1 -1
- data/lib/mongoid/validatable/queryable.rb +1 -1
- data/lib/mongoid/validatable/uniqueness.rb +3 -20
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +91 -57
- data/lib/rails/mongoid.rb +2 -2
- data/spec/app/models/audio.rb +1 -1
- data/spec/app/models/band.rb +1 -0
- data/spec/app/models/company.rb +5 -0
- data/spec/app/models/label.rb +7 -0
- data/spec/app/models/pub.rb +6 -0
- data/spec/app/models/staff.rb +7 -0
- data/spec/app/models/store_as_dup_test1.rb +5 -0
- data/spec/app/models/store_as_dup_test2.rb +5 -0
- data/spec/config/mongoid.yml +7 -25
- data/spec/mongoid/atomic/paths_spec.rb +3 -11
- data/spec/mongoid/attributes/nested_spec.rb +16 -16
- data/spec/mongoid/attributes/readonly_spec.rb +80 -18
- data/spec/mongoid/attributes_spec.rb +3 -3
- data/spec/mongoid/changeable_spec.rb +70 -0
- data/spec/mongoid/clients/factory_spec.rb +284 -0
- data/spec/mongoid/{sessions → clients}/options_spec.rb +4 -6
- data/spec/mongoid/clients_spec.rb +739 -0
- data/spec/mongoid/config/environment_spec.rb +14 -11
- data/spec/mongoid/config_spec.rb +33 -48
- data/spec/mongoid/contextual/atomic_spec.rb +1 -17
- data/spec/mongoid/contextual/geo_near_spec.rb +35 -0
- data/spec/mongoid/contextual/mongo_spec.rb +26 -83
- data/spec/mongoid/contextual/none_spec.rb +15 -0
- data/spec/mongoid/copyable_spec.rb +35 -1
- data/spec/mongoid/criteria/findable_spec.rb +197 -0
- data/spec/mongoid/criteria/modifiable_spec.rb +7 -29
- data/spec/mongoid/criteria_spec.rb +74 -91
- data/spec/mongoid/document_spec.rb +1 -1
- data/spec/mongoid/errors/{mixed_session_configuration_spec.rb → mixed_client_configuration_spec.rb} +1 -1
- data/spec/mongoid/errors/{no_session_config_spec.rb → no_client_config_spec.rb} +4 -4
- data/spec/mongoid/errors/{no_session_database_spec.rb → no_client_database_spec.rb} +4 -4
- data/spec/mongoid/errors/{no_session_hosts_spec.rb → no_client_hosts_spec.rb} +3 -3
- data/spec/mongoid/errors/{no_sessions_config_spec.rb → no_clients_config_spec.rb} +2 -2
- data/spec/mongoid/fields/localized_spec.rb +1 -0
- data/spec/mongoid/fields_spec.rb +1 -0
- data/spec/mongoid/findable_spec.rb +2 -23
- data/spec/mongoid/indexable_spec.rb +12 -8
- data/spec/mongoid/interceptable_spec.rb +15 -0
- data/spec/mongoid/persistable/settable_spec.rb +16 -0
- data/spec/mongoid/persistable/updatable_spec.rb +3 -2
- data/spec/mongoid/persistable_spec.rb +4 -4
- data/spec/mongoid/query_cache_spec.rb +13 -8
- data/spec/mongoid/relations/auto_save_spec.rb +1 -1
- data/spec/mongoid/relations/counter_cache_spec.rb +34 -0
- data/spec/mongoid/relations/eager/belongs_to_spec.rb +9 -0
- data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +3 -3
- data/spec/mongoid/relations/embedded/many_spec.rb +123 -1
- data/spec/mongoid/relations/embedded/one_spec.rb +3 -3
- data/spec/mongoid/relations/proxy_spec.rb +28 -0
- data/spec/mongoid/relations/referenced/in_spec.rb +1 -1
- data/spec/mongoid/relations/referenced/many_spec.rb +47 -23
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +1 -1
- data/spec/mongoid/relations/referenced/one_spec.rb +1 -1
- data/spec/mongoid/relations/targets/enumerable_spec.rb +9 -2
- data/spec/mongoid/reloadable_spec.rb +6 -6
- data/spec/mongoid/scopable_spec.rb +41 -28
- data/spec/mongoid/selectable_spec.rb +6 -16
- data/spec/mongoid/tasks/database_rake_spec.rb +13 -13
- data/spec/mongoid/tasks/database_spec.rb +2 -2
- data/spec/mongoid/threaded_spec.rb +0 -7
- data/spec/mongoid/traversable_spec.rb +2 -2
- data/spec/mongoid/validatable/uniqueness_spec.rb +30 -1
- data/spec/mongoid_spec.rb +13 -15
- data/spec/rails/mongoid_spec.rb +13 -4
- data/spec/spec_helper.rb +44 -27
- data/spec/support/authorization.rb +12 -0
- data/spec/support/expectations.rb +14 -0
- metadata +52 -59
- data/lib/mongoid/contextual/find_and_modify.rb +0 -69
- data/lib/mongoid/contextual/text_search.rb +0 -178
- data/lib/mongoid/criteria/#findable.rb# +0 -141
- data/lib/mongoid/errors/no_default_session.rb +0 -23
- data/lib/mongoid/errors/no_session_config.rb +0 -22
- data/lib/mongoid/log_subscriber.rb +0 -55
- data/lib/mongoid/positional.rb +0 -71
- data/lib/mongoid/sessions.rb +0 -125
- data/lib/mongoid/sessions/factory.rb +0 -131
- data/lib/mongoid/sessions/mongo_uri.rb +0 -93
- data/lib/mongoid/sessions/validators.rb +0 -2
- data/lib/mongoid/support/query_counter.rb +0 -23
- data/spec/helpers.rb +0 -18
- data/spec/mongoid/#atomic_spec.rb# +0 -365
- data/spec/mongoid/contextual/find_and_modify_spec.rb +0 -220
- data/spec/mongoid/contextual/text_search_spec.rb +0 -209
- data/spec/mongoid/log_subscriber_spec.rb +0 -75
- data/spec/mongoid/positional_spec.rb +0 -222
- data/spec/mongoid/sessions/factory_spec.rb +0 -333
- data/spec/mongoid/sessions/mongo_uri_spec.rb +0 -103
- data/spec/mongoid/sessions_spec.rb +0 -1252
| @@ -150,5 +150,14 @@ describe Mongoid::Relations::Eager::BelongsTo do | |
| 150 150 | 
             
                    }.to raise_error(Mongoid::Errors::EagerLoad)
         | 
| 151 151 | 
             
                  end
         | 
| 152 152 | 
             
                end
         | 
| 153 | 
            +
             | 
| 154 | 
            +
                context "when setting the foreign key id directly" do
         | 
| 155 | 
            +
             | 
| 156 | 
            +
                  it "works" do
         | 
| 157 | 
            +
                    id = BSON::ObjectId.new
         | 
| 158 | 
            +
                    game = Game.new(:person_id => id)
         | 
| 159 | 
            +
                    expect(game.person_id).to eql(id)
         | 
| 160 | 
            +
                  end
         | 
| 161 | 
            +
                end
         | 
| 153 162 | 
             
              end
         | 
| 154 163 | 
             
            end
         | 
| @@ -45,7 +45,7 @@ describe Mongoid::Relations::Eager::HasAndBelongsToMany do | |
| 45 45 |  | 
| 46 46 | 
             
                  it "queries twice" do
         | 
| 47 47 | 
             
                    expect_query(2) do
         | 
| 48 | 
            -
                      Person. | 
| 48 | 
            +
                      Person.asc(:_id).includes(:houses).each do |person|
         | 
| 49 49 | 
             
                        expect(person.houses).to_not be_nil
         | 
| 50 50 |  | 
| 51 51 | 
             
                        expect(person.houses.length).to be(3)
         | 
| @@ -54,7 +54,7 @@ describe Mongoid::Relations::Eager::HasAndBelongsToMany do | |
| 54 54 | 
             
                  end
         | 
| 55 55 |  | 
| 56 56 | 
             
                  it "has all items" do
         | 
| 57 | 
            -
                    Person. | 
| 57 | 
            +
                    Person.asc(:_id).includes(:houses).each do |person|
         | 
| 58 58 | 
             
                      expect(person.ivar(:houses).length).to be(3)
         | 
| 59 59 | 
             
                    end
         | 
| 60 60 | 
             
                  end
         | 
| @@ -63,7 +63,7 @@ describe Mongoid::Relations::Eager::HasAndBelongsToMany do | |
| 63 63 | 
             
                context "when the relation is not polymorphic" do
         | 
| 64 64 |  | 
| 65 65 | 
             
                  let(:eager) do
         | 
| 66 | 
            -
                    Person.includes(:preferences).last
         | 
| 66 | 
            +
                    Person.asc(:_id).includes(:preferences).last
         | 
| 67 67 | 
             
                  end
         | 
| 68 68 |  | 
| 69 69 | 
             
                  context "when the eager load has returned documents" do
         | 
| @@ -3873,7 +3873,7 @@ describe Mongoid::Relations::Embedded::Many do | |
| 3873 3873 | 
             
                before do
         | 
| 3874 3874 | 
             
                  band.collection.
         | 
| 3875 3875 | 
             
                    find(_id: band.id).
         | 
| 3876 | 
            -
                     | 
| 3876 | 
            +
                    update_one("$set" => { records: [{ name: "Moderat" }]})
         | 
| 3877 3877 | 
             
                end
         | 
| 3878 3878 |  | 
| 3879 3879 | 
             
                context "when loading the documents" do
         | 
| @@ -3933,4 +3933,126 @@ describe Mongoid::Relations::Embedded::Many do | |
| 3933 3933 | 
             
                  expect(loaded.extension).to eq("Testing")
         | 
| 3934 3934 | 
             
                end
         | 
| 3935 3935 | 
             
              end
         | 
| 3936 | 
            +
             | 
| 3937 | 
            +
              context "deleting embedded documents" do
         | 
| 3938 | 
            +
             | 
| 3939 | 
            +
                it "able to delete embedded documents upon condition" do
         | 
| 3940 | 
            +
                  company = Company.new
         | 
| 3941 | 
            +
                  4.times { |i| company.staffs << Staff.new(age: 50 + i)}
         | 
| 3942 | 
            +
                  2.times { |i| company.staffs << Staff.new(age: 40)}
         | 
| 3943 | 
            +
                  company.save
         | 
| 3944 | 
            +
                  company.staffs.delete_if {|x| x.age >= 50}
         | 
| 3945 | 
            +
                  expect(company.staffs.count).to eq(2)
         | 
| 3946 | 
            +
                end
         | 
| 3947 | 
            +
              end
         | 
| 3948 | 
            +
             | 
| 3949 | 
            +
              context "when substituting polymorphic documents" do
         | 
| 3950 | 
            +
             | 
| 3951 | 
            +
                before(:all) do
         | 
| 3952 | 
            +
                  class DNS; end
         | 
| 3953 | 
            +
             | 
| 3954 | 
            +
                  class DNS::Zone
         | 
| 3955 | 
            +
                    include Mongoid::Document
         | 
| 3956 | 
            +
                    embeds_many :rrsets, class_name: 'DNS::RRSet',  inverse_of: :zone
         | 
| 3957 | 
            +
                    embeds_one  :soa,    class_name: 'DNS::Record', as: :container
         | 
| 3958 | 
            +
                  end
         | 
| 3959 | 
            +
             | 
| 3960 | 
            +
                  class DNS::RRSet
         | 
| 3961 | 
            +
                    include Mongoid::Document
         | 
| 3962 | 
            +
                    embedded_in :zone, class_name: 'DNS::Zone',   inverse_of: :rrsets
         | 
| 3963 | 
            +
                    embeds_many :records, class_name: 'DNS::Record', as: :container
         | 
| 3964 | 
            +
                  end
         | 
| 3965 | 
            +
             | 
| 3966 | 
            +
                  class DNS::Record
         | 
| 3967 | 
            +
                    include Mongoid::Document
         | 
| 3968 | 
            +
                    embedded_in :container, polymorphic: true
         | 
| 3969 | 
            +
                  end
         | 
| 3970 | 
            +
                end
         | 
| 3971 | 
            +
             | 
| 3972 | 
            +
                after(:all) do
         | 
| 3973 | 
            +
                  Object.send(:remove_const, :DNS)
         | 
| 3974 | 
            +
                end
         | 
| 3975 | 
            +
             | 
| 3976 | 
            +
                context "when the parent is new" do
         | 
| 3977 | 
            +
             | 
| 3978 | 
            +
                  let(:zone) do
         | 
| 3979 | 
            +
                    DNS::Zone.new
         | 
| 3980 | 
            +
                  end
         | 
| 3981 | 
            +
             | 
| 3982 | 
            +
                  let(:soa_1) do
         | 
| 3983 | 
            +
                    DNS::Record.new
         | 
| 3984 | 
            +
                  end
         | 
| 3985 | 
            +
             | 
| 3986 | 
            +
                  context "when replacing the set document" do
         | 
| 3987 | 
            +
             | 
| 3988 | 
            +
                    let(:soa_2) do
         | 
| 3989 | 
            +
                      DNS::Record.new
         | 
| 3990 | 
            +
                    end
         | 
| 3991 | 
            +
             | 
| 3992 | 
            +
                    before do
         | 
| 3993 | 
            +
                      zone.soa = soa_1
         | 
| 3994 | 
            +
                    end
         | 
| 3995 | 
            +
             | 
| 3996 | 
            +
                    it "properly sets the metadata" do
         | 
| 3997 | 
            +
                      expect(zone.soa = soa_2).to eq(soa_2)
         | 
| 3998 | 
            +
                    end
         | 
| 3999 | 
            +
                  end
         | 
| 4000 | 
            +
             | 
| 4001 | 
            +
                  context "when deleting the set document" do
         | 
| 4002 | 
            +
             | 
| 4003 | 
            +
                    let(:soa_2) do
         | 
| 4004 | 
            +
                      DNS::Record.new
         | 
| 4005 | 
            +
                    end
         | 
| 4006 | 
            +
             | 
| 4007 | 
            +
                    before do
         | 
| 4008 | 
            +
                      zone.soa = soa_1
         | 
| 4009 | 
            +
                    end
         | 
| 4010 | 
            +
             | 
| 4011 | 
            +
                    it "properly sets the metadata" do
         | 
| 4012 | 
            +
                      expect(zone.soa.delete).to be true
         | 
| 4013 | 
            +
                    end
         | 
| 4014 | 
            +
                  end
         | 
| 4015 | 
            +
                end
         | 
| 4016 | 
            +
             | 
| 4017 | 
            +
                context "when the parent is persisted" do
         | 
| 4018 | 
            +
             | 
| 4019 | 
            +
                  let(:zone) do
         | 
| 4020 | 
            +
                    DNS::Zone.create
         | 
| 4021 | 
            +
                  end
         | 
| 4022 | 
            +
             | 
| 4023 | 
            +
                  let(:soa_1) do
         | 
| 4024 | 
            +
                    DNS::Record.new
         | 
| 4025 | 
            +
                  end
         | 
| 4026 | 
            +
             | 
| 4027 | 
            +
                  context "when replacing the set document" do
         | 
| 4028 | 
            +
             | 
| 4029 | 
            +
                    let(:soa_2) do
         | 
| 4030 | 
            +
                      DNS::Record.new
         | 
| 4031 | 
            +
                    end
         | 
| 4032 | 
            +
             | 
| 4033 | 
            +
                    before do
         | 
| 4034 | 
            +
                      zone.soa = soa_1
         | 
| 4035 | 
            +
                    end
         | 
| 4036 | 
            +
             | 
| 4037 | 
            +
                    it "properly sets the metadata" do
         | 
| 4038 | 
            +
                      expect(zone.soa = soa_2).to eq(soa_2)
         | 
| 4039 | 
            +
                    end
         | 
| 4040 | 
            +
                  end
         | 
| 4041 | 
            +
             | 
| 4042 | 
            +
                  context "when deleting the set document" do
         | 
| 4043 | 
            +
             | 
| 4044 | 
            +
                    let(:soa_2) do
         | 
| 4045 | 
            +
                      DNS::Record.new
         | 
| 4046 | 
            +
                    end
         | 
| 4047 | 
            +
             | 
| 4048 | 
            +
                    before do
         | 
| 4049 | 
            +
                      zone.soa = soa_1
         | 
| 4050 | 
            +
                    end
         | 
| 4051 | 
            +
             | 
| 4052 | 
            +
                    it "properly sets the metadata" do
         | 
| 4053 | 
            +
                      expect(zone.soa.delete).to be true
         | 
| 4054 | 
            +
                    end
         | 
| 4055 | 
            +
                  end
         | 
| 4056 | 
            +
                end
         | 
| 4057 | 
            +
              end
         | 
| 3936 4058 | 
             
            end
         | 
| @@ -947,7 +947,7 @@ describe Mongoid::Relations::Embedded::One do | |
| 947 947 | 
             
                context "when a parent was removed outside of mongoid" do
         | 
| 948 948 |  | 
| 949 949 | 
             
                  before do
         | 
| 950 | 
            -
                    person.collection. | 
| 950 | 
            +
                    person.collection.find(_id: person.id).update_one(
         | 
| 951 951 | 
             
                      "$pull" => { "addresses" => { _id: address_one.id }}
         | 
| 952 952 | 
             
                    )
         | 
| 953 953 | 
             
                  end
         | 
| @@ -963,7 +963,7 @@ describe Mongoid::Relations::Embedded::One do | |
| 963 963 | 
             
                    end
         | 
| 964 964 |  | 
| 965 965 | 
             
                    before do
         | 
| 966 | 
            -
                       | 
| 966 | 
            +
                      person.reload.addresses.first.code = code
         | 
| 967 967 | 
             
                    end
         | 
| 968 968 |  | 
| 969 969 | 
             
                    it "reloads the correct number" do
         | 
| @@ -982,7 +982,7 @@ describe Mongoid::Relations::Embedded::One do | |
| 982 982 | 
             
                before do
         | 
| 983 983 | 
             
                  band.collection.
         | 
| 984 984 | 
             
                    find(_id: band.id).
         | 
| 985 | 
            -
                     | 
| 985 | 
            +
                    update_one("$set" => { label: { name: "Mute" }})
         | 
| 986 986 | 
             
                end
         | 
| 987 987 |  | 
| 988 988 | 
             
                context "when loading the documents" do
         | 
| @@ -2,6 +2,34 @@ require "spec_helper" | |
| 2 2 |  | 
| 3 3 | 
             
            describe Mongoid::Relations::Proxy do
         | 
| 4 4 |  | 
| 5 | 
            +
              describe "#find" do
         | 
| 6 | 
            +
                let(:person) do
         | 
| 7 | 
            +
                  Person.create
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                let(:messages) do
         | 
| 11 | 
            +
                  person.messages
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                let(:msg1) do
         | 
| 15 | 
            +
                  messages.create(body: 'msg1')
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                it "returns nil with no arguments" do
         | 
| 19 | 
            +
                  expect(messages.find).to be_nil
         | 
| 20 | 
            +
                  expect(messages.send(:find)).to be_nil
         | 
| 21 | 
            +
                  expect(messages.__send__(:find)).to be_nil
         | 
| 22 | 
            +
                  expect(messages.public_send(:find)).to be_nil
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                it "returns the object corresponding to the id" do
         | 
| 26 | 
            +
                  expect(messages.find(msg1.id)).to eq(msg1)
         | 
| 27 | 
            +
                  expect(messages.send(:find, msg1.id)).to eq(msg1)
         | 
| 28 | 
            +
                  expect(messages.__send__(:find, msg1.id)).to eq(msg1)
         | 
| 29 | 
            +
                  expect(messages.public_send(:find, msg1.id)).to eq(msg1)
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
              end
         | 
| 32 | 
            +
             | 
| 5 33 | 
             
              describe "#extend" do
         | 
| 6 34 |  | 
| 7 35 | 
             
                before(:all) do
         | 
| @@ -1240,7 +1240,7 @@ describe Mongoid::Relations::Referenced::In do | |
| 1240 1240 |  | 
| 1241 1241 | 
             
                  before do
         | 
| 1242 1242 | 
             
                    Person.collection.find({ _id: person_one.id }).
         | 
| 1243 | 
            -
                       | 
| 1243 | 
            +
                      update_one({ "$set" => { title: "Madam" }})
         | 
| 1244 1244 | 
             
                  end
         | 
| 1245 1245 |  | 
| 1246 1246 | 
             
                  let(:reloaded) do
         | 
| @@ -292,7 +292,7 @@ describe Mongoid::Relations::Referenced::Many do | |
| 292 292 | 
             
                      it "raises an error" do
         | 
| 293 293 | 
             
                        expect {
         | 
| 294 294 | 
             
                          person.posts.send(method, post)
         | 
| 295 | 
            -
                        }.to raise_error( | 
| 295 | 
            +
                        }.to raise_error(Mongo::Error::OperationFailure)
         | 
| 296 296 | 
             
                      end
         | 
| 297 297 | 
             
                    end
         | 
| 298 298 | 
             
                  end
         | 
| @@ -1536,7 +1536,7 @@ describe Mongoid::Relations::Referenced::Many do | |
| 1536 1536 | 
             
                          person.posts.create do |doc|
         | 
| 1537 1537 | 
             
                            doc._id = existing.id
         | 
| 1538 1538 | 
             
                          end
         | 
| 1539 | 
            -
                        }.to raise_error( | 
| 1539 | 
            +
                        }.to raise_error(Mongo::Error::OperationFailure)
         | 
| 1540 1540 | 
             
                      end
         | 
| 1541 1541 | 
             
                    end
         | 
| 1542 1542 | 
             
                  end
         | 
| @@ -2164,30 +2164,24 @@ describe Mongoid::Relations::Referenced::Many do | |
| 2164 2164 |  | 
| 2165 2165 | 
             
              describe "#find" do
         | 
| 2166 2166 |  | 
| 2167 | 
            -
                context "when  | 
| 2167 | 
            +
                context "when iterating after the find" do
         | 
| 2168 2168 |  | 
| 2169 | 
            -
                   | 
| 2170 | 
            -
             | 
| 2171 | 
            -
             | 
| 2172 | 
            -
                      Person.create
         | 
| 2173 | 
            -
                    end
         | 
| 2174 | 
            -
             | 
| 2175 | 
            -
                    before do
         | 
| 2176 | 
            -
                      person.posts.create(title: "Test")
         | 
| 2177 | 
            -
                    end
         | 
| 2169 | 
            +
                  let(:person) do
         | 
| 2170 | 
            +
                    Person.create!
         | 
| 2171 | 
            +
                  end
         | 
| 2178 2172 |  | 
| 2179 | 
            -
             | 
| 2173 | 
            +
                  let(:post_id) do
         | 
| 2174 | 
            +
                    person.posts.first.id
         | 
| 2175 | 
            +
                  end
         | 
| 2180 2176 |  | 
| 2181 | 
            -
             | 
| 2182 | 
            -
             | 
| 2183 | 
            -
             | 
| 2177 | 
            +
                  before do
         | 
| 2178 | 
            +
                    5.times { person.posts.create! }
         | 
| 2179 | 
            +
                  end
         | 
| 2184 2180 |  | 
| 2185 | 
            -
             | 
| 2186 | 
            -
             | 
| 2187 | 
            -
             | 
| 2188 | 
            -
             | 
| 2189 | 
            -
                      end
         | 
| 2190 | 
            -
                    end
         | 
| 2181 | 
            +
                  it "does not change the in memory size" do
         | 
| 2182 | 
            +
                    expect {
         | 
| 2183 | 
            +
                      person.posts.find(post_id)
         | 
| 2184 | 
            +
                    }.not_to change { person.posts.to_a.size }
         | 
| 2191 2185 | 
             
                  end
         | 
| 2192 2186 | 
             
                end
         | 
| 2193 2187 |  | 
| @@ -2807,6 +2801,35 @@ describe Mongoid::Relations::Referenced::Many do | |
| 2807 2801 | 
             
                end
         | 
| 2808 2802 | 
             
              end
         | 
| 2809 2803 |  | 
| 2804 | 
            +
              describe "#last" do
         | 
| 2805 | 
            +
             | 
| 2806 | 
            +
                let(:person) do
         | 
| 2807 | 
            +
                  Person.create!
         | 
| 2808 | 
            +
                end
         | 
| 2809 | 
            +
             | 
| 2810 | 
            +
                let!(:persisted_post) do
         | 
| 2811 | 
            +
                  person.posts.create!
         | 
| 2812 | 
            +
                end
         | 
| 2813 | 
            +
             | 
| 2814 | 
            +
                context "when a new document is added" do
         | 
| 2815 | 
            +
             | 
| 2816 | 
            +
                  let!(:new_post) do
         | 
| 2817 | 
            +
                    person.posts.new
         | 
| 2818 | 
            +
                  end
         | 
| 2819 | 
            +
             | 
| 2820 | 
            +
                  context "when the target is subsequently loaded" do
         | 
| 2821 | 
            +
             | 
| 2822 | 
            +
                    before do
         | 
| 2823 | 
            +
                      person.posts.entries
         | 
| 2824 | 
            +
                    end
         | 
| 2825 | 
            +
             | 
| 2826 | 
            +
                    it "returns the expected last document" do
         | 
| 2827 | 
            +
                      expect(person.posts.last).to eq(new_post)
         | 
| 2828 | 
            +
                    end
         | 
| 2829 | 
            +
                  end
         | 
| 2830 | 
            +
                end
         | 
| 2831 | 
            +
              end
         | 
| 2832 | 
            +
             | 
| 2810 2833 | 
             
              describe ".macro" do
         | 
| 2811 2834 |  | 
| 2812 2835 | 
             
                it "returns has_many" do
         | 
| @@ -3344,7 +3367,7 @@ describe Mongoid::Relations::Referenced::Many do | |
| 3344 3367 |  | 
| 3345 3368 | 
             
                  before do
         | 
| 3346 3369 | 
             
                    Post.collection.find({ _id: post_one.id }).
         | 
| 3347 | 
            -
                       | 
| 3370 | 
            +
                      update_one({ "$set" => { title: "reloaded" }})
         | 
| 3348 3371 | 
             
                  end
         | 
| 3349 3372 |  | 
| 3350 3373 | 
             
                  let(:reloaded) do
         | 
| @@ -3687,6 +3710,7 @@ describe Mongoid::Relations::Referenced::Many do | |
| 3687 3710 | 
             
              end
         | 
| 3688 3711 |  | 
| 3689 3712 | 
             
              context "when accessing a relation named parent" do
         | 
| 3713 | 
            +
             | 
| 3690 3714 | 
             
                let!(:parent) do
         | 
| 3691 3715 | 
             
                  Odd.create(name: "odd parent")
         | 
| 3692 3716 | 
             
                end
         | 
| @@ -3274,7 +3274,7 @@ describe Mongoid::Relations::Referenced::ManyToMany do | |
| 3274 3274 |  | 
| 3275 3275 | 
             
                  before do
         | 
| 3276 3276 | 
             
                    Preference.collection.find({ _id: preference_one.id }).
         | 
| 3277 | 
            -
                       | 
| 3277 | 
            +
                      update_one({ "$set" => { name: "reloaded" }})
         | 
| 3278 3278 | 
             
                  end
         | 
| 3279 3279 |  | 
| 3280 3280 | 
             
                  let(:reloaded) do
         | 
| @@ -1178,7 +1178,7 @@ describe Mongoid::Relations::Referenced::One do | |
| 1178 1178 |  | 
| 1179 1179 | 
             
                  before do
         | 
| 1180 1180 | 
             
                    Game.collection.find({ _id: game_one.id }).
         | 
| 1181 | 
            -
                       | 
| 1181 | 
            +
                      update_one({ "$set" => { name: "Diablo 2" }})
         | 
| 1182 1182 | 
             
                  end
         | 
| 1183 1183 |  | 
| 1184 1184 | 
             
                  let(:reloaded) do
         | 
| @@ -122,6 +122,13 @@ describe Mongoid::Relations::Targets::Enumerable do | |
| 122 122 | 
             
                  end
         | 
| 123 123 | 
             
                end
         | 
| 124 124 |  | 
| 125 | 
            +
                context "when compared to an enumerable class" do
         | 
| 126 | 
            +
             | 
| 127 | 
            +
                  it "returns true" do
         | 
| 128 | 
            +
                    expect(enumerable === described_class).to be true
         | 
| 129 | 
            +
                  end
         | 
| 130 | 
            +
                end
         | 
| 131 | 
            +
             | 
| 125 132 | 
             
                context "when compared to a different class" do
         | 
| 126 133 |  | 
| 127 134 | 
             
                  it "returns false" do
         | 
| @@ -1186,7 +1193,7 @@ describe Mongoid::Relations::Targets::Enumerable do | |
| 1186 1193 | 
             
                context "when the enumerable is not loaded" do
         | 
| 1187 1194 |  | 
| 1188 1195 | 
             
                  let(:criteria) do
         | 
| 1189 | 
            -
                    Post.where(person_id: person.id)
         | 
| 1196 | 
            +
                    Post.asc(:_id).where(person_id: person.id)
         | 
| 1190 1197 | 
             
                  end
         | 
| 1191 1198 |  | 
| 1192 1199 | 
             
                  let(:enumerable) do
         | 
| @@ -1272,7 +1279,7 @@ describe Mongoid::Relations::Targets::Enumerable do | |
| 1272 1279 | 
             
                    context "when accessing from a reloaded child" do
         | 
| 1273 1280 |  | 
| 1274 1281 | 
             
                      it "returns the last document" do
         | 
| 1275 | 
            -
                        expect(post_one.reload.person.posts.last).to eq(post_two)
         | 
| 1282 | 
            +
                        expect(post_one.reload.person.posts.asc(:_id).last).to eq(post_two)
         | 
| 1276 1283 | 
             
                      end
         | 
| 1277 1284 | 
             
                    end
         | 
| 1278 1285 | 
             
                  end
         | 
| @@ -115,7 +115,7 @@ describe Mongoid::Reloadable do | |
| 115 115 | 
             
                      before do
         | 
| 116 116 | 
             
                        Person.collection.find(
         | 
| 117 117 | 
             
                          { "_id" => person.id }
         | 
| 118 | 
            -
                        ). | 
| 118 | 
            +
                        ).update_one({ "$set" => { "addresses.0.number" => 3 }})
         | 
| 119 119 | 
             
                      end
         | 
| 120 120 |  | 
| 121 121 | 
             
                      let!(:reloaded) do
         | 
| @@ -143,7 +143,7 @@ describe Mongoid::Reloadable do | |
| 143 143 |  | 
| 144 144 | 
             
                      before do
         | 
| 145 145 | 
             
                        Person.collection.find({ "_id" => person.id }).
         | 
| 146 | 
            -
                           | 
| 146 | 
            +
                          update_one({ "$set" => { "name.last_name" => "Vicious" }})
         | 
| 147 147 | 
             
                      end
         | 
| 148 148 |  | 
| 149 149 | 
             
                      let!(:reloaded) do
         | 
| @@ -176,7 +176,7 @@ describe Mongoid::Reloadable do | |
| 176 176 |  | 
| 177 177 | 
             
                    before do
         | 
| 178 178 | 
             
                      Person.collection.find({ "_id" => person.id }).
         | 
| 179 | 
            -
                         | 
| 179 | 
            +
                        update_one({ "$set" => { "addresses.0.locations.0.name" => "work" }})
         | 
| 180 180 | 
             
                    end
         | 
| 181 181 |  | 
| 182 182 | 
             
                    let!(:reloaded) do
         | 
| @@ -209,7 +209,7 @@ describe Mongoid::Reloadable do | |
| 209 209 |  | 
| 210 210 | 
             
                  before do
         | 
| 211 211 | 
             
                    Person.collection.find({ "_id" => person.id }).
         | 
| 212 | 
            -
                       | 
| 212 | 
            +
                      update_one({ "$set" => { "addresses" => [] }})
         | 
| 213 213 | 
             
                    person.reload
         | 
| 214 214 | 
             
                  end
         | 
| 215 215 |  | 
| @@ -232,7 +232,7 @@ describe Mongoid::Reloadable do | |
| 232 232 |  | 
| 233 233 | 
             
                    before do
         | 
| 234 234 | 
             
                      Game.collection.find({ "_id" => game.id }).
         | 
| 235 | 
            -
                         | 
| 235 | 
            +
                        update_one({ "$set" => { "score" => 75 }})
         | 
| 236 236 | 
             
                      person.reload
         | 
| 237 237 | 
             
                    end
         | 
| 238 238 |  | 
| @@ -251,7 +251,7 @@ describe Mongoid::Reloadable do | |
| 251 251 |  | 
| 252 252 | 
             
                      before do
         | 
| 253 253 | 
             
                        Person.collection.find({ "_id" => person.id }).
         | 
| 254 | 
            -
                           | 
| 254 | 
            +
                          update_one({ "$set" => { "title" => "Mam" }})
         | 
| 255 255 | 
             
                        game.reload
         | 
| 256 256 | 
             
                      end
         | 
| 257 257 |  |