Class: Proclib::Channel

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/proclib/channel.rb

Overview

Simple thread-safe communication mechanism

Defined Under Namespace

Classes: Message

Constant Summary collapse

UnexpectedMessageType =
Class.new(StandardError)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*types) ⇒ Channel



13
14
15
# File 'lib/proclib/channel.rb', line 13

def initialize(*types)
  @allowed_types = types
end

Instance Attribute Details

#allowed_typesObject (readonly)

Returns the value of attribute allowed_types.



11
12
13
# File 'lib/proclib/channel.rb', line 11

def allowed_types
  @allowed_types
end

Instance Method Details

#closeObject



27
28
29
# File 'lib/proclib/channel.rb', line 27

def close
  queue.push(:done)
end

#eachObject

Raises:

  • (ArgumentError)


31
32
33
34
35
36
37
38
# 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) ⇒ Object



17
18
19
20
21
22
23
24
25
# 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

#queueObject



40
41
42
# File 'lib/proclib/channel.rb', line 40

def queue
  @queue ||= Queue.new
end