module Temple::Mixins::Dispatcher
@api public
Implements a compatible call-method based on the including classe's methods.
It uses every method starting with “on” and uses the rest of the method name as prefix of the expression it will receive. So, if a dispatcher has a method named “on_x”, this method will be called with arg0,..,argN whenever an expression like [:x, arg0,..,argN ] is encountered.
This works with longer prefixes, too. For example a method named “on_y_z” will be called whenever an expression like [:y, :z, .. ] is found. Furthermore, if additionally a method named “on_y” is present, it will be called when an expression starts with :y but then does not contain with :z. This way a dispatcher can implement namespaces.
@note
Processing does not reach into unknown expression types by default.
@example
class MyAwesomeDispatch include Temple::Mixins::Dispatcher def on_awesome(thing) # keep awesome things return [:awesome, thing] end def on_boring(thing) # make boring things awesome return [:awesome, thing+" with bacon"] end def on(type,*args) # unknown stuff is boring too return [:awesome, 'just bacon'] end end filter = MyAwesomeDispatch.new # Boring things are converted: filter.call([:boring, 'egg']) #=> [:awesome, 'egg with bacon'] # Unknown things too: filter.call([:foo]) #=> [:awesome, 'just bacon'] # Known but not boring things won't be touched: filter.call([:awesome, 'chuck norris']) #=>[:awesome, 'chuck norris']