Skip to content
This repository was archived by the owner on Nov 16, 2021. It is now read-only.

Commit 3ec894d

Browse files
committed
Extract wrapped exception class creation
The wrapped exception classes are not created until ThriftClient.new is called with the correct client class. This makes it difficult to write code like `rescue MyThrift::Client::TransportException` because the exception class may not exist yet. Callers may now use ThriftClient.create_wrapped_exception_classes to ensure the desired classes have been created.
1 parent d8ad596 commit 3ec894d

File tree

2 files changed

+19
-8
lines changed

2 files changed

+19
-8
lines changed

lib/thrift_client/abstract_thrift_client.rb

+12-8
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,17 @@ class AbstractThriftClient
3535

3636
attr_reader :last_client, :client, :client_class, :current_server, :server_list, :options, :client_methods
3737

38+
def self.create_wrapped_exception_classes(client_class, wrapped_exception_classes = DEFAULT_WRAPPED_ERRORS)
39+
wrapped_exception_classes.map do |exception_klass|
40+
name = exception_klass.to_s.split('::').last
41+
begin
42+
client_class.const_get(name)
43+
rescue NameError
44+
client_class.const_set(name, Class.new(exception_klass))
45+
end
46+
end
47+
end
48+
3849
def initialize(client_class, servers, options = {})
3950
@options = DEFAULTS.merge(options)
4051
@options[:server_retry_period] ||= 0
@@ -55,14 +66,7 @@ def initialize(client_class, servers, options = {})
5566
end
5667
end
5768
@request_count = 0
58-
@options[:wrapped_exception_classes].each do |exception_klass|
59-
name = exception_klass.to_s.split('::').last
60-
begin
61-
@client_class.const_get(name)
62-
rescue NameError
63-
@client_class.const_set(name, Class.new(exception_klass))
64-
end
65-
end
69+
self.class.create_wrapped_exception_classes(@client_class, @options[:wrapped_exception_classes])
6670
end
6771

6872
# Adds a callback that will be invoked at a certain time. The valid callback types are:

test/thrift_client_test.rb

+7
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,13 @@ def test_inspect
2626
assert_equal "<ThriftClient(Greeter::Client) @current_server=127.0.0.1:1463>", client.inspect
2727
end
2828

29+
def test_create_wrapped_exception_classes
30+
client = Module.new
31+
ThriftClient.create_wrapped_exception_classes(client, [Thrift::TransportException])
32+
assert client.const_defined?(:TransportException)
33+
assert client.const_get(:TransportException).new.is_a?(Thrift::TransportException)
34+
end
35+
2936
def test_live_server
3037
assert_nothing_raised do
3138
ThriftClient.new(Greeter::Client, @servers.last, @options).greeting("someone")

0 commit comments

Comments
 (0)