Module: Pancake::Hooks::InheritableInnerClasses
- Included in:
- Object
- Defined in:
- lib/pancake/hooks/inheritable_inner_classes.rb
Class Method Summary collapse
Instance Method Summary collapse
-
#inheritable_inner_classes(*classes) ⇒ Object
Declare inner classes to be inherited when the outer class in inherited The best way to show this is by example:.
-
#inherited(base) ⇒ Object
private
The inherited hook that sets up inherited inner classes.
Class Method Details
.extended(base) ⇒ Object
4 5 6 7 8 9 |
# File 'lib/pancake/hooks/inheritable_inner_classes.rb', line 4 def self.extended(base) base.class_eval do class_inheritable_reader :_inhertiable_inner_classes @_inhertiable_inner_classes = [] end end |
Instance Method Details
#inheritable_inner_classes(*classes) ⇒ Object
Declare inner classes to be inherited when the outer class in inherited The best way to show this is by example:
This provides a more organic inheritance where the child gets their own version of the inner class which is actually inherited from the parents inner class. The inheritance chain remains intact.
34 35 36 37 38 39 40 41 |
# File 'lib/pancake/hooks/inheritable_inner_classes.rb', line 34 def inheritable_inner_classes(*classes) _inhertiable_inner_classes unless classes.empty? _inhertiable_inner_classes << classes _inhertiable_inner_classes.flatten! end _inhertiable_inner_classes end |
#inherited(base) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
The inherited hook that sets up inherited inner classes. Remember if you overwrite this method, you should call super!
49 50 51 52 53 54 55 56 |
# File 'lib/pancake/hooks/inheritable_inner_classes.rb', line 49 def inherited(base) super class_defs = inheritable_inner_classes.map do |klass| "class #{klass} < superclass::#{klass}; end\n" end # puts "#{base.name} is INHERITING INNER CLASSES #{class_defs.inspect}" base.class_eval(class_defs.join) end |