module Spectator class ExampleHooks def self.empty new( [] of ->, [] of ->, [] of ->, [] of ->, [] of Proc(Nil) -> ) end def initialize( @before_all : Array(->), @before_each : Array(->), @after_all : Array(->), @after_each : Array(->), @around_each : Array(Proc(Nil) ->) ) end def run_before_all @before_all.each &.call end def run_before_each @before_each.each &.call end def run_after_all @after_all.each &.call end def run_after_each @after_each.each &.call end def wrap_around_each(&block : ->) wrapper = block @around_each.reverse_each do |hook| wrapper = wrap_proc(hook, wrapper) end wrapper end private def wrap_proc(inner : Proc(Nil) ->, wrapper : ->) ->{ inner.call(wrapper) } end end end