Skip to content
A datamapper plugin that allows declarative specification of self referential m:m relationships.
Ruby
Find file
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
lib
spec
tasks
.document
.gitignore
Gemfile
LICENSE
README.rdoc
Rakefile
VERSION
dm-is-self_referential.gemspec

README.rdoc

dm-is-self_referential

A datamapper plugin that allows declarative specification of self referential m:m relationships.

Examples

class User

  include DataMapper::Resource

  property :id, Serial
  property :name, String, :nullable => false, :unique => true, :unique_index => true

  # with default options
  #
  # will define and thus be able to automigrate the UserToUser model
  # with the following relationships established between the participating models
  #
  #   has n, :user_children, 'UserToUser', :child_key => [ :source_id ]
  #   has n, :user_parents,  'UserToUser', :child_key => [ :target_id ]
  #
  # once dm-core has full support for the following m:m relationships built in,
  # these will also get established.
  #
  #   has n, :children, self, :through => :user_children, :via => :target
  #   has n, :parents , self, :through => :user_parents,  :via => :source
  #
  # In the meantime, the following helper methods get defined
  #
  #   def children
  #     children_ids = self.user_children.map { |r| r.target_id }
  #     self.class.all(:id => children_ids)
  #   end
  #
  #   def parents
  #     parent_ids = self.user_parents.map { |r| r.source_id }
  #     self.class.all(:id => parent_ids)
  #   end
  #
  is :self_referential

  # With explicit intermediate model name and default options
  #
  # Will define and thus be able to automigrate the Friendship model
  # with the following relationships established between the participating models
  #
  #   has n, :user_children, 'Friendship', :child_key => [ :source_id ]
  #   has n, :user_parents,  'Friendship', :child_key => [ :target_id ]
  #
  # Once dm-core has full support for the following m:m relationships built in,
  # these will also get established.
  #
  #   has n, :children, self, :through => :user_children, :via => :target
  #   has n, :parents , self, :through => :user_parents,  :via => :source
  #
  # In the meantime, the following helper methods get defined
  #
  #   def children
  #     children_ids = self.user_children.map { |r| r.target_id }
  #     self.class.all(:id => children_ids)
  #   end
  #
  #   def parents
  #     parent_ids = self.user_parents.map { |r| r.source_id }
  #     self.class.all(:id => parent_ids)
  #   end
  #
  is :self_referential, :through => 'Friendship'

  # With explicit intermediate model name and customized options
  #
  # Will define and thus be able to automigrate the UserRelationship model
  # with the following relationships established between the participating models
  #
  #   has n, :user_children, 'UserRelationship', :child_key => [ :parent_user_id ]
  #   has n, :user_parents,  'UserRelationship', :child_key => [ :child_user_id  ]
  #
  # Once dm-core has full support for the following m:m relationships built in,
  # these will also get established.
  #
  #   has n, :child_users,  User, :through => :user_children, :via => :child_user
  #   has n, :parent_users, User, :through => :user_parents,  :via => :parent_user
  #
  # In the meantime, the following helper methods get defined
  #
  #   def child_users
  #     children_ids = self.user_children.map { |r| r.target_id }
  #     self.class.all(:id => children_ids)
  #   end
  #
  #   def parent_users
  #     parent_ids = self.user_parents.map { |r| r.source_id }
  #     self.class.all(:id => parent_ids)
  #   end
  #
  is :self_referential, :through => 'UserRelationship',
    :children => :child_users,
    :parents  => :parent_users,
    :source   => :parent_user,
    :target   => :child_user

end

Copyright

Copyright © 2009 Martin Gamsjaeger (snusnu). See LICENSE for details.

Something went wrong with that request. Please try again.