smacks-savon 0.1.2 → 0.1.3
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.
- data/lib/savon/response.rb +76 -44
- data/lib/savon/service.rb +1 -1
- data/lib/savon/wsdl.rb +1 -1
- data/test/fixtures/soap_response_fixture.rb +2 -2
- data/test/helper.rb +1 -1
- data/test/savon/{response_test.rb → test_response.rb} +67 -11
- data/test/savon/{service_test.rb → test_service.rb} +1 -1
- data/test/savon/{wsdl_test.rb → test_wsdl.rb} +1 -1
- data/test/test_savon.rb +4 -0
- metadata +6 -6
- data/test/savon_test.rb +0 -4
data/lib/savon/response.rb
CHANGED
@@ -4,9 +4,73 @@ require "apricoteatsgorilla"
|
|
4
4
|
|
5
5
|
module Savon
|
6
6
|
|
7
|
-
# Savon::
|
7
|
+
# Savon::HTTPResponse containes methods exclusive to a Net::HTTPResponse
|
8
|
+
# to be included in Savon::Response.
|
9
|
+
module HTTPResponse
|
10
|
+
|
11
|
+
# Returns the error code.
|
12
|
+
attr_reader :error_code
|
13
|
+
|
14
|
+
# Returns the error message.
|
15
|
+
attr_reader :error_message
|
16
|
+
|
17
|
+
# Returns +true+ in case the request was successful, +false+ otherwise
|
18
|
+
# or +nil+ in case there was no request at all.
|
19
|
+
def success?
|
20
|
+
return nil unless @response
|
21
|
+
@error_code.nil?
|
22
|
+
end
|
23
|
+
|
24
|
+
# Returns +false+ in case the request was not successful, +true+ otherwise
|
25
|
+
# or +nil+ in case there was no request at all.
|
26
|
+
def error?
|
27
|
+
return nil unless @response
|
28
|
+
!@error_code.nil?
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
# Validates the response against HTTP errors and SOAP faults and sets the
|
34
|
+
# +error_code+ and +error_message+ in case the request was not successful.
|
35
|
+
def validate_response
|
36
|
+
if @response.code.to_i >= 300
|
37
|
+
@error_message = @response.message
|
38
|
+
@error_code = @response.code
|
39
|
+
else
|
40
|
+
soap_fault = ApricotEatsGorilla[@response.body, "//soap:Fault"]
|
41
|
+
unless soap_fault.nil? || soap_fault.empty?
|
42
|
+
@error_message = soap_fault[:faultstring]
|
43
|
+
@error_code = soap_fault[:faultcode]
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# Translates the response body into a Hash. Takes an optional +root_node+
|
49
|
+
# argument to start parsing the response body at a custom root node.
|
50
|
+
def response_to_hash(root_node = nil)
|
51
|
+
ApricotEatsGorilla[@response.body, root_node]
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
# Savon::Response represents the HTTP/SOAP response.
|
8
57
|
class Response
|
9
58
|
|
59
|
+
include Savon::HTTPResponse
|
60
|
+
|
61
|
+
# The default root node to start parsing the SOAP response at.
|
62
|
+
@@default_root_node = "//return"
|
63
|
+
|
64
|
+
# Returns the default root node.
|
65
|
+
def self.default_root_node
|
66
|
+
@@default_root_node
|
67
|
+
end
|
68
|
+
|
69
|
+
# Sets the default root node.
|
70
|
+
def self.default_root_node=(root_node)
|
71
|
+
@@default_root_node = root_node if root_node.kind_of? String
|
72
|
+
end
|
73
|
+
|
10
74
|
# The core (inherited) methods to shadow.
|
11
75
|
@@core_methods_to_shadow = [:id]
|
12
76
|
|
@@ -20,12 +84,6 @@ module Savon
|
|
20
84
|
@@core_methods_to_shadow = methods if methods.kind_of? Array
|
21
85
|
end
|
22
86
|
|
23
|
-
# Returns the error code.
|
24
|
-
attr_reader :error_code
|
25
|
-
|
26
|
-
# Returns the error message.
|
27
|
-
attr_reader :error_message
|
28
|
-
|
29
87
|
# Initializer expects the +source+ to initialize from. Sets up the instance
|
30
88
|
# from a given Net::HTTPResponse or a Hash depending on the given +source+.
|
31
89
|
# May be called with a custom +root_node+ to start parsing the response at
|
@@ -43,23 +101,11 @@ module Savon
|
|
43
101
|
value_from_hash(key)
|
44
102
|
end
|
45
103
|
|
46
|
-
# Returns
|
47
|
-
#
|
48
|
-
def
|
49
|
-
return
|
50
|
-
|
51
|
-
end
|
52
|
-
|
53
|
-
# Returns +false+ in case the request was not successful, +false+ otherwise
|
54
|
-
# or +nil+ in case there's no request at all.
|
55
|
-
def error?
|
56
|
-
return nil unless @response
|
57
|
-
!@error_code.nil?
|
58
|
-
end
|
59
|
-
|
60
|
-
# Returns the response Hash.
|
61
|
-
def to_hash
|
62
|
-
@hash
|
104
|
+
# Returns the response Hash. Takes an optional +root_node+ to start parsing
|
105
|
+
# the SOAP response at instead of the +@@default_root_node+.
|
106
|
+
def to_hash(root_node = nil)
|
107
|
+
return @hash if root_node.nil?
|
108
|
+
response_to_hash(root_node)
|
63
109
|
end
|
64
110
|
|
65
111
|
# Returns the response body in case there is any, +nil+ otherwise.
|
@@ -73,9 +119,9 @@ module Savon
|
|
73
119
|
# Returns a new Savon::Response instance containing the value or returns
|
74
120
|
# the actual value in case it is not a Hash.
|
75
121
|
def method_missing(method, *args)
|
76
|
-
value = value_from_hash
|
122
|
+
value = value_from_hash(method)
|
77
123
|
return value unless value.kind_of? Hash
|
78
|
-
Savon::Response.new
|
124
|
+
Savon::Response.new(value)
|
79
125
|
end
|
80
126
|
|
81
127
|
private
|
@@ -90,8 +136,8 @@ module Savon
|
|
90
136
|
validate_response
|
91
137
|
|
92
138
|
if success?
|
93
|
-
root_node ||=
|
94
|
-
hash =
|
139
|
+
root_node ||= @@default_root_node
|
140
|
+
hash = response_to_hash(root_node)
|
95
141
|
initialize_from_hash hash
|
96
142
|
end
|
97
143
|
end
|
@@ -102,21 +148,6 @@ module Savon
|
|
102
148
|
shadow_core_methods
|
103
149
|
end
|
104
150
|
|
105
|
-
# Validates the response against HTTP errors and SOAP faults and sets the
|
106
|
-
# +error_code+ and +error_message+ in case the request was not successful.
|
107
|
-
def validate_response
|
108
|
-
if @response.code.to_i >= 300
|
109
|
-
@error_message = @response.message
|
110
|
-
@error_code = @response.code
|
111
|
-
else
|
112
|
-
soap_fault = ApricotEatsGorilla[@response.body, "//soap:Fault"]
|
113
|
-
unless soap_fault.nil?
|
114
|
-
@error_message = soap_fault[:faultstring]
|
115
|
-
@error_code = soap_fault[:faultcode]
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
151
|
# Dynamically defines methods from the Array of +@@core_methods_to_shadow+
|
121
152
|
# to "shadow" inherited methods. Returns a value from the response Hash in
|
122
153
|
# case a matching public method and a key from the Hash could be found.
|
@@ -131,8 +162,9 @@ module Savon
|
|
131
162
|
# Returns a value from the response Hash. Tries to convert the given +key+
|
132
163
|
# into a Symbol or a String to find the value to return.
|
133
164
|
def value_from_hash(key)
|
165
|
+
return nil unless @hash
|
134
166
|
@hash[key.to_sym] || @hash[key.to_s]
|
135
167
|
end
|
136
|
-
|
137
168
|
end
|
169
|
+
|
138
170
|
end
|
data/lib/savon/service.rb
CHANGED
@@ -5,7 +5,7 @@ require "apricoteatsgorilla"
|
|
5
5
|
|
6
6
|
module Savon
|
7
7
|
|
8
|
-
# Ruby SOAP client library to enjoy.
|
8
|
+
# Savon - Ruby SOAP client library to enjoy.
|
9
9
|
#
|
10
10
|
# Communicating with a SOAP webservice can be done in two lines of code.
|
11
11
|
# Instantiate a new Savon::Service passing in the URI to the WSDL of the
|
data/lib/savon/wsdl.rb
CHANGED
@@ -36,13 +36,13 @@ module SoapResponseFixture
|
|
36
36
|
'<soap:Body>' <<
|
37
37
|
'<soap:Fault>' <<
|
38
38
|
'<faultcode>' << soap_fault_code << '</faultcode>' <<
|
39
|
-
'<faultstring>' <<
|
39
|
+
'<faultstring>' << soap_fault_message << '</faultstring>' <<
|
40
40
|
'</soap:Fault>' <<
|
41
41
|
'</soap:Body>' <<
|
42
42
|
'</soap:Envelope>'
|
43
43
|
end
|
44
44
|
|
45
|
-
def
|
45
|
+
def soap_fault_message
|
46
46
|
"Failed to authenticate client."
|
47
47
|
end
|
48
48
|
|
data/test/helper.rb
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), "..", "helper")
|
2
2
|
|
3
|
-
class
|
3
|
+
class TestSavonResponse < Test::Unit::TestCase
|
4
4
|
|
5
5
|
include TestHelper
|
6
6
|
include SoapResponseFixture
|
7
7
|
|
8
8
|
context "A Savon::Response instance" do
|
9
|
+
setup do
|
10
|
+
ApricotEatsGorilla.sort_keys = true
|
11
|
+
Savon::Response.core_methods_to_shadow = [:id] # set to default
|
12
|
+
end
|
9
13
|
|
10
14
|
context "initialized with a Net::HTTPResponse containing a successful SOAP response" do
|
11
|
-
setup
|
12
|
-
ApricotEatsGorilla.sort_keys = true
|
13
|
-
Savon::Response.core_methods_to_shadow = [:id] # set to default
|
14
|
-
@response = Savon::Response.new response_mock(some_soap_response)
|
15
|
-
end
|
15
|
+
setup { @response = Savon::Response.new response_mock(some_soap_response) }
|
16
16
|
|
17
17
|
should "return that the request was successful" do
|
18
18
|
assert_equal true, @response.success?
|
@@ -74,11 +74,7 @@ class SavonResponseTest < Test::Unit::TestCase
|
|
74
74
|
end
|
75
75
|
|
76
76
|
context "initialized with a Hash" do
|
77
|
-
setup
|
78
|
-
ApricotEatsGorilla.sort_keys = true
|
79
|
-
Savon::Response.core_methods_to_shadow = [:id] # set to default
|
80
|
-
@response = Savon::Response.new some_response_hash
|
81
|
-
end
|
77
|
+
setup { @response = Savon::Response.new some_response_hash }
|
82
78
|
|
83
79
|
should "return nil for HTTP::Response-specific methods" do
|
84
80
|
assert_nil @response.success?
|
@@ -130,6 +126,66 @@ class SavonResponseTest < Test::Unit::TestCase
|
|
130
126
|
end
|
131
127
|
end
|
132
128
|
|
129
|
+
context "initialized with a Net::HTTPResponse containing a SOAP fault" do
|
130
|
+
setup { @response = Savon::Response.new response_mock(soap_fault_response) }
|
131
|
+
|
132
|
+
should "return that the request was not successful" do
|
133
|
+
assert_equal false, @response.success?
|
134
|
+
assert_equal true, @response.error?
|
135
|
+
end
|
136
|
+
|
137
|
+
should "return the error_code and error_message" do
|
138
|
+
assert_equal soap_fault_code, @response.error_code
|
139
|
+
assert_equal soap_fault_message, @response.error_message
|
140
|
+
end
|
141
|
+
|
142
|
+
should "return the SOAP response XML when calling to_s" do
|
143
|
+
assert_equal soap_fault_response, @response.to_s
|
144
|
+
end
|
145
|
+
|
146
|
+
should "return nil when calling to_hash" do
|
147
|
+
assert_nil @response.to_hash
|
148
|
+
end
|
149
|
+
|
150
|
+
should "return nil when trying to access Hash values through []" do
|
151
|
+
assert_nil @response[:some_key]
|
152
|
+
end
|
153
|
+
|
154
|
+
should "return nil when trying to access Hash values through method_missing" do
|
155
|
+
assert_nil @response.some_key
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
context "initialized with a Net::HTTPResponse error" do
|
160
|
+
setup { @response = Savon::Response.new response_error_mock }
|
161
|
+
|
162
|
+
should "return that the request was not successful" do
|
163
|
+
assert_equal false, @response.success?
|
164
|
+
assert_equal true, @response.error?
|
165
|
+
end
|
166
|
+
|
167
|
+
should "return the error_code and error_message" do
|
168
|
+
assert_equal "404", @response.error_code
|
169
|
+
assert_equal "NotFound", @response.error_message
|
170
|
+
end
|
171
|
+
|
172
|
+
should "return nil when calling to_s" do
|
173
|
+
assert_nil @response.to_s
|
174
|
+
end
|
175
|
+
|
176
|
+
should "return nil when calling to_hash" do
|
177
|
+
assert_nil @response.to_hash
|
178
|
+
end
|
179
|
+
|
180
|
+
should "return nil when trying to access Hash values through []" do
|
181
|
+
assert_nil @response[:some_key]
|
182
|
+
end
|
183
|
+
|
184
|
+
should "return nil when trying to access Hash values through method_missing" do
|
185
|
+
assert_nil @response.some_key
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
133
189
|
end
|
134
190
|
|
135
191
|
end
|
data/test/test_savon.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smacks-savon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Harrington
|
@@ -30,7 +30,7 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.4.
|
33
|
+
version: 0.4.5
|
34
34
|
version:
|
35
35
|
description: Ruby SOAP client library to enjoy.
|
36
36
|
email:
|
@@ -74,10 +74,10 @@ signing_key:
|
|
74
74
|
specification_version: 2
|
75
75
|
summary: Ruby SOAP client library to enjoy.
|
76
76
|
test_files:
|
77
|
-
- test/
|
77
|
+
- test/test_savon.rb
|
78
78
|
- test/helper.rb
|
79
79
|
- test/factories/wsdl.rb
|
80
80
|
- test/fixtures/soap_response_fixture.rb
|
81
|
-
- test/savon/
|
82
|
-
- test/savon/
|
83
|
-
- test/savon/
|
81
|
+
- test/savon/test_service.rb
|
82
|
+
- test/savon/test_response.rb
|
83
|
+
- test/savon/test_wsdl.rb
|
data/test/savon_test.rb
DELETED