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

#dispatch_event, 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



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

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
17
18
19
20
# 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 }
  if Netfira::WebConnect.paranoia?
    klass.acts_as_paranoid
  else
    def klass.with_deleted; self end
  end
end

.table_nameObject



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

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



70
71
72
73
# File 'lib/netfira/web_connect/model/relation.rb', line 70

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