shard-spectator/src/spectator/example_group_hook.cr

48 lines
1.2 KiB
Crystal
Raw Normal View History

require "./label"
2021-02-13 05:46:22 +00:00
require "./location"
module Spectator
# Information about a hook tied to an example group and a proc to invoke it.
class ExampleGroupHook
# Location of the hook in source code.
2021-02-13 05:46:22 +00:00
getter! location : Location
# User-defined description of the hook.
getter! label : Label
@proc : ->
# Creates the hook with a proc.
# The *proc* will be called when the hook is invoked.
2021-02-13 05:46:22 +00:00
# A *location* and *label* can be provided for debugging.
def initialize(@proc : (->), *, @location : Location? = nil, @label : Label = nil)
end
# Creates the hook with a block.
# The block will be executed when the hook is invoked.
2021-02-13 05:46:22 +00:00
# A *location* and *label* can be provided for debugging.
def initialize(*, @location : Location? = nil, @label : Label = nil, &block : -> _)
@proc = block
end
# Invokes the hook.
def call : Nil
@proc.call
end
2021-01-09 18:14:27 +00:00
# Produces the string representation of the hook.
2021-02-13 05:46:22 +00:00
# Includes the location and label if they're not nil.
2021-01-09 18:14:27 +00:00
def to_s(io)
io << "example group hook"
if (label = @label)
2021-05-30 20:21:42 +00:00
io << ' ' << label
2021-01-09 18:14:27 +00:00
end
2021-02-13 05:46:22 +00:00
if (location = @location)
2021-05-30 20:21:42 +00:00
io << " @ " << location
2021-01-09 18:14:27 +00:00
end
end
end
end