module Emit

Constants

Scheduler

Need to create the singleton instance in main fiber.

VERSION

Public Class Methods

channel() click to toggle source
# File lib/emit.rb, line 40
def channel
  Channel.new
end
choice(*guards) click to toggle source
# File lib/emit.rb, line 56
def choice(*guards)
  Alternation.new(guards).execute
end
method_missing(name, *args, **kwargs) click to toggle source
# File lib/emit.rb, line 60
def method_missing(name, *args, **kwargs)
  Emit.process(*args, **kwargs, &method(name.to_sym))
end
parallel(*processes, run: true) click to toggle source
# File lib/emit.rb, line 22
def parallel(*processes, run: true)
  processes.flatten!

  processes.each do |process|
    process.start
    Scheduler.enqueue(process)
  end

  if run
    Scheduler.join(processes)
    processes.map(&:return_value)
  end
end
poison(*channel_ends) click to toggle source
# File lib/emit.rb, line 48
def poison(*channel_ends)
  channel_ends.each(&:poison)
end
process(*args, **kwargs, &block) click to toggle source
# File lib/emit.rb, line 44
def process(*args, **kwargs, &block)
  Process.new(*args, **kwargs, &block)
end
retire(*channel_ends) click to toggle source
# File lib/emit.rb, line 52
def retire(*channel_ends)
  channel_ends.each(&:retire)
end
sequence(*processes) click to toggle source
# File lib/emit.rb, line 36
def sequence(*processes)
  processes.flatten.each(&:run)
end