savon 2.11.1 → 2.15.1

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.
Files changed (92) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +132 -73
  3. data/README.md +35 -20
  4. data/lib/savon/block_interface.rb +1 -0
  5. data/lib/savon/builder.rb +126 -30
  6. data/lib/savon/client.rb +2 -2
  7. data/lib/savon/header.rb +2 -6
  8. data/lib/savon/http_error.rb +4 -4
  9. data/lib/savon/log_message.rb +2 -1
  10. data/lib/savon/message.rb +1 -0
  11. data/lib/savon/mock/expectation.rb +1 -0
  12. data/lib/savon/mock/spec_helper.rb +1 -0
  13. data/lib/savon/mock.rb +1 -0
  14. data/lib/savon/model.rb +4 -3
  15. data/lib/savon/operation.rb +22 -19
  16. data/lib/savon/options.rb +98 -19
  17. data/lib/savon/qualified_message.rb +29 -27
  18. data/lib/savon/request.rb +22 -6
  19. data/lib/savon/request_logger.rb +8 -2
  20. data/lib/savon/response.rb +58 -10
  21. data/lib/savon/soap_fault.rb +3 -4
  22. data/lib/savon/string_utils.rb +17 -0
  23. data/lib/savon/version.rb +2 -1
  24. data/lib/savon.rb +2 -0
  25. metadata +80 -100
  26. data/.gitignore +0 -14
  27. data/.travis.yml +0 -15
  28. data/.yardopts +0 -6
  29. data/CONTRIBUTING.md +0 -46
  30. data/Gemfile +0 -18
  31. data/donate.png +0 -0
  32. data/lib/savon/core_ext/string.rb +0 -29
  33. data/savon.gemspec +0 -46
  34. data/spec/fixtures/gzip/message.gz +0 -0
  35. data/spec/fixtures/response/another_soap_fault.xml +0 -14
  36. data/spec/fixtures/response/authentication.xml +0 -14
  37. data/spec/fixtures/response/f5.xml +0 -39
  38. data/spec/fixtures/response/header.xml +0 -13
  39. data/spec/fixtures/response/list.xml +0 -18
  40. data/spec/fixtures/response/multi_ref.xml +0 -39
  41. data/spec/fixtures/response/soap_fault.xml +0 -8
  42. data/spec/fixtures/response/soap_fault12.xml +0 -18
  43. data/spec/fixtures/response/soap_fault_funky.xml +0 -8
  44. data/spec/fixtures/response/taxcloud.xml +0 -1
  45. data/spec/fixtures/ssl/client_cert.pem +0 -16
  46. data/spec/fixtures/ssl/client_encrypted_key.pem +0 -30
  47. data/spec/fixtures/ssl/client_encrypted_key_cert.pem +0 -24
  48. data/spec/fixtures/ssl/client_key.pem +0 -15
  49. data/spec/fixtures/wsdl/authentication.xml +0 -63
  50. data/spec/fixtures/wsdl/betfair.xml +0 -2981
  51. data/spec/fixtures/wsdl/edialog.xml +0 -15416
  52. data/spec/fixtures/wsdl/interhome.xml +0 -2137
  53. data/spec/fixtures/wsdl/lower_camel.xml +0 -52
  54. data/spec/fixtures/wsdl/multiple_namespaces.xml +0 -92
  55. data/spec/fixtures/wsdl/multiple_types.xml +0 -60
  56. data/spec/fixtures/wsdl/no_message_tag.xml +0 -1267
  57. data/spec/fixtures/wsdl/taxcloud.xml +0 -934
  58. data/spec/fixtures/wsdl/team_software.xml +0 -1
  59. data/spec/fixtures/wsdl/vies.xml +0 -176
  60. data/spec/fixtures/wsdl/wasmuth.xml +0 -153
  61. data/spec/integration/centra_spec.rb +0 -66
  62. data/spec/integration/email_example_spec.rb +0 -32
  63. data/spec/integration/random_quote_spec.rb +0 -23
  64. data/spec/integration/ratp_example_spec.rb +0 -28
  65. data/spec/integration/stockquote_example_spec.rb +0 -28
  66. data/spec/integration/support/application.rb +0 -82
  67. data/spec/integration/support/server.rb +0 -84
  68. data/spec/integration/temperature_example_spec.rb +0 -46
  69. data/spec/integration/zipcode_example_spec.rb +0 -42
  70. data/spec/savon/builder_spec.rb +0 -137
  71. data/spec/savon/client_spec.rb +0 -271
  72. data/spec/savon/core_ext/string_spec.rb +0 -37
  73. data/spec/savon/features/message_tag_spec.rb +0 -61
  74. data/spec/savon/http_error_spec.rb +0 -49
  75. data/spec/savon/log_message_spec.rb +0 -44
  76. data/spec/savon/message_spec.rb +0 -70
  77. data/spec/savon/mock_spec.rb +0 -174
  78. data/spec/savon/model_spec.rb +0 -182
  79. data/spec/savon/observers_spec.rb +0 -92
  80. data/spec/savon/operation_spec.rb +0 -230
  81. data/spec/savon/options_spec.rb +0 -1064
  82. data/spec/savon/qualified_message_spec.rb +0 -20
  83. data/spec/savon/request_logger_spec.rb +0 -37
  84. data/spec/savon/request_spec.rb +0 -496
  85. data/spec/savon/response_spec.rb +0 -270
  86. data/spec/savon/soap_fault_spec.rb +0 -131
  87. data/spec/spec_helper.rb +0 -30
  88. data/spec/support/adapters.rb +0 -48
  89. data/spec/support/endpoint.rb +0 -25
  90. data/spec/support/fixture.rb +0 -39
  91. data/spec/support/integration.rb +0 -9
  92. data/spec/support/stdout.rb +0 -25
