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