mongoid 7.1.7 → 7.1.11
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/README.md +1 -1
 - data/Rakefile +31 -0
 - data/lib/config/locales/en.yml +13 -0
 - data/lib/mongoid/association/embedded/embeds_many/proxy.rb +1 -1
 - data/lib/mongoid/association/proxy.rb +1 -1
 - data/lib/mongoid/association/referenced/has_many/enumerable.rb +1 -1
 - data/lib/mongoid/association/referenced/has_many/proxy.rb +1 -1
 - data/lib/mongoid/attributes.rb +8 -1
 - data/lib/mongoid/config/environment.rb +9 -1
 - data/lib/mongoid/contextual/atomic.rb +7 -2
 - data/lib/mongoid/contextual/none.rb +3 -0
 - data/lib/mongoid/criteria/queryable/selectable.rb +2 -2
 - data/lib/mongoid/criteria/queryable/storable.rb +4 -4
 - data/lib/mongoid/criteria.rb +1 -1
 - data/lib/mongoid/document.rb +3 -2
 - data/lib/mongoid/errors/empty_config_file.rb +26 -0
 - data/lib/mongoid/errors/invalid_config_file.rb +26 -0
 - data/lib/mongoid/errors/mongoid_error.rb +1 -1
 - data/lib/mongoid/errors.rb +2 -0
 - data/lib/mongoid/interceptable.rb +1 -1
 - data/lib/mongoid/persistence_context.rb +3 -1
 - data/lib/mongoid/reloadable.rb +5 -0
 - data/lib/mongoid/tasks/database.rb +1 -1
 - data/lib/mongoid/validatable/associated.rb +1 -1
 - data/lib/mongoid/validatable/presence.rb +3 -3
 - data/lib/mongoid/validatable/uniqueness.rb +1 -1
 - data/lib/mongoid/version.rb +1 -1
 - data/lib/mongoid.rb +1 -0
 - data/lib/rails/generators/mongoid/config/config_generator.rb +8 -1
 - data/lib/rails/generators/mongoid/config/templates/mongoid.yml +1 -1
 - data/spec/app/models/address.rb +4 -0
 - data/spec/app/models/mop.rb +26 -0
 - data/spec/app/models/person.rb +9 -0
 - data/spec/integration/app_spec.rb +144 -87
 - data/spec/integration/contextual/empty_spec.rb +142 -0
 - data/spec/integration/document_spec.rb +21 -0
 - data/spec/lite_spec_helper.rb +5 -5
 - data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +17 -4
 - data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +17 -0
 - data/spec/mongoid/attributes_spec.rb +241 -0
 - data/spec/mongoid/clients/factory_spec.rb +11 -0
 - data/spec/mongoid/clients/options_spec.rb +11 -3
 - data/spec/mongoid/config/environment_spec.rb +86 -8
 - data/spec/mongoid/contextual/atomic_spec.rb +81 -29
 - data/spec/mongoid/contextual/geo_near_spec.rb +1 -1
 - data/spec/mongoid/criteria_spec.rb +4 -0
 - data/spec/mongoid/document_query_spec.rb +51 -0
 - data/spec/mongoid/document_spec.rb +21 -1
 - data/spec/mongoid/errors/invalid_config_file_spec.rb +32 -0
 - data/spec/mongoid/errors/mongoid_error_spec.rb +20 -8
 - data/spec/mongoid/factory_spec.rb +2 -2
 - data/spec/mongoid/persistable/savable_spec.rb +4 -4
 - data/spec/mongoid/persistable/settable_spec.rb +30 -0
 - data/spec/mongoid/persistable/updatable_spec.rb +2 -0
 - data/spec/mongoid/persistable_spec.rb +2 -2
 - 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/cluster_config.rb +19 -4
 - data/spec/shared/lib/mrss/constraints.rb +67 -12
 - data/spec/shared/lib/mrss/docker_runner.rb +10 -1
 - data/spec/shared/lib/mrss/event_subscriber.rb +200 -0
 - data/spec/shared/lib/mrss/lite_constraints.rb +16 -0
 - data/spec/shared/lib/mrss/server_version_registry.rb +84 -33
 - data/spec/shared/lib/mrss/spec_organizer.rb +32 -2
 - data/spec/shared/lib/mrss/utils.rb +15 -0
 - data/spec/shared/share/Dockerfile.erb +126 -32
 - data/spec/shared/share/haproxy-1.conf +16 -0
 - data/spec/shared/share/haproxy-2.conf +17 -0
 - data/spec/shared/shlib/server.sh +123 -26
 - data/spec/shared/shlib/set_env.sh +4 -1
 - data/spec/spec_helper.rb +3 -1
 - data/spec/support/constraints.rb +0 -226
 - data/spec/support/spec_config.rb +8 -0
 - data.tar.gz.sig +0 -0
 - metadata +555 -503
 - metadata.gz.sig +0 -0
 - data/spec/support/child_process_helper.rb +0 -76
 - data/spec/support/lite_constraints.rb +0 -22
 
| 
         @@ -19,4 +19,25 @@ describe Mongoid::Document do 
     | 
|
| 
       19 
19 
     | 
    
         
             
                  DelegatingPatient.default_client.should be Mongoid.default_client
         
     | 
| 
       20 
20 
     | 
    
         
             
                end
         
     | 
| 
       21 
21 
     | 
    
         
             
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              describe '#reload' do
         
     | 
| 
      
 24 
     | 
    
         
            +
                context 'when changing shard key value' do
         
     | 
| 
      
 25 
     | 
    
         
            +
                  require_topology :sharded
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                  let(:profile) do
         
     | 
| 
      
 28 
     | 
    
         
            +
                    # Profile shard_key :name
         
     | 
| 
      
 29 
     | 
    
         
            +
                    Profile.create!(name: "Alice")
         
     | 
| 
      
 30 
     | 
    
         
            +
                  end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                  it "successfully reloads the document after saving an update to the sharded field" do
         
     | 
| 
      
 33 
     | 
    
         
            +
                    expect(profile.name).to eq("Alice")
         
     | 
| 
      
 34 
     | 
    
         
            +
                    profile.name = "Bob"
         
     | 
| 
      
 35 
     | 
    
         
            +
                    profile.save!
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                    profile.reload
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                    expect(profile.name).to eq("Bob")
         
     | 
| 
      
 40 
     | 
    
         
            +
                  end
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
              end
         
     | 
| 
       22 
