class Affect::Fiber::Context
Attributes
handlers[R]
Public Class Methods
new(handlers = nil, &block)
click to toggle source
# File lib/affect/fiber.rb, line 66 def initialize(handlers = nil, &block) @handlers = handlers || { nil => block || -> { } } end
Public Instance Methods
call_handler(handler, effect, *args)
click to toggle source
# File lib/affect/fiber.rb, line 93 def call_handler(handler, effect, *args) if handler.arity == 0 handler.call elsif args.empty? handler.call(effect) else handler.call(*args) end end
capture(&block)
click to toggle source
# File lib/affect/fiber.rb, line 103 def capture(&block) Affect.capture(block, handler_proc) end
find_handler(effect)
click to toggle source
# File lib/affect/fiber.rb, line 89 def find_handler(effect) @handlers[effect] || @handlers[effect.class] || @handlers[nil] end
handle(effect, *args)
click to toggle source
# File lib/affect/fiber.rb, line 76 def handle(effect, *args) handler = find_handler(effect) if handler call_handler(handler, effect, *args) else begin Fiber.yield Intent.new(effect, *args) rescue FiberError raise RuntimeError, "No handler found for #{effect.inspect}" end end end
handler_proc()
click to toggle source
# File lib/affect/fiber.rb, line 72 def handler_proc proc { |effect, *args| handle(effect, *args) } end