ripta / dm-polymorphic forked from hassox/dm-polymorphic

An initial repo for polymorphism in datamapper

This URL has Read+Write access

name age message
file LICENSE Mon Jun 16 00:04:05 -0700 2008 Initial Version. Experimental only [hassox]
file README Sun Oct 04 14:51:28 -0700 2009 Replace :via with :polymorphically, because :vi... [ripta]
file Rakefile Loading commit data...
file TODO Mon Jun 16 00:04:05 -0700 2008 Initial Version. Experimental only [hassox]
directory lib/ Sun Oct 04 14:51:56 -0700 2009 Fix non-polymorphic argument passing [ripta]
directory spec/ Sun Oct 04 14:51:47 -0700 2009 Spec changes [ripta]
README
Please see wiki for discussion.

The DM polymorphic gem mimics AR style polymorphism.  It has been decided that DM will not follow this path, since it
really isn't very nice on the DB and there are other ways, that do not require DBA to cry to achieve the same result.

That being said this is still useful for those ppl wishing to convert rails apps over.  

One Massive Caveat is that using this you will get n+1 calls to the db atm if you do Comments#commentable for example.  
It needs a proxy object if anyone cares to write one.

This is highly experimental software, use it at your own risk.

==== Example Usage.

class Comment
  include DataMapper::Resource
  
  is :polymorphic, :commentable
  
  property :id,   Integer, :serial => true
  property :text, String
end
    
class Post
  include DataMapper::Resource
  
  property :id, Integer, :serial => true
  property :name,  String  

  has n, :comments, :polymorphically => :commentable   
end

class Article
  include DataMapper::Resource
  
  property :id, Integer, :serial => true
  property :name,  String  

  has n, :comments, :polymorphically => :commentable
end

This will then provide the following methods

Comment#commentable
Comment#post
Comment#article
Post#comments
Article#comments

What is needed is a 
Comment.commentables or something method so there is a nice proxy to avoid having all the loading issues.