43 
     | 
    
         
             
            end
         
     | 
    
        data/spec/lite_spec_helper.rb
    CHANGED
    
    | 
         @@ -3,6 +3,7 @@ 
     | 
|
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            $LOAD_PATH.unshift(File.dirname(__FILE__))
         
     | 
| 
       5 
5 
     | 
    
         
             
            $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
         
     | 
| 
      
 6 
     | 
    
         
            +
            $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "shared", "lib"))
         
     | 
| 
       6 
7 
     | 
    
         | 
| 
       7 
8 
     | 
    
         
             
            # Load byebug before mongoid, to place breakpoints in the lib methods.
         
     | 
| 
       8 
9 
     | 
    
         
             
            # But SpecConfig needs the driver code - require the driver here.
         
     | 
| 
         @@ -15,7 +16,7 @@ require "mongo" 
     | 
|
| 
       15 
16 
     | 
    
         
             
            require 'pp'
         
     | 
| 
       16 
17 
     | 
    
         | 
| 
       17 
18 
     | 
    
         
             
            require 'support/spec_config'
         
     | 
| 
       18 
     | 
    
         
            -
            require ' 
     | 
| 
      
 19 
     | 
    
         
            +
            require 'mrss/lite_constraints'
         
     | 
| 
       19 
20 
     | 
    
         
             
            require "support/session_registry"
         
     | 
| 
       20 
21 
     | 
    
         | 
| 
       21 
22 
     | 
    
         
             
            unless SpecConfig.instance.ci?
         
     | 
| 
         @@ -52,9 +53,8 @@ RSpec.configure do |config| 
     | 
|
| 
       52 
53 
     | 
    
         | 
| 
       53 
54 
     | 
    
         
             
              if SpecConfig.instance.ci? && !%w(1 true yes).include?(ENV['INTERACTIVE']&.downcase)
         
     | 
| 
       54 
55 
     | 
    
         
             
                timeout = if SpecConfig.instance.app_tests?
         
     | 
| 
       55 
     | 
    
         
            -
                  #  
     | 
| 
       56 
     | 
    
         
            -
                   
     | 
| 
       57 
     | 
    
         
            -
                  300
         
     | 
| 
      
 56 
     | 
    
         
            +
                  # App tests under JRuby take a REALLY long time (over 5 minutes per test).
         
     | 
| 
      
 57 
     | 
    
         
            +
                  500
         
     | 
| 
       58 
58 
     | 
    
         
             
                else
         
     | 
| 
       59 
59 
     | 
    
         
             
                  # Allow a max of 30 seconds per test.
         
     | 
| 
       60 
60 
     | 
    
         
             
                  # Tests should take under 10 seconds ideally but it seems
         
     | 
| 
         @@ -68,7 +68,7 @@ RSpec.configure do |config| 
     | 
|
| 
       68 
68 
     | 
    
         
             
                end
         
     | 
| 
       69 
69 
     | 
    
         
             
              end
         
     | 
| 
       70 
70 
     | 
    
         | 
| 
       71 
     | 
    
         
            -
              config.extend(LiteConstraints)
         
     | 
| 
      
 71 
     | 
    
         
            +
              config.extend(Mrss::LiteConstraints)
         
     | 
| 
       72 
72 
     | 
    
         
             
            end
         
     | 
| 
       73 
73 
     | 
    
         | 
| 
       74 
74 
     | 
    
         
             
            # require all shared examples
         
     | 
| 
         @@ -2416,13 +2416,26 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do 
     | 
|
| 
       2416 
2416 
     | 
    
         
             
                end
         
     | 
| 
       2417 
2417 
     | 
    
         | 
| 
       2418 
2418 
     | 
    
         
             
                context "when providing a criteria class method" do
         
     | 
| 
      
 2419 
     | 
    
         
            +
                  context "without keyword arguments" do
         
     | 
| 
       2419 
2420 
     | 
    
         | 
| 
       2420 
     | 
    
         
            -
             
     | 
| 
       2421 
     | 
    
         
            -
             
     | 
| 
      
 2421 
     | 
    
         
            +
                    let(:addresses) do
         
     | 
| 
      
 2422 
     | 
    
         
            +
                      person.addresses.california
         
     | 
| 
      
 2423 
     | 
    
         
            +
                    end
         
     | 
| 
      
 2424 
     | 
    
         
            +
             
     | 
| 
      
 2425 
     | 
    
         
            +
                    it "applies the criteria to the documents" do
         
     | 
| 
      
 2426 
     | 
    
         
            +
                      expect(addresses).to eq([ address_one ])
         
     | 
| 
      
 2427 
     | 
    
         
            +
                    end
         
     | 
| 
       2422 
2428 
     | 
    
         
             
                  end
         
     | 
| 
       2423 
2429 
     | 
    
         | 
| 
       2424 
     | 
    
         
            -
                   
     | 
| 
       2425 
     | 
    
         
            -
             
     | 
| 
      
 2430 
     | 
    
         
            +
                  context "with keyword arguments" do
         
     | 
| 
      
 2431 
     | 
    
         
            +
             
     | 
| 
      
 2432 
     | 
    
         
            +
                    let(:addresses) do
         
     | 
| 
      
 2433 
     | 
    
         
            +
                      person.addresses.city_and_state(city: "Sacramento", state: "CA")
         
     | 
| 
      
 2434 
     | 
    
         
            +
                    end
         
     | 
| 
      
 2435 
     | 
    
         
            +
             
     | 
| 
      
 2436 
     | 
    
         
            +
                    it "applies the criteria to the documents" do
         
     | 
| 
      
 2437 
     | 
    
         
            +
                      expect(addresses).to eq([])
         
     | 
| 
      
 2438 
     | 
    
         
            +
                    end
         
     | 
| 
       2426 
2439 
     | 
    
         
             
                  end
         
     | 
| 
       2427 
2440 
     | 
    
         
             
                end
         
     | 
| 
       2428 
2441 
     | 
    
         | 
| 
         @@ -1332,4 +1332,21 @@ describe Mongoid::Association::Referenced::BelongsTo::Proxy do 
     | 
|
| 
       1332 
1332 
     | 
    
         
             
                  end
         
     | 
| 
       1333 
1333 
     | 
    
         
             
                end
         
     | 
| 
       1334 
1334 
     | 
    
         
             
              end
         
     | 
| 
      
 1335 
     | 
    
         
            +
             
     | 
| 
      
 1336 
     | 
    
         
            +
              describe "#method_missing" do
         
     | 
