Sha256: 20f966e2565cb54c927e6c894b52c03d6ab5771dfcbc095d88aba9fa8ee6b321
Contents?: true
Size: 696 Bytes
Versions: 1
Compression:
Stored size: 696 Bytes
Contents
# frozen_string_literal: true ## # The middleware wraps every request in a Fiber and implements the custom defer protocol with Iodine. # Scheduling fibers in a middleware allows the framework to be compatibe with custom Rack middlewares. # class Rage::FiberWrapper def initialize(app) Iodine.on_state(:on_start) do Fiber.set_scheduler(Rage::FiberScheduler.new) end @app = app end def call(env) fiber = Fiber.schedule do @app.call(env) ensure Iodine.publish(Fiber.current.__get_id, "", Iodine::PubSub::PROCESS) if Fiber.current.__yielded? end if fiber.alive? [:__http_defer__, fiber] else fiber.__get_result end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
rage-rb-0.5.2 | lib/rage/fiber_wrapper.rb |