module GreyscaleRecord::Associatable

Public Class Methods

belongs_to( name, opts = {} ) click to toggle source
# File lib/greyscale_record/associatable.rb, line 13
def belongs_to( name, opts = {} )
  association = Associations::BelongsTo.new( self, name, opts )
  process association
  index association.key
end
has_many( name, opts = {} ) click to toggle source
# File lib/greyscale_record/associatable.rb, line 23
def has_many( name, opts = {} )
  process Associations::HasMany.new( self, name, opts )
end
has_one( name, opts = {} ) click to toggle source
# File lib/greyscale_record/associatable.rb, line 19
def has_one( name, opts = {} )
  process Associations::HasOne.new( self, name, opts )
end

Protected Class Methods

associate( association ) click to toggle source
# File lib/greyscale_record/associatable.rb, line 34
def associate( association )
  self.__associations = __associations.merge association.name => association
end
methodize( association ) click to toggle source
# File lib/greyscale_record/associatable.rb, line 38
def methodize( association )
  define_method association.name do
    begin
      self._cached_associations ||= {}

      unless self._cached_associations.has_key? association.name
        result = association.klass( self ).send( association.action, association.query( self ) )
        
        self._cached_associations[association.name] = result
      end
      self._cached_associations[association.name]
    rescue GreyscaleRecord::Errors::RecordNotFound => e
      nil
    end
  end
end
process( association ) click to toggle source
# File lib/greyscale_record/associatable.rb, line 29
def process( association )
  associate association
  methodize association
end