| 
      
 1337 
     | 
    
         
            +
                  let!(:person) do
         
     | 
| 
      
 1338 
     | 
    
         
            +
                    Person.create
         
     | 
| 
      
 1339 
     | 
    
         
            +
                  end
         
     | 
| 
      
 1340 
     | 
    
         
            +
             
     | 
| 
      
 1341 
     | 
    
         
            +
                  let!(:game) do
         
     | 
| 
      
 1342 
     | 
    
         
            +
                    Game.create(person: person)
         
     | 
| 
      
 1343 
     | 
    
         
            +
                  end
         
     | 
| 
      
 1344 
     | 
    
         
            +
             
     | 
| 
      
 1345 
     | 
    
         
            +
                it 'handles keyword args' do
         
     | 
| 
      
 1346 
     | 
    
         
            +
                  expect do
         
     | 
| 
      
 1347 
     | 
    
         
            +
                    game.person.set_personal_data(ssn: '123', age: 25)
         
     | 
| 
      
 1348 
     | 
    
         
            +
                  end.not_to raise_error
         
     | 
| 
      
 1349 
     | 
    
         
            +
                end
         
     | 
| 
      
 1350 
     | 
    
         
            +
             
     | 
| 
      
 1351 
     | 
    
         
            +
              end
         
     | 
| 
       1335 
1352 
     | 
    
         
             
            end
         
     | 
| 
         @@ -245,6 +245,97 @@ describe Mongoid::Attributes do 
     | 
|
| 
       245 
245 
     | 
    
         
             
                    end
         
     | 
| 
       246 
246 
     | 
    
         
             
                  end
         
     | 
| 
       247 
247 
     | 
    
         | 
| 
      
 248 
     | 
    
         
            +
                  context "when the field was not explicitly defined" do
         
     | 
| 
      
 249 
     | 
    
         
            +
             
     | 
| 
      
 250 
     | 
    
         
            +
                    context "when excluding with only and the field was not excluded" do
         
     | 
| 
      
 251 
     | 
    
         
            +
             
     | 
| 
      
 252 
     | 
    
         
            +
                      let(:from_db) do
         
     | 
| 
      
 253 
     | 
    
         
            +
                        Person.only(:_id).first
         
     | 
| 
      
 254 
     | 
    
         
            +
                      end
         
     | 
| 
      
 255 
     | 
    
         
            +
             
     | 
| 
      
 256 
     | 
    
         
            +
                      it "raises an error" do
         
     | 
| 
      
 257 
     | 
    
         
            +
                        expect {
         
     | 
| 
      
 258 
     | 
    
         
            +
                          from_db[:undefined_field]
         
     | 
| 
      
 259 
     | 
    
         
            +
                        }.to raise_error(ActiveModel::MissingAttributeError)
         
     | 
| 
      
 260 
     | 
    
         
            +
                      end
         
     | 
| 
      
 261 
     | 
    
         
            +
                    end
         
     | 
| 
      
 262 
     | 
    
         
            +
             
     | 
| 
      
 263 
     | 
    
         
            +
                    context "when excluding with without and the field was excluded" do
         
     | 
| 
      
 264 
     | 
    
         
            +
             
     | 
| 
      
 265 
     | 
    
         
            +
                      let(:from_db) do
         
     | 
| 
      
 266 
     | 
    
         
            +
                        Person.without(:title).first
         
     | 
| 
      
 267 
     | 
    
         
            +
                      end
         
     | 
| 
      
 268 
     | 
    
         
            +
             
     | 
| 
      
 269 
     | 
    
         
            +
                      it "raises an error" do
         
     | 
| 
      
 270 
     | 
    
         
            +
                        expect {
         
     | 
| 
      
 271 
     | 
    
         
            +
                          from_db[:title]
         
     | 
| 
      
 272 
     | 
    
         
            +
                        }.to raise_error(ActiveModel::MissingAttributeError)
         
     | 
| 
      
 273 
     | 
    
         
            +
                      end
         
     | 
| 
      
 274 
     | 
    
         
            +
                    end
         
     | 
| 
      
 275 
     | 
    
         
            +
             
     | 
| 
      
 276 
     | 
    
         
            +
                    context "when excluding with without and the field was not excluded" do
         
     | 
| 
      
 277 
     | 
    
         
            +
             
     | 
| 
      
 278 
     | 
    
         
            +
                      let(:from_db) do
         
     | 
| 
      
 279 
     | 
    
         
            +
                        Person.without(:title).first
         
     | 
| 
      
 280 
     | 
    
         
            +
                      end
         
     | 
| 
      
 281 
     | 
    
         
            +
             
     | 
| 
      
 282 
     | 
    
         
            +
                      it "returns nil" do
         
     | 
| 
      
 283 
     | 
    
         
            +
                        from_db[:undefined_field].should be nil
         
     | 
| 
      
 284 
     | 
    
         
            +
                      end
         
     | 
| 
      
 285 
     | 
    
         
            +
                    end
         
     | 
| 
      
 286 
     | 
    
         
            +
                  end
         
     | 
| 
      
 287 
     | 
    
         
            +
             
     | 
| 
      
 288 
     | 
    
         
            +
                  context 'when projecting with #only' do
         
     | 
| 
      
 289 
     | 
    
         
            +
                    let!(:person) do
         
     | 
| 
      
 290 
     | 
    
         
            +
                      Person.create(title: 'sir', name: { first_name: 'Jose', language: { name: 'es' } })
         
     | 
| 
      
 291 
     | 
    
         
            +
                    end
         
     | 
| 
      
 292 
     | 
    
         
            +
             
     | 
| 
      
 293 
     | 
    
         
            +
                    context 'when projecting an embedded association' do
         
     | 
| 
      
 294 
     | 
    
         
            +
                      let(:from_db) do
         
     | 
| 
      
 295 
     | 
    
         
            +
                        Person.only(:name).first
         
     | 
| 
      
 296 
     | 
    
         
            +
                      end
         
     | 
| 
      
 297 
     | 
    
         
            +
             
     | 
| 
      
 298 
     | 
    
         
            +
                      context 'when retrieving a field of the association using the dot notation' do
         
     | 
| 
      
 299 
     | 
    
         
            +
             
     | 
| 
      
 300 
     | 
    
         
            +
                        it 'retrieves the field' do
         
     | 
| 
      
 301 
     | 
    
         
            +
                          pending 'MONGOID-5032, fixed in 7.3'
         
     | 
