savon 2.11.0 → 2.11.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +12 -3
- data/CHANGELOG.md +13 -0
- data/Gemfile +1 -7
- data/README.md +5 -5
- data/lib/savon/builder.rb +32 -6
- data/lib/savon/client.rb +1 -2
- data/lib/savon/header.rb +2 -2
- data/lib/savon/log_message.rb +1 -1
- data/lib/savon/mock/expectation.rb +11 -2
- data/lib/savon/operation.rb +9 -2
- data/lib/savon/options.rb +33 -17
- data/lib/savon/qualified_message.rb +29 -28
- data/lib/savon/request.rb +4 -3
- data/lib/savon/response.rb +6 -5
- data/lib/savon/soap_fault.rb +1 -1
- data/lib/savon/version.rb +1 -1
- data/savon.gemspec +0 -1
- data/spec/fixtures/wsdl/brand.xml +624 -0
- data/spec/integration/random_quote_spec.rb +1 -1
- data/spec/integration/stockquote_example_spec.rb +6 -0
- data/spec/savon/builder_spec.rb +13 -4
- data/spec/savon/log_message_spec.rb +7 -1
- data/spec/savon/mock_spec.rb +11 -0
- data/spec/savon/options_spec.rb +21 -1
- data/spec/savon/qualified_message_spec.rb +53 -5
- data/spec/savon/soap_fault_spec.rb +5 -0
- data/spec/savon/softlayer_spec.rb +27 -0
- metadata +5 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ee16983ffafe63866c9a55e2f87082982882442b
|
4
|
+
data.tar.gz: 031a0b620818fa9242fa6df79d716dc2d5fb0795
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 32d112e59f45ec6b6f1c65f54c33030c99ae2e2c931ce476d0c62cceb7715d62772164b0f7e182ab691a8b47d8cfeb7c83140986743f3e134e91040d099905a6
|
7
|
+
data.tar.gz: 0d73626cde6c3ccec91b090f0d30cb1f6031b5fdc88834e1874719f0e269ae62c5a4e9402e863a45e7fb64c176b58f6ff8bb5296a2e13d1ddd28bb1133c9af0d
|
data/.travis.yml
CHANGED
@@ -1,10 +1,19 @@
|
|
1
1
|
# https://github.com/travis-ci/travis-ci/wiki/.travis.yml-options
|
2
2
|
language: "ruby"
|
3
|
+
sudo: false
|
4
|
+
before_install:
|
5
|
+
- gem install bundler
|
3
6
|
script: "bundle exec rake --trace"
|
4
7
|
rvm:
|
5
|
-
- 2.0
|
6
|
-
- 2.1
|
7
|
-
- 2.2
|
8
|
+
- 2.0.0
|
9
|
+
- 2.1.8
|
10
|
+
- 2.2.4
|
11
|
+
- 2.3.0
|
8
12
|
- jruby
|
13
|
+
- rbx-2
|
14
|
+
matrix:
|
15
|
+
allow_failures:
|
16
|
+
- rvm: rbx-2
|
17
|
+
fast_finish: true
|
9
18
|
notifications:
|
10
19
|
irc: "irc.freenode.org#savon"
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
# 2.11.2 (2017-08-03)
|
2
|
+
* Fix: [#676](https://github.com/savonrb/savon/pull/676) Fixes handling of `content!` and `attributes!`
|
3
|
+
* Fix: [#800](https://github.com/savonrb/savon/pull/800) Fix exception calling `SOAPFault#to_s` when http.body is empty
|
4
|
+
* Fix: [#757](https://github.com/savonrb/savon/pull/757) Logging: Use filter without automatic pretty printing
|
5
|
+
* Fix: [#771](https://github.com/savonrb/savon/pull/771) Restore support for cookies when using custom headers
|
6
|
+
* Feature: [#744](https://github.com/savonrb/savon/pull/744) Add support for rpc encoded wsdl
|
7
|
+
* Feature: [#742](https://github.com/savonrb/savon/pull/742) Add support for local request headers
|
8
|
+
* Feature: [#704](https://github.com/savonrb/savon/pull/704) Add possibility to pass attribute delete_namespace_attributes to Nori
|
9
|
+
|
10
|
+
# 2.11.1 (2015-05-27)
|
11
|
+
|
12
|
+
* Replace dependency on [uuid](https://rubygems.org/gems/uuid), using SecureRandom.uuid instead.
|
13
|
+
|
1
14
|
# 2.11.0 (2015-03-31)
|
2
15
|
|
3
16
|
* Formally drop support for 1.8.7.
|
data/Gemfile
CHANGED
@@ -1,19 +1,13 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
gemspec
|
3
3
|
|
4
|
-
gem "httpclient", "~> 2.
|
4
|
+
gem "httpclient", "~> 2.7.1"
|
5
5
|
|
6
6
|
gem "simplecov", :require => false
|
7
7
|
gem "coveralls", :require => false
|
8
|
-
gem "uuid"
|
9
8
|
|
10
9
|
platform :rbx do
|
11
|
-
gem 'json'
|
12
10
|
gem 'racc'
|
13
11
|
gem 'rubysl'
|
14
12
|
gem 'rubinius-coverage'
|
15
13
|
end
|
16
|
-
|
17
|
-
platform :jruby do
|
18
|
-
gem 'json'
|
19
|
-
end
|
data/README.md
CHANGED
@@ -5,10 +5,10 @@ Heavy metal SOAP client
|
|
5
5
|
[Documentation](http://savonrb.com) | [RDoc](http://rubydoc.info/gems/savon) |
|
6
6
|
[Mailing list](https://groups.google.com/forum/#!forum/savonrb) | [Twitter](http://twitter.com/savonrb)
|
7
7
|
|
8
|
-
[](http://travis-ci.org/savonrb/savon)
|
9
|
+
[](http://badge.fury.io/rb/savon)
|
10
|
+
[](https://codeclimate.com/github/savonrb/savon)
|
11
|
+
[](https://coveralls.io/r/savonrb/savon)
|
12
12
|
|
13
13
|
|
14
14
|
## Version 2
|
@@ -22,7 +22,7 @@ $ gem install savon
|
|
22
22
|
or add it to your Gemfile like this:
|
23
23
|
|
24
24
|
```
|
25
|
-
gem 'savon', '~> 2.
|
25
|
+
gem 'savon', '~> 2.11.1'
|
26
26
|
```
|
27
27
|
|
28
28
|
## Usage example
|
data/lib/savon/builder.rb
CHANGED
@@ -36,18 +36,18 @@ module Savon
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def build_document
|
39
|
-
|
39
|
+
xml_result = tag(builder, :Envelope, namespaces_with_globals) do |xml|
|
40
40
|
tag(xml, :Header, header_attributes) { xml << header.to_s } unless header.empty?
|
41
41
|
if @globals[:no_message_tag]
|
42
42
|
tag(xml, :Body, body_attributes) { xml << message.to_s }
|
43
43
|
else
|
44
|
-
tag(xml, :Body, body_attributes) { xml.tag!(*namespaced_message_tag) { xml <<
|
44
|
+
tag(xml, :Body, body_attributes) { xml.tag!(*namespaced_message_tag) { xml << body_message } }
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
48
48
|
# if we have a signature sign the document
|
49
49
|
if @signature
|
50
|
-
@signature.document =
|
50
|
+
@signature.document = xml_result
|
51
51
|
|
52
52
|
2.times do
|
53
53
|
@header = nil
|
@@ -61,10 +61,10 @@ module Savon
|
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
|
-
|
64
|
+
xml_result = @signature.document
|
65
65
|
end
|
66
66
|
|
67
|
-
|
67
|
+
xml_result
|
68
68
|
end
|
69
69
|
|
70
70
|
def header_attributes
|
@@ -141,6 +141,7 @@ module Savon
|
|
141
141
|
|
142
142
|
def namespaced_message_tag
|
143
143
|
tag_name = message_tag
|
144
|
+
return [tag_name] if @wsdl.document? and @wsdl.soap_input(@operation_name.to_sym).is_a?(Hash)
|
144
145
|
if namespace_identifier == nil
|
145
146
|
[tag_name, message_attributes]
|
146
147
|
elsif @used_namespaces[[tag_name.to_s]]
|
@@ -150,8 +151,25 @@ module Savon
|
|
150
151
|
end
|
151
152
|
end
|
152
153
|
|
154
|
+
def serialized_message_tag
|
155
|
+
[:wsdl, @wsdl.soap_input(@operation_name.to_sym).keys.first, {}]
|
156
|
+
end
|
157
|
+
|
158
|
+
def serialized_messages
|
159
|
+
messages = ""
|
160
|
+
message_tag = serialized_message_tag[1]
|
161
|
+
@wsdl.soap_input(@operation_name.to_sym)[message_tag].each_pair do |message, type|
|
162
|
+
break if @locals[:message].nil?
|
163
|
+
message_locals = @locals[:message][message.snakecase.to_sym]
|
164
|
+
message_content = Message.new(message_tag, namespace_identifier, @types, @used_namespaces, message_locals, :unqualified, @globals[:convert_request_keys_to], @globals[:unwrap]).to_s
|
165
|
+
messages << "<#{message} xsi:type=\"#{type.join(':')}\">#{message_content}</#{message}>"
|
166
|
+
end
|
167
|
+
messages
|
168
|
+
end
|
169
|
+
|
153
170
|
def message_tag
|
154
|
-
message_tag = @
|
171
|
+
message_tag = @wsdl.soap_input(@operation_name.to_sym).keys.first if @wsdl.document? and @wsdl.soap_input(@operation_name.to_sym).is_a?(Hash)
|
172
|
+
message_tag ||= @locals[:message_tag]
|
155
173
|
message_tag ||= @wsdl.soap_input(@operation_name.to_sym) if @wsdl.document?
|
156
174
|
message_tag ||= Gyoku.xml_tag(@operation_name, :key_converter => @globals[:convert_request_keys_to])
|
157
175
|
|
@@ -162,6 +180,14 @@ module Savon
|
|
162
180
|
@locals[:attributes] || {}
|
163
181
|
end
|
164
182
|
|
183
|
+
def body_message
|
184
|
+
if @wsdl.document? and @wsdl.soap_input(@operation_name.to_sym).is_a?(Hash)
|
185
|
+
serialized_messages
|
186
|
+
else
|
187
|
+
message.to_s
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
165
191
|
def message
|
166
192
|
element_form_default = @globals[:element_form_default] || @wsdl.element_form_default
|
167
193
|
# TODO: clean this up! [dh, 2012-12-17]
|
data/lib/savon/client.rb
CHANGED
@@ -21,7 +21,7 @@ module Savon
|
|
21
21
|
build_wsdl_document
|
22
22
|
end
|
23
23
|
|
24
|
-
attr_reader :globals
|
24
|
+
attr_reader :globals, :wsdl
|
25
25
|
|
26
26
|
def operations
|
27
27
|
raise_missing_wsdl_error! unless @wsdl.document?
|
@@ -60,7 +60,6 @@ module Savon
|
|
60
60
|
@wsdl.document = @globals[:wsdl] if @globals.include? :wsdl
|
61
61
|
@wsdl.endpoint = @globals[:endpoint] if @globals.include? :endpoint
|
62
62
|
@wsdl.namespace = @globals[:namespace] if @globals.include? :namespace
|
63
|
-
@wsdl.servicename = @globals[:servicename] if @globals.include? :servicename
|
64
63
|
@wsdl.adapter = @globals[:adapter] if @globals.include? :adapter
|
65
64
|
|
66
65
|
@wsdl.request = WSDLRequest.new(@globals).build
|
data/lib/savon/header.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require "akami"
|
2
2
|
require "gyoku"
|
3
|
-
require "
|
3
|
+
require "securerandom"
|
4
4
|
|
5
5
|
module Savon
|
6
6
|
class Header
|
@@ -61,7 +61,7 @@ module Savon
|
|
61
61
|
convert_to_xml({
|
62
62
|
'wsa:Action' => @locals[:soap_action],
|
63
63
|
'wsa:To' => @globals[:endpoint],
|
64
|
-
'wsa:MessageID' => "urn:uuid:#{
|
64
|
+
'wsa:MessageID' => "urn:uuid:#{SecureRandom.uuid}",
|
65
65
|
attributes!: {
|
66
66
|
'wsa:MessageID' => {
|
67
67
|
"xmlns:wsa" => "http://schemas.xmlsoap.org/ws/2004/08/addressing"
|
data/lib/savon/log_message.rb
CHANGED
@@ -55,7 +55,7 @@ module Savon
|
|
55
55
|
|
56
56
|
def verify_message!
|
57
57
|
return if @expected[:message].eql? :any
|
58
|
-
unless @expected[:message]
|
58
|
+
unless equals_except_any(@expected[:message], @actual[:message])
|
59
59
|
expected_message = " with this message: #{@expected[:message].inspect}" if @expected[:message]
|
60
60
|
expected_message ||= " with no message."
|
61
61
|
|
@@ -63,9 +63,18 @@ module Savon
|
|
63
63
|
actual_message ||= " with no message."
|
64
64
|
|
65
65
|
raise ExpectationError, "Expected a request to the #{@expected[:operation_name].inspect} operation\n#{expected_message}\n" \
|
66
|
-
|
66
|
+
"Received a request to the #{@actual[:operation_name].inspect} operation\n#{actual_message}"
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
70
|
+
def equals_except_any(msg_expected, msg_real)
|
71
|
+
return true if msg_expected === msg_real
|
72
|
+
return false if (msg_expected.nil? || msg_real.nil?) # If both are nil has returned true
|
73
|
+
msg_expected.each do |key, expected_value|
|
74
|
+
next if (expected_value == :any && msg_real.include?(key))
|
75
|
+
return false if expected_value != msg_real[key]
|
76
|
+
end
|
77
|
+
return true
|
78
|
+
end
|
70
79
|
end
|
71
80
|
end
|
data/lib/savon/operation.rb
CHANGED
@@ -100,7 +100,8 @@ module Savon
|
|
100
100
|
|
101
101
|
request = SOAPRequest.new(@globals).build(
|
102
102
|
:soap_action => soap_action,
|
103
|
-
:cookies => @locals[:cookies]
|
103
|
+
:cookies => @locals[:cookies],
|
104
|
+
:headers => @locals[:headers]
|
104
105
|
)
|
105
106
|
|
106
107
|
request.url = endpoint
|
@@ -126,7 +127,13 @@ module Savon
|
|
126
127
|
end
|
127
128
|
|
128
129
|
def endpoint
|
129
|
-
@globals[:endpoint] || @wsdl.endpoint
|
130
|
+
@globals[:endpoint] || @wsdl.endpoint.tap do |url|
|
131
|
+
if @globals[:host]
|
132
|
+
host_url = URI.parse(@globals[:host])
|
133
|
+
url.host = host_url.host
|
134
|
+
url.port = host_url.port
|
135
|
+
end
|
136
|
+
end
|
130
137
|
end
|
131
138
|
|
132
139
|
def raise_expected_httpi_response!
|
data/lib/savon/options.rb
CHANGED
@@ -73,23 +73,25 @@ module Savon
|
|
73
73
|
@option_type = :global
|
74
74
|
|
75
75
|
defaults = {
|
76
|
-
:encoding
|
77
|
-
:soap_version
|
78
|
-
:namespaces
|
79
|
-
:logger
|
80
|
-
:log
|
81
|
-
:filters
|
82
|
-
:pretty_print_xml
|
83
|
-
:raise_errors
|
84
|
-
:strip_namespaces
|
85
|
-
:
|
86
|
-
:
|
87
|
-
:
|
88
|
-
:
|
89
|
-
:
|
90
|
-
:
|
91
|
-
:
|
92
|
-
:
|
76
|
+
:encoding => "UTF-8",
|
77
|
+
:soap_version => 1,
|
78
|
+
:namespaces => {},
|
79
|
+
:logger => Logger.new($stdout),
|
80
|
+
:log => false,
|
81
|
+
:filters => [],
|
82
|
+
:pretty_print_xml => false,
|
83
|
+
:raise_errors => true,
|
84
|
+
:strip_namespaces => true,
|
85
|
+
:delete_namespace_attributes => false,
|
86
|
+
:convert_response_tags_to => lambda { |tag| tag.snakecase.to_sym},
|
87
|
+
:convert_attributes_to => lambda { |k,v| [k,v] },
|
88
|
+
:multipart => false,
|
89
|
+
:adapter => nil,
|
90
|
+
:use_wsa_headers => false,
|
91
|
+
:no_message_tag => false,
|
92
|
+
:follow_redirects => false,
|
93
|
+
:unwrap => false,
|
94
|
+
:host => nil
|
93
95
|
}
|
94
96
|
|
95
97
|
options = defaults.merge(options)
|
@@ -108,6 +110,11 @@ module Savon
|
|
108
110
|
@options[:wsdl] = wsdl_address
|
109
111
|
end
|
110
112
|
|
113
|
+
# set different host for actions in WSDL
|
114
|
+
def host(host)
|
115
|
+
@options[:host] = host
|
116
|
+
end
|
117
|
+
|
111
118
|
# SOAP endpoint.
|
112
119
|
def endpoint(endpoint)
|
113
120
|
@options[:endpoint] = endpoint
|
@@ -282,6 +289,11 @@ module Savon
|
|
282
289
|
@options[:strip_namespaces] = strip_namespaces
|
283
290
|
end
|
284
291
|
|
292
|
+
# Instruct Nori whether to delete namespace attributes from XML nodes.
|
293
|
+
def delete_namespace_attributes(delete_namespace_attributes)
|
294
|
+
@options[:delete_namespace_attributes] = delete_namespace_attributes
|
295
|
+
end
|
296
|
+
|
285
297
|
# Tell Gyoku how to convert Hash key Symbols to XML tags.
|
286
298
|
# Accepts one of :lower_camelcase, :camelcase, :upcase, or :none.
|
287
299
|
def convert_request_keys_to(converter)
|
@@ -400,5 +412,9 @@ module Savon
|
|
400
412
|
def multipart(multipart)
|
401
413
|
@options[:multipart] = multipart
|
402
414
|
end
|
415
|
+
|
416
|
+
def headers(headers)
|
417
|
+
@options[:headers] = headers
|
418
|
+
end
|
403
419
|
end
|
404
420
|
end
|
@@ -2,49 +2,50 @@ require "gyoku"
|
|
2
2
|
|
3
3
|
module Savon
|
4
4
|
class QualifiedMessage
|
5
|
-
|
6
5
|
def initialize(types, used_namespaces, key_converter)
|
7
|
-
@types
|
6
|
+
@types = types
|
8
7
|
@used_namespaces = used_namespaces
|
9
|
-
@key_converter
|
8
|
+
@key_converter = key_converter
|
10
9
|
end
|
11
10
|
|
12
11
|
def to_hash(hash, path)
|
13
|
-
return
|
14
|
-
return hash.map { |value| to_hash(value, path) } if hash.
|
15
|
-
return hash.to_s unless hash.
|
16
|
-
|
17
|
-
hash.
|
18
|
-
|
19
|
-
|
20
|
-
newhash
|
12
|
+
return unless hash
|
13
|
+
return hash.map { |value| to_hash(value, path) } if hash.is_a?(Array)
|
14
|
+
return hash.to_s unless hash.is_a?(Hash)
|
15
|
+
|
16
|
+
hash.each_with_object({}) do |(key, value), newhash|
|
17
|
+
case key
|
18
|
+
when :order!
|
19
|
+
newhash[key] = add_namespaces_to_values(value, path)
|
20
|
+
when :attributes!, :content!
|
21
|
+
newhash[key] = to_hash(value, path)
|
21
22
|
else
|
22
|
-
|
23
|
-
|
24
|
-
newpath = path + [translated_key]
|
25
|
-
|
26
|
-
if @used_namespaces[newpath]
|
27
|
-
newhash.merge(
|
28
|
-
"#{@used_namespaces[newpath]}:#{translated_key}" =>
|
29
|
-
to_hash(value, @types[newpath] ? [@types[newpath]] : newpath)
|
30
|
-
)
|
23
|
+
if key.to_s =~ /!$/
|
24
|
+
newhash[key] = value
|
31
25
|
else
|
32
|
-
|
26
|
+
translated_key = translate_tag(key)
|
27
|
+
newkey = add_namespaces_to_values(key, path).first
|
28
|
+
newpath = path + [translated_key]
|
29
|
+
newhash[newkey] = to_hash(value, newpath)
|
33
30
|
end
|
34
31
|
end
|
32
|
+
newhash
|
35
33
|
end
|
36
34
|
end
|
37
35
|
|
38
36
|
private
|
39
37
|
|
40
|
-
def
|
41
|
-
|
42
|
-
camelcased_value = Gyoku.xml_tag(value, :key_converter => @key_converter)
|
43
|
-
namespace_path = path + [camelcased_value.to_s]
|
44
|
-
namespace = @used_namespaces[namespace_path]
|
45
|
-
"#{namespace.blank? ? '' : namespace + ":"}#{camelcased_value}"
|
46
|
-
}
|
38
|
+
def translate_tag(key)
|
39
|
+
Gyoku.xml_tag(key, :key_converter => @key_converter).to_s
|
47
40
|
end
|
48
41
|
|
42
|
+
def add_namespaces_to_values(values, path)
|
43
|
+
Array(values).collect do |value|
|
44
|
+
translated_value = translate_tag(value)
|
45
|
+
namespace_path = path + [translated_value]
|
46
|
+
namespace = @used_namespaces[namespace_path]
|
47
|
+
namespace.blank? ? value : "#{namespace}:#{translated_value}"
|
48
|
+
end
|
49
|
+
end
|
49
50
|
end
|
50
51
|
end
|
data/lib/savon/request.rb
CHANGED
@@ -72,9 +72,9 @@ module Savon
|
|
72
72
|
|
73
73
|
def build(options = {})
|
74
74
|
configure_proxy
|
75
|
-
configure_cookies options[:cookies]
|
76
75
|
configure_timeouts
|
77
|
-
configure_headers options[:soap_action]
|
76
|
+
configure_headers options[:soap_action], options[:headers]
|
77
|
+
configure_cookies options[:cookies]
|
78
78
|
configure_ssl
|
79
79
|
configure_auth
|
80
80
|
configure_redirect_handling
|
@@ -88,8 +88,9 @@ module Savon
|
|
88
88
|
@http_request.set_cookies(cookies) if cookies
|
89
89
|
end
|
90
90
|
|
91
|
-
def configure_headers(soap_action)
|
91
|
+
def configure_headers(soap_action, headers)
|
92
92
|
@http_request.headers = @globals[:headers] if @globals.include? :headers
|
93
|
+
@http_request.headers.merge!(headers) if headers
|
93
94
|
@http_request.headers["SOAPAction"] ||= %{"#{soap_action}"} if soap_action
|
94
95
|
@http_request.headers["Content-Type"] ||= CONTENT_TYPE[@globals[:soap_version]] % @globals[:encoding]
|
95
96
|
end
|
data/lib/savon/response.rb
CHANGED
@@ -98,11 +98,12 @@ module Savon
|
|
98
98
|
return @nori if @nori
|
99
99
|
|
100
100
|
nori_options = {
|
101
|
-
:
|
102
|
-
:
|
103
|
-
:
|
104
|
-
:
|
105
|
-
:
|
101
|
+
:delete_namespace_attributes => @globals[:delete_namespace_attributes],
|
102
|
+
:strip_namespaces => @globals[:strip_namespaces],
|
103
|
+
:convert_tags_to => @globals[:convert_response_tags_to],
|
104
|
+
:convert_attributes_to => @globals[:convert_attributes_to],
|
105
|
+
:advanced_typecasting => @locals[:advanced_typecasting],
|
106
|
+
:parser => @locals[:response_parser]
|
106
107
|
}
|
107
108
|
|
108
109
|
non_nil_nori_options = nori_options.reject { |_, value| value.nil? }
|
data/lib/savon/soap_fault.rb
CHANGED
data/lib/savon/version.rb
CHANGED
data/savon.gemspec
CHANGED
@@ -22,7 +22,6 @@ Gem::Specification.new do |s|
|
|
22
22
|
s.add_dependency "wasabi", "~> 3.4"
|
23
23
|
s.add_dependency "akami", "~> 1.2"
|
24
24
|
s.add_dependency "gyoku", "~> 1.2"
|
25
|
-
s.add_dependency "uuid", "~> 2.3.7"
|
26
25
|
s.add_dependency "builder", ">= 2.1.2"
|
27
26
|
s.add_dependency "nokogiri", ">= 1.4.0"
|
28
27
|
|