Module: Erector::Inline
- Included in:
- InlineWidget, FieldTable
- Defined in:
- lib/erector/inline.rb
Instance Method Summary collapse
-
#call_block ⇒ Object
Executes the widget’s block (the one that was passed in the constructor).
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args, &block) ⇒ Object (private)
This is part of the sub-widget/parent feature (see #widget method).
23 24 25 26 27 28 29 30 |
# File 'lib/erector/inline.rb', line 23 def method_missing(name, *args, &block) if parent && parent.respond_to?(name) block ||= lambda {} # captures self HERE parent.send(name, *args, &block) else super end end |
Instance Method Details
#call_block ⇒ Object
Executes the widget’s block (the one that was passed in the constructor). Since “self” is pointing to the new widget, the block does not naturally have access to parent method methods, so an Erector::Inline widget uses some method_missing black magic to propagate messages to the parent object. Since it executes inside the called widget’s context, when the block refers to instance variables, it’s talking about those of this widget, not the caller. It does, of course, have access to bound local variables of the caller, so you can use those to smuggle in instance variables.
16 17 18 19 |
# File 'lib/erector/inline.rb', line 16 def call_block # note that instance_eval seems to pass in self as a parameter to the block instance_eval(&block) if block end |