excon 0.99.0 → 1.2.5
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 +24 -2
- data/data/cacert.pem +545 -275
- data/excon.gemspec +24 -17
- data/lib/excon/connection.rb +27 -14
- data/lib/excon/constants.rb +122 -113
- 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 +115 -25
- data/lib/excon/ssl_socket.rb +3 -2
- 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 +1 -3
- 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 +39 -47
- metadata +49 -20
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,7 +46,6 @@ 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
51
|
@defaults ||= DEFAULTS
|
@@ -52,19 +53,15 @@ module Excon
|
|
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,31 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: excon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.2.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- dpiddy (Dan Peterson)
|
8
8
|
- geemus (Wesley Beary)
|
9
9
|
- nextmat (Matt Sanders)
|
10
|
-
autorequire:
|
10
|
+
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2025-02-27 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
16
|
+
name: logger
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
19
|
- - ">="
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
22
|
-
type: :
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
26
|
- - ">="
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
version:
|
28
|
+
version: '0'
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: activesupport
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
@@ -68,6 +68,20 @@ dependencies:
|
|
68
68
|
- - ">="
|
69
69
|
- !ruby/object:Gem::Version
|
70
70
|
version: 1.0.4
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: json
|
73
|
+
requirement: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 1.8.5
|
78
|
+
type: :development
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: 1.8.5
|
71
85
|
- !ruby/object:Gem::Dependency
|
72
86
|
name: open4
|
73
87
|
requirement: !ruby/object:Gem::Requirement
|
@@ -83,7 +97,7 @@ dependencies:
|
|
83
97
|
- !ruby/object:Gem::Version
|
84
98
|
version: '0'
|
85
99
|
- !ruby/object:Gem::Dependency
|
86
|
-
name:
|
100
|
+
name: puma
|
87
101
|
requirement: !ruby/object:Gem::Requirement
|
88
102
|
requirements:
|
89
103
|
- - ">="
|
@@ -97,7 +111,7 @@ dependencies:
|
|
97
111
|
- !ruby/object:Gem::Version
|
98
112
|
version: '0'
|
99
113
|
- !ruby/object:Gem::Dependency
|
100
|
-
name:
|
114
|
+
name: rake
|
101
115
|
requirement: !ruby/object:Gem::Requirement
|
102
116
|
requirements:
|
103
117
|
- - ">="
|
@@ -111,7 +125,7 @@ dependencies:
|
|
111
125
|
- !ruby/object:Gem::Version
|
112
126
|
version: '0'
|
113
127
|
- !ruby/object:Gem::Dependency
|
114
|
-
name:
|
128
|
+
name: rdoc
|
115
129
|
requirement: !ruby/object:Gem::Requirement
|
116
130
|
requirements:
|
117
131
|
- - ">="
|
@@ -125,7 +139,21 @@ dependencies:
|
|
125
139
|
- !ruby/object:Gem::Version
|
126
140
|
version: '0'
|
127
141
|
- !ruby/object:Gem::Dependency
|
128
|
-
name:
|
142
|
+
name: rspec
|
143
|
+
requirement: !ruby/object:Gem::Requirement
|
144
|
+
requirements:
|
145
|
+
- - ">="
|
146
|
+
- !ruby/object:Gem::Version
|
147
|
+
version: 3.5.0
|
148
|
+
type: :development
|
149
|
+
prerelease: false
|
150
|
+
version_requirements: !ruby/object:Gem::Requirement
|
151
|
+
requirements:
|
152
|
+
- - ">="
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
version: 3.5.0
|
155
|
+
- !ruby/object:Gem::Dependency
|
156
|
+
name: shindo
|
129
157
|
requirement: !ruby/object:Gem::Requirement
|
130
158
|
requirements:
|
131
159
|
- - ">="
|
@@ -139,21 +167,21 @@ dependencies:
|
|
139
167
|
- !ruby/object:Gem::Version
|
140
168
|
version: '0'
|
141
169
|
- !ruby/object:Gem::Dependency
|
142
|
-
name:
|
170
|
+
name: sinatra
|
143
171
|
requirement: !ruby/object:Gem::Requirement
|
144
172
|
requirements:
|
145
173
|
- - ">="
|
146
174
|
- !ruby/object:Gem::Version
|
147
|
-
version:
|
175
|
+
version: '0'
|
148
176
|
type: :development
|
149
177
|
prerelease: false
|
150
178
|
version_requirements: !ruby/object:Gem::Requirement
|
151
179
|
requirements:
|
152
180
|
- - ">="
|
153
181
|
- !ruby/object:Gem::Version
|
154
|
-
version:
|
182
|
+
version: '0'
|
155
183
|
- !ruby/object:Gem::Dependency
|
156
|
-
name:
|
184
|
+
name: sinatra-contrib
|
157
185
|
requirement: !ruby/object:Gem::Requirement
|
158
186
|
requirements:
|
159
187
|
- - ">="
|
@@ -229,13 +257,14 @@ homepage: https://github.com/excon/excon
|
|
229
257
|
licenses:
|
230
258
|
- MIT
|
231
259
|
metadata:
|
232
|
-
homepage_uri: https://github.com/excon/excon
|
233
260
|
bug_tracker_uri: https://github.com/excon/excon/issues
|
234
261
|
changelog_uri: https://github.com/excon/excon/blob/master/changelog.txt
|
235
262
|
documentation_uri: https://github.com/excon/excon/blob/master/README.md
|
263
|
+
funding_uri: https://github.com/sponsors/geemus
|
264
|
+
homepage_uri: https://github.com/excon/excon
|
236
265
|
source_code_uri: https://github.com/excon/excon
|
237
266
|
wiki_uri: https://github.com/excon/excon/wiki
|
238
|
-
post_install_message:
|
267
|
+
post_install_message:
|
239
268
|
rdoc_options:
|
240
269
|
- "--charset=UTF-8"
|
241
270
|
require_paths:
|
@@ -244,15 +273,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
244
273
|
requirements:
|
245
274
|
- - ">="
|
246
275
|
- !ruby/object:Gem::Version
|
247
|
-
version:
|
276
|
+
version: 2.7.0
|
248
277
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
249
278
|
requirements:
|
250
279
|
- - ">="
|
251
280
|
- !ruby/object:Gem::Version
|
252
281
|
version: '0'
|
253
282
|
requirements: []
|
254
|
-
rubygems_version: 3.
|
255
|
-
signing_key:
|
283
|
+
rubygems_version: 3.5.18
|
284
|
+
signing_key:
|
256
285
|
specification_version: 4
|
257
286
|
summary: speed, persistence, http(s)
|
258
287
|
test_files: []
|