savon 2.17.2 → 3.0.0.rc1

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.
metadata CHANGED
@@ -1,166 +1,183 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: savon
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.17.2
4
+ version: 3.0.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Harrington
8
+ autorequire:
8
9
  bindir: bin
9
10
  cert_chain: []
10
- date: 1980-01-02 00:00:00.000000000 Z
11
+ date: 2024-07-15 00:00:00.000000000 Z
11
12
  dependencies:
12
13
  - !ruby/object:Gem::Dependency
13
- name: akami
14
+ name: nori
14
15
  requirement: !ruby/object:Gem::Requirement
15
16
  requirements:
16
17
  - - "~>"
17
18
  - !ruby/object:Gem::Version
18
- version: '1.2'
19
+ version: '2.4'
19
20
  type: :runtime
20
21
  prerelease: false
21
22
  version_requirements: !ruby/object:Gem::Requirement
22
23
  requirements:
23
24
  - - "~>"
24
25
  - !ruby/object:Gem::Version
25
- version: '1.2'
26
+ version: '2.4'
26
27
  - !ruby/object:Gem::Dependency
27
- name: builder
28
+ name: faraday
28
29
  requirement: !ruby/object:Gem::Requirement
29
30
  requirements:
30
- - - ">="
31
+ - - "~>"
31
32
  - !ruby/object:Gem::Version
32
- version: 2.1.2
33
+ version: '2.8'
33
34
  type: :runtime
34
35
  prerelease: false
35
36
  version_requirements: !ruby/object:Gem::Requirement
36
37
  requirements:
37
- - - ">="
38
+ - - "~>"
38
39
  - !ruby/object:Gem::Version
39
- version: 2.1.2
40
+ version: '2.8'
40
41
  - !ruby/object:Gem::Dependency
41
- name: gyoku
42
+ name: faraday-gzip
42
43
  requirement: !ruby/object:Gem::Requirement
43
44
  requirements:
44
45
  - - "~>"
45
46
  - !ruby/object:Gem::Version
46
- version: '1.2'
47
+ version: '2.0'
47
48
  type: :runtime
48
49
  prerelease: false
49
50
  version_requirements: !ruby/object:Gem::Requirement
50
51
  requirements:
51
52
  - - "~>"
52
53
  - !ruby/object:Gem::Version
53
- version: '1.2'
54
+ version: '2.0'
54
55
  - !ruby/object:Gem::Dependency
55
- name: httpi
56
+ name: faraday-follow_redirects
56
57
  requirement: !ruby/object:Gem::Requirement
57
58
  requirements:
58
- - - ">="
59
+ - - "~>"
59
60
  - !ruby/object:Gem::Version
60
- version: '4'
61
- - - "<"
61
+ version: '0.3'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.3'
69
+ - !ruby/object:Gem::Dependency
70
+ name: wasabi
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">"
62
74
  - !ruby/object:Gem::Version
63
75
  version: '5'
64
76
  type: :runtime
65
77
  prerelease: false
66
78
  version_requirements: !ruby/object:Gem::Requirement
67
79
  requirements:
68
- - - ">="
69
- - !ruby/object:Gem::Version
70
- version: '4'
71
- - - "<"
80
+ - - ">"
72
81
  - !ruby/object:Gem::Version
73
82
  version: '5'
74
83
  - !ruby/object:Gem::Dependency
75
- name: mail
84
+ name: akami
76
85
  requirement: !ruby/object:Gem::Requirement
77
86
  requirements:
78
87
  - - "~>"
79
88
  - !ruby/object:Gem::Version
80
- version: '2.5'
89
+ version: '1.2'
81
90
  type: :runtime
82
91
  prerelease: false
83
92
  version_requirements: !ruby/object:Gem::Requirement
84
93
  requirements:
85
94
  - - "~>"
86
95
  - !ruby/object:Gem::Version
87
- version: '2.5'
96
+ version: '1.2'
88
97
  - !ruby/object:Gem::Dependency
