savon-ng-1.6 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +13 -0
  3. data/.travis.yml +15 -0
  4. data/.yardopts +6 -0
  5. data/CHANGELOG.md +1024 -0
  6. data/CONTRIBUTING.md +46 -0
  7. data/Gemfile +8 -0
  8. data/LICENSE +20 -0
  9. data/README.md +81 -0
  10. data/Rakefile +14 -0
  11. data/donate.png +0 -0
  12. data/lib/savon/block_interface.rb +26 -0
  13. data/lib/savon/builder.rb +166 -0
  14. data/lib/savon/client.rb +88 -0
  15. data/lib/savon/core_ext/string.rb +29 -0
  16. data/lib/savon/header.rb +70 -0
  17. data/lib/savon/http_error.rb +27 -0
  18. data/lib/savon/log_message.rb +48 -0
  19. data/lib/savon/message.rb +36 -0
  20. data/lib/savon/mock/expectation.rb +71 -0
  21. data/lib/savon/mock/spec_helper.rb +62 -0
  22. data/lib/savon/mock.rb +5 -0
  23. data/lib/savon/model.rb +80 -0
  24. data/lib/savon/operation.rb +127 -0
  25. data/lib/savon/options.rb +330 -0
  26. data/lib/savon/qualified_message.rb +49 -0
  27. data/lib/savon/request.rb +89 -0
  28. data/lib/savon/request_logger.rb +48 -0
  29. data/lib/savon/response.rb +112 -0
  30. data/lib/savon/soap_fault.rb +48 -0
  31. data/lib/savon/version.rb +5 -0
  32. data/lib/savon.rb +27 -0
  33. data/savon.gemspec +47 -0
  34. data/spec/fixtures/gzip/message.gz +0 -0
  35. data/spec/fixtures/response/another_soap_fault.xml +14 -0
  36. data/spec/fixtures/response/authentication.xml +14 -0
  37. data/spec/fixtures/response/header.xml +13 -0
  38. data/spec/fixtures/response/list.xml +18 -0
  39. data/spec/fixtures/response/multi_ref.xml +39 -0
  40. data/spec/fixtures/response/soap_fault.xml +8 -0
  41. data/spec/fixtures/response/soap_fault12.xml +18 -0
  42. data/spec/fixtures/response/taxcloud.xml +1 -0
  43. data/spec/fixtures/ssl/client_cert.pem +16 -0
  44. data/spec/fixtures/ssl/client_encrypted_key.pem +30 -0
  45. data/spec/fixtures/ssl/client_encrypted_key_cert.pem +24 -0
  46. data/spec/fixtures/ssl/client_key.pem +15 -0
  47. data/spec/fixtures/wsdl/authentication.xml +63 -0
  48. data/spec/fixtures/wsdl/betfair.xml +2981 -0
  49. data/spec/fixtures/wsdl/edialog.xml +15416 -0
  50. data/spec/fixtures/wsdl/interhome.xml +2137 -0
  51. data/spec/fixtures/wsdl/lower_camel.xml +52 -0
  52. data/spec/fixtures/wsdl/multiple_namespaces.xml +92 -0
  53. data/spec/fixtures/wsdl/multiple_types.xml +60 -0
  54. data/spec/fixtures/wsdl/taxcloud.xml +934 -0
  55. data/spec/fixtures/wsdl/team_software.xml +1 -0
  56. data/spec/fixtures/wsdl/vies.xml +176 -0
  57. data/spec/fixtures/wsdl/wasmuth.xml +153 -0
  58. data/spec/integration/email_example_spec.rb +32 -0
  59. data/spec/integration/ratp_example_spec.rb +28 -0
  60. data/spec/integration/stockquote_example_spec.rb +28 -0
  61. data/spec/integration/support/application.rb +82 -0
  62. data/spec/integration/support/server.rb +84 -0
  63. data/spec/integration/temperature_example_spec.rb +46 -0
  64. data/spec/integration/zipcode_example_spec.rb +42 -0
  65. data/spec/savon/builder_spec.rb +86 -0
  66. data/spec/savon/client_spec.rb +193 -0
  67. data/spec/savon/core_ext/string_spec.rb +37 -0
  68. data/spec/savon/features/message_tag_spec.rb +61 -0
  69. data/spec/savon/http_error_spec.rb +49 -0
  70. data/spec/savon/log_message_spec.rb +33 -0
  71. data/spec/savon/message_spec.rb +40 -0
  72. data/spec/savon/mock_spec.rb +157 -0
  73. data/spec/savon/model_spec.rb +154 -0
  74. data/spec/savon/observers_spec.rb +92 -0
  75. data/spec/savon/operation_spec.rb +211 -0
  76. data/spec/savon/options_spec.rb +772 -0
  77. data/spec/savon/request_spec.rb +493 -0
  78. data/spec/savon/response_spec.rb +258 -0
  79. data/spec/savon/soap_fault_spec.rb +126 -0
  80. data/spec/spec_helper.rb +30 -0
  81. data/spec/support/endpoint.rb +25 -0
  82. data/spec/support/fixture.rb +39 -0
  83. data/spec/support/integration.rb +9 -0
  84. data/spec/support/stdout.rb +25 -0
  85. metadata +308 -0
