I'm going to push that deadline back since I still have some open issues left for 3.0 to flush out first. I've had all our Mongoid apps on master for a while to make sure all the changes there are still good, and just moved them over to the moped-integration branch before I merge that in and want to give them at least a week of hammering on it before shipping.
As for the upgrade, I think it should be fairly simple. I have tried with every backwards incompatible change to have Mongoid raise a specific error when the old syntax is used, and give you instructions on how to change it... An example will be with changes in the index syntax - you'll get an error like this:
-----
Mongoid::Errors::InvalidIndex:
Problem:
Invalid index specification on Person: age
Summary:
Indexes in Mongoid are defined as a hash of field name and direction/2d pairs,
with an :options hash for any additional options.
Resolution:
Ensure that the index conforms to the correct syntax and has the correct options.
Valid options are:
background: true|false
drop_dups: true|false
name: 'index_name'
sparse: true|false
unique: true|false
Valid types are: 1, -1, '2d'
Example:
class Band
include Mongoid::Document
index name: 1, label: -1, options: { sparse: true }
index location: '2d', options: { background: true }
end
----
All error messages in Mongoid 3 follow this format. You get a general message indicating the problem, a summary which details why it happened, and a resolution with what you need to do to address it with example code. You can get an idea of how detailed these are now here:
https://github.com/mongoid/mongoid/blob/master/lib/config/locales/en.yml
I'm hoping that's all it takes - just do what the exceptions tell you and I expect the upgrade to be quick and easy, as from here on out I am treating exceptions at the framework level as documentation, not just simple errors. There will be a simultaneous release of the new docs, which are much more in depth, and I've been really good on keeping the CHANGELOG up to date with all the changes that you might encounter as well, with code examples there:
https://github.com/mongoid/mongoid/blob/master/CHANGELOG.md
None of the backwards incompatible changes will force a data migration or hinder any sort of compatibility with MongoHQ. The MongoHQ team graciously donated several databases with different configs to make sure that Mongoid is completely compatible and we have no hiccups - and I've got automated tests around all configurations, single-server, replica sets, and shards. 1 of our production apps is on Mongoid master pointed at a MongoHQ replica set, the others we have on different rackspace configurations running MRI and JRuby to make sure everything is covered.
Once the moped-integration branch goes into master, I'll post an update here as that's the final stretch. I've been working all this holiday weekend to get this all done, but I don't want to rush it if it's not finished... So I expect at least another week.