Skip to content

Instantly share code, notes, and snippets.

@hugolepetit
Last active November 2, 2018 17:45
Show Gist options
  • Save hugolepetit/3750e8143d07a70d5b3bc261679ae5bf to your computer and use it in GitHub Desktop.
Save hugolepetit/3750e8143d07a70d5b3bc261679ae5bf to your computer and use it in GitHub Desktop.
Wrapception
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