module Opium::Model::Relatable::ClassMethods

Public Instance Methods

belongs_to( relation_name, options = {} ) click to toggle source
# File lib/opium/model/relatable.rb, line 32
def belongs_to( relation_name, options = {} )
  create_relation_metadata_from( :belongs_to, relation_name, options )
  field relation_name, type: Reference, 
    default: ->( model ) do
      { metadata: relations[relation_name], context: model } 
    end
end
has_and_belongs_to_many( relation_name, options = {} ) click to toggle source
# File lib/opium/model/relatable.rb, line 19
def has_and_belongs_to_many( relation_name, options = {} )
  create_relation_metadata_from( :has_and_belongs_to_many, relation_name, options )
end
has_many( relation_name, options = {} ) click to toggle source
# File lib/opium/model/relatable.rb, line 23
def has_many( relation_name, options = {} )
  create_relation_metadata_from( :has_many, relation_name, options )
  field relation_name, type: Relation, default: -> { relations[relation_name].target_class_name }
end
has_one( relation_name, options = {} ) click to toggle source
# File lib/opium/model/relatable.rb, line 28
def has_one( relation_name, options = {} )
  create_relation_metadata_from( :has_one, relation_name, options )
end
relations() click to toggle source
# File lib/opium/model/relatable.rb, line 15
def relations
  @relations ||= {}.with_indifferent_access
end

Private Instance Methods

create_relation_metadata_from( relation_type, relation_name, options ) click to toggle source
# File lib/opium/model/relatable.rb, line 42
def create_relation_metadata_from( relation_type, relation_name, options )
  relations[relation_name] = Metadata.new( self, relation_type, relation_name, options )
end