| 
      
 302 
     | 
    
         
            +
             
     | 
| 
      
 303 
     | 
    
         
            +
                          expect(from_db['name.first_name']).to eq 'Jose'
         
     | 
| 
      
 304 
     | 
    
         
            +
                        end
         
     | 
| 
      
 305 
     | 
    
         
            +
                      end
         
     | 
| 
      
 306 
     | 
    
         
            +
             
     | 
| 
      
 307 
     | 
    
         
            +
                      context 'when retrieving a field of a nested association using the dot notation' do
         
     | 
| 
      
 308 
     | 
    
         
            +
                        it 'retrieves the field' do
         
     | 
| 
      
 309 
     | 
    
         
            +
                          pending 'MONGOID-5032, fixed in 7.3'
         
     | 
| 
      
 310 
     | 
    
         
            +
             
     | 
| 
      
 311 
     | 
    
         
            +
                          expect(from_db['name.language.name']).to eq 'es'
         
     | 
| 
      
 312 
     | 
    
         
            +
                        end
         
     | 
| 
      
 313 
     | 
    
         
            +
                      end
         
     | 
| 
      
 314 
     | 
    
         
            +
                    end
         
     | 
| 
      
 315 
     | 
    
         
            +
             
     | 
| 
      
 316 
     | 
    
         
            +
                    context 'when projecting a sub-association of an embedded association' do
         
     | 
| 
      
 317 
     | 
    
         
            +
                      let(:from_db) do
         
     | 
| 
      
 318 
     | 
    
         
            +
                        Person.only('name.language').first
         
     | 
| 
      
 319 
     | 
    
         
            +
                      end
         
     | 
| 
      
 320 
     | 
    
         
            +
             
     | 
| 
      
 321 
     | 
    
         
            +
                      context 'when retrieving a field under the projected sub-association' do
         
     | 
| 
      
 322 
     | 
    
         
            +
                        it 'retrieves the field' do
         
     | 
| 
      
 323 
     | 
    
         
            +
                          pending 'MONGOID-5032, fixed in 7.3'
         
     | 
| 
      
 324 
     | 
    
         
            +
             
     | 
| 
      
 325 
     | 
    
         
            +
                          expect(from_db['name.language.name']).to eq 'es'
         
     | 
| 
      
 326 
     | 
    
         
            +
                        end
         
     | 
| 
      
 327 
     | 
    
         
            +
                      end
         
     | 
| 
      
 328 
     | 
    
         
            +
             
     | 
| 
      
 329 
     | 
    
         
            +
                      context 'when retrieving a non-projected field' do
         
     | 
| 
      
 330 
     | 
    
         
            +
                        it 'raises MissingAttributeError' do
         
     | 
| 
      
 331 
     | 
    
         
            +
                          expect do
         
     | 
| 
      
 332 
     | 
    
         
            +
                            from_db['name.first_name']
         
     | 
| 
      
 333 
     | 
    
         
            +
                          end.to raise_error(ActiveModel::MissingAttributeError)
         
     | 
| 
      
 334 
     | 
    
         
            +
                        end
         
     | 
| 
      
 335 
     | 
    
         
            +
                      end
         
     | 
| 
      
 336 
     | 
    
         
            +
                    end
         
     | 
| 
      
 337 
     | 
    
         
            +
                  end
         
     | 
| 
      
 338 
     | 
    
         
            +
             
     | 
| 
       248 
339 
     | 
    
         
             
                  context "when the attribute does not exist" do
         
     | 
| 
       249 
340 
     | 
    
         | 
| 
       250 
341 
     | 
    
         
             
                    before do
         
     | 
| 
         @@ -329,6 +420,67 @@ describe Mongoid::Attributes do 
     | 
|
| 
       329 
420 
     | 
    
         
             
                    expect(terms).to eq(true)
         
     | 
| 
       330 
421 
     | 
    
         
             
                  end
         
     | 
| 
       331 
422 
     | 
    
         
             
                end
         
     | 
| 
      
 423 
     | 
    
         
            +
             
     | 
| 
      
 424 
     | 
    
         
            +
                context 'when the field is not explicitly defined' do
         
     | 
| 
      
 425 
     | 
    
         
            +
                  let(:bar) { Bar.new }
         
     | 
| 
      
 426 
     | 
    
         
            +
             
     | 
| 
      
 427 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 428 
     | 
    
         
            +
                    bar['missing_field'] = 42
         
     | 
| 
      
 429 
     | 
    
         
            +
                  end
         
     | 
| 
      
 430 
     | 
    
         
            +
             
     | 
| 
      
 431 
     | 
    
         
            +
                  it 'writes the value into attributes' do
         
     | 
| 
      
 432 
     | 
    
         
            +
                    bar.attributes.should == {'_id' => bar.id, 'missing_field' => 42}
         
     | 
| 
      
 433 
     | 
    
         
            +
                  end
         
     | 
| 
      
 434 
     | 
    
         
            +
             
     | 
| 
      
 435 
     | 
    
         
            +
                  it 'makes the attribute accessible via []' do
         
     | 
| 
      
 436 
     | 
    
         
            +
                    bar['missing_field'].should == 42
         
     | 
| 
      
 437 
     | 
    
         
            +
                  end
         
     | 
| 
      
 438 
     | 
    
         
            +
             
     | 
| 
      
 439 
     | 
    
         
            +
                  context 'when writing fields on a document with projection' do
         
     | 
| 
      
 440 
     | 
    
         
            +
             
     | 
| 
      
 441 
     | 
    
         
            +
                    let!(:person) do
         
     | 
| 
      
 442 
     | 
    
         
            +
                      Person.create(title: "sir")
         
     | 
| 
      
 443 
     | 
    
         
            +
                    end
         
     | 
| 
      
 444 
     | 
    
         
            +
             
     | 
| 
      
 445 
     | 
    
         
            +
                    context "when excluding with only and the field was not excluded" do
         
     | 
| 
      
 446 
     | 
    
         
            +
             
     | 
| 
      
 447 
     | 
    
         
            +
                      let(:from_db) do
         
     | 
| 
      
 448 
     | 
    
         
            +
                        Person.only(:_id).first
         
     | 
| 
      
 449 
     | 
    
         
            +
                      end
         
     | 
| 
      
 450 
     | 
    
         
            +
             
     | 
| 
      
 451 
     | 
    
         
            +
                      it "raises an error" do
         
     | 
