Bigamy

Enable seamless Ruby-ness between ActiveRecord objects & MongoMapper documents

class User < ActiveRecord::Base

Bigamy.setup self

has_one_mm :doc
has_many_mm :photos

end

class Doc

include MongoMapper::Document
Bigamy.setup self

belongs_to_ar :user

end

class Photo

include MongoMapper::Document
Bigamy.setup self

belongs_to_ar :user

end

Bigamy sets foreign keys upon assignment. It doesn’t keep track of dirty children. It doesn’t allow you to operate with new records. So when you do:

@user.doc = @doc

  • @user has to be saved already.

  • @doc has to be saved already.

  • @doc will have it’s user_id attribute updated immediately.

When you do:

@user.photos = Photo.all

  • every Photo document will have it’s user_id attribute set immediately

Options

The available class methods are:

For AR:

belongs_to_mm
has_one_mm
has_many_mm

For MM:

belongs_to_ar
has_one_ar
has_many_ar

All class methods take :foreign_key, :class, and :primary_key options as a hash

Setup

Bigamy.setup can take any number of classes as arguments, and can be in an initializer like:

Bigamy.setup User, Doc

License

Bigmay is released under the MIT license.

It’s developed by Ryan Angilly and released with the permission of MyPunchbowl.com

Support

Just email me at [email protected] with questions, bugs, or patches.