savon_with_adapter 2.4.1

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