| 
      
 452 
     | 
    
         
            +
                        expect {
         
     | 
| 
      
 453 
     | 
    
         
            +
                          from_db[:undefined_field] = 'x'
         
     | 
| 
      
 454 
     | 
    
         
            +
                        }.to raise_error(ActiveModel::MissingAttributeError)
         
     | 
| 
      
 455 
     | 
    
         
            +
                      end
         
     | 
| 
      
 456 
     | 
    
         
            +
                    end
         
     | 
| 
      
 457 
     | 
    
         
            +
             
     | 
| 
      
 458 
     | 
    
         
            +
                    context "when excluding with without and the field was excluded" do
         
     | 
| 
      
 459 
     | 
    
         
            +
             
     | 
| 
      
 460 
     | 
    
         
            +
                      let(:from_db) do
         
     | 
| 
      
 461 
     | 
    
         
            +
                        Person.without(:title).first
         
     | 
| 
      
 462 
     | 
    
         
            +
                      end
         
     | 
| 
      
 463 
     | 
    
         
            +
             
     | 
| 
      
 464 
     | 
    
         
            +
                      it "raises an error" do
         
     | 
| 
      
 465 
     | 
    
         
            +
                        expect {
         
     | 
| 
      
 466 
     | 
    
         
            +
                          from_db[:title] = 'x'
         
     | 
| 
      
 467 
     | 
    
         
            +
                        }.to raise_error(ActiveModel::MissingAttributeError)
         
     | 
| 
      
 468 
     | 
    
         
            +
                      end
         
     | 
| 
      
 469 
     | 
    
         
            +
                    end
         
     | 
| 
      
 470 
     | 
    
         
            +
             
     | 
| 
      
 471 
     | 
    
         
            +
                    context "when excluding with without and the field was not excluded" do
         
     | 
| 
      
 472 
     | 
    
         
            +
             
     | 
| 
      
 473 
     | 
    
         
            +
                      let(:from_db) do
         
     | 
| 
      
 474 
     | 
    
         
            +
                        Person.without(:title).first
         
     | 
| 
      
 475 
     | 
    
         
            +
                      end
         
     | 
| 
      
 476 
     | 
    
         
            +
             
     | 
| 
      
 477 
     | 
    
         
            +
                      it "writes the value" do
         
     | 
| 
      
 478 
     | 
    
         
            +
                        from_db[:undefined_field] = 'x'
         
     | 
| 
      
 479 
     | 
    
         
            +
                        from_db[:undefined_field].should == 'x'
         
     | 
| 
      
 480 
     | 
    
         
            +
                      end
         
     | 
| 
      
 481 
     | 
    
         
            +
                    end
         
     | 
| 
      
 482 
     | 
    
         
            +
                  end
         
     | 
| 
      
 483 
     | 
    
         
            +
                end
         
     | 
| 
       332 
484 
     | 
    
         
             
              end
         
     | 
| 
       333 
485 
     | 
    
         | 
| 
       334 
486 
     | 
    
         
             
              describe "#_id" do
         
     | 
| 
         @@ -893,6 +1045,50 @@ describe Mongoid::Attributes do 
     | 
|
| 
       893 
1045 
     | 
    
         
             
                    expect(person.age_before_type_cast).to eq("old")
         
     | 
| 
       894 
1046 
     | 
    
         
             
                  end
         
     | 
| 
       895 
1047 
     | 
    
         
             
                end
         
     | 
| 
      
 1048 
     | 
    
         
            +
             
     | 
| 
      
 1049 
     | 
    
         
            +
                context 'when reading fields on a document with projection' do
         
     | 
| 
      
 1050 
     | 
    
         
            +
             
     | 
| 
      
 1051 
     | 
    
         
            +
                  let!(:person) do
         
     | 
| 
      
 1052 
     | 
    
         
            +
                    Person.create(title: "sir")
         
     | 
| 
      
 1053 
     | 
    
         
            +
                  end
         
     | 
| 
      
 1054 
     | 
    
         
            +
             
     | 
| 
      
 1055 
     | 
    
         
            +
                  context "when excluding with only and the field was not excluded" do
         
     | 
| 
      
 1056 
     | 
    
         
            +
             
     | 
| 
      
 1057 
     | 
    
         
            +
                    let(:from_db) do
         
     | 
| 
      
 1058 
     | 
    
         
            +
                      Person.only(:_id).first
         
     | 
| 
      
 1059 
     | 
    
         
            +
                    end
         
     | 
| 
      
 1060 
     | 
    
         
            +
             
     | 
| 
      
 1061 
     | 
    
         
            +
                    it "raises an error" do
         
     | 
| 
      
 1062 
     | 
    
         
            +
                      expect {
         
     | 
| 
      
 1063 
     | 
    
         
            +
                        from_db.read_attribute(:undefined_field)
         
     | 
| 
      
 1064 
     | 
    
         
            +
                      }.to raise_error(ActiveModel::MissingAttributeError)
         
     | 
| 
      
 1065 
     | 
    
         
            +
                    end
         
     | 
| 
      
 1066 
     | 
    
         
            +
                  end
         
     | 
| 
      
 1067 
     | 
    
         
            +
             
     | 
| 
      
 1068 
     | 
    
         
            +
                  context "when excluding with without and the field was excluded" do
         
     | 
| 
      
 1069 
     | 
    
         
            +
             
     | 
| 
      
 1070 
     | 
    
         
            +
                    let(:from_db) do
         
     | 
| 
      
 1071 
     | 
    
         
            +
                      Person.without(:title).first
         
     | 
| 
      
 1072 
     | 
    
         
            +
                    end
         
     | 
| 
      
 1073 
     | 
    
         
            +
             
     | 
| 
      
 1074 
     | 
    
         
            +
                    it "raises an error" do
         
     | 
| 
      
 1075 
     | 
    
         
            +
                      expect {
         
     | 
| 
      
 1076 
     | 
    
         
            +
                        from_db.read_attribute(:title)
         
     | 
| 
      
 1077 
     | 
    
         
            +
                      }.to raise_error(ActiveModel::MissingAttributeError)
         
     | 
| 
      
 1078 
     | 
    
         
            +
                    end
         
     | 
| 
      
 1079 
     | 
    
         
            +
                  end
         
     | 
| 
      
 1080 
     | 
    
         
            +
             
     | 
| 
      
 1081 
     | 
    
         
            +
                  context "when excluding with without and the field was not excluded" do
         
     | 
