class NoBrainer::QueryRunner::EMDriver::ResponseHandler

Public Class Methods

new() click to toggle source
# File lib/no_brainer/query_runner/em_driver.rb, line 29
def initialize
  @ready = EventMachine::DefaultDeferrable.new
end

Public Instance Methods

close_query_handle() click to toggle source
# File lib/no_brainer/query_runner/em_driver.rb, line 33
def close_query_handle
  @query_handle.close
end
on_array(arr, caller) click to toggle source
# File lib/no_brainer/query_runner/em_driver.rb, line 60
def on_array(arr, caller)
  set_atom(arr)
end
on_atom(val, caller) click to toggle source
# File lib/no_brainer/query_runner/em_driver.rb, line 56
def on_atom(val, caller)
  set_atom(val)
end
on_close(caller) click to toggle source
# File lib/no_brainer/query_runner/em_driver.rb, line 45
def on_close(caller)
  return if @has_atom
  return on_error(RethinkDB::RqlRuntimeError.new("NoBrainer EM driver: No data received"), caller) unless @has_data
  @queue ? push(:close) : set_atom([])
end
on_dispatch(caller) click to toggle source
# File lib/no_brainer/query_runner/em_driver.rb, line 37
def on_dispatch(caller)
  @query_handle = caller
end
on_error(err, caller) click to toggle source
# File lib/no_brainer/query_runner/em_driver.rb, line 51
def on_error(err, caller)
  @error = err
  push(err)
end
on_open(caller) click to toggle source
# File lib/no_brainer/query_runner/em_driver.rb, line 41
def on_open(caller)
  @has_data = true
end
on_stream_val(val, caller) click to toggle source
# File lib/no_brainer/query_runner/em_driver.rb, line 64
def on_stream_val(val, caller)
  push([val])
end
on_unhandled_change(val, caller) click to toggle source
# File lib/no_brainer/query_runner/em_driver.rb, line 68
def on_unhandled_change(val, caller)
  push([val])
end
push(v) click to toggle source
# File lib/no_brainer/query_runner/em_driver.rb, line 72
def push(v)
  raise "internal error: unexpected stream" if @has_atom
  @queue ||= EventMachine::Queue.new
  @queue.push(v)
  response_ready!
end
response_ready!() click to toggle source
# File lib/no_brainer/query_runner/em_driver.rb, line 86
def response_ready!
  @ready.succeed(nil) if @ready
end
set_atom(v) click to toggle source
# File lib/no_brainer/query_runner/em_driver.rb, line 79
def set_atom(v)
  raise "internal error: unexpected atom" if @queue
  @has_atom = true
  @value = v
  response_ready!
end
value() click to toggle source
# File lib/no_brainer/query_runner/em_driver.rb, line 95
def value
  wait_for_response
  raise @error if @error
  @has_atom ? @value : Cursor.new(self, @queue)
end
wait_for_response() click to toggle source
# File lib/no_brainer/query_runner/em_driver.rb, line 90
def wait_for_response
  NoBrainer::QueryRunner::EMDriver.sync { |w| @ready.callback(&w) } if @ready
  @ready = nil
end