89
- name: nokogiri
98
+ name: gyoku
90
99
  requirement: !ruby/object:Gem::Requirement
91
100
  requirements:
92
- - - ">="
101
+ - - "~>"
93
102
  - !ruby/object:Gem::Version
94
- version: 1.8.1
103
+ version: '1.2'
95
104
  type: :runtime
96
105
  prerelease: false
97
106
  version_requirements: !ruby/object:Gem::Requirement
98
107
  requirements:
99
- - - ">="
108
+ - - "~>"
100
109
  - !ruby/object:Gem::Version
101
- version: 1.8.1
110
+ version: '1.2'
102
111
  - !ruby/object:Gem::Dependency
103
- name: nori
112
+ name: builder
104
113
  requirement: !ruby/object:Gem::Requirement
105
114
  requirements:
106
- - - "~>"
115
+ - - ">="
107
116
  - !ruby/object:Gem::Version
108
- version: '2.7'
117
+ version: 2.1.2
109
118
  type: :runtime
110
119
  prerelease: false
111
120
  version_requirements: !ruby/object:Gem::Requirement
112
121
  requirements:
113
- - - "~>"
122
+ - - ">="
114
123
  - !ruby/object:Gem::Version
115
- version: '2.7'
124
+ version: 2.1.2
116
125
  - !ruby/object:Gem::Dependency
117
- name: wasabi
126
+ name: nokogiri
118
127
  requirement: !ruby/object:Gem::Requirement
119
128
  requirements:
120
129
  - - ">="
121
130
  - !ruby/object:Gem::Version
122
- version: 5.1.0
123
- - - "<"
124
- - !ruby/object:Gem::Version
125
- version: '6'
131
+ version: 1.8.1
126
132
  type: :runtime
127
133
  prerelease: false
128
134
  version_requirements: !ruby/object:Gem::Requirement
129
135
  requirements:
130
136
  - - ">="
131
137
  - !ruby/object:Gem::Version
132
- version: 5.1.0
133
- - - "<"
134
- - !ruby/object:Gem::Version
135
- version: '6'
138
+ version: 1.8.1
136
139
  - !ruby/object:Gem::Dependency
137
- name: ostruct
140
+ name: mail
138
141
  requirement: !ruby/object:Gem::Requirement
139
142
  requirements:
140
143
  - - "~>"
141
144
  - !ruby/object:Gem::Version
142
- version: '0.6'
143
- type: :development
145
+ version: '2.5'
146
+ type: :runtime
144
147
  prerelease: false
145
148
  version_requirements: !ruby/object:Gem::Requirement
146
149
  requirements:
147
150
  - - "~>"
148
151
  - !ruby/object:Gem::Version
149
- version: '0.6'
152
+ version: '2.5'
150
153
  - !ruby/object:Gem::Dependency
151
- name: puma
154
+ name: faraday-net_http_persistent
152
155
  requirement: !ruby/object:Gem::Requirement
153
156
  requirements:
154
157
  - - "~>"
155
158
  - !ruby/object:Gem::Version
156
- version: 8.0.2
159
+ version: '2.1'
157
160
  type: :development
158
161
  prerelease: false
159
162
  version_requirements: !ruby/object:Gem::Requirement
160
163
  requirements:
161
164
  - - "~>"
162
165
  - !ruby/object:Gem::Version
163
- version: 8.0.2
166
+ version: '2.1'
167
+ - !ruby/object:Gem::Dependency
168
+ name: rubyntlm
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0.6'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0.6'
164
181
  - !ruby/object:Gem::Dependency
165
182
  name: rack
166
183
  requirement: !ruby/object:Gem::Requirement
@@ -176,7 +193,27 @@ dependencies:
176
193
  - !ruby/object:Gem::Version
177
194
  version: '4'
178
195
  - !ruby/object:Gem::Dependency
