shard-spectator/src/spectator/example_hooks.cr
2018-09-27 18:49:01 -06:00

50 lines
922 B
Crystal

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