| 
      
 1082 
     | 
    
         
            +
             
     | 
| 
      
 1083 
     | 
    
         
            +
                    let(:from_db) do
         
     | 
| 
      
 1084 
     | 
    
         
            +
                      Person.without(:title).first
         
     | 
| 
      
 1085 
     | 
    
         
            +
                    end
         
     | 
| 
      
 1086 
     | 
    
         
            +
             
     | 
| 
      
 1087 
     | 
    
         
            +
                    it "returns nil" do
         
     | 
| 
      
 1088 
     | 
    
         
            +
                      from_db.read_attribute(:undefined_field).should be nil
         
     | 
| 
      
 1089 
     | 
    
         
            +
                    end
         
     | 
| 
      
 1090 
     | 
    
         
            +
                  end
         
     | 
| 
      
 1091 
     | 
    
         
            +
                end
         
     | 
| 
       896 
1092 
     | 
    
         
             
              end
         
     | 
| 
       897 
1093 
     | 
    
         | 
| 
       898 
1094 
     | 
    
         
             
              describe "#attribute_present?" do
         
     | 
| 
         @@ -1398,6 +1594,51 @@ describe Mongoid::Attributes do 
     | 
|
| 
       1398 
1594 
     | 
    
         
             
                    expect(dictionary.description).to eq('foo')
         
     | 
| 
       1399 
1595 
     | 
    
         
             
                  end
         
     | 
| 
       1400 
1596 
     | 
    
         
             
                end
         
     | 
| 
      
 1597 
     | 
    
         
            +
             
     | 
| 
      
 1598 
     | 
    
         
            +
                context 'when writing fields on a document with projection' do
         
     | 
| 
      
 1599 
     | 
    
         
            +
             
     | 
| 
      
 1600 
     | 
    
         
            +
                  let!(:person) do
         
     | 
| 
      
 1601 
     | 
    
         
            +
                    Person.create(title: "sir")
         
     | 
| 
      
 1602 
     | 
    
         
            +
                  end
         
     | 
| 
      
 1603 
     | 
    
         
            +
             
     | 
| 
      
 1604 
     | 
    
         
            +
                  context "when excluding with only and the field was not excluded" do
         
     | 
| 
      
 1605 
     | 
    
         
            +
             
     | 
| 
      
 1606 
     | 
    
         
            +
                    let(:from_db) do
         
     | 
| 
      
 1607 
     | 
    
         
            +
                      Person.only(:_id).first
         
     | 
| 
      
 1608 
     | 
    
         
            +
                    end
         
     | 
| 
      
 1609 
     | 
    
         
            +
             
     | 
| 
      
 1610 
     | 
    
         
            +
                    it "raises an error" do
         
     | 
| 
      
 1611 
     | 
    
         
            +
                      expect {
         
     | 
| 
      
 1612 
     | 
    
         
            +
                        from_db.write_attribute(:undefined_field, 'x')
         
     | 
| 
      
 1613 
     | 
    
         
            +
                      }.to raise_error(ActiveModel::MissingAttributeError)
         
     | 
| 
      
 1614 
     | 
    
         
            +
                    end
         
     | 
| 
      
 1615 
     | 
    
         
            +
                  end
         
     | 
| 
      
 1616 
     | 
    
         
            +
             
     | 
| 
      
 1617 
     | 
    
         
            +
                  context "when excluding with without and the field was excluded" do
         
     | 
| 
      
 1618 
     | 
    
         
            +
             
     | 
| 
      
 1619 
     | 
    
         
            +
                    let(:from_db) do
         
     | 
| 
      
 1620 
     | 
    
         
            +
                      Person.without(:title).first
         
     | 
| 
      
 1621 
     | 
    
         
            +
                    end
         
     | 
| 
      
 1622 
     | 
    
         
            +
             
     | 
| 
      
 1623 
     | 
    
         
            +
                    it "raises an error" do
         
     | 
| 
      
 1624 
     | 
    
         
            +
                      expect {
         
     | 
| 
      
 1625 
     | 
    
         
            +
                        from_db.write_attribute(:title, 'x')
         
     | 
| 
      
 1626 
     | 
    
         
            +
                      }.to raise_error(ActiveModel::MissingAttributeError)
         
     | 
| 
      
 1627 
     | 
    
         
            +
                    end
         
     | 
| 
      
 1628 
     | 
    
         
            +
                  end
         
     | 
| 
      
 1629 
     | 
    
         
            +
             
     | 
| 
      
 1630 
     | 
    
         
            +
                  context "when excluding with without and the field was not excluded" do
         
     | 
| 
      
 1631 
     | 
    
         
            +
             
     | 
| 
      
 1632 
     | 
    
         
            +
                    let(:from_db) do
         
     | 
| 
      
 1633 
     | 
    
         
            +
                      Person.without(:title).first
         
     | 
| 
      
 1634 
     | 
    
         
            +
                    end
         
     | 
| 
      
 1635 
     | 
    
         
            +
             
     | 
| 
      
 1636 
     | 
    
         
            +
                    it "writes the value" do
         
     | 
| 
      
 1637 
     | 
    
         
            +
                      from_db.write_attribute(:undefined_field, 'x')
         
     | 
| 
      
 1638 
     | 
    
         
            +
                      from_db.read_attribute(:undefined_field).should == 'x'
         
     | 
| 
      
 1639 
     | 
    
         
            +
                    end
         
     | 
| 
      
 1640 
     | 
    
         
            +
                  end
         
     | 
| 
      
 1641 
     | 
    
         
            +
                end
         
     | 
| 
       1401 
1642 
     | 
    
         
             
              end
         
     | 
| 
       1402 
1643 
     | 
    
         | 
| 
       1403 
1644 
     | 
    
         
             
              describe "#typed_value_for" do
         
     | 
| 
         @@ -65,6 +65,17 @@ describe Mongoid::Clients::Factory do 
     | 
|
| 
       65 
65 
     | 
    
         
             
                        expect(client).to be_a(Mongo::Client)
         
     | 
| 
       66 
66 
     | 
    
         
             
                      end
         
     | 
| 
       67 
67 
     | 
    
         | 
| 
      
 68 
     | 
    
         
            +
                      context 'not JRuby' do
         
     | 
| 
      
 69 
     | 
    
         
            +
                        # Run this test on JRuby when driver 2.16.0 is released -
         
     | 
| 
      
 70 
     | 
    
         
            +
                        # see RUBY-2771.
         
     | 
