module JsonApiModel::Associatable

Public Class Methods

belongs_to( name, opts = {} ) click to toggle source
# File lib/json_api_model/associatable.rb, line 32
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_model/associatable.rb, line 40
def has_many( name, opts = {} )
  process Associations::HasMany.new( self, name, opts )
end
has_one( name, opts = {} ) click to toggle source
# File lib/json_api_model/associatable.rb, line 36
def has_one( name, opts = {} )
  process Associations::HasOne.new( self, name, opts )
end

Protected Class Methods

associate( association ) click to toggle source
# File lib/json_api_model/associatable.rb, line 51
def associate( association )
  self.__associations = __associations.merge association.name => association
end
methodize( association ) click to toggle source
# File lib/json_api_model/associatable.rb, line 55
def methodize( association )
  define_method association.name do
    self.__cached_associations ||= {}

    unless self.__cached_associations.has_key? association.name
      self.send( "#{association.name}=", association.fetch( self ) )
    end
    self.__cached_associations[association.name]
  end

  define_method "#{association.name}=" do | value |
    self.__cached_associations ||= {}
    self.__cached_associations[association.name] = value
  end
end
process( association ) click to toggle source
# File lib/json_api_model/associatable.rb, line 46
def process( association )
  associate association
  methodize association
end

Public Instance Methods

has_relationship_ids?( name ) click to toggle source
# File lib/json_api_model/associatable.rb, line 12
def has_relationship_ids?( name )
  !!relationships[ name ]
end
relationship_ids( name ) click to toggle source
# File lib/json_api_model/associatable.rb, line 16
def relationship_ids( name )
  relationships_data = relationships[ name ]&.dig( :data )
  case relationships_data
  when Hash
    [ relationships_data[ :id ] ]
  when Array
    relationships_data.map{ | datum | datum[ :id ] }
  when NilClass
    [ ]
  else
    raise "Unexpected relationship data type: #{relationships_data.class}"
  end
end