Last active
November 2, 2018 17:45
-
-
Save hugolepetit/3750e8143d07a70d5b3bc261679ae5bf to your computer and use it in GitHub Desktop.
Wrapception
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def with_wrappers(*wrappers,&block) | |
return yield unless wrappers.any? # Si pas de wrappers on appelle le block seul | |
outer_wrap = wrappers.shift; # Dépilage du wrapper le plus externe | |
if wrappers.any? # Il reste d'autres wrappers que wrapper deja depile, recurse wrap ! | |
self.send(outer_wrap) { with_wrappers(*wrappers,&block) } | |
else # Le wrapper dépilé était en fait le dernier wrapper et bien plus encore | |
self.send(outer_wrap, &block) | |
end | |
end | |
def outer_wrap | |
puts 'before outer wrap' | |
yield | |
puts 'after outer wrap' | |
end | |
def inner_wrap | |
puts 'before inner wrap' | |
yield | |
puts 'after inner wrap' | |
end | |
with_wrappers(:outer_wrap, :inner_wrap) { puts 'wrapped' } | |
before outer wrap | |
before inner wrap | |
wrapped | |
after inner wrap | |
after outer wrap | |
=> nil |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment