Platinum Partner

Customized Many To Many Relationship With DataMapper

Customized many to many relationship with datamapper


require 'rspec'

require 'dm-core'
require 'dm-migrations'
DataMapper.setup(:default, 'sqlite::memory:')


class Chunk 
  include DataMapper::Resource
    
  property :id,           Serial    # auto-increment integer key  
  
  has n, :occurrences
  has n, :contexts,       :through => :occurrences
end


class Context 
  include DataMapper::Resource
  
  property :id,           Serial    # auto-increment integer key
  property :filename,     String    # Context may represent a text-file
  
  has n, :occurrences
  has n, :chunks,         :through => :occurrences
end

# customized relationship (default was ChunkContext)
class Occurrence
  include DataMapper::Resource
  
  property :name,     String, :default => 'test'    # extra property
  
  belongs_to :chunk,   :key => true  # => 'chunk_id'
  belongs_to :context, :key => true  # => 'context_id'
end


DataMapper.finalize.auto_migrate!

describe Occurrence do
  
  it 'chunk has and belongs_to many contexts' do
    context_1 = Context.create
    context_2 = Context.create
    chunk_1 = Chunk.create
    chunk_2 = Chunk.create
    
    chunk_1.contexts << context_1
    chunk_1.contexts << context_2
    chunk_2.contexts << context_1
    chunk_1.save
    chunk_2.save
    
    chunk_1.occurrences[0].chunk_id.should == chunk_1.id
    chunk_1.occurrences[0].context_id.should == context_1.id
    chunk_1.occurrences[0].name.should == 'test'
    
    chunk_1.contexts[0].should == context_1
    chunk_1.contexts[1].should == context_2
    chunk_2.contexts[0].should == context_1
    context_1.chunks[0].should == chunk_1
    context_1.chunks[1].should == chunk_2
    context_2.chunks[0].should == chunk_1
  end
end
{{ tag }}, {{tag}},

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}
{{ parent.authors[0].realName || parent.author}}

{{ parent.authors[0].tagline || parent.tagline }}

{{ parent.views }} ViewsClicks
Tweet

{{parent.nComments}}