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