Quick Fix (and a question): Mongoid Edge


I just went throught the process of upgrading my current app to the latest edge for Rails 3, Mongoid and all of my other

gems. And when I went to run my specs, I received this error:

Database command 'drop' failed: {"ns"=>"your_db.system.indexes", "errmsg"=>"assertion: can't drop system ns", "ok"=>0.0}

The only time a drop is called is in my spec_helper.rb file:

/spec/spec_helper.rb

Rspec.configure do |config|
      # other config stuff here

      config.before(:each) do
        Mongoid.master.collections.each(&:drop)
      end
    end

What that block does is drop all of my Mongoid collections before each spec is run to ensure I have a “known state” for

my specs. This has always worked just fine as is, but it appears that something has changed in the latest Mongoid

causing it to error on attempting to drop “system.indexes”. After some tinkering, this is how I resolved it:

/spec/spec_helper.rb

Rspec.configure do |config|
      # other config stuff here

      config.before(:each) do
        Mongoid.master.collections.select { |c| c.name != 'system.indexes' }.each(&:drop)
      end
    end

Simple fix, but it gets the job done. I just simply exclude “system.indexes” from the collections to drop and all is

well. Since this is only for my tests, I think this should be fine. But…

I want to know if anyone else knows why this is happening and if there is a better way to resolve it. Anyone?

Cucumber, A Brief Overview