webmock 3.19.0 → 3.20.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 57ade97b45c0a5c72d60b74f83afd38ff397fd878c43e02de7e7d148e1d1ace8
4
- data.tar.gz: b8c6e112eb3eec3d0f5bcaff76c6c8209d84eeb71f625bedfebc63b1fe6756f2
3
+ metadata.gz: ffda5916fee8f80d1d0a725b7de314652a588658189bb28ad7a984551d406a3a
4
+ data.tar.gz: f2aa5c1f78094f72f9c7310dfbb3e866be2acc6910bd3c3a1a4e562744e0fa65
5
5
  SHA512:
6
- metadata.gz: de9230ccdbfaa25cc814d9ffa1091edf85d279e1982728e64d7c721355897d8eb2a0bd3ad94eff36917f0d696287edc8218d3882255bcc6234393f90c084c28b
7
- data.tar.gz: 58d85aeb70b455fc02322c0f868e4937cc4d93b9db0c0a3dd9fede8b08bebf8adf2a7d9a0aebb3e1e40a52b079d8841530075ecef203ff16a937a20954b50861
6
+ metadata.gz: e3fbfb98e4a6d090abd630ccfea78f5b06038e3f6d4683bd1f651f6c8b07b31698f71f9588df1a8d90066ab0d38a088a604204b4f710bfd9249235a9f2664453
7
+ data.tar.gz: ffcaf10bc3cd523f6c12c2209fc4e48fb34813e520789ca78ee0cb65b3285f7bf1534ef36faafbd61a49d82ca547f2ecfb3ea74b33b5ba3b4294493f0683942d
data/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # Changelog
2
2
 
