class Proclib::Channel

Simple thread-safe communication mechanism

Constants

Message
UnexpectedMessageType

Attributes

allowed_types[R]

Public Class Methods

new(*types) click to toggle source
# File lib/proclib/channel.rb, line 13
def initialize(*types)
  @allowed_types = types
end

Public Instance Methods

close() click to toggle source
# File lib/proclib/channel.rb, line 27
def close
  queue.push(:done)
end
each() { |msg| ... } click to toggle source
# File lib/proclib/channel.rb, line 31
def each
  raise(ArgumentError, 'Block Expected!') unless block_given?

  while msg = queue.pop
    break if msg == :done
    yield msg
  end
end
emit(type, data = nil) click to toggle source
# File lib/proclib/channel.rb, line 17
def emit(type, data = nil)
  unless allowed_types.include?(type)
    raise UnexpectedMessageType,
      "Message type expected to be one of `#{allowed_types}`.  "\
        "Got: `#{type}`"
  end

  queue.push(Message.new(type, data))
end
queue() click to toggle source
# File lib/proclib/channel.rb, line 40
def queue
  @queue ||= Queue.new
end