Class: Netfira::WebConnect::Model::Relation

Inherits:
Netfira::WebConnect::Model show all
Includes:
Events
Defined in:
lib/netfira/web_connect/model.rb,
lib/netfira/web_connect/model/relation.rb,
lib/netfira/web_connect/model/relation/events.rb

Defined Under Namespace

Modules: Events

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Netfira::WebConnect::Model

plural_name, single_name

Class Attribute Details

Returns the value of attribute related_classes.



9
10
11
# File 'lib/netfira/web_connect/model/relation.rb', line 9

def related_classes
  @related_classes
end

Class Method Details

.for(class_a, class_b) ⇒ Object



58
59
60
61
# File 'lib/netfira/web_connect/model/relation.rb', line 58

def for(class_a, class_b)
  name = [class_a, class_b].map{ |c| (c.is_a?(Class) ? c : c.class).name.demodulize }.sort.join 'To'
  Models.const_get name if Models.const_defined? name
end

.materialize(name_a, name_b) ⇒ Object



11
12
13
14
15
# File 'lib/netfira/web_connect/model/relation.rb', line 11

def materialize(name_a, name_b)
  klass = Class.new(self)
  Models.const_set "#{name_a}To#{name_b}", klass
  klass.related_classes = [name_a, name_b].map{ |n| Models.const_get n.camelize.singularize }
end

.table_nameObject



50
51
52
53
54
55
56
# File 'lib/netfira/web_connect/model/relation.rb', line 50

def table_name
  @table_name ||= if self == Model::Relation
    Models::Table.table_name
  else
    Netfira::WebConnect.db_table_prefix(related_classes.map(&:plural_name).join '_to_').to_s
  end
end

Instance Method Details

#recordsObject



65
66
67
# File 'lib/netfira/web_connect/model/relation.rb', line 65

def records
  self.class.related_classes.map{ |klass| __send__ klass.single_name.to_sym }
end