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.
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
- 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,31 @@
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.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: 2023-02-03 00:00:00.000000000 Z
13
+ date: 2025-02-27 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: rspec
16
+ name: logger
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
19
  - - ">="
20
20
  - !ruby/object:Gem::Version
21
- version: 3.5.0
22
- type: :development
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: 3.5.0
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: rake
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: shindo
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: sinatra
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: sinatra-contrib
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: json
170
+ name: sinatra
143
171
  requirement: !ruby/object:Gem::Requirement
144
172
  requirements:
145
173
  - - ">="
146
174
  - !ruby/object:Gem::Version
147
- version: 1.8.5
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: 1.8.5
182
+ version: '0'
155
183
  - !ruby/object:Gem::Dependency
156
- name: puma
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: '0'
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.4.1
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: []