presto-client 0.5.7 → 0.5.8

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5c323f1555c8b8911022378e1b6b5c3ab32ea198
4
- data.tar.gz: dad8f48273aa312ff3c89809698f6bf4955d54b1
3
+ metadata.gz: 4443f4f6a4ddd03831d7882ca9f296e49b1df7b1
4
+ data.tar.gz: 075f86339df45b84b868e9d5d04e33983c27b8a4
5
5
  SHA512:
6
- metadata.gz: 7ef2fa5dd5e59a1d5a68f064bf3af0cabbae98b72ab9c64764297491c60de03f5ce7a7f00b527f5763b8eb92bdf2f5ffe2a9c01c4dc57a1da17b0f6c773d6368
7
- data.tar.gz: fe6c1fc26dff277531c8334b6feaf299b66f4cebdfc9b752ceda5e26c5edd3a4b95888c0b4292f22d526a364f61c1f1bcfb18f55c28e82b78e1bae32d9f2c35e
6
+ metadata.gz: 7def55d33d949cff35e14419682c792b821eba0550e1ca791cf49cefa58651c8badfb898b193372afa09290487a2c9fee2cfa58cf1b0bb3b0acac764d2e2b5e5
7
+ data.tar.gz: f0122e8873e0f037e47231774ba03d1dab3f291ed126edce63a1e6b62733e457b29784ea0f252c5dbf778c18e0ea0773a39905a40ac4d97a8759e758ec9c86b8
data/ChangeLog CHANGED
@@ -1,3 +1,12 @@
1
+ 2017-11-13 version 0.5.8
2
+
3
+ * Added `Client#kill(query_id)` method.
4
+ * Added additional checking of internal exceptions so that client doesn't
5
+ silently return in case when Presto query is killed and Presto returns a
6
+ valid `200 OK` response with `result_uri: null`.
7
+ * Fixed `undefined local variable 'body'` error that was possibly happening
8
+ when Presto returned an unexpected data structure.
9
+
1
10
  2017-08-28 version 0.5.7
2
11
  * Support a password option with HTTP basic auth
3
12
  * Changed retry timeout from hard coded 2h to configurable default 2min
data/README.md CHANGED
@@ -58,6 +58,12 @@ client.query("select * from sys.node") do |q|
58
58
  p row # row is an array
59
59
  }
60
60
  end