3
+ # 3.20.0
4
+
5
+ * Optimised EmHttpRequestAdapter performance.
6
+
7
+ Thanks to [Ricardo Trindade](https://github.com/RicardoTrindade)
8
+
9
+ * Removed runtime dependency on base64.
10
+
11
+ Thanks to [Earlopain](https://github.com/Earlopain)
12
+
13
+ * Typhoeus::Response objects constructed from stubbed responses now have all timing attributes set to 0.0.
14
+
15
+ Thanks to [James Brown](https://github.com/Roguelazer)
16
+
17
+ * Optimised WebMock::Util::Headers by removing redundant freeze invocations.
18
+
19
+ Thanks to [Kazuhiro NISHIYAMA](https://github.com/znz)
20
+
21
+ * The default stubbed response body, which is an empty String, is unfrozen.
22
+
23
+ * When building signatures of requests made by http.rb, the request body encoding is now preserved.
24
+
25
+ # 3.19.1
26
+
27
+ * When passing a Proc or lambda as response body to `to_return_json`, the body is evaluated at the time of request and not at the time of `to_return_json` method invocation.
28
+
29
+ Thanks to [Jason Karns](https://github.com/jasonkarns) for reporting.
30
+
3
31
  # 3.19.0
4
32
 
5
33
  * Do not alter real (non-stubbed) request headers when handling em-http-request requests.
data/README.md CHANGED
@@ -1189,6 +1189,10 @@ People who submitted patches and new features or suggested improvements. Many th
1189
1189
  * Yuki Inoue
1190
1190
  * Brandon Weaver
1191
1191
  * Josh Nichols
1192
+ * Ricardo Trindade
1193
+ * Earlopain
1194
+ * James Brown
1195
+ * Kazuhiro NISHIYAMA
1192
1196
 
1193
1197
  For a full list of contributors you can visit the
1194
1198
  [contributors](https://github.com/bblimke/webmock/contributors) page.
@@ -156,7 +156,7 @@ if defined?(EventMachine::HttpClient)
156
156
  raw_cookie = response_header.cookie
157
157
  raw_cookie = [raw_cookie] if raw_cookie.is_a? String
158
158
 
159
- cookie = raw_cookie.select { |c| c.start_with? name }.first
159
+ cookie = raw_cookie.detect { |c| c.start_with? name }
160
160
  cookie and cookie.split('=', 2)[1]
161
161
  end
162
162
 
@@ -3,11 +3,21 @@
3
3
  module HTTP
4
4
  class Request
5
5
  def webmock_signature
6
- request_body = if defined?(HTTP::Request::Body)
7
- String.new.tap { |string| body.each { |part| string << part } }
8
- else
9
- body
10
- end
6
+ request_body = nil
7
+
8
+ if defined?(HTTP::Request::Body)
9
+ request_body = String.new
10
+ first_chunk_encoding = nil
11
+ body.each do |part|
12
+ request_body << part
13
+ first_chunk_encoding ||= part.encoding
14
+ end
15
+
16
+ request_body.force_encoding(first_chunk_encoding) if first_chunk_encoding
17
+ request_body
18
+ else
19
+ request_body = body
20
+ end
11
21
 
12
22
  ::WebMock::RequestSignature.new(verb, uri.to_s, {
13
23
  headers: headers.to_h,
@@ -96,7 +96,14 @@ if defined?(Typhoeus)
96
96
  status_message: "",
97
97
  body: "",
98
98
  headers: {},
99
- return_code: :operation_timedout
99
+ return_code: :operation_timedout,
100
+ total_time: 0.0,
101
+ starttransfer_time: 0.0,
102
+ appconnect_time: 0.0,
103
+ pretransfer_time: 0.0,
104
+ connect_time: 0.0,
105
+ namelookup_time: 0.0,
106
+ redirect_time: 0.0
100
107
  )
101
108
  else
102
109
  ::Typhoeus::Response.new(
@@ -104,7 +111,14 @@ if defined?(Typhoeus)
104
111
  status_message: webmock_response.status[1],
105
112
  body: webmock_response.body,
106
113
  headers: webmock_response.headers,
107
- effective_url: request_signature.uri
114
+ effective_url: request_signature.uri,
115
+ total_time: 0.0,
116
+ starttransfer_time: 0.0,
117
+ appconnect_time: 0.0,
118
+ pretransfer_time: 0.0,
119
+ connect_time: 0.0,
120
+ namelookup_time: 0.0,
121
+ redirect_time: 0.0
108
122
  )
109
123
  end
110
124
  response.mock = :webmock
@@ -32,12 +32,25 @@ module WebMock
32
32
  json_response_hashes = [*response_hashes].flatten.map do |resp_h|
33
33
  headers, body = resp_h.values_at(:headers, :body)
34
34
 
35
- body = body.call if body.respond_to?(:call)
36
- body = body.to_json unless body.is_a?(String)
35
+ json_body = if body.respond_to?(:call)
36
+ ->(request_signature) {
37
+ b = if body.respond_to?(:arity) && body.arity == 1
38
+ body.call(request_signature)
39
+ else
40
+ body.call
41
+ end
42
+ b = b.to_json unless b.is_a?(String)
43
+ b
44
+ }
45
+ elsif !body.is_a?(String)
46
+ body.to_json
47
+ else
48
+ body
49
+ end
37
50
 
38
51
  resp_h.merge(
39
52
  headers: {content_type: 'application/json'}.merge(headers.to_h),
40
- body: body
53
+ body: json_body
41
54
  )
42
55
  end
43
56
 
@@ -38,7 +38,7 @@ module WebMock
38
38
  end
39
39
 
40
40
  def body
41
- @body || ''
41
+ @body || String.new("")
42
42
  end
43
43
 
44
44
  def body=(body)
@@ -1,16 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'base64'
4
-
5
3
  module WebMock
6
4
 
7
5
  module Util
8
6
 
9
7
  class Headers
10
8
 
11
- STANDARD_HEADER_DELIMITER = '-'.freeze
12
- NONSTANDARD_HEADER_DELIMITER = '_'.freeze
13
- JOIN = ', '.freeze
9
+ STANDARD_HEADER_DELIMITER = '-'
10
+ NONSTANDARD_HEADER_DELIMITER = '_'
11
+ JOIN = ', '
14
12
 
15
13
  def self.normalize_headers(headers)
16
14
  return nil unless headers
@@ -59,7 +57,8 @@ module WebMock
59
57
  end
60
58
 
61
59
  def self.basic_auth_header(*credentials)
62
- "Basic #{Base64.strict_encode64(credentials.join(':')).chomp}"
60
+ strict_base64_encoded = [credentials.join(':')].pack("m0")
61
+ "Basic #{strict_base64_encoded.chomp}"
63
62
  end
64
63
 
65
64
  def self.normalize_name(name)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module WebMock
4
- VERSION = '3.19.0' unless defined?(::WebMock::VERSION)
4
+ VERSION = '3.20.0' unless defined?(::WebMock::VERSION)
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webmock
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.19.0
4
+ version: 3.20.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bartosz Blimke
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-08-26 00:00:00.000000000 Z
11
+ date: 2024-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -198,6 +198,20 @@ dependencies:
198
198
  - - ">="
199
199
  - !ruby/object:Gem::Version
200
200
  version: 2.2.4
201
+ - !ruby/object:Gem::Dependency
202
+ name: mutex_m
203
+ requirement: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - ">="
206
+ - !ruby/object:Gem::Version
207
+ version: '0'
208
+ type: :development
209
+ prerelease: false
210
+ version_requirements: !ruby/object:Gem::Requirement
211
+ requirements:
212
+ - - ">="
213
+ - !ruby/object:Gem::Version
214
+ version: '0'
201
215
  - !ruby/object:Gem::Dependency
202
216
  name: excon
203
217
  requirement: !ruby/object:Gem::Requirement
@@ -357,9 +371,9 @@ licenses:
357
371
  - MIT
358
372
  metadata:
359
373
  bug_tracker_uri: https://github.com/bblimke/webmock/issues
360
- changelog_uri: https://github.com/bblimke/webmock/blob/v3.19.0/CHANGELOG.md
361
- documentation_uri: https://www.rubydoc.info/gems/webmock/3.19.0
362
- source_code_uri: https://github.com/bblimke/webmock/tree/v3.19.0
374
+ changelog_uri: https://github.com/bblimke/webmock/blob/v3.20.0/CHANGELOG.md
375
+ documentation_uri: https://www.rubydoc.info/gems/webmock/3.20.0
376
+ source_code_uri: https://github.com/bblimke/webmock/tree/v3.20.0
363
377
  wiki_uri: https://github.com/bblimke/webmock/wiki
364
378
  post_install_message:
365
379
  rdoc_options: []
@@ -376,7 +390,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
376
390
  - !ruby/object:Gem::Version
377
391
  version: '0'
378
392
  requirements: []
379
- rubygems_version: 3.4.10
393
+ rubygems_version: 3.5.3
380
394
  signing_key:
381
395
  specification_version: 4
382
396
  summary: Library for stubbing HTTP requests in Ruby.