Module: ActiveModularity::Modulize::ClassMethods
- Defined in:
- lib/active_modularity/modulize.rb
Instance Method Summary collapse
- #descends_from_active_record? ⇒ Boolean
-
#find_sti_class(type_name) ⇒ Object
fix inner module single table inheritance.
-
#force_sti_base! ⇒ Object
fix inner module sti base class.
- #inherited_with_modularity(subclass) ⇒ Object
- #modulize! ⇒ Object
- #modulize_reflection(reflection) ⇒ Object
-
#modulize_reflections! ⇒ Object
fix inner module reflections.
Instance Method Details
#descends_from_active_record? ⇒ 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 |