diff --git a/lib/meilisearch/error.rb b/lib/meilisearch/error.rb index b9973856..6f160ca0 100644 --- a/lib/meilisearch/error.rb +++ b/lib/meilisearch/error.rb @@ -57,8 +57,8 @@ def initialize(message) class TimeoutError < StandardError attr_reader :message - def initialize - @message = 'The update was not processed in the expected time' + def initialize(message = nil) + @message = "The request was not processed in the expected time. #{message}" super(@message) end end diff --git a/lib/meilisearch/http_request.rb b/lib/meilisearch/http_request.rb index 5b724e5a..6d2e9383 100644 --- a/lib/meilisearch/http_request.rb +++ b/lib/meilisearch/http_request.rb @@ -103,8 +103,10 @@ def send_request(http_method, relative_path, config: {}) begin response = http_method.call(@base_url + relative_path, config) - rescue Errno::ECONNREFUSED => e + rescue Errno::ECONNREFUSED, Errno::EPIPE => e raise CommunicationError, e.message + rescue Net::ReadTimeout, Net::OpenTimeout => e + raise TimeoutError, e.message end validate(response) diff --git a/spec/meilisearch/client/errors_spec.rb b/spec/meilisearch/client/errors_spec.rb new file mode 100644 index 00000000..2ec36c23 --- /dev/null +++ b/spec/meilisearch/client/errors_spec.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +RSpec.describe 'MeiliSearch::Client - Errors' do + context 'when request takes to long to answer' do + it 'raises MeiliSearch::TimeoutError' do + timed_client = MeiliSearch::Client.new(URL, MASTER_KEY, { timeout: 0.000001 }) + + expect do + timed_client.version + end.to raise_error(MeiliSearch::TimeoutError) + end + end + + context 'when body is too large' do + let(:index) { client.index('movies') } + + it 'raises MeiliSearch::CommunicationError' do + allow(index.class).to receive(:post).and_raise(Errno::EPIPE) + + expect do + index.add_documents([{ id: 1, text: 'my_text' }]) + end.to raise_error(MeiliSearch::CommunicationError) + end + end +end diff --git a/spec/meilisearch_spec.rb b/spec/meilisearch_spec.rb index 18500e87..d24f8f92 100644 --- a/spec/meilisearch_spec.rb +++ b/spec/meilisearch_spec.rb @@ -26,7 +26,7 @@ expect do new_client.indexes - end.to raise_error(Timeout::Error) + end.to raise_error(MeiliSearch::TimeoutError) end it 'has a pre-defined header with current version' do