Module: MuchMixin::ClassMethods
- Defined in:
- lib/much-mixin.rb
Instance Method Summary collapse
- #after_mixin_included(&block) ⇒ Object
-
#included(mixin_receiver) ⇒ Object
Install an included block that first checks if the mix-in has already been included.
- #mixin_class_methods(&block) ⇒ Object
- #mixin_included(&block) ⇒ Object
- #mixin_instance_methods(&block) ⇒ Object
- #much_mixin_after_included_blocks ⇒ Object
- #much_mixin_class_method_blocks ⇒ Object
- #much_mixin_class_methods_module ⇒ Object
- #much_mixin_included_blocks ⇒ Object
-
#much_mixin_included_detector ⇒ Object
The included detector is an empty module that is only used to detect if the mix-in has been included or not.
- #much_mixin_instance_method_blocks ⇒ Object
- #much_mixin_instance_methods_module ⇒ Object
Instance Method Details
#after_mixin_included(&block) ⇒ Object
83 84 85 |
# File 'lib/much-mixin.rb', line 83 def after_mixin_included(&block) much_mixin_after_included_blocks << block end |
#included(mixin_receiver) ⇒ Object
Install an included block that first checks if the mix-in has already been
included. If it has not been, include the receiver mixin and run all of
the mixin_included blocks.
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/much-mixin.rb', line 14 def included(mixin_receiver) return if mixin_receiver.include?(much_mixin_included_detector) mixin_receiver.send(:include, much_mixin_included_detector) much_mixin_included_blocks.each do |block| mixin_receiver.class_eval(&block) end much_mixin_class_method_blocks.each do |block| much_mixin_class_methods_module.class_eval(&block) end mixin_receiver.send(:extend, much_mixin_class_methods_module) much_mixin_instance_method_blocks.each do |block| much_mixin_instance_methods_module.class_eval(&block) end mixin_receiver.send(:include, much_mixin_instance_methods_module) much_mixin_after_included_blocks.each do |block| mixin_receiver.class_eval(&block) end end |
#mixin_class_methods(&block) ⇒ Object
87 88 89 |
# File 'lib/much-mixin.rb', line 87 def mixin_class_methods(&block) much_mixin_class_method_blocks << block end |
#mixin_included(&block) ⇒ Object
79 80 81 |
# File 'lib/much-mixin.rb', line 79 def mixin_included(&block) much_mixin_included_blocks << block end |
#mixin_instance_methods(&block) ⇒ Object
91 92 93 |
# File 'lib/much-mixin.rb', line 91 def mixin_instance_methods(&block) much_mixin_instance_method_blocks << block end |
#much_mixin_after_included_blocks ⇒ Object
67 68 69 |
# File 'lib/much-mixin.rb', line 67 def much_mixin_after_included_blocks @much_mixin_after_included_blocks ||= [] end |
#much_mixin_class_method_blocks ⇒ Object
71 72 73 |
# File 'lib/much-mixin.rb', line 71 def much_mixin_class_method_blocks @much_mixin_class_method_blocks ||= [] end |
#much_mixin_class_methods_module ⇒ Object
49 50 51 52 53 54 |
# File 'lib/much-mixin.rb', line 49 def much_mixin_class_methods_module @much_mixin_class_methods_module ||= Module.new.tap do |m| const_set("MuchMixinClassMethods", m) end end |
#much_mixin_included_blocks ⇒ Object
63 64 65 |
# File 'lib/much-mixin.rb', line 63 def much_mixin_included_blocks @much_mixin_included_blocks ||= [] end |
#much_mixin_included_detector ⇒ Object
The included detector is an empty module that is only used to detect if
the mix-in has been included or not. It doesn't add any behavior or
methods to the receiver and uses const_set to name the module so if its
seen in the ancestors it doesn't look like some random module and it can
be tracked back to much-mixin.
42 43 44 45 46 47 |
# File 'lib/much-mixin.rb', line 42 def much_mixin_included_detector @much_mixin_included_detector ||= Module.new.tap do |m| const_set("MuchMixinIncludedDetector", m) end end |
#much_mixin_instance_method_blocks ⇒ Object
75 76 77 |
# File 'lib/much-mixin.rb', line 75 def much_mixin_instance_method_blocks @much_mixin_instance_method_blocks ||= [] end |
#much_mixin_instance_methods_module ⇒ Object
56 57 58 59 60 61 |
# File 'lib/much-mixin.rb', line 56 def much_mixin_instance_methods_module @much_mixin_instance_methods_module ||= Module.new.tap do |m| const_set("MuchMixinInstanceMethods", m) end end |