Module: ActiveModularity::Modulize::ClassMethods

Defined in:
lib/active_modularity/modulize.rb

Instance Method Summary collapse

Instance Method Details

#descends_from_active_record?Boolean

Returns:

  • (Boolean)


39
40
41
42
43
44
45
46
47
48
49
# File 'lib/active_modularity/modulize.rb', line 39

def descends_from_active_record?
  if @@force_sti_base &&
     ActiveRecord::Base != superclass &&
     !self.abstract_class? &&
     superclass.descends_from_active_record? &&
     superclass.name == name.demodulize &&
     columns_hash.include?(inheritance_column)
    return true
  end
  super
end

#find_sti_class(type_name) ⇒ Object

fix inner module single table inheritance



26
27
28
29
30
31
32
# File 'lib/active_modularity/modulize.rb', line 26

def find_sti_class(type_name)
  module_name = self.name.deconstantize
  if type_name && module_name.present?
    type_name = "#{module_name}::#{type_name}"
  end
  super
end

#force_sti_base!Object

fix inner module sti base class



35
36
37
# File 'lib/active_modularity/modulize.rb', line 35

def force_sti_base!
  @@force_sti_base = true
end

#inherited_with_modularity(subclass) ⇒ Object



12
13
14
15
16
# File 'lib/active_modularity/modulize.rb', line 12

def inherited_with_modularity(subclass)
  inherited_without_modularity(subclass).tap do
    subclass.modulize!
  end
end

#modulize!Object



18
19
20
21
22
23
# File 'lib/active_modularity/modulize.rb', line 18

def modulize!
  return if self == ActiveRecord::Base
  modulize_reflections!
  self.store_full_sti_class = false
  force_sti_base!
end

#modulize_reflection(reflection) ⇒ Object



56
57
58
59
60
61
62
63
64
65
# File 'lib/active_modularity/modulize.rb', line 56

def modulize_reflection(reflection)
  return reflection if reflection.active_record != superclass
  return reflection unless reflection.kind_of?(ActiveRecord::Reflection::AssociationReflection)
  modulized_reflection = reflection.dup
  modulized_reflection.instance_variable_set(:@active_record, self)
  modulized_reflection.instance_variable_set(:@class_name, nil)
  modulized_reflection.instance_variable_set(:@klass, nil)
  modulized_reflection.instance_variable_set(:@foreign_key, reflection.foreign_key)
  modulized_reflection
end

#modulize_reflections!Object

fix inner module reflections



52
53
54
# File 'lib/active_modularity/modulize.rb', line 52

def modulize_reflections!
  self.reflections = Hash[superclass.reflections.map{|k,v| [k, modulize_reflection(v)]}]
end