excon 0.99.0 → 1.3.0
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 +4 -4
- data/README.md +25 -2
- data/data/cacert.pem +622 -438
- data/excon.gemspec +24 -17
- data/lib/excon/connection.rb +27 -14
- data/lib/excon/constants.rb +136 -119
- data/lib/excon/error.rb +2 -2
- data/lib/excon/middlewares/capture_cookies.rb +1 -1
- data/lib/excon/middlewares/decompress.rb +17 -22
- data/lib/excon/middlewares/redirect_follower.rb +3 -3
- data/lib/excon/response.rb +4 -4
- data/lib/excon/socket.rb +121 -31
- data/lib/excon/ssl_socket.rb +4 -3
- data/lib/excon/test/plugin/server/puma.rb +1 -1
- data/lib/excon/test/plugin/server/unicorn.rb +5 -5
- data/lib/excon/test/plugin/server/webrick.rb +1 -1
- data/lib/excon/test/server.rb +2 -9
- data/lib/excon/unix_socket.rb +1 -1
- data/lib/excon/utils.rb +39 -36
- data/lib/excon/version.rb +2 -1
- data/lib/excon.rb +40 -48
- metadata +48 -22
data/lib/excon.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
$:.unshift(File.dirname(__FILE__)) unless
|
3
4
|
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
4
5
|
|
5
6
|
require 'cgi'
|
6
7
|
require 'forwardable'
|
8
|
+
require 'ipaddr'
|
7
9
|
require 'openssl'
|
8
10
|
require 'rbconfig'
|
9
11
|
require 'socket'
|
@@ -17,6 +19,7 @@ require 'excon/version'
|
|
17
19
|
require 'excon/extensions/uri'
|
18
20
|
|
19
21
|
require 'excon/middlewares/base'
|
22
|
+
require 'excon/middlewares/decompress'
|
20
23
|
require 'excon/middlewares/expects'
|
21
24
|
require 'excon/middlewares/idempotent'
|
22
25
|
require 'excon/middlewares/instrumentor'
|
@@ -30,7 +33,6 @@ require 'excon/utils'
|
|
30
33
|
require 'excon/connection'
|
31
34
|
require 'excon/headers'
|
32
35
|
require 'excon/response'
|
33
|
-
require 'excon/middlewares/decompress'
|
34
36
|
require 'excon/middlewares/escape_path'
|
35
37
|
require 'excon/middlewares/redirect_follower'
|
36
38
|
require 'excon/middlewares/capture_cookies'
|
@@ -44,27 +46,22 @@ require 'excon/unix_socket'
|
|
44
46
|
# Define defaults first so they will be available to other files
|
45
47
|
module Excon
|
46
48
|
class << self
|
47
|
-
|
48
49
|
# @return [Hash] defaults for Excon connections
|
49
50
|
def defaults
|
50
|
-
@defaults ||= DEFAULTS
|
51
|
+
@defaults ||= DEFAULTS.dup
|
51
52
|
end
|
52
53
|
|
53
54
|
# Change defaults for Excon connections
|
54
55
|
# @return [Hash] defaults for Excon connections
|
55
|
-
|
56
|
-
@defaults = new_defaults
|
57
|
-
end
|
56
|
+
attr_writer :defaults
|
58
57
|
|
59
58
|
def display_warning(warning)
|
60
59
|
# Show warning if $VERBOSE or ENV['EXCON_DEBUG'] is set
|
61
|
-
|
62
|
-
$stderr.puts "[excon][WARNING] #{warning}\n#{ caller.join("\n") }"
|
63
|
-
end
|
60
|
+
($VERBOSE || ENV['EXCON_DEBUG']) && Warning.warn("[excon][WARNING] #{warning}\n#{caller.join("\n")}")
|
64
61
|
|
65
|
-
|
66
|
-
|
67
|
-
|
62
|
+
return unless @raise_on_warnings
|
63
|
+
|
64
|
+
raise(Error::Warning, warning)
|
68
65
|
end
|
69
66
|
|
70
67
|
def set_raise_on_warnings!(should_raise)
|
@@ -119,32 +116,25 @@ module Excon
|
|
119
116
|
def new(url, params = {})
|
120
117
|
uri_parser = params[:uri_parser] || defaults[:uri_parser]
|
121
118
|
uri = uri_parser.parse(url)
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
unless uri.scheme
|
126
|
-
raise ArgumentError.new("Invalid URI: #{uri}")
|
127
|
-
end
|
119
|
+
params[:path] && uri_parser.parse(params[:path])
|
120
|
+
raise(ArgumentError, "Invalid URI: #{uri}") unless uri.scheme
|
121
|
+
|
128
122
|
params = {
|
129
|
-
:
|
130
|
-
:
|
131
|
-
:
|
132
|
-
:
|
133
|
-
:
|
134
|
-
:
|
123
|
+
host: uri.host,
|
124
|
+
hostname: uri.hostname,
|
125
|
+
path: uri.path,
|
126
|
+
port: uri.port,
|
127
|
+
query: uri.query,
|
128
|
+
scheme: uri.scheme
|
135
129
|
}.merge(params)
|
136
|
-
|
137
|
-
|
138
|
-
end
|
139
|
-
if uri.user
|
140
|
-
params[:user] = Utils.unescape_uri(uri.user)
|
141
|
-
end
|
130
|
+
uri.password && params[:password] = Utils.unescape_uri(uri.password)
|
131
|
+
uri.user && params[:user] = Utils.unescape_uri(uri.user)
|
142
132
|
Excon::Connection.new(params)
|
143
133
|
end
|
144
134
|
|
145
135
|
# push an additional stub onto the list to check for mock requests
|
146
136
|
# @param request_params [Hash<Symbol, >] request params to match against, omitted params match all
|
147
|
-
# @param response_params [Hash<Symbol, >] response params to return
|
137
|
+
# @param response_params [Hash<Symbol, >] response params to return or block to call with matched params
|
148
138
|
def stub(request_params = {}, response_params = nil, &block)
|
149
139
|
if (method = request_params.delete(:method))
|
150
140
|
request_params[:method] = method.to_s.downcase.to_sym
|
@@ -152,35 +142,35 @@ module Excon
|
|
152
142
|
if (url = request_params.delete(:url))
|
153
143
|
uri = URI.parse(url)
|
154
144
|
request_params = {
|
155
|
-
:
|
156
|
-
:path
|
157
|
-
:
|
158
|
-
:
|
159
|
-
:
|
145
|
+
host: uri.host,
|
146
|
+
path: uri.path.empty? ? '/' : uri.path,
|
147
|
+
port: uri.port,
|
148
|
+
query: uri.query,
|
149
|
+
scheme: uri.scheme
|
160
150
|
}.merge!(request_params)
|
161
151
|
if uri.user || uri.password
|
162
152
|
request_params[:headers] ||= {}
|
163
|
-
user
|
153
|
+
user = Utils.unescape_form(uri.user.to_s)
|
154
|
+
pass = Utils.unescape_form(uri.password.to_s)
|
164
155
|
request_params[:headers]['Authorization'] ||= 'Basic ' + ["#{user}:#{pass}"].pack('m').delete(Excon::CR_NL)
|
165
156
|
end
|
166
157
|
end
|
167
|
-
if request_params.
|
158
|
+
if request_params.key?(:headers)
|
168
159
|
headers = Excon::Headers.new
|
169
160
|
request_params[:headers].each do |key, value|
|
170
161
|
headers[key] = value
|
171
162
|
end
|
172
163
|
request_params[:headers] = headers
|
173
164
|
end
|
165
|
+
request_params[:query] = Utils.query_string(request_params)[1...] if request_params.key?(:query)
|
174
166
|
if block_given?
|
175
|
-
if response_params
|
176
|
-
|
177
|
-
|
178
|
-
stub = [request_params, block]
|
179
|
-
end
|
167
|
+
raise(ArgumentError, 'stub requires either response_params OR a block') if response_params
|
168
|
+
|
169
|
+
stub = [request_params, block]
|
180
170
|
elsif response_params
|
181
171
|
stub = [request_params, response_params]
|
182
172
|
else
|
183
|
-
raise(ArgumentError
|
173
|
+
raise(ArgumentError, 'stub requires either response_params OR a block')
|
184
174
|
end
|
185
175
|
stubs.unshift(stub)
|
186
176
|
stub
|
@@ -193,9 +183,10 @@ module Excon
|
|
193
183
|
if (method = request_params.delete(:method))
|
194
184
|
request_params[:method] = method.to_s.downcase.to_sym
|
195
185
|
end
|
186
|
+
request_params[:query] = Utils.query_string(request_params)[1...] if request_params.key?(:query)
|
196
187
|
Excon.stubs.each do |stub, response_params|
|
197
|
-
captures = { :
|
198
|
-
headers_match = !stub.
|
188
|
+
captures = { headers: {} }
|
189
|
+
headers_match = !stub.key?(:headers) || stub[:headers].keys.all? do |key|
|
199
190
|
case value = stub[:headers][key]
|
200
191
|
when Regexp
|
201
192
|
case request_params[:headers][key]
|
@@ -245,11 +236,12 @@ module Excon
|
|
245
236
|
end
|
246
237
|
end
|
247
238
|
|
248
|
-
# remove first/oldest stub matching request_params
|
239
|
+
# remove first/oldest stub matching request_params or nil if none match
|
249
240
|
# @param request_params [Hash<Symbol, >] request params to match against, omitted params match all
|
250
241
|
# @return [Hash<Symbol, >] response params from deleted stub
|
251
242
|
def unstub(request_params = {})
|
252
|
-
stub = stub_for(request_params)
|
243
|
+
return unless (stub = stub_for(request_params))
|
244
|
+
|
253
245
|
Excon.stubs.delete_at(Excon.stubs.index(stub))
|
254
246
|
end
|
255
247
|
|
metadata
CHANGED
@@ -1,31 +1,30 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: excon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- dpiddy (Dan Peterson)
|
8
8
|
- geemus (Wesley Beary)
|
9
9
|
- nextmat (Matt Sanders)
|
10
|
-
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date:
|
12
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
15
|
+
name: logger
|
17
16
|
requirement: !ruby/object:Gem::Requirement
|
18
17
|
requirements:
|
19
18
|
- - ">="
|
20
19
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
22
|
-
type: :
|
20
|
+
version: '0'
|
21
|
+
type: :runtime
|
23
22
|
prerelease: false
|
24
23
|
version_requirements: !ruby/object:Gem::Requirement
|
25
24
|
requirements:
|
26
25
|
- - ">="
|
27
26
|
- !ruby/object:Gem::Version
|
28
|
-
version:
|
27
|
+
version: '0'
|
29
28
|
- !ruby/object:Gem::Dependency
|
30
29
|
name: activesupport
|
31
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -68,6 +67,20 @@ dependencies:
|
|
68
67
|
- - ">="
|
69
68
|
- !ruby/object:Gem::Version
|
70
69
|
version: 1.0.4
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: json
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 1.8.5
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: 1.8.5
|
71
84
|
- !ruby/object:Gem::Dependency
|
72
85
|
name: open4
|
73
86
|
requirement: !ruby/object:Gem::Requirement
|
@@ -83,7 +96,7 @@ dependencies:
|
|
83
96
|
- !ruby/object:Gem::Version
|
84
97
|
version: '0'
|
85
98
|
- !ruby/object:Gem::Dependency
|
86
|
-
name:
|
99
|
+
name: puma
|
87
100
|
requirement: !ruby/object:Gem::Requirement
|
88
101
|
requirements:
|
89
102
|
- - ">="
|
@@ -97,7 +110,7 @@ dependencies:
|
|
97
110
|
- !ruby/object:Gem::Version
|
98
111
|
version: '0'
|
99
112
|
- !ruby/object:Gem::Dependency
|
100
|
-
name:
|
113
|
+
name: rake
|
101
114
|
requirement: !ruby/object:Gem::Requirement
|
102
115
|
requirements:
|
103
116
|
- - ">="
|
@@ -111,7 +124,7 @@ dependencies:
|
|
111
124
|
- !ruby/object:Gem::Version
|
112
125
|
version: '0'
|
113
126
|
- !ruby/object:Gem::Dependency
|
114
|
-
name:
|
127
|
+
name: rdoc
|
115
128
|
requirement: !ruby/object:Gem::Requirement
|
116
129
|
requirements:
|
117
130
|
- - ">="
|
@@ -125,7 +138,21 @@ dependencies:
|
|
125
138
|
- !ruby/object:Gem::Version
|
126
139
|
version: '0'
|
127
140
|
- !ruby/object:Gem::Dependency
|
128
|
-
name:
|
141
|
+
name: rspec
|
142
|
+
requirement: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - ">="
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: 3.5.0
|
147
|
+
type: :development
|
148
|
+
prerelease: false
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - ">="
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: 3.5.0
|
154
|
+
- !ruby/object:Gem::Dependency
|
155
|
+
name: shindo
|
129
156
|
requirement: !ruby/object:Gem::Requirement
|
130
157
|
requirements:
|
131
158
|
- - ">="
|
@@ -139,21 +166,21 @@ dependencies:
|
|
139
166
|
- !ruby/object:Gem::Version
|
140
167
|
version: '0'
|
141
168
|
- !ruby/object:Gem::Dependency
|
142
|
-
name:
|
169
|
+
name: sinatra
|
143
170
|
requirement: !ruby/object:Gem::Requirement
|
144
171
|
requirements:
|
145
172
|
- - ">="
|
146
173
|
- !ruby/object:Gem::Version
|
147
|
-
version:
|
174
|
+
version: '0'
|
148
175
|
type: :development
|
149
176
|
prerelease: false
|
150
177
|
version_requirements: !ruby/object:Gem::Requirement
|
151
178
|
requirements:
|
152
179
|
- - ">="
|
153
180
|
- !ruby/object:Gem::Version
|
154
|
-
version:
|
181
|
+
version: '0'
|
155
182
|
- !ruby/object:Gem::Dependency
|
156
|
-
name:
|
183
|
+
name: sinatra-contrib
|
157
184
|
requirement: !ruby/object:Gem::Requirement
|
158
185
|
requirements:
|
159
186
|
- - ">="
|
@@ -185,9 +212,9 @@ email: geemus@gmail.com
|
|
185
212
|
executables: []
|
186
213
|
extensions: []
|
187
214
|
extra_rdoc_files:
|
188
|
-
- README.md
|
189
|
-
- CONTRIBUTORS.md
|
190
215
|
- CONTRIBUTING.md
|
216
|
+
- CONTRIBUTORS.md
|
217
|
+
- README.md
|
191
218
|
files:
|
192
219
|
- CONTRIBUTING.md
|
193
220
|
- CONTRIBUTORS.md
|
@@ -229,13 +256,13 @@ homepage: https://github.com/excon/excon
|
|
229
256
|
licenses:
|
230
257
|
- MIT
|
231
258
|
metadata:
|
232
|
-
homepage_uri: https://github.com/excon/excon
|
233
259
|
bug_tracker_uri: https://github.com/excon/excon/issues
|
234
260
|
changelog_uri: https://github.com/excon/excon/blob/master/changelog.txt
|
235
261
|
documentation_uri: https://github.com/excon/excon/blob/master/README.md
|
262
|
+
funding_uri: https://github.com/sponsors/geemus
|
263
|
+
homepage_uri: https://github.com/excon/excon
|
236
264
|
source_code_uri: https://github.com/excon/excon
|
237
265
|
wiki_uri: https://github.com/excon/excon/wiki
|
238
|
-
post_install_message:
|
239
266
|
rdoc_options:
|
240
267
|
- "--charset=UTF-8"
|
241
268
|
require_paths:
|
@@ -244,15 +271,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
244
271
|
requirements:
|
245
272
|
- - ">="
|
246
273
|
- !ruby/object:Gem::Version
|
247
|
-
version:
|
274
|
+
version: 3.1.0
|
248
275
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
249
276
|
requirements:
|
250
277
|
- - ">="
|
251
278
|
- !ruby/object:Gem::Version
|
252
279
|
version: '0'
|
253
280
|
requirements: []
|
254
|
-
rubygems_version: 3.
|
255
|
-
signing_key:
|
281
|
+
rubygems_version: 3.6.9
|
256
282
|
specification_version: 4
|
257
283
|
summary: speed, persistence, http(s)
|
258
284
|
test_files: []
|