module Kernel
Meta-programming Kernel
for Syntactic Sugars
Public Instance Methods
async(method) { |*args| ... }
click to toggle source
Define an async method @param [Symbol] method method name @yield async method @example
async :hello do puts 'Hello' end
# File lib/murasaki/promise.rb, line 41 def async(method) define_singleton_method method do |*args| async_fiber(Fiber.new {yield(*args)}) end end
async_fiber(fiber)
click to toggle source
Make fiber as async chain @param [Fiber] fiber root of async chain
# File lib/murasaki/promise.rb, line 24 def async_fiber(fiber) chain = proc do |result| next unless result.is_a? Promise result.then do |val| chain.call(fiber.resume(val)) end end chain.call(fiber.resume) end
await(promise)
click to toggle source
Block the I/O to wait for async method response @param [Promise] promise promise method @example
result = await SQL.query('SELECT * FROM hello')
# File lib/murasaki/promise.rb, line 51 def await(promise) result = Fiber.yield promise if result.is_a? PromiseException raise result.payload end result end