diff --git a/lib/riddle/client.rb b/lib/riddle/client.rb index b451b0c..18d9799 100644 --- a/lib/riddle/client.rb +++ b/lib/riddle/client.rb @@ -4,7 +4,9 @@ module Riddle class VersionError < StandardError; end - class ResponseError < StandardError; end + class ResponseError < StandardError + attr_accessor :original + end class OutOfBoundsError < StandardError; end # This class was heavily based on the existing Client API by Dmytro Shteflyuk @@ -290,6 +292,10 @@ def run @queue.clear results + rescue => original + error = ResponseError.new original.message + error.original = original + raise error end # Query the Sphinx daemon - defaulting to all indices, but you can specify diff --git a/spec/functional/connection_spec.rb b/spec/functional/connection_spec.rb index 1281ec7..88541b3 100644 --- a/spec/functional/connection_spec.rb +++ b/spec/functional/connection_spec.rb @@ -8,7 +8,7 @@ class RiddleSpecConnectionProcError < StandardError; end after :each do Riddle::Client.connection = nil end - + describe '.connection' do it "should use the given block" do Riddle::Client.connection = lambda { |client| @@ -16,16 +16,16 @@ class RiddleSpecConnectionProcError < StandardError; end } client.query('smith').should be_kind_of(Hash) end - + it "should fail with errors from the given block" do Riddle::Client.connection = lambda { |client| raise RiddleSpecConnectionProcError } lambda { client.query('smith') }. - should raise_error(RiddleSpecConnectionProcError) + should raise_error(Riddle::ResponseError) end end - + describe '#connection' do it "use the given block" do client.connection = lambda { |client| @@ -39,7 +39,7 @@ class RiddleSpecConnectionProcError < StandardError; end raise RiddleSpecConnectionProcError } lambda { client.query('smith') }. - should raise_error(RiddleSpecConnectionProcError) + should raise_error(Riddle::ResponseError) end it "should prioritise instance over class connection" do @@ -49,7 +49,7 @@ class RiddleSpecConnectionProcError < StandardError; end client.connection = lambda { |client| TCPSocket.new(client.server, client.port) } - + lambda { client.query('smith') }.should_not raise_error end end