thrift_client 0.8.1 → 0.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +3 -0
- data/Manifest +1 -0
- data/lib/thrift_client/abstract_thrift_client.rb +24 -35
- data/lib/thrift_client/connection/base.rb +19 -13
- data/lib/thrift_client/connection/factory.rb +9 -7
- data/lib/thrift_client/connection/http.rb +17 -15
- data/lib/thrift_client/connection/socket.rb +18 -16
- data/lib/thrift_client/server.rb +100 -0
- data/lib/thrift_client.rb +1 -1
- data/test/thrift_client_test.rb +2 -2
- data/thrift_client.gemspec +6 -6
- metadata +39 -54
data/CHANGELOG
CHANGED
data/Manifest
CHANGED
@@ -11,6 +11,7 @@ lib/thrift_client/connection/factory.rb
|
|
11
11
|
lib/thrift_client/connection/http.rb
|
12
12
|
lib/thrift_client/connection/socket.rb
|
13
13
|
lib/thrift_client/event_machine.rb
|
14
|
+
lib/thrift_client/server.rb
|
14
15
|
lib/thrift_client/simple.rb
|
15
16
|
lib/thrift_client/thrift.rb
|
16
17
|
test/greeter/greeter.rb
|
@@ -1,17 +1,5 @@
|
|
1
1
|
class AbstractThriftClient
|
2
|
-
|
3
|
-
class Server
|
4
|
-
attr_reader :connection_string, :marked_down_at
|
5
|
-
|
6
|
-
def initialize(connection_string)
|
7
|
-
@connection_string = connection_string
|
8
|
-
end
|
9
|
-
alias to_s connection_string
|
10
|
-
|
11
|
-
def mark_down!
|
12
|
-
@marked_down_at = Time.now
|
13
|
-
end
|
14
|
-
end
|
2
|
+
include ThriftHelpers
|
15
3
|
|
16
4
|
DISCONNECT_ERRORS = [
|
17
5
|
IOError,
|
@@ -41,7 +29,8 @@ class AbstractThriftClient
|
|
41
29
|
:wrapped_exception_classes => DEFAULT_WRAPPED_ERRORS,
|
42
30
|
:connect_timeout => 0.1,
|
43
31
|
:timeout => 1,
|
44
|
-
:timeout_overrides => {}
|
32
|
+
:timeout_overrides => {},
|
33
|
+
:cached_connections => false
|
45
34
|
}
|
46
35
|
|
47
36
|
attr_reader :client, :client_class, :current_server, :server_list, :options, :client_methods
|
@@ -50,7 +39,9 @@ class AbstractThriftClient
|
|
50
39
|
@options = DEFAULTS.merge(options)
|
51
40
|
@options[:server_retry_period] ||= 0
|
52
41
|
@client_class = client_class
|
53
|
-
@server_list = Array(servers).collect
|
42
|
+
@server_list = Array(servers).collect do |s|
|
43
|
+
Server.new(s, @options[:cached_connections])
|
44
|
+
end.sort_by { rand }
|
54
45
|
@current_server = @server_list.first
|
55
46
|
|
56
47
|
@callbacks = {}
|
@@ -101,16 +92,23 @@ class AbstractThriftClient
|
|
101
92
|
# call.
|
102
93
|
def connect!
|
103
94
|
@current_server = next_live_server
|
104
|
-
@
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
@client = @client_class.new(@options[:protocol].new(
|
95
|
+
@current_server.open(@options[:transport],
|
96
|
+
@options[:transport_wrapper],
|
97
|
+
@options[:connect_timeout],
|
98
|
+
@options[:timeout])
|
99
|
+
@client = @client_class.new(@options[:protocol].new(@current_server, *@options[:protocol_extra_params]))
|
109
100
|
do_callbacks(:post_connect, self)
|
101
|
+
rescue IOError, Thrift::TransportException
|
102
|
+
disconnect!(true)
|
103
|
+
retry
|
110
104
|
end
|
111
105
|
|
112
|
-
def disconnect!
|
113
|
-
@
|
106
|
+
def disconnect!(error = false)
|
107
|
+
if @current_server
|
108
|
+
@current_server.mark_down!(@options[:server_retry_period]) if error
|
109
|
+
@current_server.close
|
110
|
+
end
|
111
|
+
|
114
112
|
@client = nil
|
115
113
|
@current_server = nil
|
116
114
|
@request_count = 0
|
@@ -130,16 +128,16 @@ class AbstractThriftClient
|
|
130
128
|
@server_index ||= 0
|
131
129
|
@server_list.length.times do |i|
|
132
130
|
cur = (1 + @server_index + i) % @server_list.length
|
133
|
-
if
|
131
|
+
if @server_list[cur].up?
|
134
132
|
@server_index = cur
|
135
133
|
return @server_list[cur]
|
136
134
|
end
|
137
135
|
end
|
138
|
-
raise ThriftClient::NoServersAvailable, "No live servers in #{@server_list.inspect}
|
136
|
+
raise ThriftClient::NoServersAvailable, "No live servers in #{@server_list.inspect}."
|
139
137
|
end
|
140
138
|
|
141
139
|
def handled_proxy(method_name, *args)
|
142
|
-
|
140
|
+
disconnect! if @options[:server_max_requests] && @request_count >= @options[:server_max_requests]
|
143
141
|
begin
|
144
142
|
connect! unless @client
|
145
143
|
if has_timeouts?
|
@@ -151,7 +149,7 @@ class AbstractThriftClient
|
|
151
149
|
rescue *@options[:exception_class_overrides] => e
|
152
150
|
raise_or_default(e, method_name)
|
153
151
|
rescue *@options[:exception_classes] => e
|
154
|
-
|
152
|
+
disconnect!(true)
|
155
153
|
tries ||= (@options[:retry_overrides][method_name.to_sym] || @options[:retries]) + 1
|
156
154
|
tries -= 1
|
157
155
|
if tries > 0
|
@@ -181,15 +179,6 @@ class AbstractThriftClient
|
|
181
179
|
end
|
182
180
|
end
|
183
181
|
|
184
|
-
def disconnect_on_max!
|
185
|
-
disconnect!
|
186
|
-
end
|
187
|
-
|
188
|
-
def disconnect_on_error!
|
189
|
-
@current_server.mark_down! if @current_server
|
190
|
-
disconnect!
|
191
|
-
end
|
192
|
-
|
193
182
|
def has_timeouts?
|
194
183
|
@has_timeouts ||= @options[:timeout_overrides].any? && transport_can_timeout?
|
195
184
|
end
|
@@ -1,19 +1,25 @@
|
|
1
|
-
module
|
2
|
-
|
3
|
-
|
1
|
+
module ThriftHelpers
|
2
|
+
module Connection
|
3
|
+
class Base
|
4
|
+
attr_accessor :transport, :server
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
6
|
+
def initialize(transport, transport_wrapper, server, timeout)
|
7
|
+
@transport = transport
|
8
|
+
@transport_wrapper = transport_wrapper
|
9
|
+
@server = server
|
10
|
+
@timeout = timeout
|
11
|
+
end
|
11
12
|
|
12
|
-
|
13
|
-
|
14
|
-
|
13
|
+
def connect!
|
14
|
+
raise NotImplementedError
|
15
|
+
end
|
16
|
+
|
17
|
+
def open?
|
18
|
+
@transport.open?
|
19
|
+
end
|
15
20
|
|
16
|
-
|
21
|
+
def close
|
22
|
+
end
|
17
23
|
end
|
18
24
|
end
|
19
25
|
end
|
@@ -1,10 +1,12 @@
|
|
1
|
-
module
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
1
|
+
module ThriftHelpers
|
2
|
+
module Connection
|
3
|
+
class Factory
|
4
|
+
def self.create(transport, transport_wrapper, server, timeout)
|
5
|
+
if transport == Thrift::HTTPClientTransport
|
6
|
+
Connection::HTTP.new(transport, transport_wrapper, server, timeout)
|
7
|
+
else
|
8
|
+
Connection::Socket.new(transport, transport_wrapper, server, timeout)
|
9
|
+
end
|
8
10
|
end
|
9
11
|
end
|
10
12
|
end
|
@@ -1,18 +1,20 @@
|
|
1
|
-
module
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
1
|
+
module ThriftHelpers
|
2
|
+
module Connection
|
3
|
+
class HTTP < Base
|
4
|
+
def connect!
|
5
|
+
uri = parse_server(@server)
|
6
|
+
@transport = Thrift::HTTPClientTransport.new(@server)
|
7
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
8
|
+
http.use_ssl = uri.scheme == "https"
|
9
|
+
http.get(uri.path)
|
10
|
+
end
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
12
|
+
private
|
13
|
+
def parse_server(server)
|
14
|
+
uri = URI.parse(server)
|
15
|
+
raise ArgumentError, 'Servers must start with http' unless uri.scheme =~ /^http/
|
16
|
+
uri
|
17
|
+
end
|
16
18
|
end
|
17
19
|
end
|
18
|
-
end
|
20
|
+
end
|
@@ -1,22 +1,24 @@
|
|
1
|
-
module
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
module ThriftHelpers
|
2
|
+
module Connection
|
3
|
+
class Socket < Base
|
4
|
+
def close
|
5
|
+
@transport.close
|
6
|
+
end
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
8
|
+
def connect!
|
9
|
+
host, port = parse_server(@server)
|
10
|
+
@transport = @transport.new(*[host, port.to_i, @timeout])
|
11
|
+
@transport = @transport_wrapper.new(@transport) if @transport_wrapper
|
12
|
+
@transport.open
|
13
|
+
end
|
13
14
|
|
14
|
-
|
15
|
+
private
|
15
16
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
17
|
+
def parse_server(server)
|
18
|
+
host, port = server.to_s.split(":")
|
19
|
+
raise ArgumentError, 'Servers must be in the form "host:port"' unless host and port
|
20
|
+
[host, port]
|
21
|
+
end
|
20
22
|
end
|
21
23
|
end
|
22
24
|
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require 'thrift_client/connection'
|
2
|
+
|
3
|
+
module ThriftHelpers
|
4
|
+
class Server
|
5
|
+
class ServerMarkedDown < StandardError; end
|
6
|
+
|
7
|
+
def initialize(connection_string, cached = true)
|
8
|
+
@connection_string = connection_string
|
9
|
+
@connection = nil
|
10
|
+
@cached = cached
|
11
|
+
@marked_down_til = nil
|
12
|
+
end
|
13
|
+
|
14
|
+
def mark_down!(til)
|
15
|
+
close(true)
|
16
|
+
@marked_down_til = Time.now + til
|
17
|
+
end
|
18
|
+
|
19
|
+
def up?
|
20
|
+
!down?
|
21
|
+
end
|
22
|
+
|
23
|
+
def down?
|
24
|
+
@marked_down_til && @marked_down_til > Time.now
|
25
|
+
end
|
26
|
+
|
27
|
+
def to_s
|
28
|
+
@connection_string
|
29
|
+
end
|
30
|
+
|
31
|
+
def open(trans, wrap, conn_timeout, trans_timeout)
|
32
|
+
if down?
|
33
|
+
raise ServerMarkedDown, "marked down until #{@marked_down_til}"
|
34
|
+
end
|
35
|
+
|
36
|
+
if @connection.nil? || (@cached && !@connection.open?)
|
37
|
+
@connection = Connection::Factory.create(trans, wrap, @connection_string, conn_timeout)
|
38
|
+
@connection.connect!
|
39
|
+
end
|
40
|
+
|
41
|
+
if wrap || trans.respond_to?(:timeout=)
|
42
|
+
timeout = trans_timeout
|
43
|
+
end
|
44
|
+
|
45
|
+
self
|
46
|
+
end
|
47
|
+
|
48
|
+
def open?
|
49
|
+
@connection && @connection.open?
|
50
|
+
end
|
51
|
+
|
52
|
+
def close(teardown = false)
|
53
|
+
if teardown || !@cached
|
54
|
+
@connection.close rescue nil #TODO
|
55
|
+
@connection = nil
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def transport
|
60
|
+
return nil unless @connection
|
61
|
+
@connection.transport
|
62
|
+
end
|
63
|
+
|
64
|
+
module TransportInterface
|
65
|
+
def read(sz)
|
66
|
+
transport.read(sz)
|
67
|
+
end
|
68
|
+
|
69
|
+
def read_byte
|
70
|
+
transport.read_byte
|
71
|
+
end
|
72
|
+
|
73
|
+
def read_into_buffer(buffer, size)
|
74
|
+
transport.read_into_buffer(buffer, size)
|
75
|
+
end
|
76
|
+
|
77
|
+
def read_all(sz)
|
78
|
+
transport.read_all(sz)
|
79
|
+
end
|
80
|
+
|
81
|
+
def write(buf)
|
82
|
+
transport.write(buf)
|
83
|
+
end
|
84
|
+
alias_method :<<, :write
|
85
|
+
|
86
|
+
def flush
|
87
|
+
transport.flush
|
88
|
+
end
|
89
|
+
|
90
|
+
def timeout=(timeout)
|
91
|
+
transport.timeout = timeout
|
92
|
+
end
|
93
|
+
|
94
|
+
def timeout
|
95
|
+
transport.timeout
|
96
|
+
end
|
97
|
+
end
|
98
|
+
include TransportInterface
|
99
|
+
end
|
100
|
+
end
|
data/lib/thrift_client.rb
CHANGED
data/test/thrift_client_test.rb
CHANGED
@@ -48,8 +48,8 @@ class ThriftClientTest < Test::Unit::TestCase
|
|
48
48
|
|
49
49
|
# disconnect_on_error! is called every time a server related
|
50
50
|
# connection error happens. it will be called every try (so, retries + 1)
|
51
|
-
singleton_class.send :define_method, :
|
52
|
-
times_called += 1; super *args
|
51
|
+
singleton_class.send :define_method, :disconnect! do |*args|
|
52
|
+
times_called += 1 if args[0]; super *args
|
53
53
|
end
|
54
54
|
|
55
55
|
assert_raises(Greeter::Client::TransportException) { client.greeting("someone") }
|
data/thrift_client.gemspec
CHANGED
@@ -2,22 +2,22 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "thrift_client"
|
5
|
-
s.version = "0.8.
|
5
|
+
s.version = "0.8.2"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0.8") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Evan Weaver, Ryan King, Jeff Hodges"]
|
9
|
-
s.date = "2012-
|
9
|
+
s.date = "2012-09-11"
|
10
10
|
s.description = "A Thrift client wrapper that encapsulates some common failover behavior."
|
11
11
|
s.email = ""
|
12
|
-
s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README.rdoc", "lib/thrift_client.rb", "lib/thrift_client/abstract_thrift_client.rb", "lib/thrift_client/connection.rb", "lib/thrift_client/connection/base.rb", "lib/thrift_client/connection/factory.rb", "lib/thrift_client/connection/http.rb", "lib/thrift_client/connection/socket.rb", "lib/thrift_client/event_machine.rb", "lib/thrift_client/simple.rb", "lib/thrift_client/thrift.rb"]
|
13
|
-
s.files = ["CHANGELOG", "LICENSE", "Manifest", "README.rdoc", "Rakefile", "lib/thrift_client.rb", "lib/thrift_client/abstract_thrift_client.rb", "lib/thrift_client/connection.rb", "lib/thrift_client/connection/base.rb", "lib/thrift_client/connection/factory.rb", "lib/thrift_client/connection/http.rb", "lib/thrift_client/connection/socket.rb", "lib/thrift_client/event_machine.rb", "lib/thrift_client/simple.rb", "lib/thrift_client/thrift.rb", "test/greeter/greeter.rb", "test/greeter/greeter.thrift", "test/greeter/server.rb", "test/multiple_working_servers_test.rb", "test/simple_test.rb", "test/test_helper.rb", "test/thrift_client_http_test.rb", "test/thrift_client_test.rb", "thrift_client.gemspec"]
|
12
|
+
s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README.rdoc", "lib/thrift_client.rb", "lib/thrift_client/abstract_thrift_client.rb", "lib/thrift_client/connection.rb", "lib/thrift_client/connection/base.rb", "lib/thrift_client/connection/factory.rb", "lib/thrift_client/connection/http.rb", "lib/thrift_client/connection/socket.rb", "lib/thrift_client/event_machine.rb", "lib/thrift_client/server.rb", "lib/thrift_client/simple.rb", "lib/thrift_client/thrift.rb"]
|
13
|
+
s.files = ["CHANGELOG", "LICENSE", "Manifest", "README.rdoc", "Rakefile", "lib/thrift_client.rb", "lib/thrift_client/abstract_thrift_client.rb", "lib/thrift_client/connection.rb", "lib/thrift_client/connection/base.rb", "lib/thrift_client/connection/factory.rb", "lib/thrift_client/connection/http.rb", "lib/thrift_client/connection/socket.rb", "lib/thrift_client/event_machine.rb", "lib/thrift_client/server.rb", "lib/thrift_client/simple.rb", "lib/thrift_client/thrift.rb", "test/greeter/greeter.rb", "test/greeter/greeter.thrift", "test/greeter/server.rb", "test/multiple_working_servers_test.rb", "test/simple_test.rb", "test/test_helper.rb", "test/thrift_client_http_test.rb", "test/thrift_client_test.rb", "thrift_client.gemspec"]
|
14
14
|
s.homepage = "http://fauna.github.com/fauna/thrift_client/"
|
15
15
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Thrift_client", "--main", "README.rdoc"]
|
16
16
|
s.require_paths = ["lib"]
|
17
17
|
s.rubyforge_project = "fauna"
|
18
|
-
s.rubygems_version = "1.8.
|
18
|
+
s.rubygems_version = "1.8.23"
|
19
19
|
s.summary = "A Thrift client wrapper that encapsulates some common failover behavior."
|
20
|
-
s.test_files = ["test/
|
20
|
+
s.test_files = ["test/thrift_client_http_test.rb", "test/thrift_client_test.rb", "test/test_helper.rb", "test/multiple_working_servers_test.rb", "test/simple_test.rb"]
|
21
21
|
|
22
22
|
if s.respond_to? :specification_version then
|
23
23
|
s.specification_version = 3
|
metadata
CHANGED
@@ -1,45 +1,37 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: thrift_client
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.8.2
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 8
|
9
|
-
- 1
|
10
|
-
version: 0.8.1
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Evan Weaver, Ryan King, Jeff Hodges
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-09-11 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: thrift
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
18
|
+
requirements:
|
26
19
|
- - ~>
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
hash: 63
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
- 8
|
32
|
-
- 0
|
20
|
+
- !ruby/object:Gem::Version
|
33
21
|
version: 0.8.0
|
34
22
|
type: :runtime
|
35
|
-
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.8.0
|
36
30
|
description: A Thrift client wrapper that encapsulates some common failover behavior.
|
37
|
-
email:
|
31
|
+
email: ''
|
38
32
|
executables: []
|
39
|
-
|
40
33
|
extensions: []
|
41
|
-
|
42
|
-
extra_rdoc_files:
|
34
|
+
extra_rdoc_files:
|
43
35
|
- CHANGELOG
|
44
36
|
- LICENSE
|
45
37
|
- README.rdoc
|
@@ -51,9 +43,10 @@ extra_rdoc_files:
|
|
51
43
|
- lib/thrift_client/connection/http.rb
|
52
44
|
- lib/thrift_client/connection/socket.rb
|
53
45
|
- lib/thrift_client/event_machine.rb
|
46
|
+
- lib/thrift_client/server.rb
|
54
47
|
- lib/thrift_client/simple.rb
|
55
48
|
- lib/thrift_client/thrift.rb
|
56
|
-
files:
|
49
|
+
files:
|
57
50
|
- CHANGELOG
|
58
51
|
- LICENSE
|
59
52
|
- Manifest
|
@@ -67,6 +60,7 @@ files:
|
|
67
60
|
- lib/thrift_client/connection/http.rb
|
68
61
|
- lib/thrift_client/connection/socket.rb
|
69
62
|
- lib/thrift_client/event_machine.rb
|
63
|
+
- lib/thrift_client/server.rb
|
70
64
|
- lib/thrift_client/simple.rb
|
71
65
|
- lib/thrift_client/thrift.rb
|
72
66
|
- test/greeter/greeter.rb
|
@@ -80,46 +74,37 @@ files:
|
|
80
74
|
- thrift_client.gemspec
|
81
75
|
homepage: http://fauna.github.com/fauna/thrift_client/
|
82
76
|
licenses: []
|
83
|
-
|
84
77
|
post_install_message:
|
85
|
-
rdoc_options:
|
78
|
+
rdoc_options:
|
86
79
|
- --line-numbers
|
87
80
|
- --inline-source
|
88
81
|
- --title
|
89
82
|
- Thrift_client
|
90
83
|
- --main
|
91
84
|
- README.rdoc
|
92
|
-
require_paths:
|
85
|
+
require_paths:
|
93
86
|
- lib
|
94
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
87
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
95
88
|
none: false
|
96
|
-
requirements:
|
97
|
-
- -
|
98
|
-
- !ruby/object:Gem::Version
|
99
|
-
|
100
|
-
|
101
|
-
- 0
|
102
|
-
version: "0"
|
103
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
89
|
+
requirements:
|
90
|
+
- - ! '>='
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '0'
|
93
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
94
|
none: false
|
105
|
-
requirements:
|
106
|
-
- -
|
107
|
-
- !ruby/object:Gem::Version
|
108
|
-
|
109
|
-
segments:
|
110
|
-
- 0
|
111
|
-
- 8
|
112
|
-
version: "0.8"
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0.8'
|
113
99
|
requirements: []
|
114
|
-
|
115
100
|
rubyforge_project: fauna
|
116
|
-
rubygems_version: 1.8.
|
101
|
+
rubygems_version: 1.8.23
|
117
102
|
signing_key:
|
118
103
|
specification_version: 3
|
119
104
|
summary: A Thrift client wrapper that encapsulates some common failover behavior.
|
120
|
-
test_files:
|
121
|
-
- test/multiple_working_servers_test.rb
|
122
|
-
- test/simple_test.rb
|
123
|
-
- test/test_helper.rb
|
105
|
+
test_files:
|
124
106
|
- test/thrift_client_http_test.rb
|
125
107
|
- test/thrift_client_test.rb
|
108
|
+
- test/test_helper.rb
|
109
|
+
- test/multiple_working_servers_test.rb
|
110
|
+
- test/simple_test.rb
|