Report abuse


			
#!/usr/bin/env ruby

require 'rubygems'

gem 'dm-core', '>=0.9.1'
require 'dm-core'

DataMapper::Logger.new(STDOUT, :debug)
DataMapper.setup(:sqlite3, 'sqlite3::memory:')

class Comment
  include DataMapper::Resource

  property :id,                Integer, :serial => true
  property :commentable_class, String
  property :commentable_id,    Integer
  property :text,              Text

  auto_migrate! :sqlite3
end

class Post
  include DataMapper::Resource

  property :id,    Integer, :serial => true
  property :title, String
end

repository(:sqlite3) do |repository|
  Post.has Post.n, :comments, :child_key => [ :commentable_id ], Comment.commentable_class => 'Post'
  Comment.belongs_to :post, :child_key => [ :commentable_id ], Post.comments.commentable_class => 'Post'

  Comment.auto_migrate!(repository.name)
  Post.auto_migrate!(repository.name)

  post = Post.create(:title => 'My first blog post!')
  puts '=' * 80
  post.comments.create(:text => 'Click here for cheap viagra')
  puts '=' * 80

  puts "\nFrom the parent to the child"
  puts '-' * 80

  post = Post.first

  puts "Post:    #{post.inspect}"
  puts "Comment: #{post.comments.first.inspect}"

  puts "\nFrom the child to the parent"
  puts '-' * 80

  comment = Comment.first

  puts "Comment: #{comment.inspect}"
  puts "Post:    #{comment.post.inspect}"
end