savon 2.7.2 → 2.8.0
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/CHANGELOG.md +7 -0
- data/lib/savon/client.rb +4 -0
- data/lib/savon/operation.rb +5 -0
- data/lib/savon/options.rb +1 -0
- data/lib/savon/response.rb +2 -2
- data/lib/savon/soap_fault.rb +9 -7
- data/lib/savon/version.rb +1 -1
- data/savon.gemspec +5 -5
- data/spec/savon/client_spec.rb +73 -0
- data/spec/savon/operation_spec.rb +9 -0
- data/spec/savon/options_spec.rb +11 -0
- metadata +12 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7adbc53fe80bb807f76d542112ff55db6da480e9
|
4
|
+
data.tar.gz: 0536349c41007db20291ca8e7dad28c125666066
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 741e08c1b5fba53b3588c52e454e50bfb14eb73c6ed463fc994468e62e77720dc574fabd2506fc51f4cb1f192fd7774bc63574467579e562eba4e8a4f95eb712
|
7
|
+
data.tar.gz: b4c4144f0714a3f49bfcae8e304d7031bc46d396b0ee45334a84a73ebb06dcbf5036468bf784c95eb6090456ecf933e89c71c29c8a3556b3732ec9200ef7214f
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
# 2.8.0 (2014-11-12)
|
2
|
+
|
3
|
+
* Feature : [#620](https://github.com/savonrb/savon/pull/620) add #build_request method that builds the actual XML request body, but does not submit it. Useful for debugging, possibly.
|
4
|
+
* Fix : Loosened dependencies on Gyoku, Nori, Akami, and other Savon-dependency gems
|
5
|
+
* Feature: [#636](https://github.com/savonrb/savon/pull/636) Set HTTPI.logger when Savon's logger is configured.
|
6
|
+
* Feature: [#639](https://github.com/savonrb/savon/issues/639) Allow setting any SSL version that OpenSSL provides. See [the relevant HTTPI issue](https://github.com/savonrb/httpi/pull/136) for more information.
|
7
|
+
|
1
8
|
# 2.7.2 (2014-09-23)
|
2
9
|
|
3
10
|
Fix : Preserve false values (https://github.com/savonrb/savon/issues/321)
|
data/lib/savon/client.rb
CHANGED
data/lib/savon/operation.rb
CHANGED
data/lib/savon/options.rb
CHANGED
data/lib/savon/response.rb
CHANGED
@@ -22,7 +22,7 @@ module Savon
|
|
22
22
|
alias_method :successful?, :success?
|
23
23
|
|
24
24
|
def soap_fault?
|
25
|
-
SOAPFault.present?
|
25
|
+
SOAPFault.present?(@http, xml)
|
26
26
|
end
|
27
27
|
|
28
28
|
def http_error?
|
@@ -77,7 +77,7 @@ module Savon
|
|
77
77
|
private
|
78
78
|
|
79
79
|
def build_soap_and_http_errors!
|
80
|
-
@soap_fault = SOAPFault.new(@http, nori) if soap_fault?
|
80
|
+
@soap_fault = SOAPFault.new(@http, nori, xml) if soap_fault?
|
81
81
|
@http_error = HTTPError.new(@http) if http_error?
|
82
82
|
end
|
83
83
|
|
data/lib/savon/soap_fault.rb
CHANGED
@@ -3,20 +3,22 @@ require "savon"
|
|
3
3
|
module Savon
|
4
4
|
class SOAPFault < Error
|
5
5
|
|
6
|
-
def self.present?(http)
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
def self.present?(http, xml = nil)
|
7
|
+
xml ||= http.body
|
8
|
+
fault_node = xml.include?("Fault>")
|
9
|
+
soap1_fault = xml.include?("faultcode>") && xml.include?("faultstring>")
|
10
|
+
soap2_fault = xml.include?("Code>") && xml.include?("Reason>")
|
10
11
|
|
11
12
|
fault_node && (soap1_fault || soap2_fault)
|
12
13
|
end
|
13
14
|
|
14
|
-
def initialize(http, nori)
|
15
|
+
def initialize(http, nori, xml = nil)
|
16
|
+
@xml = xml
|
15
17
|
@http = http
|
16
18
|
@nori = nori
|
17
19
|
end
|
18
20
|
|
19
|
-
attr_reader :http, :nori
|
21
|
+
attr_reader :http, :nori, :xml
|
20
22
|
|
21
23
|
def to_s
|
22
24
|
fault = nori.find(to_hash, 'Fault')
|
@@ -24,7 +26,7 @@ module Savon
|
|
24
26
|
end
|
25
27
|
|
26
28
|
def to_hash
|
27
|
-
parsed = nori.parse(
|
29
|
+
parsed = nori.parse(xml || http.body)
|
28
30
|
nori.find(parsed, 'Envelope', 'Body')
|
29
31
|
end
|
30
32
|
|
data/lib/savon/version.rb
CHANGED
data/savon.gemspec
CHANGED
@@ -16,11 +16,11 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.rubyforge_project = s.name
|
17
17
|
s.license = 'MIT'
|
18
18
|
|
19
|
-
s.add_dependency "nori", "~> 2.4
|
20
|
-
s.add_dependency "httpi", "~> 2.
|
21
|
-
s.add_dependency "wasabi", "
|
22
|
-
s.add_dependency "akami", "~> 1.2
|
23
|
-
s.add_dependency "gyoku", "~> 1.
|
19
|
+
s.add_dependency "nori", "~> 2.4"
|
20
|
+
s.add_dependency "httpi", "~> 2.3"
|
21
|
+
s.add_dependency "wasabi", "3.3.0"
|
22
|
+
s.add_dependency "akami", "~> 1.2"
|
23
|
+
s.add_dependency "gyoku", "~> 1.2"
|
24
24
|
s.add_dependency "uuid", "~> 2.3.7"
|
25
25
|
|
26
26
|
s.add_dependency "builder", ">= 2.1.2"
|
data/spec/savon/client_spec.rb
CHANGED
@@ -170,6 +170,79 @@ describe Savon::Client do
|
|
170
170
|
end
|
171
171
|
end
|
172
172
|
|
173
|
+
describe "#build_request" do
|
174
|
+
it "returns the request without making an actual call" do
|
175
|
+
expected_request = mock('request')
|
176
|
+
wsdl = Wasabi::Document.new('http://example.com')
|
177
|
+
|
178
|
+
operation = Savon::Operation.new(
|
179
|
+
:authenticate,
|
180
|
+
wsdl,
|
181
|
+
Savon::GlobalOptions.new
|
182
|
+
)
|
183
|
+
operation.expects(:request).returns(expected_request)
|
184
|
+
|
185
|
+
Savon::Operation.expects(:create).with(
|
186
|
+
:authenticate,
|
187
|
+
instance_of(Wasabi::Document),
|
188
|
+
instance_of(Savon::GlobalOptions)
|
189
|
+
).returns(operation)
|
190
|
+
|
191
|
+
operation.expects(:call).never
|
192
|
+
|
193
|
+
client = new_client(:endpoint => @server.url(:repeat))
|
194
|
+
request = client.build_request(:authenticate) do
|
195
|
+
message(:symbol => "AAPL" )
|
196
|
+
end
|
197
|
+
|
198
|
+
expect(request).to eq expected_request
|
199
|
+
end
|
200
|
+
|
201
|
+
it "accepts a block without arguments" do
|
202
|
+
client = new_client(:endpoint => @server.url(:repeat))
|
203
|
+
request = client.build_request(:authenticate) do
|
204
|
+
message(:symbol => "AAPL" )
|
205
|
+
end
|
206
|
+
|
207
|
+
expect(request.body).
|
208
|
+
to include('<tns:authenticate><symbol>AAPL</symbol></tns:authenticate>')
|
209
|
+
end
|
210
|
+
|
211
|
+
it "accepts a block with one argument" do
|
212
|
+
client = new_client(:endpoint => @server.url(:repeat))
|
213
|
+
|
214
|
+
# supports instance variables!
|
215
|
+
@instance_variable = { :symbol => "AAPL" }
|
216
|
+
|
217
|
+
request = client.build_request(:authenticate) do |locals|
|
218
|
+
locals.message(@instance_variable)
|
219
|
+
end
|
220
|
+
|
221
|
+
expect(request.body).
|
222
|
+
to include("<tns:authenticate><symbol>AAPL</symbol></tns:authenticate>")
|
223
|
+
end
|
224
|
+
|
225
|
+
it "accepts argument for the message tag" do
|
226
|
+
client = new_client(:endpoint => @server.url(:repeat))
|
227
|
+
request = client.build_request(:authenticate, :attributes => { "ID" => "ABC321" })
|
228
|
+
|
229
|
+
expect(request.body).
|
230
|
+
to include("<tns:authenticate ID=\"ABC321\"></tns:authenticate>")
|
231
|
+
end
|
232
|
+
|
233
|
+
it "raises when the operation name is not a symbol" do
|
234
|
+
expect { new_client.build_request("not a symbol") }.to raise_error
|
235
|
+
end
|
236
|
+
|
237
|
+
it "raises when given an unknown option via the Hash syntax" do
|
238
|
+
expect { new_client.build_request(:authenticate, :invalid_local_option => true) }.to raise_error
|
239
|
+
end
|
240
|
+
|
241
|
+
it "raises when given an unknown option via the block syntax" do
|
242
|
+
expect { new_client.build_request(:authenticate) { another_invalid_local_option true } }.to raise_error
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
173
246
|
def new_http_response(options = {})
|
174
247
|
defaults = { :code => 200, :headers => {}, :body => Fixture.response(:authentication) }
|
175
248
|
response = defaults.merge options
|
@@ -192,6 +192,15 @@ describe Savon::Operation do
|
|
192
192
|
end
|
193
193
|
end
|
194
194
|
|
195
|
+
describe "#request" do
|
196
|
+
it "returns the request" do
|
197
|
+
operation = new_operation(:verify_address, wsdl, globals)
|
198
|
+
request = operation.request
|
199
|
+
|
200
|
+
expect(request.body).to include('<tns:VerifyAddress></tns:VerifyAddress>')
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
195
204
|
def with_multipart_mocked
|
196
205
|
multipart_response = Class.new { def initialize(*args); end }
|
197
206
|
multipart_mock = Module.new
|
data/spec/savon/options_spec.rb
CHANGED
@@ -325,6 +325,15 @@ describe "Options" do
|
|
325
325
|
|
326
326
|
expect(logger).to eq(custom_logger)
|
327
327
|
end
|
328
|
+
|
329
|
+
it "sets the logger of HTTPI as well" do
|
330
|
+
custom_logger = Logger.new($stdout)
|
331
|
+
|
332
|
+
client = new_client(:logger => custom_logger, :log => true)
|
333
|
+
|
334
|
+
expect(HTTPI.logger).to be custom_logger
|
335
|
+
end
|
336
|
+
|
328
337
|
end
|
329
338
|
|
330
339
|
context "global :log_level" do
|
@@ -502,6 +511,7 @@ describe "Options" do
|
|
502
511
|
|
503
512
|
# filter out logs we're not interested in
|
504
513
|
client.globals[:logger].expects(:info).at_least_once
|
514
|
+
client.globals[:logger].expects(:debug).at_least_once
|
505
515
|
|
506
516
|
# check whether the password is filtered
|
507
517
|
client.globals[:logger].expects(:debug).with { |message|
|
@@ -521,6 +531,7 @@ describe "Options" do
|
|
521
531
|
|
522
532
|
# filter out logs we're not interested in
|
523
533
|
client.globals[:logger].expects(:info).at_least_once
|
534
|
+
client.globals[:logger].expects(:debug).at_least_once
|
524
535
|
|
525
536
|
# check whether the message is pretty printed
|
526
537
|
client.globals[:logger].expects(:debug).with { |message|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: savon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Harrington
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-11-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nori
|
@@ -16,40 +16,40 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 2.4
|
19
|
+
version: '2.4'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 2.4
|
26
|
+
version: '2.4'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: httpi
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 2.
|
33
|
+
version: '2.3'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 2.
|
40
|
+
version: '2.3'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: wasabi
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - '='
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: 3.3.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - '='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 3.3.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
@@ -58,28 +58,28 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 1.2
|
61
|
+
version: '1.2'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 1.2
|
68
|
+
version: '1.2'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: gyoku
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 1.
|
75
|
+
version: '1.2'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 1.
|
82
|
+
version: '1.2'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: uuid
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|