| 
      
 71 
     | 
    
         
            +
                        fails_on_jruby
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
                        it 'does not produce driver warnings' do
         
     | 
| 
      
 74 
     | 
    
         
            +
                          Mongo::Logger.logger.should_not receive(:warn)
         
     | 
| 
      
 75 
     | 
    
         
            +
                          client
         
     | 
| 
      
 76 
     | 
    
         
            +
                        end
         
     | 
| 
      
 77 
     | 
    
         
            +
                      end
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
       68 
79 
     | 
    
         
             
                      let(:cluster_addresses) do
         
     | 
| 
       69 
80 
     | 
    
         
             
                        cluster.addresses.map(&:to_s)
         
     | 
| 
       70 
81 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -83,9 +83,11 @@ describe Mongoid::Clients::Options, retry: 3 do 
     | 
|
| 
       83 
83 
     | 
    
         | 
| 
       84 
84 
     | 
    
         
             
                    let!(:connections_and_cluster_during) do
         
     | 
| 
       85 
85 
     | 
    
         
             
                      connections = nil
         
     | 
| 
       86 
     | 
    
         
            -
                      cluster =  
     | 
| 
      
 86 
     | 
    
         
            +
                      cluster = nil
         
     | 
| 
      
 87 
     | 
    
         
            +
                      Minim.with(options) do |klass|
         
     | 
| 
       87 
88 
     | 
    
         
             
                        klass.where(name: 'emily').to_a
         
     | 
| 
       88 
89 
     | 
    
         
             
                        connections = Minim.mongo_client.database.command(serverStatus: 1).first['connections']['current']
         
     | 
| 
      
 90 
     | 
    
         
            +
                        cluster = Minim.collection.cluster
         
     | 
| 
       89 
91 
     | 
    
         
             
                      end
         
     | 
| 
       90 
92 
     | 
    
         
             
                      [ connections, cluster ]
         
     | 
| 
       91 
93 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -124,7 +126,10 @@ describe Mongoid::Clients::Options, retry: 3 do 
     | 
|
| 
       124 
126 
     | 
    
         
             
                      end
         
     | 
| 
       125 
127 
     | 
    
         | 
| 
       126 
128 
     | 
    
         
             
                      it 'disconnects the new cluster when the block exits' do
         
     | 
