class RSpecRayo::RayoDriver

Attributes

call_queue[R]
calls[R]

Public Class Methods

new(options) click to toggle source
# File lib/rspec-rayo/driver.rb, line 7
def initialize(options)
  @calls            = {}
  @call_queue       = Queue.new
  @queue_timeout    = options.delete(:queue_timeout) || 5
  @write_timeout    = options.delete(:write_timeout) || 5
  @threads          = []
  @connection_latch = CountDownLatch.new 1

  initialize_punchblock options
end

Public Instance Methods

cleanup_calls() click to toggle source
# File lib/rspec-rayo/driver.rb, line 26
def cleanup_calls
  @calls.each_pair do |call_id, call|
    call.hangup unless call.status == :finished
  end
  @calls = {}
end
dial(options) click to toggle source
# File lib/rspec-rayo/driver.rb, line 33
def dial(options)
  new_call.tap do |call|
    dial = call.dial options
    call.call_id = dial.call_id
    @calls[call.call_id] = call
  end
end
get_call() click to toggle source
# File lib/rspec-rayo/driver.rb, line 22
def get_call
  Timeout::timeout(@queue_timeout) { @call_queue.pop }
end
wait_for_connection(timeout = nil) click to toggle source
# File lib/rspec-rayo/driver.rb, line 18
def wait_for_connection(timeout = nil)
  @connection_latch.wait timeout
end

Private Instance Methods

initialize_punchblock(options) click to toggle source
# File lib/rspec-rayo/driver.rb, line 49
def initialize_punchblock(options)
  logger = Logger.new 'punchblock.log'

  def logger.trace(*args)
    debug *args
  end

  Punchblock.logger = logger

  connection = Punchblock::Connection::XMPP.new options

  @pb_client = Punchblock::Client.new  :connection => connection,
                                       :write_timeout => options[:write_timeout]

  @pb_client.register_event_handler do |event|
    if event.is_a?(Punchblock::Connection::Connected)
      logger.info "Connected!"
      @connection_latch.countdown!
      throw :pass
    end

    if call = @calls[event.call_id]
      @calls[event.call_id] << event
    else
      call = new_call
      @calls[event.call_id] = call
      @call_queue.push call
    end
  end

  Thread.new { @pb_client.run }
end
new_call() click to toggle source
# File lib/rspec-rayo/driver.rb, line 43
def new_call
  Call.new :client        => @pb_client,
           :read_timeout  => @queue_timeout,
           :write_timeout => @write_timeout
end