Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

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

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 lib
Octocat-spinner-32 spec
Octocat-spinner-32 tasks
Octocat-spinner-32 .document
Octocat-spinner-32 .gitignore
Octocat-spinner-32 Gemfile
Octocat-spinner-32 LICENSE
Octocat-spinner-32 README.rdoc
Octocat-spinner-32 Rakefile
Octocat-spinner-32 VERSION
Octocat-spinner-32 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.