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.
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
- def defaults=(new_defaults)
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
- if $VERBOSE || ENV['EXCON_DEBUG']
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
- if @raise_on_warnings
66
- raise Error::Warning.new(warning)
67
- end
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
- if params[:path]
123
- uri_parser.parse(params[:path])
124
- end
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
- :host => uri.host,
130
- :hostname => uri.hostname,
131
- :path => uri.path,
132
- :port => uri.port,
133
- :query => uri.query,
134
- :scheme => uri.scheme
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
- if uri.password
137
- params[:password] = Utils.unescape_uri(uri.password)
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 from matched request or block to call with params
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
- :host => uri.host,
156
- :path => uri.path,
157
- :port => uri.port,
158
- :query => uri.query,
159
- :scheme => uri.scheme
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, pass = Utils.unescape_form(uri.user.to_s), Utils.unescape_form(uri.password.to_s)
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.has_key?(:headers)
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
- raise(ArgumentError.new("stub requires either response_params OR a block"))
177
- else
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.new("stub requires either response_params OR a block"))
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 = { :headers => {} }
198
- headers_match = !stub.has_key?(:headers) || stub[:headers].keys.all? do |key|
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: 0.99.0
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: 2023-02-03 00:00:00.000000000 Z
12
+ date: 1980-01-02 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
- name: rspec
15
+ name: logger
17
16
  requirement: !ruby/object:Gem::Requirement
18
17
  requirements:
19
18
  - - ">="
20
19
  - !ruby/object:Gem::Version
21
- version: 3.5.0
22
- type: :development
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: 3.5.0
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: rake
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: shindo
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: sinatra
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: sinatra-contrib
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: json
169
+ name: sinatra
143
170
  requirement: !ruby/object:Gem::Requirement
144
171
  requirements:
145
172
  - - ">="
146
173
  - !ruby/object:Gem::Version
147
- version: 1.8.5
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: 1.8.5
181
+ version: '0'
155
182
  - !ruby/object:Gem::Dependency
156
- name: puma
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: '0'
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.4.1
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: []