179
- name: byebug
196
+ name: puma
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: 4.3.8
202
+ - - "<"
203
+ - !ruby/object:Gem::Version
204
+ version: '7'
205
+ type: :development
206
+ prerelease: false
207
+ version_requirements: !ruby/object:Gem::Requirement
208
+ requirements:
209
+ - - ">="
210
+ - !ruby/object:Gem::Version
211
+ version: 4.3.8
212
+ - - "<"
213
+ - !ruby/object:Gem::Version
214
+ version: '7'
215
+ - !ruby/object:Gem::Dependency
216
+ name: httpclient
180
217
  requirement: !ruby/object:Gem::Requirement
181
218
  requirements:
182
219
  - - ">="
@@ -190,33 +227,33 @@ dependencies:
190
227
  - !ruby/object:Gem::Version
191
228
  version: '0'
192
229
  - !ruby/object:Gem::Dependency
193
- name: json
230
+ name: mutex_m
194
231
  requirement: !ruby/object:Gem::Requirement
195
232
  requirements:
196
233
  - - ">="
197
234
  - !ruby/object:Gem::Version
198
- version: 2.3.0
235
+ version: '0'
199
236
  type: :development
200
237
  prerelease: false
201
238
  version_requirements: !ruby/object:Gem::Requirement
202
239
  requirements:
203
240
  - - ">="
204
241
  - !ruby/object:Gem::Version
205
- version: 2.3.0
242
+ version: '0'
206
243
  - !ruby/object:Gem::Dependency
207
- name: mocha
244
+ name: byebug
208
245
  requirement: !ruby/object:Gem::Requirement
209
246
  requirements:
210
- - - "~>"
247
+ - - ">="
211
248
  - !ruby/object:Gem::Version
212
- version: '0.14'
249
+ version: '0'
213
250
  type: :development
214
251
  prerelease: false
215
252
  version_requirements: !ruby/object:Gem::Requirement
216
253
  requirements:
217
- - - "~>"
254
+ - - ">="
218
255
  - !ruby/object:Gem::Version
219
- version: '0.14'
256
+ version: '0'
220
257
  - !ruby/object:Gem::Dependency
221
258
  name: rake
222
259
  requirement: !ruby/object:Gem::Requirement
@@ -245,6 +282,34 @@ dependencies:
245
282
  - - "~>"
246
283
  - !ruby/object:Gem::Version
247
284
  version: '3.9'
285
+ - !ruby/object:Gem::Dependency
286
+ name: mocha
287
+ requirement: !ruby/object:Gem::Requirement
288
+ requirements:
289
+ - - "~>"
290
+ - !ruby/object:Gem::Version
291
+ version: '0.14'
292
+ type: :development
293
+ prerelease: false
294
+ version_requirements: !ruby/object:Gem::Requirement
295
+ requirements:
296
+ - - "~>"
297
+ - !ruby/object:Gem::Version
298
+ version: '0.14'
299
+ - !ruby/object:Gem::Dependency
300
+ name: json
301
+ requirement: !ruby/object:Gem::Requirement
302
+ requirements:
303
+ - - ">="
304
+ - !ruby/object:Gem::Version
305
+ version: 2.3.0
306
+ type: :development
307
+ prerelease: false
308
+ version_requirements: !ruby/object:Gem::Requirement
309
+ requirements:
310
+ - - ">="
311
+ - !ruby/object:Gem::Version
312
+ version: 2.3.0
248
313
  description: Heavy metal SOAP client
249
314
  email: me@rubiii.com
250
315
  executables: []
@@ -259,7 +324,6 @@ files:
259
324
  - lib/savon/block_interface.rb
260
325
  - lib/savon/builder.rb
261
326
  - lib/savon/client.rb
262
- - lib/savon/faraday_migration_hint.rb
263
327
  - lib/savon/header.rb
264
328
  - lib/savon/http_error.rb
265
329
  - lib/savon/log_message.rb
@@ -271,22 +335,18 @@ files:
271
335
  - lib/savon/operation.rb
272
336
  - lib/savon/options.rb
273
337
  - lib/savon/qualified_message.rb
338
+ - lib/savon/request.rb
339
+ - lib/savon/request_logger.rb
274
340
  - lib/savon/response.rb
