savon 0.9.11 → 0.9.14
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/CHANGELOG.md +21 -0
- data/lib/savon/client.rb +1 -1
- data/lib/savon/config.rb +23 -4
- data/lib/savon/logger.rb +6 -4
- data/lib/savon/model.rb +1 -1
- data/lib/savon/null_logger.rb +10 -0
- data/lib/savon/soap.rb +3 -3
- data/lib/savon/soap/fault.rb +1 -1
- data/lib/savon/soap/invalid_response_error.rb +2 -0
- data/lib/savon/soap/request.rb +3 -3
- data/lib/savon/soap/response.rb +1 -1
- data/lib/savon/soap/xml.rb +5 -5
- data/lib/savon/version.rb +1 -1
- data/lib/savon/wasabi/document.rb +2 -2
- data/savon.gemspec +2 -2
- data/spec/integration/request_spec.rb +22 -0
- data/spec/savon/client_spec.rb +1 -1
- data/spec/savon/config_spec.rb +26 -8
- data/spec/savon/model_spec.rb +0 -33
- data/spec/savon/soap/request_spec.rb +3 -3
- data/spec/savon/soap_spec.rb +4 -4
- metadata +9 -8
- data/spec/integration/stockquote_spec.rb +0 -14
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,24 @@
|
|
1
|
+
## 0.9.14 (2012-06-07)
|
2
|
+
|
3
|
+
* Fix: [#292](https://github.com/rubiii/savon/issues/292) again
|
4
|
+
|
5
|
+
## 0.9.13 (2012-06-07)
|
6
|
+
|
7
|
+
* Fix: [#292](https://github.com/rubiii/savon/issues/292)
|
8
|
+
|
9
|
+
## 0.9.12 (2012-06-07)
|
10
|
+
|
11
|
+
* Re-added the log method setters to the new config object for backwards compatibility.
|
12
|
+
You should be able to configure the logger as you used to do.
|
13
|
+
|
14
|
+
``` ruby
|
15
|
+
Savon.configure do |config|
|
16
|
+
config.log = false # disable logging
|
17
|
+
config.log_level = :info # changing the log level
|
18
|
+
config.logger = Rails.logger # using the Rails logger
|
19
|
+
end
|
20
|
+
```
|
21
|
+
|
1
22
|
## 0.9.11 (2012-06-06)
|
2
23
|
|
3
24
|
* Feature: [#264](https://github.com/rubiii/savon/pull/264) - Thanks to @hoverlover, Savon and Akami now support
|
data/lib/savon/client.rb
CHANGED
data/lib/savon/config.rb
CHANGED
@@ -1,25 +1,44 @@
|
|
1
1
|
require "savon/logger"
|
2
|
+
require "savon/null_logger"
|
2
3
|
require "savon/hooks/group"
|
3
4
|
require "savon/soap"
|
4
5
|
|
5
6
|
module Savon
|
6
|
-
Config = Struct.new(:
|
7
|
+
Config = Struct.new(:_logger, :pretty_print_xml, :raise_errors, :soap_version, :env_namespace, :soap_header) do
|
7
8
|
|
8
9
|
def self.default
|
9
10
|
config = new
|
10
|
-
config.
|
11
|
+
config._logger = Logger.new
|
11
12
|
config.raise_errors = true
|
12
|
-
config.soap_version = SOAP::
|
13
|
+
config.soap_version = SOAP::DEFAULT_VERSION
|
13
14
|
config
|
14
15
|
end
|
15
16
|
|
17
|
+
alias_method :logger, :_logger
|
18
|
+
|
19
|
+
def logger=(logger)
|
20
|
+
_logger.subject = logger
|
21
|
+
end
|
22
|
+
|
23
|
+
def log_level=(level)
|
24
|
+
_logger.level = level
|
25
|
+
end
|
26
|
+
|
27
|
+
def log=(log)
|
28
|
+
if log == true
|
29
|
+
self._logger = Logger.new
|
30
|
+
else
|
31
|
+
self._logger = NullLogger.new
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
16
35
|
def hooks
|
17
36
|
@hooks ||= Hooks::Group.new
|
18
37
|
end
|
19
38
|
|
20
39
|
def clone
|
21
40
|
config = super
|
22
|
-
config.
|
41
|
+
config._logger = config._logger.clone
|
23
42
|
config
|
24
43
|
end
|
25
44
|
|
data/lib/savon/logger.rb
CHANGED
@@ -15,10 +15,6 @@ module Savon
|
|
15
15
|
log_raw LogMessage.new(message, filter, options).to_s
|
16
16
|
end
|
17
17
|
|
18
|
-
def log_raw(message)
|
19
|
-
subject.send(level, message)
|
20
|
-
end
|
21
|
-
|
22
18
|
attr_writer :subject, :level, :filter
|
23
19
|
|
24
20
|
def subject
|
@@ -33,5 +29,11 @@ module Savon
|
|
33
29
|
@filter ||= []
|
34
30
|
end
|
35
31
|
|
32
|
+
private
|
33
|
+
|
34
|
+
def log_raw(message)
|
35
|
+
subject.send(level, message)
|
36
|
+
end
|
37
|
+
|
36
38
|
end
|
37
39
|
end
|
data/lib/savon/model.rb
CHANGED
data/lib/savon/soap.rb
CHANGED
@@ -6,13 +6,13 @@ module Savon
|
|
6
6
|
module SOAP
|
7
7
|
|
8
8
|
# Default SOAP version.
|
9
|
-
|
9
|
+
DEFAULT_VERSION = 1
|
10
10
|
|
11
11
|
# Supported SOAP versions.
|
12
|
-
|
12
|
+
VERSIONS = 1..2
|
13
13
|
|
14
14
|
# SOAP namespaces by SOAP version.
|
15
|
-
|
15
|
+
NAMESPACE = {
|
16
16
|
1 => "http://schemas.xmlsoap.org/soap/envelope/",
|
17
17
|
2 => "http://www.w3.org/2003/05/soap-envelope"
|
18
18
|
}
|
data/lib/savon/soap/fault.rb
CHANGED
data/lib/savon/soap/request.rb
CHANGED
@@ -10,7 +10,7 @@ module Savon
|
|
10
10
|
class Request
|
11
11
|
|
12
12
|
# Content-Types by SOAP version.
|
13
|
-
|
13
|
+
CONTENT_TYPE = { 1 => "text/xml;charset=UTF-8", 2 => "application/soap+xml;charset=UTF-8" }
|
14
14
|
|
15
15
|
# Expects an <tt>HTTPI::Request</tt> and a <tt>Savon::SOAP::XML</tt> object
|
16
16
|
# to execute a SOAP request and returns the response.
|
@@ -36,7 +36,7 @@ module Savon
|
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
-
|
39
|
+
private
|
40
40
|
|
41
41
|
# Configures a given +http+ from the +soap+ object.
|
42
42
|
def configure(http)
|
@@ -55,7 +55,7 @@ module Savon
|
|
55
55
|
http.body = soap.to_xml
|
56
56
|
end
|
57
57
|
|
58
|
-
http.headers["Content-Type"] =
|
58
|
+
http.headers["Content-Type"] = CONTENT_TYPE[soap.version]
|
59
59
|
http.headers["Content-Length"] = soap.to_xml.bytesize.to_s
|
60
60
|
http
|
61
61
|
end
|
data/lib/savon/soap/response.rb
CHANGED
data/lib/savon/soap/xml.rb
CHANGED
@@ -20,7 +20,7 @@ module Savon
|
|
20
20
|
class XML
|
21
21
|
|
22
22
|
# XML Schema Type namespaces.
|
23
|
-
|
23
|
+
SCHEMA_TYPES = {
|
24
24
|
"xmlns:xsd" => "http://www.w3.org/2001/XMLSchema",
|
25
25
|
"xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance"
|
26
26
|
}
|
@@ -40,7 +40,7 @@ module Savon
|
|
40
40
|
|
41
41
|
# Sets the SOAP +version+.
|
42
42
|
def version=(version)
|
43
|
-
raise ArgumentError, "Invalid SOAP version: #{version}" unless SOAP::
|
43
|
+
raise ArgumentError, "Invalid SOAP version: #{version}" unless SOAP::VERSIONS.include? version
|
44
44
|
@version = version
|
45
45
|
end
|
46
46
|
|
@@ -73,7 +73,7 @@ module Savon
|
|
73
73
|
@namespaces ||= begin
|
74
74
|
key = ["xmlns"]
|
75
75
|
key << env_namespace if env_namespace && env_namespace != ""
|
76
|
-
{ key.join(":") => SOAP::
|
76
|
+
{ key.join(":") => SOAP::NAMESPACE[version] }
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
@@ -175,7 +175,7 @@ module Savon
|
|
175
175
|
end
|
176
176
|
end
|
177
177
|
|
178
|
-
|
178
|
+
private
|
179
179
|
|
180
180
|
# Returns a new <tt>Builder::XmlMarkup</tt> object.
|
181
181
|
def builder(directive_tag = :xml, attrs = { :encoding => encoding })
|
@@ -196,7 +196,7 @@ module Savon
|
|
196
196
|
|
197
197
|
# Returns the complete Hash of namespaces.
|
198
198
|
def complete_namespaces
|
199
|
-
defaults =
|
199
|
+
defaults = SCHEMA_TYPES.dup
|
200
200
|
defaults["xmlns:#{namespace_identifier}"] = namespace if namespace
|
201
201
|
defaults.merge namespaces
|
202
202
|
end
|
data/lib/savon/version.rb
CHANGED
@@ -18,7 +18,7 @@ module Savon
|
|
18
18
|
# Sets the <tt>HTTPI::Request</tt> for remote WSDL documents.
|
19
19
|
attr_writer :request
|
20
20
|
|
21
|
-
|
21
|
+
private
|
22
22
|
|
23
23
|
# Sets up and returns the <tt>HTTPI::Request</tt>.
|
24
24
|
def request
|
@@ -30,7 +30,7 @@ module Savon
|
|
30
30
|
# Resolves and returns the raw WSDL document.
|
31
31
|
def resolve_document
|
32
32
|
case document
|
33
|
-
when /^http[s]?:/ then
|
33
|
+
when /^http[s]?:/ then
|
34
34
|
response = HTTPI.get(request)
|
35
35
|
if response.error?
|
36
36
|
raise Savon::HTTP::Error.new(response)
|
data/savon.gemspec
CHANGED
@@ -6,7 +6,7 @@ require "savon/version"
|
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "savon"
|
9
|
-
s.version = Savon::
|
9
|
+
s.version = Savon::VERSION
|
10
10
|
s.authors = "Daniel Harrington"
|
11
11
|
s.email = "me@rubiii.com"
|
12
12
|
s.homepage = "http://savonrb.com"
|
@@ -17,7 +17,7 @@ Gem::Specification.new do |s|
|
|
17
17
|
|
18
18
|
s.add_dependency "builder", ">= 2.1.2"
|
19
19
|
s.add_dependency "nori", "~> 1.1"
|
20
|
-
s.add_dependency "httpi", "~> 0
|
20
|
+
s.add_dependency "httpi", "~> 1.0"
|
21
21
|
s.add_dependency "wasabi", "~> 2.2"
|
22
22
|
s.add_dependency "akami", "~> 1.1"
|
23
23
|
s.add_dependency "gyoku", ">= 0.4.0"
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe "Integration" do
|
4
|
+
|
5
|
+
it "returns the result in a CDATA tag" do
|
6
|
+
client = Savon.client("http://www.webservicex.net/stockquote.asmx?WSDL")
|
7
|
+
response = client.request(:get_quote, :body => { :symbol => "AAPL" })
|
8
|
+
|
9
|
+
cdata = response[:get_quote_response][:get_quote_result]
|
10
|
+
result = Nori.parse(cdata)
|
11
|
+
result[:stock_quotes][:stock][:symbol].should == "AAPL"
|
12
|
+
end
|
13
|
+
|
14
|
+
it "passes Strings as they are" do
|
15
|
+
client = Savon.client("http://ws.cdyne.com/emailverify/Emailvernotestemail.asmx?wsdl")
|
16
|
+
response = client.request(:verify_email, :body => { :email => "soap@example.com", "LicenseKey" => "?" })
|
17
|
+
|
18
|
+
response_text = response[:verify_email_response][:verify_email_result][:response_text]
|
19
|
+
response_text.should == "Email Domain Not Found"
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
data/spec/savon/client_spec.rb
CHANGED
@@ -246,7 +246,7 @@ describe Savon::Client do
|
|
246
246
|
HTTPI.stubs(:post).returns(new_response(:headers => { "Set-Cookie" => "second-cookie=oatmeal; Path=/; HttpOnly" }))
|
247
247
|
client.request :nibble
|
248
248
|
|
249
|
-
client.http.headers["Cookie"].should
|
249
|
+
client.http.headers["Cookie"].split(";").should include("some-cookie=choc-chip", "second-cookie=oatmeal")
|
250
250
|
end
|
251
251
|
|
252
252
|
end
|
data/spec/savon/config_spec.rb
CHANGED
@@ -2,19 +2,37 @@ require "spec_helper"
|
|
2
2
|
|
3
3
|
describe Savon::Config do
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
end
|
5
|
+
let(:config) {
|
6
|
+
config = Savon::Config.new
|
7
|
+
config._logger = Savon::Logger.new
|
8
|
+
config
|
9
|
+
}
|
11
10
|
|
11
|
+
describe "#clone" do
|
12
12
|
it "clones the logger" do
|
13
|
-
logger =
|
14
|
-
clone =
|
13
|
+
logger = config.logger
|
14
|
+
clone = config.clone
|
15
15
|
|
16
16
|
logger.should_not equal(clone.logger)
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
+
it "allows to change the logger" do
|
21
|
+
logger = Logger.new("/dev/null")
|
22
|
+
config.logger = logger
|
23
|
+
config._logger.subject.should equal(logger)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "allows to change the log level" do
|
27
|
+
config.log_level = :info
|
28
|
+
config._logger.level.should == :info
|
29
|
+
end
|
30
|
+
|
31
|
+
it "allows to enable/disable logging" do
|
32
|
+
config.log = false
|
33
|
+
config._logger.should be_a(Savon::NullLogger)
|
34
|
+
config.log = true
|
35
|
+
config._logger.should be_a(Savon::Logger)
|
36
|
+
end
|
37
|
+
|
20
38
|
end
|
data/spec/savon/model_spec.rb
CHANGED
@@ -7,7 +7,6 @@ describe Savon::Model do
|
|
7
7
|
end
|
8
8
|
|
9
9
|
describe ":model_soap_response hook" do
|
10
|
-
|
11
10
|
before(:all) do
|
12
11
|
model.actions :get_user, "GetAllUsers"
|
13
12
|
end
|
@@ -24,75 +23,57 @@ describe Savon::Model do
|
|
24
23
|
model.client.stubs(:request).returns("world") #
|
25
24
|
model.get_user.should == "hello world"
|
26
25
|
end
|
27
|
-
|
28
26
|
end
|
29
27
|
|
30
28
|
describe ".client" do
|
31
|
-
|
32
|
-
it "passes a given block to a new Savon::Client"
|
33
|
-
|
34
29
|
it "memoizes the Savon::Client" do
|
35
30
|
model.client.should equal(model.client)
|
36
31
|
end
|
37
|
-
|
38
32
|
end
|
39
33
|
|
40
34
|
describe ".config" do
|
41
|
-
|
42
35
|
it "memoizes a clone of the global config" do
|
43
36
|
model.config.should be_a(Savon::Config)
|
44
37
|
model.config.should_not equal(Savon.config)
|
45
38
|
end
|
46
|
-
|
47
39
|
end
|
48
40
|
|
49
41
|
describe ".endpoint" do
|
50
|
-
|
51
42
|
it "sets the SOAP endpoint" do
|
52
43
|
model.endpoint "http://example.com"
|
53
44
|
model.client.wsdl.endpoint.should == "http://example.com"
|
54
45
|
end
|
55
|
-
|
56
46
|
end
|
57
47
|
|
58
48
|
describe ".namespace" do
|
59
|
-
|
60
49
|
it "sets the target namespace" do
|
61
50
|
model.namespace "http://v1.example.com"
|
62
51
|
model.client.wsdl.namespace.should == "http://v1.example.com"
|
63
52
|
end
|
64
|
-
|
65
53
|
end
|
66
54
|
|
67
55
|
describe ".document" do
|
68
|
-
|
69
56
|
it "sets the WSDL document" do
|
70
57
|
model.document "http://example.com/?wsdl"
|
71
58
|
model.client.wsdl.document.should == "http://example.com/?wsdl"
|
72
59
|
end
|
73
|
-
|
74
60
|
end
|
75
61
|
|
76
62
|
describe ".headers" do
|
77
|
-
|
78
63
|
it "sets the HTTP headers" do
|
79
64
|
model.headers("Accept-Charset" => "utf-8")
|
80
65
|
model.client.http.headers.should == { "Accept-Charset" => "utf-8" }
|
81
66
|
end
|
82
|
-
|
83
67
|
end
|
84
68
|
|
85
69
|
describe ".basic_auth" do
|
86
|
-
|
87
70
|
it "sets HTTP Basic auth credentials" do
|
88
71
|
model.basic_auth "login", "password"
|
89
72
|
model.client.http.auth.basic.should == ["login", "password"]
|
90
73
|
end
|
91
|
-
|
92
74
|
end
|
93
75
|
|
94
76
|
describe ".wsse_auth" do
|
95
|
-
|
96
77
|
it "sets WSSE auth credentials" do
|
97
78
|
model.wsse_auth "login", "password", :digest
|
98
79
|
|
@@ -100,11 +81,9 @@ describe Savon::Model do
|
|
100
81
|
model.client.wsse.password.should == "password"
|
101
82
|
model.client.wsse.should be_digest
|
102
83
|
end
|
103
|
-
|
104
84
|
end
|
105
85
|
|
106
86
|
describe ".actions" do
|
107
|
-
|
108
87
|
before(:all) do
|
109
88
|
model.actions :get_user, "GetAllUsers"
|
110
89
|
end
|
@@ -118,7 +97,6 @@ describe Savon::Model do
|
|
118
97
|
end
|
119
98
|
|
120
99
|
context "(class-level)" do
|
121
|
-
|
122
100
|
it "executes SOAP requests with a given body" do
|
123
101
|
model.client.expects(:request).with(:wsdl, :get_user, :body => { :id => 1 })
|
124
102
|
model.get_user :id => 1
|
@@ -131,28 +109,21 @@ describe Savon::Model do
|
|
131
109
|
end
|
132
110
|
|
133
111
|
context "(instance-level)" do
|
134
|
-
|
135
112
|
it "delegates to the corresponding class method" do
|
136
113
|
model.expects(:get_all_users).with(:active => true)
|
137
114
|
model.new.get_all_users :active => true
|
138
115
|
end
|
139
|
-
|
140
116
|
end
|
141
|
-
|
142
117
|
end
|
143
118
|
|
144
119
|
describe "#client" do
|
145
|
-
|
146
120
|
it "returns the class-level Savon::Client" do
|
147
121
|
model.new.client.should == model.client
|
148
122
|
end
|
149
|
-
|
150
123
|
end
|
151
124
|
|
152
125
|
describe "overwriting action methods" do
|
153
|
-
|
154
126
|
context "(class-level)" do
|
155
|
-
|
156
127
|
let(:supermodel) do
|
157
128
|
supermodel = model.dup
|
158
129
|
supermodel.actions :get_user
|
@@ -171,11 +142,9 @@ describe Savon::Model do
|
|
171
142
|
|
172
143
|
supermodel.get_user :id => 1
|
173
144
|
end
|
174
|
-
|
175
145
|
end
|
176
146
|
|
177
147
|
context "(instance-level)" do
|
178
|
-
|
179
148
|
let(:supermodel) do
|
180
149
|
supermodel = model.dup
|
181
150
|
supermodel.actions :get_user
|
@@ -195,9 +164,7 @@ describe Savon::Model do
|
|
195
164
|
|
196
165
|
supermodel.get_user :id => 1
|
197
166
|
end
|
198
|
-
|
199
167
|
end
|
200
|
-
|
201
168
|
end
|
202
169
|
|
203
170
|
end
|
@@ -19,7 +19,7 @@ describe Savon::SOAP::Request do
|
|
19
19
|
end
|
20
20
|
|
21
21
|
it "contains the content type for each supported SOAP version" do
|
22
|
-
content_type = Savon::SOAP::Request::
|
22
|
+
content_type = Savon::SOAP::Request::CONTENT_TYPE
|
23
23
|
content_type[1].should == "text/xml;charset=UTF-8"
|
24
24
|
content_type[2].should == "application/soap+xml;charset=UTF-8"
|
25
25
|
end
|
@@ -42,12 +42,12 @@ describe Savon::SOAP::Request do
|
|
42
42
|
end
|
43
43
|
|
44
44
|
it "sets the Content-Type header for SOAP 1.1" do
|
45
|
-
soap_request.http.headers["Content-Type"].should == Savon::SOAP::Request::
|
45
|
+
soap_request.http.headers["Content-Type"].should == Savon::SOAP::Request::CONTENT_TYPE[1]
|
46
46
|
end
|
47
47
|
|
48
48
|
it "sets the Content-Type header for SOAP 1.2" do
|
49
49
|
soap_xml.version = 2
|
50
|
-
soap_request.http.headers["Content-Type"].should == Savon::SOAP::Request::
|
50
|
+
soap_request.http.headers["Content-Type"].should == Savon::SOAP::Request::CONTENT_TYPE[2]
|
51
51
|
end
|
52
52
|
|
53
53
|
it "sets the Content-Length header" do
|
data/spec/savon/soap_spec.rb
CHANGED
@@ -3,14 +3,14 @@ require "spec_helper"
|
|
3
3
|
describe Savon::SOAP do
|
4
4
|
|
5
5
|
it "should contain the SOAP namespace for each supported SOAP version" do
|
6
|
-
Savon::SOAP::
|
7
|
-
Savon::SOAP::
|
8
|
-
Savon::SOAP::
|
6
|
+
Savon::SOAP::VERSIONS.each do |soap_version|
|
7
|
+
Savon::SOAP::NAMESPACE[soap_version].should be_a(String)
|
8
|
+
Savon::SOAP::NAMESPACE[soap_version].should_not be_empty
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
12
|
it "should contain a Rage of supported SOAP versions" do
|
13
|
-
Savon::SOAP::
|
13
|
+
Savon::SOAP::VERSIONS.should == (1..2)
|
14
14
|
end
|
15
15
|
|
16
16
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: savon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 39
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 9
|
9
|
-
-
|
10
|
-
version: 0.9.
|
9
|
+
- 14
|
10
|
+
version: 0.9.14
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Daniel Harrington
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-06-
|
18
|
+
date: 2012-06-07 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
version_requirements: &id001 !ruby/object:Gem::Requirement
|
@@ -54,11 +54,11 @@ dependencies:
|
|
54
54
|
requirements:
|
55
55
|
- - ~>
|
56
56
|
- !ruby/object:Gem::Version
|
57
|
-
hash:
|
57
|
+
hash: 15
|
58
58
|
segments:
|
59
|
+
- 1
|
59
60
|
- 0
|
60
|
-
|
61
|
-
version: "0.9"
|
61
|
+
version: "1.0"
|
62
62
|
name: httpi
|
63
63
|
type: :runtime
|
64
64
|
prerelease: false
|
@@ -214,6 +214,7 @@ files:
|
|
214
214
|
- lib/savon/log_message.rb
|
215
215
|
- lib/savon/logger.rb
|
216
216
|
- lib/savon/model.rb
|
217
|
+
- lib/savon/null_logger.rb
|
217
218
|
- lib/savon/soap.rb
|
218
219
|
- lib/savon/soap/fault.rb
|
219
220
|
- lib/savon/soap/invalid_response_error.rb
|
@@ -237,7 +238,7 @@ files:
|
|
237
238
|
- spec/fixtures/wsdl/multiple_namespaces.xml
|
238
239
|
- spec/fixtures/wsdl/multiple_types.xml
|
239
240
|
- spec/fixtures/wsdl/taxcloud.xml
|
240
|
-
- spec/integration/
|
241
|
+
- spec/integration/request_spec.rb
|
241
242
|
- spec/savon/client_spec.rb
|
242
243
|
- spec/savon/config_spec.rb
|
243
244
|
- spec/savon/core_ext/string_spec.rb
|
@@ -1,14 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe "webservicex/stockquote" do
|
4
|
-
|
5
|
-
it "returns the result in a CDATA tag" do
|
6
|
-
client = Savon.client("http://www.webservicex.net/stockquote.asmx?WSDL")
|
7
|
-
response = client.request(:get_quote, :body => { :symbol => "AAPL" })
|
8
|
-
|
9
|
-
cdata = response[:get_quote_response][:get_quote_result]
|
10
|
-
result = Nori.parse(cdata)
|
11
|
-
result[:stock_quotes][:stock][:symbol].should == "AAPL"
|
12
|
-
end
|
13
|
-
|
14
|
-
end
|