data/CHANGELOG.md ADDED
@@ -0,0 +1,1024 @@
1
+ ### 2.3.0 (2013-07-27)
2
+
3
+ Combined release ticket: [#481](https://github.com/savonrb/savon/issues/481)
4
+
5
+ * Feature: [#405](https://github.com/savonrb/savon/issues/405) Improved NTLM support based on HTTPI v2.1.0.
6
+
7
+ * Feature: [#424](https://github.com/savonrb/savon/issues/424) Adds support for multipart responses
8
+ through the updated [savon-multipart](https://github.com/savonrb/savon-multipart) gem. You can now
9
+ specify `multipart: true` either as a global or local option. Please make sure you have the
10
+ updated `savon-multipart` gem installed and loaded, as it is not a direct dependency of Savon.
11
+
12
+ ``` ruby
13
+ require 'savon'
14
+ require 'savon-multipart'
15
+
16
+ # expect multipart responses for every operation
17
+ client = Savon.client(wsdl: wsdl, multipart: true)
18
+
19
+ # only expect a multipart response for this operation
20
+ client.call(:my_operation, multipart: true)
21
+ ```
22
+
23
+ * Feature: [#470](https://github.com/savonrb/savon/issues/470) Added a local `:soap_header` option
24
+ to allow setting the SOAP header per request.
25
+
26
+ * Feature: [#402](https://github.com/savonrb/savon/issues/402) Makes it possible to create mocks
27
+ that don't care about the message sent by using `:any` for the `:message` option.
28
+
29
+ ``` ruby
30
+ savon.expects(:authenticate).with(message: :any)
31
+ ```
32
+
33
+ * Fix: [#450](https://github.com/savonrb/savon/pull/450) Added `Savon::Response#soap_fault`
34
+ and `Savon::Response#http_error` which were present in version 1.
35
+
36
+ * Fix: [#474](https://github.com/savonrb/savon/issues/474) Changed `Savon::Response#header` and
37
+ `Savon::Response#body` to respect the global `:convert_response_tags_to` and `:strip_namespaces`
38
+ options and return the expected result instead of raising a `Savon::InvalidResponseError`.
39
+
40
+ * Fix: [#461](https://github.com/savonrb/savon/issues/461) Fixed two problems related to namespace
41
+ qualified messages and the element `:order!`.
42
+
43
+ * Fix: [#476](https://github.com/savonrb/savon/issues/476) fixes a problem where the namespace
44
+ for the message tag was not correctly determined from the WSDL.
45
+
46
+ * Fix: [#468](https://github.com/savonrb/savon/issues/468) Changed the dependency on Nokogiri
47
+ to < 1.6, because Nokogiri 1.6 dropped support for Ruby 1.8.
48
+
49
+ ### 2.2.0 (2013-04-21)
50
+
51
+ * Feature: [#416](https://github.com/savonrb/savon/pull/416) The global `namespace_identifier`
52
+ option can now be set to `nil` to not add a namespace identifier to the message tag.
53
+
54
+ * Feature: [#408](https://github.com/savonrb/savon/pull/408) Added `Savon::Client#service_name`
55
+ to return the name of the SOAP service.
56
+
57
+ * Improvement: When mistyping an option name, Savon used to raise a simple `NoMethodError`.
58
+ This is because regardless of whether you're using the Hash or block syntax to pass global
59
+ or local options, both are just method calls on some options object.
60
+
61
+ ``` ruby
62
+ NoMethodError: undefined method 'wsdk' for #<Savon::GlobalOptions:0x007fed95a55228>
63
+ ```
64
+
65
+ As of this change, Savon now catches those errors and raise a `Savon::UnknownOptionError`
66
+ with a slightly more helpful error message instead.
67
+
68
+ ``` ruby
69
+ Savon::UnknownOptionError:
70
+ Unknown global option: :wsdk
71
+ ```
72
+
73
+ * Improvement: [#385](https://github.com/savonrb/savon/issues/385) Instead of raising an
74
+ `ArgumentError` when Wasabi can't find any operations in the WSDL. Savon now raises a
75
+ `Savon::UnknownOperationError`. This might happen when Wasabi fails to parse the WSDL
76
+ because of imports for example.
77
+
78
+ * Fix: [#430](https://github.com/savonrb/savon/pull/430) allows you to rescue and ignore
79
+ `Savon::Error` errors in production while still having mocks trigger test failures.
80
+
81
+ * Fix: [#393](https://github.com/savonrb/savon/pull/393) changed `Savon::SOAPFault` to work
82
+ with generic response Hash keys.
83
+
84
+ * Fix: [#423](https://github.com/savonrb/savon/issues/423) fixes a problem where Wasabi was
85
+ not able to find extension base elements defined in imports it didn't follow.
86
+
87
+ ### 2.1.0 (2013-02-03)
88
+
89
+ * Feature: [#372](https://github.com/savonrb/savon/pull/372) added global `ssl_cert_key_password` option.
90
+
91
+ * Feature: [#361](https://github.com/savonrb/savon/issues/361) added the local `:attributes`
92
+ option to allow adding XML attributes to the SOAP message tag.
93
+
94
+ * Improvement: [#363](https://github.com/savonrb/savon/issues/363) Savon 2.0 remembers the cookies from
95
+ the last response and passes it to the next request, which is not a proper way to handle cookies.
96
+ I removed this behavior and introduced an easy way to handle cookies manually instead.
97
+
98
+ * Improvement: [#380](https://github.com/savonrb/savon/pull/380) changed the gemspec to not rely on git.
99
+
100
+ * Fix: [#378](https://github.com/savonrb/savon/pull/378) use the proxy option for WSDL requests.
101
+
102
+ * Fix: [#369](https://github.com/savonrb/savon/pull/369) use HTTP basic and digest authentication
103
+ credentials to retrieve WSDL files.
104
+ Fixes [#367](https://github.com/savonrb/savon/issues/367#issuecomment-12720307).
105
+
106
+ * Fix: [#349](https://github.com/savonrb/savon/issues/349) global timeout and SSL options are
107
+ now used to retrieve a remote WSDL document.
108
+
109
+ * Fix: [#353](https://github.com/savonrb/savon/issues/353) simplified logging. the global `:log`
110
+ option is now only used to store whether Savon should log instead of creating a new `Logger`
111
+ and changing its logdev to `$stdout` or `/dev/null` depending on the what was passed.
112
+
113
+ This also fixes [rubiii/savon#2](https://github.com/rubiii/savon/issues/2) and
114
+ [#379](https://github.com/savonrb/savon/issues/379).
115
+
116
+ * Fix: [#376](https://github.com/savonrb/savon/issues/376) added a global `namespaces` option
117
+ for adding namespaces to the SOAP envelope.
118
+
119
+ ### 2.0.3 (2013-01-19)
120
+
121
+ * Upgraded Nori dependency to prevent people from using a version that is vulnerable to
122
+ the recent [remote code execution bug](https://gist.github.com/4532291).
123
+
124
+ ### 2.0.2 (2012-12-20)
125
+
126
+ * Fix: [#297](https://github.com/savonrb/savon/issues/297#issuecomment-11536517) added the global
127
+ `:ssl_verify_mode` and `:ssl_version` options which were missing.
128
+
129
+ * Fix: [#344](https://github.com/savonrb/savon/issues/344) added missing global ssl cert options
130
+ `:ssl_cert_file`, `:ssl_cert_key_file` and `:ssl_ca_cert_file`.
131
+
132
+ ### 2.0.1 (2012-12-19)
133
+
134
+ * Fix [#342](https://github.com/savonrb/savon/issues/342) fixes an issue where namespaces could
135
+ not be resolved if the actual operation name to call did not match the operation name passed
136
+ to the client's `#call` method. For example: `:get_stations` for a `getStations` operation.
137
+
138
+ ### 2.0.0 (2012-12-18)
139
+
140
+ * Read about all the changes in the [updated documentation](http://savonrb.com/version2.html).
141
+
142
+ * Fix: [#322](https://github.com/savonrb/savon/issues/322) use the builder's state instead of the
143
+ block's return value to set the soap body/xml values.
144
+
145
+ * Fix: [#327](https://github.com/savonrb/savon/issues/327) `response.to_array` now properly
146
+ returns FalseClass values.
147
+
148
+ * Fix: [320](https://github.com/savonrb/savon/issues/320) use the correct SOAP namespace when the
149
+ SOAP version changes between requests.
150
+
151
+ * Fix: [321](https://github.com/savonrb/savon/issues/321) preserve `[false]` values in Hashes.
152
+
153
+ ### 1.2.0 (2012-09-15)
154
+
155
+ * Fix: [#312](https://github.com/savonrb/savon/pull/312) recursively determines the proper namespaces
156
+ for SOAP body Hashes with nested Arrays of Hashes.
157
+
158
+ * Improvement: [#318](https://github.com/savonrb/savon/pull/318) isolates building the request to
159
+ improve threadsafety.
160
+
161
+ * Refactoring: Use the `Wasabi::Document` with resolver instead of the custom `Savon::Wasabi::Document`.
162
+
163
+ ### 1.1.0 (2012-06-28)
164
+
165
+ * Improvement: Changed Savon's core dependencies to be more strict and only allow bug fix changes.
166
+ Major or minor releases of these dependencies now need a release of Savon so they can be used.
167
+ This should improve the stability of the library and make it easier to update, because changes
168
+ to these core dependencies will be documented here as well.
169
+
170
+ * Fix: The latest version of Wasabi should now correctly detect the names of your operations.
171
+ So you should be able to just get the names of some operation:
172
+
173
+ ``` ruby
174
+ client.wsdl.soap_actions
175
+ # => [:authenticate, :find_user]
176
+ ```
177
+
178
+ and pass the Symbol to execute a request:
179
+
180
+ ``` ruby
181
+ client.request :authenticate, body: { token: "secret" }
182
+ ```
183
+
184
+ If you still pass anything other than a single Symbol to that method, please open an issue!
185
+ You shouldn't need to specify a namespace or additional attributes for the tag.
186
+
187
+ * Refactoring: Moved code that sets the cookies from the last response for the
188
+ next request to `HTTPI::Request#set_cookies`.
189
+
190
+ ### 1.0.0 (2012-06-09)
191
+
192
+ * Fix: `Savon.client` didn't pass the optional block.
193
+
194
+ * Improvement: [#291](https://github.com/savonrb/savon/issues/291) changed the `:soap_request` hook to act
195
+ like an around filter. The hook now receives a callback block to execute the SOAP call and can return
196
+ the result of the callback to continue the request. It can also not call the callback block and return
197
+ some `HTTPI::Response` to mock the SOAP request.
198
+
199
+ As this change affects `savon_spec`, you need to update `savon_spec` to v1.3.0.
200
+
201
+ ### 0.9.14 (2012-06-07)
202
+
203
+ * Fix: [#292](https://github.com/savonrb/savon/issues/292) again
204
+
205
+ ### 0.9.13 (2012-06-07)
206
+
207
+ * Fix: [#292](https://github.com/savonrb/savon/issues/292)
208
+
209
+ ### 0.9.12 (2012-06-07)
210
+
211
+ * Re-added the log method setters to the new config object for backwards compatibility.
212
+ You should be able to configure the logger as you used to do.
213
+
214
+ ``` ruby
215
+ Savon.configure do |config|
216
+ config.log = false # disable logging
217
+ config.log_level = :info # changing the log level
218
+ config.logger = Rails.logger # using the Rails logger
219
+ end
220
+ ```
221
+
222
+ ### 0.9.11 (2012-06-06)
223
+
224
+ * Feature: [#264](https://github.com/savonrb/savon/pull/264) - Thanks to @hoverlover, Savon and Akami now support
225
+ signed messages through WSSE.
226
+
227
+ * Fix: [#275](https://github.com/savonrb/savon/pull/275) - Add namespaces to keys in both the SOAP body hash as well
228
+ as any keys specified in a :order! Array instead of having to define them manually.
229
+
230
+ * Fix: [#257](https://github.com/savonrb/savon/issues/257) - Add ability to accept and send multiple cookies.
231
+
232
+ * Improvement: [#277](https://github.com/savonrb/savon/pull/277) automatically namespace the SOAP input tag.
233
+ Here's an example from the pull request:
234
+
235
+ ``` ruby
236
+ client.request :authenticate
237
+ ```
238
+
239
+ Note the automatic namespace identifier on the authenticate element, as well as the proper namespace inclusion
240
+ in the document:
241
+
242
+ ``` xml
243
+ <env:Envelope
244
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
245
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
246
+ xmlns:tns="http://v1_0.ws.auth.order.example.com/"
247
+ xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
248
+
249
+ <tns:authenticate>
250
+ <tns:user>username</tns:user>
251
+ <tns:password>password</tns:password>
252
+ </tns:authenticate>
253
+ </env:Envelope>
254
+ ```
255
+
256
+ ### 0.9.10 (2012-06-06)
257
+
258
+ * Feature: [#289](https://github.com/savonrb/savon/pull/289) - Allow the SOAP envelope header to be set as a String.
259
+
260
+ * Feature: In addition to the global configuration, there's now also one configuration per client.
261
+ The global config is cloned when a new client is initialized and gets used instead of the global one.
262
+ In addition, for `Savon::Model` classes, the config is cloned per class.
263
+
264
+ Closes [#84](https://github.com/savonrb/savon/issues/84) by allowing one logger per client and
265
+ [#270](https://github.com/savonrb/savon/issues/270) by allowing to specify error handling per client.
266
+
267
+ * Feature: Added an option to pretty print XML in log messages. Closes [#256](https://github.com/savonrb/savon/issues/256)
268
+ and [#280](https://github.com/savonrb/savon/issues/280).
269
+
270
+ ``` ruby
271
+ # global
272
+ Savon.configure do |config|
273
+ config.pretty_print_xml = true
274
+ end
275
+
276
+ # per client
277
+ client.config.pretty_print_xml = true
278
+ ```
279
+
280
+ * Refactoring:
281
+ * Added `Savon.client` as a shortcut for creating a new `Savon::Client`
282
+ * Changed `Savon::Config` from a module to a class.
283
+ * Moved logging to the new `Savon::Logger` object.
284
+ * Removed the `blank?` extension from `Object`.
285
+
286
+ ### 0.9.9 (2012-02-17)
287
+
288
+ * Improvement: [pull request 255](https://github.com/savonrb/savon/pull/255) - Raise an error if fetching
289
+ a remote WSDL fails. Possible fix for [issue 236](https://github.com/savonrb/savon/issues/236).
290
+
291
+ * Improvement: The value for elementFormDefault (:unqualified, :qualified) can now be specified when creating
292
+ a `Savon::Client`. For example:
293
+
294
+ ``` ruby
295
+ Savon::Client.new do
296
+ wsdl.element_form_default = :unqualified
297
+ end
298
+ ```
299
+
300
+ * Improvement: [pull request 263](https://github.com/savonrb/savon/pull/263) - The SOAP action can now be set
301
+ via a `:soap_action` key passed to the `#request` method.
302
+
303
+ ``` ruby
304
+ client.request(:get_user, :soap_action => :test_action)
305
+ ```
306
+
307
+ * Fix: [pull request 265](https://github.com/savonrb/savon/pull/265) - Fixes gemspec problems when bundling
308
+ under JRuby 1.6.5. Also fixes [issue 267](https://github.com/savonrb/savon/issues/267).
309
+
310
+ ### 0.9.8 (2012-02-15)
311
+
312
+ * Feature: Savon now ships with [Savon::Model](http://rubygems.org/gems/savon_model).
313
+ Savon::Model is a lightweight DSL to be used inside your domain models. It's been refactored
314
+ and is now [even more useful](http://savonrb.com/#how_to_date_a_model) than before.
315
+
316
+ * Feature: Merged [pull request 230](https://github.com/savonrb/savon/pull/230) to allow filtering values
317
+ in logged SOAP request XML messages.
318
+
319
+ ``` ruby
320
+ Savon.configure do |config|
321
+ config.log_filter = ["password"]
322
+ end
323
+ ```
324
+
325
+ * Feature: Added an option to change the default encoding of the XML directive tag (defaults to UTF-8)
326
+ to fix [issue 234](https://github.com/savonrb/savon/issues/234).
327
+
328
+ ``` ruby
329
+ client.request(:find_user) do
330
+ soap.encoding = "UTF-16"
331
+ soap.body = { :id => 1 }
332
+ end
333
+ ```
334
+
335
+ * Improvement: Merged [pull request 231](https://github.com/savonrb/savon/pull/231) to gracefully handle
336
+ invalid response bodies by throwing a `Savon::SOAP::InvalidResponseError`.
337
+
338
+ * Fix: [issue 237](https://github.com/savonrb/savon/issues/237) - Set the Content-Type and Content-Length
339
+ headers for every request.
340
+
341
+ * Fix: [pull request 250](https://github.com/savonrb/savon/pull/250) - The Content-Length header should
342
+ be the size in bytes.
343
+
344
+ ### 0.9.7 (2011-08-25)
345
+
346
+ * Feature: Merged [pull request 210](https://github.com/savonrb/savon/pull/210) by
347
+ [mboeh](https://github.com/mboeh) to add `Savon::SOAP::Response#doc` and
348
+ `Savon::SOAP::Response#xpath`.
349
+
350
+ * Feature: Merged [pull request 211](https://github.com/savonrb/savon/pull/211) by
351
+ [mattkirman](https://github.com/mattkirman) to fix [issue 202](https://github.com/savonrb/savon/issues/202).
352
+
353
+ * Feature: You can now pass a block to `Savon::SOAP::XML#body` and use Builder to create the XML:
354
+
355
+ ``` ruby
356
+ client.request(:find) do
357
+ soap.body do |xml|
358
+ xml.user do
359
+ xml.id 601173
360
+ end
361
+ end
362
+ end
363
+ ```
364
+
365
+ * Fix: [issue 218](https://github.com/savonrb/savon/pull/218) - Savon now correctly handles namespaced
366
+ Array items in a Hash passed to `Savon::SOAP::XML#body=`.
367
+
368
+ * Fix: Merged [pull request 212](https://github.com/savonrb/savon/pull/212) to fix
369
+ [savon_spec issue 2](https://github.com/savonrb/savon_spec/issues/2).
370
+
371
+ * Improvement: [issue 222](https://github.com/savonrb/savon/issues/222) - Set the Content-Length header.
372
+
373
+ ### 0.9.6 (2011-07-07)
374
+
375
+ * Improvement/Fix: Updated Savon to use the latest version of [Wasabi](http://rubygems.org/gems/wasabi).
376
+ This should fix [issue 155](https://github.com/savonrb/savon/issues/155) - Savon can automatically add namespaces
377
+ to SOAP requests based on the WSDL. Users shouldn't need to do anything differently or even notice whether their WSDL
378
+ hits this case; the intention is that this will "Just Work" and follow the WSDL. The SOAP details are that if
379
+ elementFormDefault is specified as qualified, Savon will automatically prepend the correct XML namespaces to the
380
+ elements in a SOAP request. Thanks to [jkingdon](https://github.com/jkingdon) for this.
381
+
382
+ * Fix: [issue 143](https://github.com/savonrb/savon/issues/143) - Updating Wasabi should solve this issue.
383
+
384
+ ### 0.9.5 (2011-07-03)
385
+
386
+ * Refactoring: Extracted WSSE authentication out into the [akami](http://rubygems.org/gems/akami) gem.
387
+
388
+ ### 0.9.4 (2011-07-03)
389
+
390
+ * Refactoring: Extracted the WSDL parser out into the [wasabi](http://rubygems.org/gems/wasabi) gem.
391
+ This should isolate upcoming improvements to the parser.
392
+
393
+ ### 0.9.3 (2011-06-30)
394
+
395
+ * Fix: [issue 138](https://github.com/savonrb/savon/issues/138) -
396
+ Savon now supports setting a global SOAP header via `Savon.soap_header=`.
397
+
398
+ * Fixed the namespace for wsse message timestamps from `wsse:Timestamp`
399
+ to `wsu:Timestamp` as required by the specification.
400
+
401
+ * Change: Removed support for NTLM authentication until it's stable. If you need it, you can still
402
+ add the following line to your Gemfile:
403
+
404
+ ``` ruby
405
+ gem "httpi", "0.9.4"
406
+ ```
407
+
408
+ * Refactoring:
409
+
410
+ * `Hash#map_soap_response` and some of its helpers are moved to [Nori v1.0.0](http://rubygems.org/gems/nori/versions/1.0.0).
411
+ Along with replacing core extensions with a proper implementation, Nori now contains a number of methods
412
+ for [configuring its default behavior](https://github.com/savonrb/nori/blob/master/CHANGELOG.md):
413
+
414
+ * The option whether to strip namespaces was moved to Nori.strip_namespaces
415
+ * You can disable "advanced typecasting" for SOAP response values
416
+ * And you can configure how SOAP response keys should be converted
417
+
418
+ * `Savon::SOAP::XML.to_hash`, `Savon::SOAP::XML.parse` and `Savon::SOAP::XML.to_array` are gone.
419
+ It wasn't worth keeping them around, because they didn't do much. You can simply parse a SOAP
420
+ response and translate it to a Savon SOAP response Hash via:
421
+
422
+ ``` ruby
423
+ Nori.parse(xml)[:envelope][:body]
424
+ ```
425
+
426
+ * `Savon::SOAP::Response#basic_hash` is now `Savon::SOAP::Response#hash`.
427
+
428
+ ### 0.9.2 (2011-04-30)
429
+
430
+ * Fix: [issue 154](https://github.com/savonrb/savon/pull/154) -
431
+ Timezone format used by Savon now matches the XML schema spec.
432
+
433
+ * Improvement: WSSE basic, digest and timestamp authentication are no longer mutually exclusive.
434
+ Thanks to [mleon](https://github.com/mleon) for solving [issue #142](https://github.com/savonrb/savon/issues/142).
435
+
436
+ * Improvement: Switched from using Crack to translate the SOAP response to a Hash to using
437
+ [Nori](http://rubygems.org/gems/nori). It's based on Crack and comes with pluggable parsers.
438
+ It defaults to REXML, but you can switch to Nokogiri via:
439
+
440
+ ``` ruby
441
+ Nori.parser = :nokogiri
442
+ ```
443
+
444
+ * Improvement: WSDL parsing now uses Nokogiri instead of REXML.
445
+
446
+ ### 0.9.1 (2011-04-06)
447
+
448
+ * Improvement: if you're only setting the local or remote address of your wsdl document, you can
449
+ now pass an (optional) String to `Savon::Client.new` to set `wsdl.document`.
450
+
451
+ ``` ruby
452
+ Savon::Client.new "http://example.com/UserService?wsdl"
453
+ ```
454
+
455
+ * Improvement: instead of calling the `to_hash` method of your response again and again and again,
456
+ there is now a `#[]` shortcut for you.
457
+
458
+ ``` ruby
459
+ response[:authenticate_response][:return]
460
+ ```
461
+
462
+ ### 0.9.0 (2011-04-05)
463
+
464
+ * Feature: issues [#158](https://github.com/savonrb/savon/issues/158),
465
+ [#169](https://github.com/savonrb/savon/issues/169) and [#172](https://github.com/savonrb/savon/issues/172)
466
+ configurable "Hash key Symbol to lowerCamelCase" conversion by using the latest version of
467
+ [Gyoku](http://rubygems.org/gems/gyoku).
468
+
469
+ ``` ruby
470
+ Gyoku.convert_symbols_to(:camelcase)
471
+ Gyoku.xml(:first_name => "Mac") # => "<FirstName></Firstname>"
472
+ ```
473
+
474
+ You can even define your own conversion formular.
475
+
476
+ ``` ruby
477
+ Gyoku.convert_symbols_to { |key| key.upcase }
478
+ Gyoku.xml(:first_name => "Mac") # => "<FIRST_NAME></FIRST_NAME>"
479
+ ```
480
+
481
+ This should also work for the SOAP input tag and SOAPAction header. So if you had to use a String for
482
+ the SOAP action to call because your services uses CamelCase instead of lowerCamelCase, you can now
483
+ change the default and use Symbols instead.
484
+
485
+ ``` ruby
486
+ Gyoku.convert_symbols_to(:camelcase)
487
+
488
+ # pre Gyoku 0.4.0
489
+ client.request(:get_user) # => "<getUser/>
490
+ client.request("GetUser") # => "<GetUser/>"
491
+
492
+ # post Gyoku 0.4.0
493
+ client.request(:get_user) # => "<GetUser/>"
494
+ ```
495
+
496
+ * Improvement: issues [#170](https://github.com/savonrb/savon/issues/170) and
497
+ [#173](https://github.com/savonrb/savon/issues/173) Savon no longer rescues exceptions raised by
498
+ `Crack::XML.parse`. If Crack complains about your WSDL document, you should take control and
499
+ solve the problem instead of getting no response.
500
+
501
+ * Improvement: issue [#172](https://github.com/savonrb/savon/issues/172) support for global env_namespace.
502
+
503
+ ``` ruby
504
+ Savon.configure do |config|
505
+ config.env_namespace = :soapenv # changes the default :env namespace
506
+ end
507
+ ```
508
+
509
+ * Fix: [issue #163](https://github.com/savonrb/savon/issues/163) "Savon 0.8.6 not playing nicely
510
+ with Httpi 0.9.0". Updating HTTPI to v0.9.1 should solve this problem.
511
+
512
+ * And if you haven't already seen the new documentation: [savonrb.com](http://savonrb.com)
513
+
514
+ ### 0.8.6 (2011-02-15)
515
+
516
+ * Fix for issues [issue #147](https://github.com/savonrb/savon/issues/147) and [#151](https://github.com/savonrb/savon/issues/151)
517
+ ([771194](https://github.com/savonrb/savon/commit/771194)).
518
+
519
+ ### 0.8.5 (2011-01-28)
520
+
521
+ * Fix for [issue #146](https://github.com/savonrb/savon/issues/146) ([98655c](https://github.com/savonrb/savon/commit/98655c)).
522
+
523
+ * Fix for [issue #147](https://github.com/savonrb/savon/issues/147) ([252670](https://github.com/savonrb/savon/commit/252670)).
524
+
525
+ ### 0.8.4 (2011-01-26)
526
+
527
+ * Fix for issues [issue #130](https://github.com/savonrb/savon/issues/130) and [#134](https://github.com/savonrb/savon/issues/134)
528
+ ([4f9847](https://github.com/savonrb/savon/commit/4f9847)).
529
+
530
+ * Fix for [issue #91](https://github.com/savonrb/savon/issues/91) ([5c8ec1](https://github.com/savonrb/savon/commit/5c8ec1)).
531
+
532
+ * Fix for [issue #135](https://github.com/savonrb/savon/issues/135) ([c9261d](https://github.com/savonrb/savon/commit/c9261d)).
533
+
534
+ ### 0.8.3 (2011-01-11)
535
+
536
+ * Moved implementation of `Savon::SOAP::Response#to_array` to a class method at `Savon::SOAP::XML.to_array`
537
+ ([05a7d3](https://github.com/savonrb/savon/commit/05a7d3)).
538
+
539
+ * Fix for [issue #131](https://github.com/savonrb/savon/issues/131) ([4e57b3](https://github.com/savonrb/savon/commit/4e57b3)).
540
+
541
+ ### 0.8.2 (2011-01-04)
542
+
543
+ * Fix for [issue #127](https://github.com/savonrb/savon/issues/127) ([0eb3da](https://github.com/savonrb/savon/commit/0eb3da4)).
544
+
545
+ * Changed `Savon::WSSE` to be based on a Hash instead of relying on builder ([4cebc3](https://github.com/savonrb/savon/commit/4cebc3)).
546
+
547
+ `Savon::WSSE` now supports wsse:Timestamp headers ([issue #122](https://github.com/savonrb/savon/issues/122)) by setting
548
+ `Savon::WSSE#timestamp` to `true`:
549
+
550
+ ``` ruby
551
+ client.request :some_method do
552
+ wsse.timestamp = true
553
+ end
554
+ ```
555
+
556
+ or by setting `Savon::WSSE#created_at` or `Savon::WSSE#expires_at`:
557
+
558
+ ``` ruby
559
+ client.request :some_method do
560
+ wsse.created_at = Time.now
561
+ wsse.expires_at = Time.now + 60
562
+ end
563
+ ```
564
+
565
+ You can also add custom tags to the WSSE header ([issue #69](https://github.com/savonrb/savon/issues/69)):
566
+
567
+ ``` ruby
568
+ client.request :some_method do
569
+ wsse["wsse:Security"]["wsse:UsernameToken"] = { "Organization" => "ACME", "Domain" => "acme.com" }
570
+ end
571
+ ```
572
+
573
+ ### 0.8.1 (2010-12-22)
574
+
575
+ * Update to depend on HTTPI v0.7.5 which comes with a fallback to use Net::HTTP when no other adapter could be required.
576
+
577
+ * Fix for [issue #72](https://github.com/savonrb/savon/issues/72) ([22074a](https://github.com/savonrb/savon/commit/22074a8)).
578
+
579
+ * Loosen dependency on builder. Should be quite stable.
580
+
581
+ ### 0.8.0 (2010-12-20)
582
+
583
+ * Added `Savon::SOAP::XML#env_namespace` ([51fa0e](https://github.com/savonrb/savon/commit/51fa0e)) to configure
584
+ the SOAP envelope namespace. It defaults to :env but can also be set to an empty String for SOAP envelope
585
+ tags without a namespace.
586
+
587
+ * Replaced quite a lot of core extensions by moving the Hash to XML translation into a new gem called
588
+ [Gyoku](http://rubygems.org/gems/gyoku) ([bac4b4](https://github.com/savonrb/savon/commit/bac4b4)).
589
+
590
+ ### 0.8.0.beta.4 (2010-11-20)
591
+
592
+ * Fix for [issue #107](https://github.com/savonrb/savon/issues/107) ([1d6eda](https://github.com/savonrb/savon/commit/1d6eda)).
593
+
594
+ * Fix for [issue #108](https://github.com/savonrb/savon/issues/108)
595
+ ([f64400...0aaca2](https://github.com/savonrb/savon/compare/f64400...0aaca2)) Thanks [fagiani](https://github.com/fagiani).
596
+
597
+ * Replaced `Savon.response_pattern` with a slightly different implementation of the `Savon::SOAP::Response#to_array` method
598
+ ([6df6a6](https://github.com/savonrb/savon/commit/6df6a6)). The method now accepts multiple arguments representing the response
599
+ Hash keys to traverse and returns the result as an Array or an empty Array in case the key is nil or does not exist.
600
+
601
+ ``` ruby
602
+ response.to_array :get_user_response, :return
603
+ # => [{ :id => 1, :name => "foo"}, { :id => 2, :name => "bar"}]
604
+ ```
605
+
606
+ ### 0.8.0.beta.3 (2010-11-06)
607
+
608
+ * Fix for [savon_spec](http://rubygems.org/gems/savon_spec) to not send nil to `Savon::SOAP::XML#body`
609
+ ([c34b42](https://github.com/savonrb/savon/commit/c34b42)).
610
+
611
+ ### 0.8.0.beta.2 (2010-11-05)
612
+
613
+ * Added `Savon.response_pattern` ([0a12fb](https://github.com/savonrb/savon/commit/0a12fb)) to automatically walk deeper into
614
+ the SOAP response Hash when a pattern (specified as an Array of Regexps and Symbols) matches the response. If for example
615
+ your response always looks like ".+Response/return" as in:
616
+
617
+ ``` xml
618
+ <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
619
+ <soap:Body>
620
+ <ns2:authenticateResponse xmlns:ns2="http://v1_0.ws.user.example.com">
621
+ <return>
622
+ <some>thing</some>
623
+ </return>
624
+ </ns2:authenticateResponse>
625
+ </soap:Body>
626
+ </soap:Envelope>
627
+ ```
628
+
629
+ you could set the response pattern to:
630
+
631
+ ``` ruby
632
+ Savon.configure do |config|
633
+ config.response_pattern = [/.+_response/, :return]
634
+ end
635
+ ```
636
+
637
+ then instead of calling:
638
+
639
+ ``` ruby
640
+ response.to_hash[:authenticate_response][:return] # :some => "thing"
641
+ ```
642
+
643
+ to get the actual content, Savon::SOAP::Response#to_hash will try to apply given the pattern:
644
+
645
+ ``` ruby
646
+ response.to_hash # :some => "thing"
647
+ ```
648
+
649
+ Please notice, that if you don't specify a response pattern or if the pattern doesn't match the
650
+ response, Savon will behave like it always did.
651
+
652
+ * Added `Savon::SOAP::Response#to_array` (which also uses the response pattern).
653
+
654
+ ### 0.8.0.beta.1 (2010-10-29)
655
+
656
+ * Changed `Savon::Client.new` to accept a block instead of multiple Hash arguments. You can access the
657
+ wsdl, http and wsse objects inside the block to configure your client for a particular service.
658
+
659
+ ``` ruby
660
+ # Instantiating a client to work with a WSDL document
661
+ client = Savon::Client.new do
662
+ wsdl.document = "http://example.com?wsdl"
663
+ end
664
+ ```
665
+
666
+ ``` ruby
667
+ # Directly accessing the SOAP endpoint
668
+ client = Savon::Client.new do
669
+ wsdl.endpoint = "http://example.com"
670
+ wsdl.namespace = "http://v1.example.com"
671
+ end
672
+ ```
673
+
674
+ * Fix for [issue #77](https://github.com/savonrb/savon/issues/77), which means you can now use
675
+ local WSDL documents:
676
+
677
+ ``` ruby
678
+ client = Savon::Client.new do
679
+ wsdl.document = "../wsdl/service.xml"
680
+ end
681
+ ```
682
+
683
+ * Changed the way SOAP requests are being dispatched. Instead of using method_missing, you now use
684
+ the new `request` method, which also accepts a block for you to access the wsdl, http, wsse and
685
+ soap object. Please notice, that a new soap object is created for every request. So you can only
686
+ access it inside this block.
687
+
688
+ ``` ruby
689
+ # A simple request to an :authenticate method
690
+ client.request :authenticate do
691
+ soap.body = { :id => 1 }
692
+ end
693
+ ```
694
+
695
+ * The new `Savon::Client#request` method fixes issues [#37](https://github.com/savonrb/savon/issues/37),
696
+ [#61](https://github.com/savonrb/savon/issues/61) and [#64](https://github.com/savonrb/savon/issues/64),
697
+ which report problems with namespacing the SOAP input tag and attaching attributes to it.
698
+ Some usage examples:
699
+
700
+ ``` ruby
701
+ client.request :get_user # Input tag: <getUser>
702
+ client.request :wsdl, "GetUser" # Input tag: <wsdl:GetUser>
703
+ client.request :get_user :active => true # Input tag: <getUser active="true">
704
+ ```
705
+
706
+ * Savon's new `request` method respects the given namespace. If you don't give it a namespace,
707
+ Savon will set the target namespace to "xmlns:wsdl". But if you do specify a namespace, it will
708
+ be set to the given Symbol.
709
+
710
+ * Refactored Savon to use the new [HTTPI](http://rubygems.org/gems/httpi) gem.
711
+ `HTTPI::Request` replaces the `Savon::Request`, so please make sure to have a look
712
+ at the HTTPI library and let me know about any problems. Using HTTPI actually
713
+ fixes the following two issues.
714
+
715
+ * Savon now adds both "xmlns:xsd" and "xmlns:xsi" namespaces for you. Thanks Averell.
716
+ It also properly serializes nil values as xsi:nil = "true".
717
+
718
+ * Fix for [issue #24](https://github.com/savonrb/savon/issues/24).
719
+ Instead of Net/HTTP, Savon now uses HTTPI to execute HTTP requests.
720
+ HTTPI defaults to use HTTPClient which supports HTTP digest authentication.
721
+
722
+ * Fix for [issue #76](https://github.com/savonrb/savon/issues/76).
723
+ You now have to explicitly specify whether to use a WSDL document, when instantiating a client.
724
+
725
+ * Fix for [issue #75](https://github.com/savonrb/savon/issues/75).
726
+ Both `Savon::SOAP::Fault` and `Savon::HTTP::Error` now contain the `HTTPI::Response`.
727
+ They also inherit from `Savon::Error`, making it easier to rescue both at the same time.
728
+
729
+ * Fix for [issue #87](https://github.com/savonrb/savon/issues/87).
730
+ Thanks to Leonardo Borges.
731
+
732
+ * Fix for [issue #81](https://github.com/savonrb/savon/issues/81).
733
+ Replaced `Savon::WSDL::Document#to_s` with a `to_xml` method.
734
+
735
+ * Fix for issues [#85](https://github.com/savonrb/savon/issues/85) and [#88](https://github.com/savonrb/savon/issues/88).
736
+
737
+ * Fix for [issue #80](https://github.com/savonrb/savon/issues/80).
738
+
739
+ * Fix for [issue #60](https://github.com/savonrb/savon/issues/60).
740
+
741
+ * Fix for [issue #96](https://github.com/savonrb/savon/issues/96).
742
+
743
+ * Removed global WSSE credentials. Authentication needs to be set up for each client instance.
744
+
745
+ * Started to remove quite a few core extensions.
746
+
747
+ ### 0.7.9 (2010-06-14)
748
+
749
+ * Fix for [issue #53](https://github.com/savonrb/savon/issues/53).
750
+
751
+ ### 0.7.8 (2010-05-09)
752
+
753
+ * Fixed gemspec to include missing files in the gem.
754
+
755
+ ### 0.7.7 (2010-05-09)
756
+
757
+ * SOAP requests now start with a proper XML declaration.
758
+
759
+ * Added support for gzipped requests and responses (http://github.com/lucascs). While gzipped SOAP
760
+ responses are decoded automatically, you have to manually instruct Savon to gzip SOAP requests:
761
+
762
+ ``` ruby
763
+ client = Savon::Client.new "http://example.com/UserService?wsdl", :gzip => true
764
+ ```
765
+
766
+ * Fix for [issue #51](https://github.com/savonrb/savon/issues/51). Added the :soap_endpoint option to
767
+ `Savon::Client.new` which lets you specify a SOAP endpoint per client instance:
768
+
769
+ ``` ruby
770
+ client = Savon::Client.new "http://example.com/UserService?wsdl",
771
+ :soap_endpoint => "http://localhost/UserService"
772
+ ```
773
+
774
+ * Fix for [issue #50](https://github.com/savonrb/savon/issues/50). Savon still escapes special characters
775
+ in SOAP request Hash values, but you can now append an exclamation mark to Hash keys specifying that
776
+ it's value should not be escaped.
777
+
778
+ ### 0.7.6 (2010-03-21)
779
+
780
+ * Moved documentation from the Github Wiki to the actual class files and established a much nicer
781
+ documentation combining examples and implementation (using Hanna) at: http://savon.rubiii.com
782
+
783
+ * Added `Savon::Client#call` as a workaround for dispatching calls to SOAP actions named after
784
+ existing methods. Fix for [issue #48](https://github.com/savonrb/savon/issues/48).
785
+
786
+ * Add support for specifying attributes for duplicate tags (via Hash values as Arrays).
787
+ Fix for [issue #45](https://github.com/savonrb/savon/issues/45).
788
+
789
+ * Fix for [issue #41](https://github.com/savonrb/savon/issues/41).
790
+
791
+ * Fix for issues [#39](https://github.com/savonrb/savon/issues/39) and [#49](https://github.com/savonrb/savon/issues/49).
792
+ Added `Savon::SOAP#xml` which let's you specify completely custom SOAP request XML.
793
+
794
+ ### 0.7.5 (2010-02-19)
795
+
796
+ * Fix for [issue #34](https://github.com/savonrb/savon/issues/34).
797
+
798
+ * Fix for [issue #36](https://github.com/savonrb/savon/issues/36).
799
+
800
+ * Added feature requested in [issue #35](https://github.com/savonrb/savon/issues/35).
801
+
802
+ * Changed the key for specifying the order of tags from :@inorder to :order!
803
+
804
+ ### 0.7.4 (2010-02-02)
805
+
806
+ * Fix for [issue #33](https://github.com/savonrb/savon/issues/33).
807
+
808
+ ### 0.7.3 (2010-01-31)
809
+
810
+ * Added support for Geotrust-style WSDL documents (Julian Kornberger <github.corny@digineo.de>).
811
+
812
+ * Make HTTP requests include path and query only. This was breaking requests via proxy as scheme and host
813
+ were repeated (Adrian Mugnolo <adrian@mugnolo.com>)
814
+
815
+ * Avoid warning on 1.8.7 and 1.9.1 (Adrian Mugnolo <adrian@mugnolo.com>).
816
+
817
+ * Fix for [issue #29](https://github.com/savonrb/savon/issues/29).
818
+ Default to UTC to xs:dateTime value for WSSE authentication.
819
+
820
+ * Fix for [issue #28](https://github.com/savonrb/savon/issues/28).
821
+
822
+ * Fix for [issue #27](https://github.com/savonrb/savon/issues/27). The Content-Type now defaults to UTF-8.
823
+
824
+ * Modification to allow assignment of an Array with an input name and an optional Hash of values to soap.input.
825
+ Patches [issue #30](https://github.com/savonrb/savon/issues/30) (stanleydrew <andrewmbenton@gmail.com>).
826
+
827
+ * Fix for [issue #25](https://github.com/savonrb/savon/issues/25).
828
+
829
+ ### 0.7.2 (2010-01-17)
830
+
831
+ * Exposed the `Net::HTTP` response (added by Kevin Ingolfsland). Use the `http` accessor (`response.http`)
832
+ on your `Savon::Response` to access the `Net::HTTP` response object.
833
+
834
+ * Fix for [issue #21](https://github.com/savonrb/savon/issues/21).
835
+
836
+ * Fix for [issue #22](https://github.com/savonrb/savon/issues/22).
837
+
838
+ * Fix for [issue #19](https://github.com/savonrb/savon/issues/19).
839
+
840
+ * Added support for global header and namespaces. See [issue #9](https://github.com/savonrb/savon/issues/9).
841
+
842
+ ### 0.7.1 (2010-01-10)
843
+
844
+ * The Hash of HTTP headers for SOAP calls is now public via `Savon::Request#headers`.
845
+ Patch for [issue #8](https://github.com/savonrb/savon/issues/8).
846
+
847
+ ### 0.7.0 (2010-01-09)
848
+
849
+ This version comes with several changes to the public API!
850
+ Pay attention to the following list and read the updated Wiki: http://wiki.github.com/savonrb/savon
851
+
852
+ * Changed how `Savon::WSDL` can be disabled. Instead of disabling the WSDL globally/per request via two
853
+ different methods, you now simply append an exclamation mark (!) to your SOAP call: `client.get_all_users!`
854
+ Make sure you know what you're doing because when the WSDL is disabled, Savon does not know about which
855
+ SOAP actions are valid and just dispatches everything.
856
+
857
+ * The `Net::HTTP` object used by `Savon::Request` to retrieve WSDL documents and execute SOAP calls is now public.
858
+ While this makes the library even more flexible, it also comes with two major changes:
859
+
860
+ * SSL client authentication needs to be defined directly on the `Net::HTTP` object:
861
+
862
+ ``` ruby
863
+ client.request.http.client_cert = ...
864
+ ```
865
+
866
+ I added a shortcut method for setting all options through a Hash similar to the previous implementation:
867
+
868
+ ``` ruby
869
+ client.request.http.ssl_client_auth :client_cert => ...
870
+ ```
871
+
872
+ * Open and read timeouts also need to be set on the `Net::HTTP` object:
873
+
874
+ ``` ruby
875
+ client.request.http.open_timeout = 30
876
+ client.request.http.read_timeout = 30
877
+ ```
878
+
879
+ * Please refer to the `Net::HTTP` documentation for more details:
880
+ http://www.ruby-doc.org/stdlib/libdoc/net/http/rdoc/index.html
881
+
882
+ * Thanks to JulianMorrison, Savon now supports HTTP basic authentication:
883
+
884
+ ``` ruby
885
+ client.request.http.basic_auth "username", "password"
886
+ ```
887
+
888
+ * Julian also added a way to explicitly specify the order of Hash keys and values, so you should now be able
889
+ to work with services requiring a specific order of input parameters while still using Hash input.
890
+
891
+ ``` ruby
892
+ client.find_user { |soap| soap.body = { :name => "Lucy", :id => 666, :@inorder => [:id, :name] } }
893
+ ```
894
+
895
+ * `Savon::Response#to_hash` now returns the content inside of "soap:Body" instead of trying to go one
896
+ level deeper and return it's content. The previous implementation only worked when the "soap:Body" element
897
+ contained a single child. See [issue #17](https://github.com/savonrb/savon/issues/17).
898
+
899
+ * Added `Savon::SOAP#namespace` as a shortcut for setting the "xmlns:wsdl" namespace.
900
+
901
+ ``` ruby
902
+ soap.namespace = "http://example.com"
903
+ ```
904
+
905
+ ### 0.6.8 (2010-01-01)
906
+
907
+ * Improved specifications for various kinds of WSDL documents.
908
+
909
+ * Added support for SOAP endpoints which are different than the WSDL endpoint of a service.
910
+
911
+ * Changed how SOAP actions and inputs are retrieved from the WSDL documents. This might break a few existing
912
+ implementations, but makes Savon work well with even more services. If this change breaks your implementation,
913
+ please take a look at the `action` and `input` methods of the `Savon::SOAP` object.
914
+ One specific problem I know of is working with the createsend WSDL and its namespaced actions.
915
+
916
+ To make it work, call the SOAP action without namespace and specify the input manually:
917
+
918
+ ``` ruby
919
+ client.get_api_key { |soap| soap.input = "User.GetApiKey" }
920
+ ```
921
+
922
+ ### 0.6.7 (2009-12-18)
923
+
924
+ * Implemented support for a proxy server. The proxy URI can be set through an optional Hash of options passed
925
+ to instantiating `Savon::Client` (Dave Woodward <dave@futuremint.com>)
926
+
927
+ * Implemented support for SSL client authentication. Settings can be set through an optional Hash of arguments
928
+ passed to instantiating `Savon::Client` (colonhyphenp)
929
+
930
+ * Patch for [issue #10](https://github.com/savonrb/savon/issues/10).
931
+
932
+ ### 0.6.6 (2009-12-14)
933
+
934
+ * Default to use the name of the SOAP action (the method called in a client) in lowerCamelCase for SOAP action
935
+ and input when Savon::WSDL is disabled. You still need to specify soap.action and maybe soap.input in case
936
+ your SOAP actions are named any different.
937
+
938
+ ### 0.6.5 (2009-12-13)
939
+
940
+ * Added an `open_timeout` method to `Savon::Request`.
941
+
942
+ ### 0.6.4 (2009-12-13)
943
+
944
+ * Refactored specs to be less unit-like.
945
+
946
+ * Added a getter for the `Savon::Request` to `Savon::Client` and a `read_timeout` setter for HTTP requests.
947
+
948
+ * `wsdl.soap_actions` now returns an Array of SOAP actions. For the previous "mapping" please use `wsdl.operations`.
949
+
950
+ * Replaced WSDL document with stream parsing.
951
+
952
+ ```
953
+ Benchmarks (1000 SOAP calls):
954
+
955
+ user system total real
956
+ 0.6.4 72.180000 8.280000 80.460000 (750.799011)
957
+ 0.6.3 192.900000 19.630000 212.530000 (914.031865)
958
+ ```
959
+
960
+ ### 0.6.3 (2009-12-11)
961
+
962
+ * Removing 2 ruby deprecation warnings for parenthesized arguments. (Dave Woodward <dave@futuremint.com>)
963
+
964
+ * Added global and per request options for disabling `Savon::WSDL`.
965
+
966
+ ```
967
+ Benchmarks (1000 SOAP calls):
968
+
969
+ user system total real
970
+ WSDL 192.900000 19.630000 212.530000 (914.031865)
971
+ disabled WSDL 5.680000 1.340000 7.020000 (298.265318)
972
+ ```
973
+
974
+ * Improved XPath expressions for parsing the WSDL document.
975
+
976
+ ```
977
+ Benchmarks (1000 SOAP calls):
978
+
979
+ user system total real
980
+ 0.6.3 192.900000 19.630000 212.530000 (914.031865)
981
+ 0.6.2 574.720000 78.380000 653.100000 (1387.778539)
982
+ ```
983
+
984
+ ### 0.6.2 (2009-12-06)
985
+
986
+ * Added support for changing the name of the SOAP input node.
987
+
988
+ * Added a CHANGELOG.
989
+
990
+ ### 0.6.1 (2009-12-06)
991
+
992
+ * Fixed a problem with WSSE credentials, where every request contained a WSSE authentication header.
993
+
994
+ ### 0.6.0 (2009-12-06)
995
+
996
+ * `method_missing` now yields the SOAP and WSSE objects to a given block.
997
+
998
+ * The response_process (which previously was a block passed to method_missing) was replaced by `Savon::Response`.
999
+
1000
+ * Improved SOAP action handling (another problem that came up with issue #1).
1001
+
1002
+ ### 0.5.3 (2009-11-30)
1003
+
1004
+ * Patch for [issue #2](https://github.com/savonrb/savon/issues/2).
1005
+
1006
+ ### 0.5.2 (2009-11-30)
1007
+
1008
+ * Patch for [issue #1](https://github.com/savonrb/savon/issues/1).
1009
+
1010
+ ### 0.5.1 (2009-11-29)
1011
+
1012
+ * Optimized default response process.
1013
+
1014
+ * Added WSSE settings via defaults.
1015
+
1016
+ * Added SOAP fault and HTTP error handling.
1017
+
1018
+ * Improved documentation
1019
+
1020
+ * Added specs
1021
+
1022
+ ### 0.5.0 (2009-11-29)
1023
+
1024
+ * Complete rewrite and public release.