@@ -1,20 +0,0 @@
1
- require "spec_helper"
2
-
3
- module Savon
4
- describe QualifiedMessage, "#to_hash" do
5
-
6
- context "if a key ends with !" do
7
- it "restores the ! in a key" do
8
- used_namespaces = {}
9
- key_converter = :camelcase
10
- types = {}
11
-
12
- message = described_class.new(types, used_namespaces, key_converter)
13
- resulting_hash = message.to_hash({:Metal! => "<Nice/>"}, ["Rock"])
14
-
15
- expect(resulting_hash).to eq({"Metal!" => "<Nice/>"})
16
- end
17
- end
18
-
19
- end
20
- end
@@ -1,37 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Savon::RequestLogger do
4
-
5
- subject { described_class.new(globals) }
6
- let(:globals) { Savon::GlobalOptions.new(:log => true, :pretty_print_xml => true) }
7
- let(:request) {
8
- stub('Request',
9
- :url => 'http://example.com',
10
- :headers => [],
11
- :body => '<TestRequest />'
12
- )
13
- }
14
-
15
- let(:response) {
16
- stub('Response',
17
- :code => 200,
18
- :body => '<TestResponse />'
19
- )
20
- }
21
-
22
- before(:each) {
23
- globals[:logger].level = Logger::DEBUG
24
- }
25
-
26
- describe '#log_request / #log_response' do
27
- it 'does not prepare log messages when no logging is needed' do
28
- begin
29
- globals[:logger].level = Logger::FATAL
30
-
31
- Savon::LogMessage.expects(:new).never
32
- subject.log(request) { response }
33
- end
34
- end
35
-
36
- end
37
- end
@@ -1,496 +0,0 @@
1
- require "spec_helper"
2
- require "integration/support/server"
3
-
4
- describe Savon::WSDLRequest do
5
-
6
- let(:globals) { Savon::GlobalOptions.new }
7
- let(:http_request) { HTTPI::Request.new }
8
-
9
- def new_wsdl_request
10
- Savon::WSDLRequest.new(globals, http_request)
11
- end
12
-
13
- describe "#build" do
14
- it "returns an HTTPI::Request" do
15
- wsdl_request = Savon::WSDLRequest.new(globals)
16
- expect(wsdl_request.build).to be_an(HTTPI::Request)
17
- end
18
-
19
- describe "proxy" do
20
- it "is set when specified" do
21
- globals.proxy("http://proxy.example.com")
22
- http_request.expects(:proxy=).with("http://proxy.example.com")
23
-
24
- new_wsdl_request.build
25
- end
26
-
27
- it "is not set otherwise" do
28
- http_request.expects(:proxy=).never
29
- new_wsdl_request.build
30
- end
31
- end
32
-
33
- describe "open timeout" do
34
- it "is set when specified" do
35
- globals.open_timeout(22)
36
- http_request.expects(:open_timeout=).with(22)
37
-
38
- new_wsdl_request.build
39
- end
40
-
41
- it "is not set otherwise" do
42
- http_request.expects(:open_timeout=).never
43
- new_wsdl_request.build
44
- end
45
- end
46
-
47
- describe "read timeout" do
48
- it "is set when specified" do
49
- globals.read_timeout(33)
50
- http_request.expects(:read_timeout=).with(33)
51
-
52
- new_wsdl_request.build
53
- end
54
-
55
- it "is not set otherwise" do
56
- http_request.expects(:read_timeout=).never
57
- new_wsdl_request.build
58
- end
59
- end
60
-
61
- describe "ssl version" do
62
- it "is set when specified" do
63
- globals.ssl_version(:SSLv3)
64
- http_request.auth.ssl.expects(:ssl_version=).with(:SSLv3)
65
-
66
- new_wsdl_request.build
67
- end
68
-
69
- it "is not set otherwise" do
70
- http_request.auth.ssl.expects(:ssl_version=).never
71
- new_wsdl_request.build
72
- end
73
- end
74
-
75
- describe "ssl verify mode" do
76
- it "is set when specified" do
77
- globals.ssl_verify_mode(:none)
78
- http_request.auth.ssl.expects(:verify_mode=).with(:none)
79
-
80
- new_wsdl_request.build
81
- end
82
-
83
- it "is not set otherwise" do
84
- http_request.auth.ssl.expects(:verify_mode=).never
85
- new_wsdl_request.build
86
- end
87
- end
88
-
89
- describe "ssl cert key file" do
90
- it "is set when specified" do
91
- cert_key = File.expand_path("../../fixtures/ssl/client_key.pem", __FILE__)
92
- globals.ssl_cert_key_file(cert_key)
93
- http_request.auth.ssl.expects(:cert_key_file=).with(cert_key)
94
-
95
- new_wsdl_request.build
96
- end
97
-
98
- it "is not set otherwise" do
99
- http_request.auth.ssl.expects(:cert_key_file=).never
100
- new_wsdl_request.build
101
- end
102
- end
103
-
104
- describe "ssl cert key password" do
105
- it "is set when specified" do
106
- the_pass = "secure-password!42"
107
- globals.ssl_cert_key_password(the_pass)
108
- http_request.auth.ssl.expects(:cert_key_password=).with(the_pass)
109
-
110
- new_wsdl_request.build
111
- end
112
-
113
- it "is not set otherwise" do
114
- http_request.auth.ssl.expects(:cert_key_password=).never
115
- new_wsdl_request.build
116
- end
117
- end
118
-
119
- describe "ssl encrypted cert key file" do
120
- describe "set with an invalid decrypting password" do
121
- it "fails when attempting to use the SSL private key" do
122
- pass = "wrong-password"
123
- key = File.expand_path("../../fixtures/ssl/client_encrypted_key.pem", __FILE__)
124
- cert = File.expand_path("../../fixtures/ssl/client_encrypted_key_cert.pem", __FILE__)
125
-
126
- globals.ssl_cert_file(cert)
127
- globals.ssl_cert_key_password(pass)
128
- globals.ssl_cert_key_file(key)
129
-
130
- new_wsdl_request.build
131
-
132
- expect { http_request.auth.ssl.cert_key }.to raise_error
133
- end
134
- end
135
-
136
- describe "set with a valid decrypting password" do
137
- it "handles SSL private keys properly" do
138
- if RUBY_ENGINE == 'jruby'
139
- pending("find out why this fails with a null pointer exception on jruby")
140
- end
141
- pass = "secure-password!42"
142
- key = File.expand_path("../../fixtures/ssl/client_encrypted_key.pem", __FILE__)
143
- cert = File.expand_path("../../fixtures/ssl/client_encrypted_key_cert.pem", __FILE__)
144
-
145
- globals.ssl_cert_file(cert)
146
- globals.ssl_cert_key_password(pass)
147
- globals.ssl_cert_key_file(key)
148
-
149
- new_wsdl_request.build
150
-
151
- expect(http_request.auth.ssl.cert_key.to_s).to match(/BEGIN RSA PRIVATE KEY/)
152
- end
153
- end
154
- end
155
-
156
- describe "ssl cert file" do
157
- it "is set when specified" do
158
- cert = File.expand_path("../../fixtures/ssl/client_cert.pem", __FILE__)
159
- globals.ssl_cert_file(cert)
160
- http_request.auth.ssl.expects(:cert_file=).with(cert)
161
-
162
- new_wsdl_request.build
163
- end
164
-
165
- it "is not set otherwise" do
166
- http_request.auth.ssl.expects(:cert_file=).never
167
- new_wsdl_request.build
168
- end
169
- end
170
-
171
- describe "ssl ca cert file" do
172
- it "is set when specified" do
173
- ca_cert = File.expand_path("../../fixtures/ssl/client_cert.pem", __FILE__)
174
- globals.ssl_ca_cert_file(ca_cert)
175
- http_request.auth.ssl.expects(:ca_cert_file=).with(ca_cert)
176
-
177
- new_wsdl_request.build
178
- end
179
-
180
- it "is not set otherwise" do
181
- http_request.auth.ssl.expects(:ca_cert_file=).never
182
- new_wsdl_request.build
183
- end
184
- end
185
-
186
- describe "basic auth" do
187
- it "is set when specified" do
188
- globals.basic_auth("luke", "secret")
189
- http_request.auth.expects(:basic).with("luke", "secret")
190
-
191
- new_wsdl_request.build
192
- end
193
-
194
- it "is not set otherwise" do
195
- http_request.auth.expects(:basic).never
196
- new_wsdl_request.build
197
- end
198
- end
199
-
200
- describe "digest auth" do
201
- it "is set when specified" do
202
- globals.digest_auth("lea", "top-secret")
203
- http_request.auth.expects(:digest).with("lea", "top-secret")
204
-
205
- new_wsdl_request.build
206
- end
207
-
208
- it "is not set otherwise" do
209
- http_request.auth.expects(:digest).never
210
- new_wsdl_request.build
211
- end
212
- end
213
-
214
- describe "ntlm auth" do
215
- it "is set when specified" do
216
- globals.ntlm("han", "super-secret")
217
- http_request.auth.expects(:ntlm).with("han", "super-secret")
218
-
219
- new_wsdl_request.build
220
- end
221
-
222
- it "is not set otherwise" do
223
- http_request.auth.expects(:ntlm).never
224
- new_wsdl_request.build
225
- end
226
- end
227
- end
228
-
229
- end
230
-
231
- describe Savon::SOAPRequest do
232
-
233
- let(:globals) { Savon::GlobalOptions.new }
234
- let(:http_request) { HTTPI::Request.new }
235
-
236
- def new_soap_request
237
- Savon::SOAPRequest.new(globals, http_request)
238
- end
239
-
240
- describe "#build" do
241
- it "returns an HTTPI::Request" do
242
- soap_request = Savon::SOAPRequest.new(globals)
243
- expect(soap_request.build).to be_an(HTTPI::Request)
244
- end
245
-
246
- describe "proxy" do
247
- it "is set when specified" do
248
- globals.proxy("http://proxy.example.com")
249
- http_request.expects(:proxy=).with("http://proxy.example.com")
250
-
251
- new_soap_request.build
252
- end
253
-
254
- it "is not set otherwise" do
255
- http_request.expects(:proxy=).never
256
- new_soap_request.build
257
- end
258
- end
259
-
260
- describe "cookies" do
261
- it "sets the given cookies" do
262
- cookies = [HTTPI::Cookie.new("some-cookie=choc-chip; Path=/; HttpOnly")]
263
-
264
- http_request.expects(:set_cookies).with(cookies)
265
- new_soap_request.build(:cookies => cookies)
266
- end
267
-
268
- it "does not set the cookies if there are none" do
269
- http_request.expects(:set_cookies).never
270
- new_soap_request.build
271
- end
272
- end
273
-
274
- describe "open timeout" do
275
- it "is set when specified" do
276
- globals.open_timeout(22)
277
- http_request.expects(:open_timeout=).with(22)
278
-
279
- new_soap_request.build
280
- end
281
-
282
- it "is not set otherwise" do
283
- http_request.expects(:open_timeout=).never
284
- new_soap_request.build
285
- end
286
- end
287
-
288
- describe "read timeout" do
289
- it "is set when specified" do
290
- globals.read_timeout(33)
291
- http_request.expects(:read_timeout=).with(33)
292
-
293
- new_soap_request.build
294
- end
295
-
296
- it "is not set otherwise" do
297
- http_request.expects(:read_timeout=).never
298
- new_soap_request.build
299
- end
300
- end
301
-
302
- describe "headers" do
303
- it "are set when specified" do
304
- globals.headers("X-Token" => "secret")
305
- configured_http_request = new_soap_request.build
306
-
307
- expect(configured_http_request.headers["X-Token"]).to eq("secret")
308
- end
309
-
310
- it "are not set otherwise" do
311
- configured_http_request = new_soap_request.build
312
- expect(configured_http_request.headers).to_not include("X-Token")
313
- end
314
- end
315
-
316
- describe "SOAPAction header" do
317
- it "is set and wrapped in parenthesis" do
318
- configured_http_request = new_soap_request.build(:soap_action => "findUser")
319
- soap_action = configured_http_request.headers["SOAPAction"]
320
-
321
- expect(soap_action).to eq(%("findUser"))
322
- end
323
-
324
- it "is not set when it's explicitely set to nil" do
325
- configured_http_request = new_soap_request.build(:soap_action => nil)
326
- expect(configured_http_request.headers).to_not include("SOAPAction")
327
- end
328
-
329
- it "is not set when there is already a SOAPAction value" do
330
- globals.headers("SOAPAction" => %("authenticate"))
331
- configured_http_request = new_soap_request.build(:soap_action => "findUser")
332
- soap_action = configured_http_request.headers["SOAPAction"]
333
-
334
- expect(soap_action).to eq(%("authenticate"))
335
- end
336
- end
337
-
338
- describe "Content-Type header" do
339
- it "defaults to SOAP 1.1 and UTF-8" do
340
- configured_http_request = new_soap_request.build
341
- content_type = configured_http_request.headers["Content-Type"]
342
-
343
- expect(content_type).to eq("text/xml;charset=UTF-8")
344
- end
345
-
346
- it "can be changed to SOAP 1.2 and any other encoding" do
347
- globals.soap_version(2)
348
- globals.encoding("ISO-8859-1")
349
-
350
- configured_http_request = new_soap_request.build
351
- content_type = configured_http_request.headers["Content-Type"]
352
-
353
- expect(content_type).to eq("application/soap+xml;charset=ISO-8859-1")
354
- end
355
-
356
- it "is not set when there is already a Content-Type value" do
357
- globals.headers("Content-Type" => "application/awesomeness;charset=UTF-3000")
358
- configured_http_request = new_soap_request.build(:soap_action => "findUser")
359
- content_type = configured_http_request.headers["Content-Type"]
360
-
361
- expect(content_type).to eq("application/awesomeness;charset=UTF-3000")
362
- end
363
- end
364
-
365
- describe "ssl version" do
366
- it "is set when specified" do
367
- globals.ssl_version(:SSLv3)
368
- http_request.auth.ssl.expects(:ssl_version=).with(:SSLv3)
369
-
370
- new_soap_request.build
371
- end
372
-
373
- it "is not set otherwise" do
374
- http_request.auth.ssl.expects(:ssl_version=).never
375
- new_soap_request.build
376
- end
377
- end
378
-
379
- describe "ssl verify mode" do
380
- it "is set when specified" do
381
- globals.ssl_verify_mode(:none)
382
- http_request.auth.ssl.expects(:verify_mode=).with(:none)
383
-
384
- new_soap_request.build
385
- end
386
-
387
- it "is not set otherwise" do
388
- http_request.auth.ssl.expects(:verify_mode=).never
389
- new_soap_request.build
390
- end
391
- end
392
-
393
- describe "ssl cert key file" do
394
- it "is set when specified" do
395
- cert_key = File.expand_path("../../fixtures/ssl/client_key.pem", __FILE__)
396
- globals.ssl_cert_key_file(cert_key)
397
- http_request.auth.ssl.expects(:cert_key_file=).with(cert_key)
398
-
399
- new_soap_request.build
400
- end
401
-
402
- it "is not set otherwise" do
403
- http_request.auth.ssl.expects(:cert_key_file=).never
404
- new_soap_request.build
405
- end
406
- end
407
-
408
- describe "ssl cert key password" do
409
- it "is set when specified" do
410
- the_pass = "secure-password!42"
411
- globals.ssl_cert_key_password(the_pass)
412
- http_request.auth.ssl.expects(:cert_key_password=).with(the_pass)
413
-
414
- new_soap_request.build
415
- end
416
-
417
- it "is not set otherwise" do
418
- http_request.auth.ssl.expects(:cert_key_password=).never
419
- new_soap_request.build
420
- end
421
- end
422
-
423
- describe "ssl cert file" do
424
- it "is set when specified" do
425
- cert = File.expand_path("../../fixtures/ssl/client_cert.pem", __FILE__)
426
- globals.ssl_cert_file(cert)
427
- http_request.auth.ssl.expects(:cert_file=).with(cert)
428
-
429
- new_soap_request.build
430
- end
431
-
432
- it "is not set otherwise" do
433
- http_request.auth.ssl.expects(:cert_file=).never
434
- new_soap_request.build
435
- end
436
- end
437
-
438
- describe "ssl ca cert file" do
439
- it "is set when specified" do
440
- ca_cert = File.expand_path("../../fixtures/ssl/client_cert.pem", __FILE__)
441
- globals.ssl_ca_cert_file(ca_cert)
442
- http_request.auth.ssl.expects(:ca_cert_file=).with(ca_cert)
443
-
444
- new_soap_request.build
445
- end
446
-
447
- it "is not set otherwise" do
448
- http_request.auth.ssl.expects(:ca_cert_file=).never
449
- new_soap_request.build
450
- end
451
- end
452
-
453
- describe "basic auth" do
454
- it "is set when specified" do
455
- globals.basic_auth("luke", "secret")
456
- http_request.auth.expects(:basic).with("luke", "secret")
457
-
458
- new_soap_request.build
459
- end
460
-
461
- it "is not set otherwise" do
462
- http_request.auth.expects(:basic).never
463
- new_soap_request.build
464
- end
465
- end
466
-
467
- describe "digest auth" do
468
- it "is set when specified" do
469
- globals.digest_auth("lea", "top-secret")
470
- http_request.auth.expects(:digest).with("lea", "top-secret")
471
-
472
- new_soap_request.build
473
- end
474
-
475
- it "is not set otherwise" do
476
- http_request.auth.expects(:digest).never
477
- new_soap_request.build
478
- end
479
- end
480
-
481
- describe "ntlm auth" do
482
- it "is set when specified" do
483
- globals.ntlm("han", "super-secret")
484
- http_request.auth.expects(:ntlm).with("han", "super-secret")
485
-
486
- new_soap_request.build
487
- end
488
-
489
- it "is not set otherwise" do
490
- http_request.auth.expects(:ntlm).never
491
- new_soap_request.build
492
- end
493
- end
494
- end
495
-
496
- end