savon 0.5.1 → 0.5.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.
- data/README.textile +11 -11
- data/VERSION +1 -1
- data/lib/savon/core_ext/string.rb +1 -0
- data/spec/fixtures/user_fixture.rb +1 -1
- data/spec/fixtures/user_wsdl.xml +18 -0
- data/spec/savon/client_spec.rb +40 -6
- data/spec/savon/core_ext/string_spec.rb +4 -0
- data/spec/savon/wsdl_spec.rb +1 -1
- metadata +2 -2
data/README.textile
CHANGED
@@ -1,25 +1,25 @@
|
|
1
|
-
|
1
|
+
h2. Savon
|
2
2
|
|
3
3
|
p. Savon can be installed as a gem via:
|
4
4
|
|
5
5
|
bc. $ gem install savon
|
6
6
|
|
7
|
-
|
7
|
+
h4. Dependencies
|
8
8
|
|
9
9
|
bc. builder >= 2.1.2
|
10
10
|
crack >= 0.1.4
|
11
11
|
|
12
12
|
h2. Warning
|
13
13
|
|
14
|
-
p. To use
|
14
|
+
p. To use this heavy metal library, you should be familiar with SOAP, WSDL and tools like soapUI.
|
15
15
|
|
16
|
-
h2.
|
16
|
+
h2. Instantiate Savon::Client
|
17
17
|
|
18
18
|
p. Instantiate a new instance of Savon::Client, passing in the WSDL of your service.
|
19
19
|
|
20
20
|
bc. proxy = Savon::Client.new "http://example.com/UserService?wsdl"
|
21
21
|
|
22
|
-
|
22
|
+
h2. The WSDL
|
23
23
|
|
24
24
|
p. You can find out about the SOAP actions available on the webservice by using the WSDL object.
|
25
25
|
|
@@ -28,7 +28,7 @@ bc. proxy.wsdl.soap_actions
|
|
28
28
|
|
29
29
|
p. Find out more about the "WSDL":http://wiki.github.com/rubiii/savon/wsdl object.
|
30
30
|
|
31
|
-
|
31
|
+
h2. Calling a SOAP action
|
32
32
|
|
33
33
|
p. Now, assuming your service applies to the default "Options":http://wiki.github.com/rubiii/savon/options, you can just call any available SOAP action.
|
34
34
|
|
@@ -36,7 +36,7 @@ bc. response = proxy.get_all_users
|
|
36
36
|
|
37
37
|
p. Savon lets you call SOAP actions using snake_case, because even though they will propably be written in lowerCamelCase or CamelCase, it just feels much more natural.
|
38
38
|
|
39
|
-
|
39
|
+
h2. Parameters
|
40
40
|
|
41
41
|
p. Specifying parameters for the SOAP service, can be done by simply passing a Hash to the SOAP action.
|
42
42
|
|
@@ -44,18 +44,18 @@ bc. response = proxy.get_user_by_id :id => 666
|
|
44
44
|
|
45
45
|
p. Learn more about [[Parameters]].
|
46
46
|
|
47
|
-
|
47
|
+
h2. The response
|
48
48
|
|
49
49
|
p. By default, the SOAP response is translated into a Hash. Take a look at the "Options":http://wiki.github.com/rubiii/savon/options for more information.
|
50
50
|
|
51
51
|
bc. proxy.get_user_by_id :id => 666
|
52
52
|
=> { :user_response => { :id => "666", :username => "gorilla" } }
|
53
53
|
|
54
|
-
|
54
|
+
h2. HTTP errors and SOAP faults
|
55
55
|
|
56
56
|
p. Savon raises a Savon::SOAPFault in case of a SOAP fault and a Savon::HTTPError in case of an HTTP error. More information about "Errors":http://wiki.github.com/rubiii/savon/errors.
|
57
57
|
|
58
|
-
|
58
|
+
h2. Logging
|
59
59
|
|
60
60
|
p. By default Savon logs each request and response to STDOUT. Specifying your own logger is as easy as it gets:
|
61
61
|
|
@@ -63,6 +63,6 @@ bc. Savon::Request.logger = RAILS_DEFAULT_LOGGER
|
|
63
63
|
|
64
64
|
Read more about "Logging":http://wiki.github.com/rubiii/savon/logging.
|
65
65
|
|
66
|
-
|
66
|
+
h2. RDoc and Wiki
|
67
67
|
|
68
68
|
p. Further information: "Wiki":http://wiki.github.com/rubiii/savon and "RDoc":http://rdoc.info/projects/rubiii/savon
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.2
|
@@ -1,7 +1,7 @@
|
|
1
1
|
class UserFixture
|
2
2
|
|
3
3
|
@namespace_uri = "http://v1_0.ws.user.example.com"
|
4
|
-
@soap_actions = { :find_user => "findUser" }
|
4
|
+
@soap_actions = { :user_find_by_id => "User.FindById", :find_user => "findUser" }
|
5
5
|
|
6
6
|
@datetime_string = "2010-11-22T11:22:33"
|
7
7
|
@datetime_object = DateTime.parse @datetime_string
|
data/spec/fixtures/user_wsdl.xml
CHANGED
@@ -15,11 +15,13 @@
|
|
15
15
|
xmlns:tns="http://v1_0.ws.user.example.com"
|
16
16
|
xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
17
17
|
<xs:element name="findUser" type="tns:findUser" />
|
18
|
+
<xs:element name="User.FindById" type="tns:findUser" />
|
18
19
|
<xs:element name="findUserRequest" type="tns:findUserRequest" />
|
19
20
|
<xs:element name="baseFindUserRequest" type="tns:baseFindUserRequest" />
|
20
21
|
<xs:element name="idCredential" type="tns:idCredential" />
|
21
22
|
<xs:element name="emailCredential" type="tns:emailCredential" />
|
22
23
|
<xs:element name="findUserResponse" type="tns:findUserResponse" />
|
24
|
+
<xs:element name="User.FindByIdResponse" type="tns:findUserResponse" />
|
23
25
|
<xs:element name="userResponse" type="tns:userResponse" />
|
24
26
|
|
25
27
|
<xs:complexType name="findUser">
|
@@ -78,6 +80,13 @@
|
|
78
80
|
<wsdl:part element="tns:findUserResponse" name="parameters"></wsdl:part>
|
79
81
|
</wsdl:message>
|
80
82
|
|
83
|
+
<wsdl:message name="User.FindById">
|
84
|
+
<wsdl:part element="tns:findUser" name="parameters"></wsdl:part>
|
85
|
+
</wsdl:message>
|
86
|
+
<wsdl:message name="User.FindByIdResponse">
|
87
|
+
<wsdl:part element="tns:findUserResponse" name="parameters"></wsdl:part>
|
88
|
+
</wsdl:message>
|
89
|
+
|
81
90
|
<wsdl:portType name="UserWebService">
|
82
91
|
<wsdl:operation name="findUser">
|
83
92
|
<wsdl:input message="tns:findUser" name="findUser"></wsdl:input>
|
@@ -95,6 +104,15 @@
|
|
95
104
|
<wsdl:output name="findUserResponse">
|
96
105
|
<soap:body use="literal" />
|
97
106
|
</wsdl:output>
|
107
|
+
</wsdl:operation>
|
108
|
+
<wsdl:operation name="User.FindById">
|
109
|
+
<soap:operation soapAction="" style="document" />
|
110
|
+
<wsdl:input name="User.FindById">
|
111
|
+
<soap:body use="literal" />
|
112
|
+
</wsdl:input>
|
113
|
+
<wsdl:output name="User.FindByIdResponse">
|
114
|
+
<soap:body use="literal" />
|
115
|
+
</wsdl:output>
|
98
116
|
</wsdl:operation>
|
99
117
|
</wsdl:binding>
|
100
118
|
|
data/spec/savon/client_spec.rb
CHANGED
@@ -28,6 +28,42 @@ describe Savon::Client do
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
+
describe "@error_handling" do
|
32
|
+
before { @error_handling = Savon::Client.error_handling }
|
33
|
+
|
34
|
+
it "raises a Savon::SOAPFault in case it finds a SOAP fault" do
|
35
|
+
body = { "soapenv:Fault" => {
|
36
|
+
"faultcode" => "soap:Server",
|
37
|
+
"faultstring" => "Fault occurred while processing."
|
38
|
+
} }
|
39
|
+
|
40
|
+
lambda { @error_handling.call(http_response_mock, body) }.
|
41
|
+
should raise_error Savon::SOAPFault
|
42
|
+
end
|
43
|
+
|
44
|
+
it "raises a Savon::SOAPFault in case it finds both HTTPError and SOAP fault" do
|
45
|
+
body = { "soapenv:Fault" => {
|
46
|
+
"faultcode" => "soap:Server",
|
47
|
+
"faultstring" => "Fault occurred while processing."
|
48
|
+
} }
|
49
|
+
|
50
|
+
lambda { @error_handling.call(http_response_mock(500), body) }.
|
51
|
+
should raise_error Savon::SOAPFault
|
52
|
+
end
|
53
|
+
|
54
|
+
it "raises a Savon::HTTPError in case it finds an HTTP error" do
|
55
|
+
body = { "someResponse" => "whatever" }
|
56
|
+
|
57
|
+
lambda { @error_handling.call(http_response_mock(404), body) }.
|
58
|
+
should raise_error Savon::HTTPError
|
59
|
+
end
|
60
|
+
|
61
|
+
it "passes without raising anything otherwise" do
|
62
|
+
body = { "someResponse" => "whatever" }
|
63
|
+
@error_handling.call(http_response_mock, body).should be_nil
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
31
67
|
describe "initialize" do
|
32
68
|
it "expects a SOAP endpoint String" do
|
33
69
|
new_client_instance
|
@@ -132,13 +168,11 @@ describe Savon::Client do
|
|
132
168
|
end
|
133
169
|
end
|
134
170
|
|
135
|
-
def http_response_mock
|
136
|
-
|
137
|
-
|
138
|
-
@http_response_mock.stubs :code => "200", :message => "OK",
|
171
|
+
def http_response_mock(code = 200)
|
172
|
+
http_response_mock = mock "Net::HTTPResponse"
|
173
|
+
http_response_mock.stubs :code => code.to_s, :message => "OK",
|
139
174
|
:content_type => "text/html", :body => UserFixture.user_response
|
140
|
-
|
141
|
-
@http_response_mock
|
175
|
+
http_response_mock
|
142
176
|
end
|
143
177
|
|
144
178
|
end
|
@@ -6,6 +6,10 @@ describe String do
|
|
6
6
|
it "converts a lowerCamelCase String to snakecase" do
|
7
7
|
"lowerCamelCase".snakecase.should == "lower_camel_case"
|
8
8
|
end
|
9
|
+
|
10
|
+
it "converts period characters to underscores" do
|
11
|
+
"User.GetEmail".snakecase.should == "user_get_email"
|
12
|
+
end
|
9
13
|
end
|
10
14
|
|
11
15
|
describe "lower_camelcase" do
|
data/spec/savon/wsdl_spec.rb
CHANGED
@@ -22,7 +22,7 @@ describe Savon::WSDL do
|
|
22
22
|
end
|
23
23
|
|
24
24
|
describe "mapped_soap_actions" do
|
25
|
-
|
25
|
+
it "returns a Hash containing all available SOAP actions and their original names" do
|
26
26
|
@wsdl.mapped_soap_actions.should == UserFixture.soap_actions
|
27
27
|
end
|
28
28
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: savon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Harrington
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-11-
|
12
|
+
date: 2009-11-30 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|