module JsonApiResource::Associatable

Public Class Methods

belongs_to( name, opts = {} ) click to toggle source
# File lib/json_api_resource/associatable.rb, line 13
def belongs_to( name, opts = {} )
  process Associations::BelongsTo.new( self, name, opts )
end
has_many( name, opts = {} ) click to toggle source
# File lib/json_api_resource/associatable.rb, line 21
def has_many( name, opts = {} )
  if opts[:prefetched_ids]
    process Associations::HasManyPrefetched.new( self, name, opts )
  else
    process Associations::HasMany.new( self, name, opts )
  end
end
has_one( name, opts = {} ) click to toggle source
# File lib/json_api_resource/associatable.rb, line 17
def has_one( name, opts = {} )
  process Associations::HasOne.new( self, name, opts )
end

Private Class Methods

add_association(association) click to toggle source
# File lib/json_api_resource/associatable.rb, line 36
def add_association(association)
  self._associations = _associations.merge association.name => association
end
methodize( association ) click to toggle source
# File lib/json_api_resource/associatable.rb, line 40
def methodize( association )
  define_method association.name do 
    self._cached_associations ||= {}
    unless self._cached_associations.has_key? association.name
      if association.callable?(self)
        result = association.klass.send( association.action, association.query(self) )
        result = association.post_process result
      else
        result = association.nil_default
      end
      
      self._cached_associations[association.name] = result
    end
    self._cached_associations[association.name]
  end
end
process(association) click to toggle source
# File lib/json_api_resource/associatable.rb, line 31
def process(association)
  add_association association
  methodize association
end