275
341
  - lib/savon/soap_fault.rb
276
342
  - lib/savon/string_utils.rb
277
- - lib/savon/transport/faraday.rb
278
- - lib/savon/transport/httpi.rb
279
- - lib/savon/transport/logging.rb
280
- - lib/savon/transport/response.rb
281
343
  - lib/savon/version.rb
282
- homepage: https://savonrb.com
344
+ homepage: http://savonrb.com
283
345
  licenses:
284
346
  - MIT
285
347
  metadata:
286
348
  rubygems_mfa_required: 'true'
287
- source_code_uri: https://github.com/savonrb/savon
288
- changelog_uri: https://github.com/savonrb/savon/blob/main/CHANGELOG.md
289
- bug_tracker_uri: https://github.com/savonrb/savon/issues
349
+ post_install_message:
290
350
  rdoc_options: []
291
351
  require_paths:
292
352
  - lib
@@ -301,7 +361,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
301
361
  - !ruby/object:Gem::Version
302
362
  version: '0'
303
363
  requirements: []
304
- rubygems_version: 3.6.9
364
+ rubygems_version: 3.5.6
365
+ signing_key:
305
366
  specification_version: 4
306
367
  summary: Heavy metal SOAP client
307
368
  test_files: []
@@ -1,186 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "uri"
4
-
5
- module Savon
6
- # Formats the replacement Faraday setup for one HTTPI-only option.
7
- class FaradayMigrationHint
8
- VALUE_AWARE_OPTIONS = %i[
9
- proxy
10
- open_timeout
11
- read_timeout
12
- write_timeout
13
- ssl_version
14
- ssl_min_version
15
- ssl_max_version
16
- ssl_verify_mode
17
- ssl_cert_key_file
18
- ssl_cert_file
19
- ssl_ca_cert_file
20
- ssl_ciphers
21
- ssl_ca_cert_path
22
- adapter
23
- ].freeze
24
-
25
- STATIC_HINTS = {
26
- ssl_cert_key: "client.faraday.ssl.client_key = key",
27
- ssl_cert_key_password: [
28
- "key = OpenSSL::PKey.read(File.read(key_path), password)",
29
- "client.faraday.ssl.client_key = key"
30
- ],
31
- ssl_cert: "client.faraday.ssl.client_cert = cert",
32
- ssl_ca_cert: [
33
- "store = OpenSSL::X509::Store.new",
34
- "store.set_default_paths",
35
- "store.add_cert(cert)",
36
- "client.faraday.ssl.cert_store = store"
37
- ],
38
- ssl_cert_store: "client.faraday.ssl.cert_store = store",
39
- basic_auth: "client.faraday.request :authorization, :basic, user, pass",
40
- digest_auth: [
41
- "gem 'faraday-digestauth'",
42
- "require 'faraday/digestauth'",
43
- "client.faraday.request :digest, user, pass"
44
- ],
45
- ntlm: [
46
- "gem 'faraday-ntlm_auth'",
47
- "require 'faraday/ntlm_auth'",
48
- "client.faraday.adapter :net_http_persistent",
49
- "client.faraday.request :ntlm_auth, auth: [user, pass, domain]"
50
- ],
51
- follow_redirects: [
52
- "gem 'faraday-follow_redirects'",
53
- "require 'faraday/follow_redirects'",
54
- "client.faraday.response :follow_redirects"
55
- ]
56
- }.freeze
57
-
58
- OPTIONS = (VALUE_AWARE_OPTIONS + STATIC_HINTS.keys).freeze
59
-
60
- def initialize(option, value)
61
- @option = option
62
- @value = value
63
- end
64
-
65
- def message
66
- hint = hint_lines
67
- return " #{option} - Use: #{hint}" unless hint.is_a?(Array)
68
-
69
- " #{option} - Use:\n#{hint.map { |line| " #{line}" }.join("\n")}"
70
- end
71
-
72
- private
73
-
74
- attr_reader :option, :value
75
-
76
- def hint_lines
77
- case option
78
- when :proxy
79
- "client.faraday.proxy = #{redacted_proxy_value}"
80
- when :open_timeout, :read_timeout, :write_timeout
81
- "client.faraday.options.#{option} = #{value.inspect}"
82
- when :ssl_version, :ssl_min_version, :ssl_max_version
83
- ssl_version_hint
84
- when :ssl_verify_mode
85
- ssl_verify_mode_hint
86
- when :ssl_cert_key_file
87
- ssl_cert_key_file_hint
88
- when :ssl_cert_file
89
- ssl_cert_file_hint
90
- when :ssl_ca_cert_file
91
- "client.faraday.ssl.ca_file = #{value.inspect}"
92
- when :ssl_ciphers
93
- "client.faraday.ssl.ciphers = #{value.inspect}"
94
- when :ssl_ca_cert_path
95
- "client.faraday.ssl.ca_path = #{value.inspect}"
96
- when :adapter
97
- adapter_hint
98
- else
99
- STATIC_HINTS.fetch(option)
100
- end
101
- end
102
-
103
- def redacted_proxy_value
104
- uri = URI.parse(value.to_s)
105
- return value.inspect unless uri.absolute? && uri.host
106
-
107
- redacted = uri.dup
108
- redacted.userinfo = "..." if redacted.userinfo
109
- redacted.path = "" if redacted.respond_to?(:path=)
110
- redacted.query = nil if redacted.respond_to?(:query=)
111
- redacted.fragment = nil if redacted.respond_to?(:fragment=)
112
- redacted.to_s.inspect
113
- rescue URI::InvalidURIError
114
- '"[redacted proxy URL]"'
115
- end
116
-
117
- def ssl_version_hint
118
- faraday_option = {
119
- ssl_version: "version",
120
- ssl_min_version: "min_version",
121
- ssl_max_version: "max_version"
122
- }.fetch(option)
123
-
124
- "client.faraday.ssl.#{faraday_option} = #{value.inspect}"
125
- end
126
-
127
- def ssl_cert_key_file_hint
128
- [
129
- "key = OpenSSL::PKey.read(File.read(#{value.inspect}))",
130
- "client.faraday.ssl.client_key = key"
131
- ]
132
- end
133
-
134
- def ssl_cert_file_hint
135
- [
136
- "cert = OpenSSL::X509::Certificate.new(File.read(#{value.inspect}))",
137
- "client.faraday.ssl.client_cert = cert"
138
- ]
139
- end
140
-
141
- def adapter_hint
142
- case value
143
- when :net_http
144
- "client.faraday.adapter :net_http"
145
- when :httpclient
146
- [
147
- "gem 'faraday-httpclient'",
148
- "require 'faraday/httpclient'",
149
- "client.faraday.adapter :httpclient"
150
- ]
151
- when :excon
152
- [
153
- "gem 'faraday-excon'",
154
- "require 'faraday/excon'",
155
- "client.faraday.adapter :excon"
156
- ]
157
- when :net_http_persistent
158
- [
159
- "gem 'faraday-net_http_persistent'",
160
- "require 'faraday/net_http_persistent'",
161
- "client.faraday.adapter :net_http_persistent"
162
- ]
163
- else
164
- [
165
- "choose and install a Faraday adapter matching #{value.inspect}",
166
- "client.faraday.adapter :net_http"
167
- ]
168
- end
169
- end
170
-
171
- def ssl_verify_mode_hint
172
- case value
173
- when :none
174
- "client.faraday.ssl.verify_mode = OpenSSL::SSL::VERIFY_NONE"
175
- when :peer
176
- "client.faraday.ssl.verify_mode = OpenSSL::SSL::VERIFY_PEER"
177
- when :fail_if_no_peer_cert
178
- "client.faraday.ssl.verify_mode = OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT"
179
- when :client_once
180
- "client.faraday.ssl.verify_mode = OpenSSL::SSL::VERIFY_CLIENT_ONCE"
181
- else
182
- "client.faraday.ssl.verify_mode = OpenSSL::SSL::VERIFY_PEER or OpenSSL::SSL::VERIFY_NONE"
183
- end
184
- end
185
- end
186
- end
@@ -1,98 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "savon/transport/logging"
4
- require "savon/transport/response"
5
-
6
- module Savon
7
- module Transport
8
- # Faraday-backed HTTP transport for the opt-in Faraday path.
9
- #
10
- # Encapsulates everything Faraday-specific:
11
- # * header assembly (SOAP + global + local + cookies)
12
- # * request execution via the caller-configured Faraday::Connection
13
- #
14
- # Transport-level concerns (SSL, auth, proxy, timeouts, middleware) are
15
- # the caller's responsibility via client.faraday before any call is made.
16
- class Faraday
17
- include Logging
18
-
19
- # @param connection [Faraday::Connection] the memoized connection from client.faraday
20
- # @param globals [Savon::GlobalOptions] the client-level options
21
- def initialize(connection, globals)
22
- @connection = connection
23
- @globals = globals
24
- end
25
-
26
- # Assembles headers, executes the POST via the Faraday connection, and
27
- # returns a Transport::Response. Logs the outbound request and inbound
28
- # response when logging is enabled.
29
- #
30
- # @param url [String] the SOAP endpoint URL
31
- # @param soap_headers [Hash] SOAP-level headers (Content-Type, SOAPAction, etc.)
32
- # @param body [String] the serialized SOAP envelope
33
- # @param locals [Savon::LocalOptions] per-request options
34
- # @return [Transport::Response]
35
- def post(url, soap_headers, body, locals)
36
- headers = build_headers(soap_headers, locals)
37
-
38
- log_request(url, headers, body) if log?
39
-
40
- faraday_response = @connection.post(url, body, headers)
41
- response = Response.new(
42
- faraday_response.status,
43
- faraday_response.headers.to_h,
44
- faraday_response.body,
45
- cookies: self.class.parse_cookies(faraday_response.headers)
46
- )
47
-
48
- log_response(response) if log?
49
- response
50
- end
51
-
52
- # Parses Set-Cookie headers into a Hash of name => value. Accepts both
53
- # the Array and String form. Attributes after the first ';' are discarded.
54
- def self.parse_cookies(headers)
55
- raw = headers["set-cookie"] || headers["Set-Cookie"]
56
- return {} unless raw
57
-
58
- raw_array = raw.is_a?(Array) ? raw : raw.split(/,\s*/)
59
- raw_array.each_with_object({}) do |cookie_str, hash|
60
- name_value = cookie_str.split(";", 2).first.to_s.strip
61
- name, value = name_value.split("=", 2)
62
- hash[name] = value if name && !name.empty?
63
- end
64
- end
65
-
66
- private
67
-
68
- # Merges all header sources in precedence order:
69
- # locals[:headers] > globals[:headers] > soap_headers
70
- # Appends Cookie from locals[:cookies].
71
- def build_headers(soap_headers, locals)
72
- headers = {}
73
- headers.merge!(@globals[:headers]) if @globals.include?(:headers)
74
- headers.merge!(locals[:headers]) if locals.include?(:headers)
75
-
76
- # soap_headers are lowest priority
77
- soap_headers.each do |k, v| headers[k] ||= v end
78
-
79
- cookie_header = format_cookies(locals[:cookies])
80
- headers["Cookie"] = cookie_header if cookie_header
81
-
82
- headers
83
- end
84
-
85
- # Builds the Cookie header from a given value.
86
- # Accepts:
87
- # * String - passed through verbatim
88
- # * Hash - formatted as "name=value; name=value" (browser style)
89
- # Returns nil when no cookies were supplied.
90
- def format_cookies(cookies)
91
- return nil if cookies.nil?
92
- return cookies if cookies.is_a?(String)
93
-
94
- cookies.map { |name, value| "#{name}=#{value}" }.join("; ")
95
- end
96
- end
97
- end
98
- end