Skip to content

Commit cac0f17

Browse files
committed
Create a handler to catch exceptions & add a msg hint
1 parent bb49750 commit cac0f17

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

lib/meilisearch/utils.rb

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,21 @@ def self.parse_query(original_options, allowed_params = [])
3333
end
3434
end
3535

36-
private_class_method :parse
36+
def self.message_builder(current_message, method_name)
37+
"#{current_message}\nHint: It might not be working because maybe you're not up " \
38+
"to date with the Meilisearch version that `#{method_name}` call requires."
39+
end
40+
41+
def self.version_error_handler(method_name)
42+
yield if block_given?
43+
rescue MeiliSearch::ApiError => e
44+
message = message_builder(e.http_message, method_name)
45+
46+
raise MeiliSearch::ApiError.new(e.http_code, message, e.http_body)
47+
rescue StandardError => e
48+
raise e.class, message_builder(e.message, method_name)
49+
end
50+
51+
private_class_method :parse, :message_builder
3752
end
3853
end

spec/meilisearch/utils_spec.rb

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,30 @@
4646
)
4747
end
4848
end
49+
50+
describe '.version_error_handler' do
51+
it 'spawns same error message' do
52+
expect do
53+
MeiliSearch::Utils.version_error_handler(:my_method) do
54+
raise MeiliSearch::ApiError.new(405, 'I came from Meili server', {})
55+
end
56+
end.to raise_error(MeiliSearch::ApiError, /I came from Meili server/)
57+
end
58+
59+
it 'spawns message with version hint' do
60+
expect do
61+
MeiliSearch::Utils.version_error_handler(:my_method) do
62+
raise MeiliSearch::ApiError.new(405, 'I came from Meili server', {})
63+
end
64+
end.to raise_error(MeiliSearch::ApiError, /that `my_method` call requires/)
65+
end
66+
67+
it 'adds hints to all error types' do
68+
expect do
69+
MeiliSearch::Utils.version_error_handler(:my_method) do
70+
raise MeiliSearch::CommunicationError, 'I am an error'
71+
end
72+
end.to raise_error(MeiliSearch::CommunicationError, /that `my_method` call requires/)
73+
end
74+
end
4975
end

0 commit comments

Comments
 (0)