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



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

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
16
# 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 }
  klass.acts_as_paranoid if Netfira::WebConnect.paranoia?
end

.table_nameObject



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

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



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

def records
  self.class.current_scope = nil if Netfira::WebConnect.paranoia? # Fixes a bug triggered by paranoia
  self.class.related_classes.map{ |klass| __send__ klass.single_name.to_sym }
end