| 
       127 
     | 
    
         
            -
                        expect( 
     | 
| 
      
 129 
     | 
    
         
            +
                        expect(cluster_after).not_to be(cluster_during)
         
     | 
| 
      
 130 
     | 
    
         
            +
             
     | 
| 
      
 131 
     | 
    
         
            +
                        cluster_during.connected?.should be false
         
     | 
| 
      
 132 
     | 
    
         
            +
                        cluster_before.connected?.should be true
         
     | 
| 
       128 
133 
     | 
    
         
             
                      end
         
     | 
| 
       129 
134 
     | 
    
         
             
                    end
         
     | 
| 
       130 
135 
     | 
    
         | 
| 
         @@ -138,11 +143,14 @@ describe Mongoid::Clients::Options, retry: 3 do 
     | 
|
| 
       138 
143 
     | 
    
         | 
| 
       139 
144 
     | 
    
         
             
                      it 'does not create a new cluster' do
         
     | 
| 
       140 
145 
     | 
    
         
             
                        expect(connections_during).to eq(connections_before)
         
     | 
| 
      
 146 
     | 
    
         
            +
             
     | 
| 
      
 147 
     | 
    
         
            +
                        cluster_during.should be cluster_before
         
     | 
| 
       141 
148 
     | 
    
         
             
                      end
         
     | 
| 
       142 
149 
     | 
    
         | 
| 
       143 
150 
     | 
    
         
             
                      it 'does not disconnect the original cluster' do
         
     | 
| 
       144 
     | 
    
         
            -
                        expect(connections_after).to eq(connections_before)
         
     | 
| 
       145 
151 
     | 
    
         
             
                        expect(cluster_before).to be(cluster_after)
         
     | 
| 
      
 152 
     | 
    
         
            +
             
     | 
| 
      
 153 
     | 
    
         
            +
                        cluster_before.connected?.should be true
         
     | 
| 
       146 
154 
     | 
    
         
             
                      end
         
     | 
| 
       147 
155 
     | 
    
         
             
                    end
         
     | 
| 
       148 
156 
     | 
    
         | 
| 
         @@ -5,9 +5,19 @@ require "spec_helper" 
     | 
|
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
            describe Mongoid::Config::Environment do
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
               
     | 
| 
       9 
     | 
    
         
            -
                Rails 
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
      
 8 
     | 
    
         
            +
              around do |example|
         
     | 
| 
      
 9 
     | 
    
         
            +
                if defined?(Rails)
         
     | 
| 
      
 10 
     | 
    
         
            +
                  SavedRails = Rails
         
     | 
| 
      
 11 
     | 
    
         
            +
                  example.run
         
     | 
| 
      
 12 
     | 
    
         
            +
                  Object.send(:remove_const, :Rails) if defined?(Rails)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  Rails = SavedRails
         
     | 
| 
      
 14 
     | 
    
         
            +
                  Object.send(:remove_const, :SavedRails)
         
     | 
| 
      
 15 
     | 
    
         
            +
                else
         
     | 
| 
      
 16 
     | 
    
         
            +
                  example.run
         
     | 
| 
      
 17 
     | 
    
         
            +
                  if defined?(Rails)
         
     | 
| 
      
 18 
     | 
    
         
            +
                    Object.send(:remove_const, :Rails)
         
     | 
| 
      
 19 
     | 
    
         
            +
                  end
         
     | 
| 
      
 20 
     | 
    
         
            +
                end
         
     | 
| 
       11 
21 
     | 
    
         
             
              end
         
     | 
| 
       12 
22 
     | 
    
         | 
| 
       13 
23 
     | 
    
         
             
              describe "#env_name" do
         
     | 
| 
         @@ -24,11 +34,6 @@ describe Mongoid::Config::Environment do 
     | 
|
| 
       24 
34 
     | 
    
         
             
                      end
         
     | 
| 
       25 
35 
     | 
    
         
             
                    end
         
     | 
| 
       26 
36 
     | 
    
         | 
| 
       27 
     | 
    
         
            -
                    after do
         
     | 
| 
       28 
     | 
    
         
            -
                      RailsTemp = Rails
         
     | 
| 
       29 
     | 
    
         
            -
                      Object.send(:remove_const, :Rails)
         
     | 
| 
       30 
     | 
    
         
            -
                    end
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
37 
     | 
    
         
             
                    it "returns the rails environment" do
         
     | 
| 
       33 
38 
     | 
    
         
             
                      expect(described_class.env_name).to eq("production")
         
     | 
| 
       34 
39 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -86,4 +91,77 @@ describe Mongoid::Config::Environment do 
     | 
|
| 
       86 
91 
     | 
    
         
             
                  end
         
     | 
| 
       87 
92 
     | 
    
         
             
                end
         
     | 
| 
       88 
93 
     | 
    
         
             
              end
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
              describe "#load_yaml" do
         
     | 
| 
      
 96 
     | 
    
         
            +
                let(:path) { 'mongoid.yml' }
         
     | 
| 
      
 97 
     | 
    
         
            +
                let(:environment) {}
         
     | 
| 
      
 98 
     | 
    
         
            +
                before { allow(Rails).to receive('env').and_return('test') }
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
                subject { described_class.load_yaml(path, environment) }
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
                context 'when file not found' do
         
     | 
| 
      
 103 
     | 
    
         
            +
                  let(:path) { 'not/a/valid/path'}
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
                  it { expect { subject }.to raise_error(Errno::ENOENT) }
         
     | 
| 
      
 106 
     | 
    
         
            +
                end
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
                context 'when file found' do
         
     | 
| 
      
 109 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 110 
     | 
    
         
            +
                    allow(File).to receive(:new).with('mongoid.yml').and_return(StringIO.new(file_contents))
         
     | 
| 
      
 111 
     | 
    
         
            +
                  end
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
                  let(:file_contents) do
         
     | 
| 
      
 114 
     | 
    
         
            +
                    <<~FILE
         
     | 
| 
      
 115 
     | 
    
         
            +
                      test:
         
     | 
| 
      
 116 
     | 
    
         
            +
                        clients: ['test']
         
     | 
| 
      
 117 
     | 
    
         
            +
                      development:
         
     | 
| 
      
 118 
     | 
    
         
            +
                        clients: ['dev']
         
     | 
| 
      
 119 
     | 
    
         
            +
                    FILE
         
     | 
| 
      
 120 
     | 
    
         
            +
                  end
         
     | 
| 
      
 121 
     | 
    
         
            +
             
     | 
| 
      
 122 
     | 
    
         
            +
                  context 'when file cannot be parsed as YAML' do
         
     | 
| 
      
 123 
     | 
    
         
            +
                    let(:file_contents) { "*\nbad:%123abc" }
         
     | 
| 
      
 124 
     | 
    
         
            +
             
     | 
| 
      
 125 
     | 
    
         
            +
                    it { expect { subject }.to raise_error(Psych::SyntaxError) }
         
     | 
| 
      
 126 
     | 
    
         
            +
                  end
         
     | 
| 
      
 127 
     | 
    
         
            +
             
     | 
| 
      
 128 
     | 
    
         
            +
                  context 'when file contains ERB errors' do
         
     | 
| 
      
 129 
     | 
    
         
            +
                    let(:file_contents) { '<%= foo %>' }
         
     | 
| 
      
 130 
     | 
    
         
            +
             
     | 
| 
      
 131 
     | 
    
         
            +
                    it { expect { subject }.to raise_error(NameError) }
         
     | 
| 
      
 132 
     | 
    
         
            +
                  end
         
     | 
| 
      
 133 
     | 
    
         
            +
             
     | 
| 
      
 134 
     | 
    
         
            +
                  context 'when file is empty' do
         
     | 
| 
      
 135 
     | 
    
         
            +
                    let(:file_contents) { '' }
         
     | 
| 
      
 136 
     | 
    
         
            +
             
     | 
| 
      
 137 
     | 
    
         
            +
                    it { expect { subject }.to raise_error(Mongoid::Errors::EmptyConfigFile) }
         
     | 
| 
      
 138 
     | 
    
         
            +
                  end
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
                  context 'when file does not contain a YAML Hash object' do
         
     | 
| 
      
 141 
     | 
    
         
            +
                    let(:file_contents) { '["this", "is", "an", "array"]' }
         
     | 
| 
      
 142 
     | 
    
         
            +
             
     | 
| 
      
 143 
     | 
    
         
            +
                    it { expect { subject }.to raise_error(Mongoid::Errors::InvalidConfigFile) }
         
     | 
| 
      
 144 
     | 
    
         
            +
                  end
         
     | 
| 
      
 145 
     | 
    
         
            +
             
     | 
| 
      
 146 
     | 
    
         
            +
                  context 'when environment not specified' do
         
     | 
| 
      
 147 
     | 
    
         
            +
                    it 'uses the rails environment' do
         
     | 
| 
      
 148 
     | 
    
         
            +
                      is_expected.to eq("clients"=>["test"])
         
     | 
| 
      
 149 
     | 
    
         
            +
                    end
         
     | 
| 
      
 150 
     | 
    
         
            +
                  end
         
     | 
| 
      
 151 
     | 
    
         
            +
             
     | 
| 
      
 152 
     | 
    
         
            +
                  context 'when environment is specified' do
         
     | 
| 
      
 153 
     | 
    
         
            +
                    let(:environment) { 'development' }
         
     | 
| 
      
 154 
     | 
    
         
            +
             
     | 
| 
      
 155 
     | 
    
         
            +
                    it 'uses the specified environment' do
         
     | 
| 
      
 156 
     | 
    
         
            +
                      is_expected.to eq("clients"=>["dev"])
         
     | 
| 
      
 157 
     | 
    
         
            +
                    end
         
     | 
| 
      
 158 
     | 
    
         
            +
                  end
         
     | 
| 
      
 159 
     | 
    
         
            +
             
     | 
| 
      
 160 
     | 
    
         
            +
                  context 'when environment is missing' do
         
     | 
| 
      
 161 
     | 
    
         
            +
                    let(:environment) { 'staging' }
         
     | 
| 
      
 162 
     | 
    
         
            +
             
     | 
| 
      
 163 
     | 
    
         
            +
                    it { is_expected.to be_nil }
         
     | 
| 
      
 164 
     | 
    
         
            +
                  end
         
     | 
| 
      
 165 
     | 
    
         
            +
                end
         
     | 
| 
      
 166 
     | 
    
         
            +
              end
         
     | 
| 
       89 
167 
     | 
    
         
             
            end
         
     |