61
+
62
+ # killing a query
63
+ query = client.query("select * from sys.node")
64
+ query_id = query.query_info.query_id
65
+ query.each_row {|row| ... } # when a thread is processing the query,
66
+ client.kill(query_id) # another thread / process can kill the query.
61
67
  ```
62
68
 
63
69
  ## Build models
@@ -40,6 +40,10 @@ module Presto::Client
40
40
  return Query.resume(next_uri, @options)
41
41
  end
42
42
 
43
+ def kill(query_id)
44
+ return Query.kill(query_id, @options)
45
+ end
46
+
43
47
  def run(query)
44
48
  q = Query.start(query, @options)
45
49
  begin
@@ -0,0 +1,154 @@
1
+ #
2
+ # Presto client for Ruby
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+ module Presto::Client
17
+
18
+ module PrestoHeaders
19
+ PRESTO_USER = "X-Presto-User"
20
+ PRESTO_SOURCE = "X-Presto-Source"
21
+ PRESTO_CATALOG = "X-Presto-Catalog"
22
+ PRESTO_SCHEMA = "X-Presto-Schema"
23
+ PRESTO_TIME_ZONE = "X-Presto-Time-Zone"
24
+ PRESTO_LANGUAGE = "X-Presto-Language"
25
+ PRESTO_SESSION = "X-Presto-Session"
26
+
27
+ PRESTO_CURRENT_STATE = "X-Presto-Current-State"
28
+ PRESTO_MAX_WAIT = "X-Presto-Max-Wait"
29
+ PRESTO_MAX_SIZE = "X-Presto-Max-Size"
30
+ PRESTO_PAGE_SEQUENCE_ID = "X-Presto-Page-Sequence-Id"
31
+ end
32
+
33
+ HEADERS = {
34
+ "User-Agent" => "presto-ruby/#{VERSION}",
35
+ }
36
+
37
+ def self.faraday_client(options)
38
+ server = options[:server]
39
+ unless server
40
+ raise ArgumentError, ":server option is required"
41
+ end
42
+
43
+ ssl = faraday_ssl_options(options)
44
+
45
+ if options[:password] && !ssl
46
+ raise ArgumentError, "Protocol must be https when passing a password"
47
+ end
48
+
49
+ url = "#{ssl ? "https" : "http"}://#{server}"
50
+ proxy = options[:http_proxy] || options[:proxy] # :proxy is obsoleted
51
+
52
+ faraday_options = {url: url, proxy: "#{proxy}"}
53
+ faraday_options[:ssl] = ssl if ssl
54
+
55
+ faraday = Faraday.new(faraday_options) do |faraday|
56
+ if options[:user] && options[:password]
57
+ faraday.basic_auth(options[:user], options[:password])
58
+ end
59
+
60
+ faraday.response :logger if options[:http_debug]
61
+ faraday.adapter Faraday.default_adapter
62
+ end
63
+
64
+ faraday.headers.merge!(HEADERS)
65
+ faraday.headers.merge!(optional_headers(options))
66
+
67
+ return faraday
68
+ end
69
+
70
+ def self.faraday_ssl_options(options)
71
+ ssl = options[:ssl]
72
+
73
+ case ssl
74
+ when true
75
+ ssl = {verify: true}
76
+
77
+ when Hash
78
+ verify = ssl.fetch(:verify, true)
79
+ case verify
80
+ when true
81
+ # detailed SSL options. pass through to faraday
82
+ when nil, false
83
+ ssl = {verify: false}
84
+ else
85
+ raise ArgumentError, "Can't convert #{verify.class} of :verify option of :ssl option to true or false"
86
+ end
87
+
88
+ when nil, false
89
+ ssl = false
90
+
91
+ else
92
+ raise ArgumentError, "Can't convert #{ssl.class} of :ssl option to true, false, or Hash"
93
+ end
94
+
95
+ return ssl
96
+ end
97
+
98
+ def self.optional_headers(options)
99
+ headers = {}
100
+ if v = options[:user]
101
+ headers[PrestoHeaders::PRESTO_USER] = v
102
+ end
103
+ if v = options[:source]
104
+ headers[PrestoHeaders::PRESTO_SOURCE] = v
105
+ end
106
+ if v = options[:catalog]
107
+ headers[PrestoHeaders::PRESTO_CATALOG] = v
108
+ end
109
+ if v = options[:schema]
110
+ headers[PrestoHeaders::PRESTO_SCHEMA] = v
111
+ end
112
+ if v = options[:time_zone]
113
+ headers[PrestoHeaders::PRESTO_TIME_ZONE] = v
114
+ end
115
+ if v = options[:language]
116
+ headers[PrestoHeaders::PRESTO_LANGUAGE] = v
117
+ end
118
+ if v = options[:properties]
119
+ headers[PrestoHeaders::PRESTO_SESSION] = encode_properties(v)
120
+ end
121
+ if options[:enable_x_msgpack]
122
+ # option name is enable_"x"_msgpack because "Accept: application/x-msgpack" header is
123
+ # not officially supported by Presto. We can use this option only if a proxy server
124
+ # decodes & encodes response body. Once this option is supported by Presto, option
125
+ # name should be enable_msgpack, which might be slightly different behavior.
126
+ headers['Accept'] = 'application/x-msgpack,application/json'
127
+ end
128
+ headers
129
+ end
130
+
131
+ HTTP11_SEPARATOR = ["(", ")", "<", ">", "@", ",", ";", ":", "\\", "<", ">", "/", "[", "]", "?", "=", "{", "}", " ", "\v"]
132
+ HTTP11_TOKEN_CHARSET = (32..126).map {|x| x.chr } - HTTP11_SEPARATOR
133
+ HTTP11_TOKEN_REGEXP = /^[#{Regexp.escape(HTTP11_TOKEN_CHARSET.join)}]+\z/
134
+ HTTP11_CTL_CHARSET = (0..31).map {|x| x.chr } + [127.chr]
135
+ HTTP11_CTL_CHARSET_REGEXP = /[#{Regexp.escape(HTTP11_CTL_CHARSET.join)}]/
136
+
137
+ def self.encode_properties(properties)
138
+ # this is a hack to set same header multiple times.
139
+ properties.map do |k, v|
140
+ token = k.to_s
141
+ field_value = v.to_s # TODO LWS encoding is not implemented
142
+ unless k =~ HTTP11_TOKEN_REGEXP
143
+ raise Faraday::ClientError, "Key of properties can't include HTTP/1.1 control characters or separators (#{HTTP11_SEPARATOR.map {|c| c =~ /\s/ ? c.dump : c }.join(' ')})"
144
+ end
145
+ if field_value =~ HTTP11_CTL_CHARSET_REGEXP
146
+ raise Faraday::ClientError, "Value of properties can't include HTTP/1.1 control characters"
147
+ end
148
+ "#{token}=#{field_value}"
149
+ end.join("\r\n#{PrestoHeaders::PRESTO_SESSION}: ")
150
+ end
151
+
152
+ private_class_method :faraday_ssl_options, :optional_headers, :encode_properties
153
+
154
+ end
@@ -18,6 +18,7 @@ module Presto::Client
18
18
  require 'faraday'
19
19
  require 'presto/client/models'
20
20
  require 'presto/client/errors'
21
+ require 'presto/client/faraday_client'
21
22
  require 'presto/client/statement_client'
22
23
 
23
24
  class Query
@@ -29,68 +30,18 @@ module Presto::Client
29
30
  new StatementClient.new(faraday_client(options), nil, options, next_uri)
30
31
  end
31
32
 
32
- def self.faraday_client(options)
33
- server = options[:server]
34
- unless server
35
- raise ArgumentError, ":server option is required"
36
- end
37
-
38
- ssl = faraday_ssl_options(options)
39
-
40
- if options[:password] && !ssl
41
- raise ArgumentError, "Protocol must be https when passing a password"
42
- end
43
-
44
- url = "#{ssl ? "https" : "http"}://#{server}"
45
- proxy = options[:http_proxy] || options[:proxy] # :proxy is obsoleted
46
-
47
- faraday_options = {url: url, proxy: "#{proxy}"}
48
- faraday_options[:ssl] = ssl if ssl
49
-
50
- faraday = Faraday.new(faraday_options) do |faraday|
51
- #faraday.request :url_encoded
52
-
53
- if options[:user] && options[:password]
54
- faraday.basic_auth(options[:user], options[:password])
55
- end
56
-
57
- faraday.response :logger if options[:http_debug]
58
- faraday.adapter Faraday.default_adapter
33
+ def self.kill(query_id, options)
34
+ faraday = faraday_client(options)
35
+ response = faraday.delete do |req|
36
+ req.url "/v1/query/#{query_id}"
59
37
  end
60
-
61
- return faraday
38
+ return response.status / 100 == 2
62
39
  end
63
40
 
64
- def self.faraday_ssl_options(options)
65
- ssl = options[:ssl]
66
-
67
- case ssl
68
- when true
69
- ssl = {verify: true}
70
-
71
- when Hash
72
- verify = ssl.fetch(:verify, true)
73
- case verify
74
- when true
75
- # detailed SSL options. pass through to faraday
76
- when nil, false
77
- ssl = {verify: false}
78
- else
79
- raise ArgumentError, "Can't convert #{verify.class} of :verify option of :ssl option to true or false"
80
- end
81
-
82
- when nil, false
83
- ssl = false
84
-
85
- else
86
- raise ArgumentError, "Can't convert #{ssl.class} of :ssl option to true, false, or Hash"
87
- end
88
-
89
- return ssl
41
+ def self.faraday_client(options)
42
+ Presto::Client.faraday_client(options)
90
43
  end
91
44
 
92
- private_class_method :faraday_client, :faraday_ssl_options
93
-
94
45
  def initialize(api)
95
46
  @api = api
96
47
  end
@@ -103,24 +54,29 @@ module Presto::Client
103
54
  @api.advance
104
55
  end
105
56
 
57
+ def advance_and_raise
58
+ cont = @api.advance
59
+ raise_if_failed
60
+ cont
61
+ end
62
+
106
63
  def wait_for_columns
107
- while @api.current_results.columns == nil && @api.advance
64
+ while @api.current_results.columns == nil && advance_and_raise
108
65
  end
109
66
  end
110
67
 
111
68
  def wait_for_data
112
- while @api.current_results.data == nil && @api.advance
69
+ while @api.current_results.data == nil && advance_and_raise
113
70
  end
114
71
  end
115
72
 
73
+ private :advance_and_raise
116
74
  private :wait_for_columns
117
75
  private :wait_for_data
118
76
 
119
77
  def columns
120
78
  wait_for_columns
121
79
 
122
- raise_if_failed
123
-
124
80
  return @api.current_results.columns
125
81
  end
126
82
 
@@ -141,8 +97,6 @@ module Presto::Client
141
97
  def each_row_chunk(&block)
142
98
  wait_for_data
143
99
 
144
- raise_if_failed
145
-
146
100
  if self.columns == nil
147
101
  raise PrestoError, "Query #{@api.current_results.id} has no columns"
148
102
  end
@@ -151,7 +105,7 @@ module Presto::Client
151
105
  if data = @api.current_results.data
152
106
  block.call(data)
153
107
  end
154
- end while @api.advance
108
+ end while advance_and_raise
155
109
  end
156
110
 
157
111
  def query_info
@@ -20,26 +20,7 @@ module Presto::Client
20
20
  require 'presto/client/models'
21
21
  require 'presto/client/errors'
22
22
 
23
- module PrestoHeaders
24
- PRESTO_USER = "X-Presto-User"
25
- PRESTO_SOURCE = "X-Presto-Source"
26
- PRESTO_CATALOG = "X-Presto-Catalog"
27
- PRESTO_SCHEMA = "X-Presto-Schema"
28
- PRESTO_TIME_ZONE = "X-Presto-Time-Zone"
29
- PRESTO_LANGUAGE = "X-Presto-Language"
30
- PRESTO_SESSION = "X-Presto-Session"
31
-
32
- PRESTO_CURRENT_STATE = "X-Presto-Current-State"
33
- PRESTO_MAX_WAIT = "X-Presto-Max-Wait"
34
- PRESTO_MAX_SIZE = "X-Presto-Max-Size"
35
- PRESTO_PAGE_SEQUENCE_ID = "X-Presto-Page-Sequence-Id"
36
- end
37
-
38
23
  class StatementClient
39
- HEADERS = {
40
- "User-Agent" => "presto-ruby/#{VERSION}",
41
- }
42
-
43
24
  # Presto can return too deep nested JSON
44
25
  JSON_OPTIONS = {
45
26
  :max_nesting => false
@@ -47,7 +28,6 @@ module Presto::Client
47
28
 
48
29
  def initialize(faraday, query, options, next_uri=nil)
49
30
  @faraday = faraday
50
- @faraday.headers.merge!(HEADERS)
51
31
 
52
32
  @options = options
53
33
  @query = query
@@ -60,8 +40,6 @@ module Presto::Client
60
40
  @models = Models
61
41
  end
62
42
 
63
- @faraday.headers.merge!(optional_headers)
64
-
65
43
  if next_uri
66
44
  response = faraday_get_with_retry(next_uri)
67
45
  @results = @models::QueryResults.decode(parse_body(response))
@@ -70,41 +48,6 @@ module Presto::Client
70
48
  end
71
49
  end
72
50
 
73
- def optional_headers
74
- headers = {}
75
- if v = @options[:user]
76
- headers[PrestoHeaders::PRESTO_USER] = v
77
- end
78
- if v = @options[:source]
79
- headers[PrestoHeaders::PRESTO_SOURCE] = v
80
- end
81
- if v = @options[:catalog]
82
- headers[PrestoHeaders::PRESTO_CATALOG] = v
83
- end
84
- if v = @options[:schema]
85
- headers[PrestoHeaders::PRESTO_SCHEMA] = v
86
- end
87
- if v = @options[:time_zone]
88
- headers[PrestoHeaders::PRESTO_TIME_ZONE] = v
89
- end
90
- if v = @options[:language]
91
- headers[PrestoHeaders::PRESTO_LANGUAGE] = v
92
- end
93
- if v = @options[:properties]
94
- headers[PrestoHeaders::PRESTO_SESSION] = encode_properties(v)
95
- end
96
- if @options[:enable_x_msgpack]
97
- # option name is enable_"x"_msgpack because "Accept: application/x-msgpack" header is
98
- # not officially supported by Presto. We can use this option only if a proxy server
99
- # decodes & encodes response body. Once this option is supported by Presto, option
100
- # name should be enable_msgpack, which might be slightly different behavior.
101
- headers['Accept'] = 'application/x-msgpack,application/json'
102
- end
103
- headers
104
- end
105
-
106
- private :optional_headers
107
-
108
51
  def init_request(req)
109
52
  req.options.timeout = @options[:http_timeout] || 300
110
53
  req.options.open_timeout = @options[:http_open_timeout] || 60
@@ -185,6 +128,7 @@ module Presto::Client
185
128
  begin
186
129
  body_class.decode(hash)
187
130
  rescue => e
131
+ body = JSON.dump(hash)
188
132
  if body.size > 1024 + 3
189
133
  body = "#{body[0, 1024]}..."
190
134
  end
@@ -251,27 +195,6 @@ module Presto::Client
251
195
  return false
252
196
  end
253
197
 
254
- HTTP11_SEPARATOR = ["(", ")", "<", ">", "@", ",", ";", ":", "\\", "<", ">", "/", "[", "]", "?", "=", "{", "}", " ", "\v"]
255
- HTTP11_TOKEN_CHARSET = (32..126).map {|x| x.chr } - HTTP11_SEPARATOR
256
- HTTP11_TOKEN_REGEXP = /^[#{Regexp.escape(HTTP11_TOKEN_CHARSET.join)}]+\z/
257
- HTTP11_CTL_CHARSET = (0..31).map {|x| x.chr } + [127.chr]
258
- HTTP11_CTL_CHARSET_REGEXP = /[#{Regexp.escape(HTTP11_CTL_CHARSET.join)}]/
259
-
260
- def encode_properties(properties)
261
- # this is a hack to set same header multiple times.
262
- properties.map do |k, v|
263
- token = k.to_s
264
- field_value = v.to_s # TODO LWS encoding is not implemented
265
- unless k =~ HTTP11_TOKEN_REGEXP
266
- raise Faraday::ClientError, "Key of properties can't include HTTP/1.1 control characters or separators (#{HTTP11_SEPARATOR.map {|c| c =~ /\s/ ? c.dump : c }.join(' ')})"
267
- end
268
- if field_value =~ HTTP11_CTL_CHARSET_REGEXP
269
- raise Faraday::ClientError, "Value of properties can't include HTTP/1.1 control characters"
270
- end
271
- "#{token}=#{field_value}"
272
- end.join("\r\n#{PrestoHeaders::PRESTO_SESSION}: ")
273
- end
274
-
275
198
  def close
276
199
  return if @closed
277
200
 
@@ -15,6 +15,6 @@
15
15
  #
16
16
  module Presto
17
17
  module Client
18
- VERSION = "0.5.7"
18
+ VERSION = "0.5.8"
19
19
  end
20
20
  end
@@ -25,6 +25,10 @@ describe Presto::Client::StatementClient do
25
25
  }
26
26
  end
27
27
 
28
+ let :faraday do
29
+ Presto::Client.faraday_client(options)
30
+ end
31
+
28
32
  it "sets headers" do
29
33
  stub_request(:post, "localhost/v1/statement").
30
34
  with(body: query,
@@ -38,7 +42,6 @@ describe Presto::Client::StatementClient do
38
42
  "X-Presto-Session" => options[:properties].map {|k,v| "#{k}=#{v}"}.join("\r\nX-Presto-Session: ")
39
43
  }).to_return(body: response_json.to_json)
40
44
 
41
- faraday = Faraday.new(url: "http://localhost")
42
45
  StatementClient.new(faraday, query, options)
43
46
  end
44
47
 
@@ -75,7 +78,6 @@ describe Presto::Client::StatementClient do
75
78
  "X-Presto-Session" => options[:properties].map {|k,v| "#{k}=#{v}"}.join("\r\nX-Presto-Session: ")
76
79
  }).to_return(body: lambda{|req|if retry_p; response_json.to_json; else; retry_p=true; raise Timeout::Error.new("execution expired"); end })
77
80
 
78
- faraday = Faraday.new(url: "http://localhost")
79
81
  sc = StatementClient.new(faraday, query, options.merge(http_open_timeout: 1))
80
82
  sc.has_next?.should be_true
81
83
  sc.advance.should be_true
@@ -109,8 +111,8 @@ describe Presto::Client::StatementClient do
109
111
  "Accept" => "application/x-msgpack,application/json"
110
112
  }).to_return(body: lambda{|req|if retry_p; MessagePack.dump(response_json); else; retry_p=true; raise Timeout::Error.new("execution expired"); end }, headers: {"Content-Type" => "application/x-msgpack"})
111
113
 
112
- faraday = Faraday.new(url: "http://localhost")
113
- sc = StatementClient.new(faraday, query, options.merge(http_open_timeout: 1, enable_x_msgpack: "application/x-msgpack"))
114
+ options.merge!(http_open_timeout: 1, enable_x_msgpack: "application/x-msgpack")
115
+ sc = StatementClient.new(faraday, query, options)
114
116
  sc.has_next?.should be_true
115
117
  sc.advance.should be_true
116
118
  retry_p.should be_true
@@ -136,6 +138,54 @@ describe Presto::Client::StatementClient do
136
138
  end.should raise_error(TypeError, /String to Hash/)
137
139
  end
138
140
 
141
+ describe '#query_info' do
142
+ it "raises an exception with sample JSON if response is unexpected" do
143
+ headers = {
144
+ "User-Agent" => "presto-ruby/#{VERSION}",
145
+ "X-Presto-Catalog" => options[:catalog],
146
+ "X-Presto-Schema" => options[:schema],
147
+ "X-Presto-User" => options[:user],
148
+ "X-Presto-Language" => options[:language],
149
+ "X-Presto-Time-Zone" => options[:time_zone],
150
+ "X-Presto-Session" => options[:properties].map {|k,v| "#{k}=#{v}"}.join("\r\nX-Presto-Session: ")
151
+ }
152
+
153
+ stub_request(:post, "http://localhost/v1/statement").
154
+ with(body: query, headers: headers).
155
+ to_return(body: response_json2.to_json)
156
+
157
+ sc = StatementClient.new(faraday, query, options)
158
+
159
+ stub_request(:get, "http://localhost/v1/query/#{response_json2[:id]}").
160
+ with(headers: headers).
161
+ to_return(body: {"session" => "invalid session structure"}.to_json)
162
+
163
+ lambda do
164
+ sc.query_info
165
+ end.should raise_error(PrestoHttpError, /Presto API returned unexpected structure at \/v1\/query\/queryid\. Expected Presto::Client::ModelVersions::.*::QueryInfo but got {"session":"invalid session structure"}/)
166
+ end
167
+ end
168
+
169
+ describe "Killing a query" do
170
+ let(:query_id) { 'A_QUERY_ID' }
171
+
172
+ it "sends DELETE request with empty body to /v1/query/{queryId}" do
173
+ stub_request(:delete, "http://localhost/v1/query/#{query_id}").
174
+ with(body: "",
175
+ headers: {
176
+ "User-Agent" => "presto-ruby/#{VERSION}",
177
+ "X-Presto-Catalog" => options[:catalog],
178
+ "X-Presto-Schema" => options[:schema],
179
+ "X-Presto-User" => options[:user],
180
+ "X-Presto-Language" => options[:language],
181
+ "X-Presto-Time-Zone" => options[:time_zone],
182
+ "X-Presto-Session" => options[:properties].map {|k,v| "#{k}=#{v}"}.join("\r\nX-Presto-Session: "),
183
+ }).to_return(body: {}.to_json)
184
+
185
+ Presto::Client.new(options).kill(query_id)
186
+ end
187
+ end
188
+
139
189
  describe 'HTTP basic auth' do
140
190
  let(:password) { 'abcd' }
141
191
 
@@ -154,7 +204,7 @@ describe Presto::Client::StatementClient do
154
204
  basic_auth: [options[:user], password]
155
205
  ).to_return(body: response_json.to_json)
156
206
 
157
- faraday = Query.__send__(:faraday_client, options.merge(ssl: { verify: true }, password: password))
207
+ options.merge!(ssl: { verify: true }, password: password)
158
208
  StatementClient.new(faraday, query, options)
159
209
  end
160
210
 
@@ -289,7 +339,6 @@ describe Presto::Client::StatementClient do
289
339
  "X-Presto-Session" => options[:properties].map {|k,v| "#{k}=#{v}"}.join("\r\nX-Presto-Session: ")
290
340
  }).to_return(body: nested_json.to_json(:max_nesting => false))
291
341
 
292
- faraday = Faraday.new(url: "http://localhost")
293
342
  StatementClient.new(faraday, query, options)
294
343
  end
295
344
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: presto-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.7
4
+ version: 0.5.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sadayuki Furuhashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-28 00:00:00.000000000 Z
11
+ date: 2017-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -131,6 +131,7 @@ files:
131
131
  - lib/presto/client.rb
132
132
  - lib/presto/client/client.rb
133
133
  - lib/presto/client/errors.rb
134
+ - lib/presto/client/faraday_client.rb
134
135
  - lib/presto/client/model_versions/0.149.rb
135
136
  - lib/presto/client/model_versions/0.153.rb
136
137
  - lib/presto/client/model_versions/0.173.rb
@@ -168,7 +169,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
168
169
  version: '0'
169
170
  requirements: []
170
171
  rubyforge_project:
171
- rubygems_version: 2.6.11
172
+ rubygems_version: 2.6.13
172
173
  signing_key:
173
174
  specification_version: 4
174
175
  summary: Presto client library