s-savon 0.8.6
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/.gitignore +9 -0
- data/.rspec +1 -0
- data/.yardopts +2 -0
- data/CHANGELOG.md +461 -0
- data/Gemfile +4 -0
- data/LICENSE +20 -0
- data/README.md +37 -0
- data/Rakefile +40 -0
- data/lib/savon.rb +14 -0
- data/lib/savon/client.rb +157 -0
- data/lib/savon/core_ext/hash.rb +70 -0
- data/lib/savon/core_ext/object.rb +14 -0
- data/lib/savon/core_ext/string.rb +51 -0
- data/lib/savon/core_ext/time.rb +14 -0
- data/lib/savon/error.rb +6 -0
- data/lib/savon/global.rb +75 -0
- data/lib/savon/http/error.rb +42 -0
- data/lib/savon/soap.rb +24 -0
- data/lib/savon/soap/fault.rb +59 -0
- data/lib/savon/soap/request.rb +61 -0
- data/lib/savon/soap/response.rb +80 -0
- data/lib/savon/soap/xml.rb +187 -0
- data/lib/savon/version.rb +5 -0
- data/lib/savon/wsdl/document.rb +112 -0
- data/lib/savon/wsdl/parser.rb +102 -0
- data/lib/savon/wsdl/request.rb +35 -0
- data/lib/savon/wsse.rb +150 -0
- data/savon.gemspec +29 -0
- data/spec/fixtures/gzip/message.gz +0 -0
- data/spec/fixtures/response/another_soap_fault.xml +14 -0
- data/spec/fixtures/response/authentication.xml +14 -0
- data/spec/fixtures/response/header.xml +13 -0
- data/spec/fixtures/response/list.xml +18 -0
- data/spec/fixtures/response/multi_ref.xml +39 -0
- data/spec/fixtures/response/soap_fault.xml +8 -0
- data/spec/fixtures/response/soap_fault12.xml +18 -0
- data/spec/fixtures/wsdl/authentication.xml +63 -0
- data/spec/fixtures/wsdl/geotrust.xml +156 -0
- data/spec/fixtures/wsdl/namespaced_actions.xml +307 -0
- data/spec/fixtures/wsdl/no_namespace.xml +115 -0
- data/spec/fixtures/wsdl/two_bindings.xml +25 -0
- data/spec/savon/client_spec.rb +346 -0
- data/spec/savon/core_ext/hash_spec.rb +121 -0
- data/spec/savon/core_ext/object_spec.rb +19 -0
- data/spec/savon/core_ext/string_spec.rb +57 -0
- data/spec/savon/core_ext/time_spec.rb +13 -0
- data/spec/savon/http/error_spec.rb +52 -0
- data/spec/savon/savon_spec.rb +85 -0
- data/spec/savon/soap/fault_spec.rb +89 -0
- data/spec/savon/soap/request_spec.rb +45 -0
- data/spec/savon/soap/response_spec.rb +174 -0
- data/spec/savon/soap/xml_spec.rb +335 -0
- data/spec/savon/soap_spec.rb +21 -0
- data/spec/savon/wsdl/document_spec.rb +132 -0
- data/spec/savon/wsdl/parser_spec.rb +99 -0
- data/spec/savon/wsdl/request_spec.rb +15 -0
- data/spec/savon/wsse_spec.rb +213 -0
- data/spec/spec_helper.rb +14 -0
- data/spec/support/endpoint.rb +25 -0
- data/spec/support/fixture.rb +37 -0
- metadata +251 -0
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2010 Daniel Harrington
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
Savon
|
2
|
+
=====
|
3
|
+
|
4
|
+
Heavy metal Ruby SOAP client
|
5
|
+
|
6
|
+
[Guide](http://rubiii.github.com/savon) | [Rubydoc](http://rubydoc.info/gems/savon) | [Google Group](http://groups.google.com/group/savon-soap) | [Wishlist](http://savon.uservoice.com) | [Bugs](http://github.com/rubiii/savon/issues)
|
7
|
+
|
8
|
+
Installation
|
9
|
+
------------
|
10
|
+
|
11
|
+
Savon is available through [Rubygems](http://rubygems.org/gems/savon) and can be installed via:
|
12
|
+
|
13
|
+
$ gem install savon
|
14
|
+
|
15
|
+
Basic workflow
|
16
|
+
--------------
|
17
|
+
|
18
|
+
# Setting up a Savon::Client representing a SOAP service.
|
19
|
+
client = Savon::Client.new do
|
20
|
+
wsdl.document = "http://service.example.com?wsdl"
|
21
|
+
end
|
22
|
+
|
23
|
+
client.wsdl.soap_actions
|
24
|
+
# => [:create_user, :get_user, :get_all_users]
|
25
|
+
|
26
|
+
# Executing a SOAP request to call a "getUser" action.
|
27
|
+
response = client.request :get_user do
|
28
|
+
soap.body = { :id => 1 }
|
29
|
+
end
|
30
|
+
|
31
|
+
response.to_hash
|
32
|
+
# => { :get_user_response => { :first_name => "The", :last_name => "Hoff" } }
|
33
|
+
|
34
|
+
Excited to learn more?
|
35
|
+
----------------------
|
36
|
+
|
37
|
+
Then you might want to go ahead and read the [Savon Guide](http://rubiii.github.com/savon).
|
data/Rakefile
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require "rake"
|
2
|
+
|
3
|
+
begin
|
4
|
+
require "yard"
|
5
|
+
|
6
|
+
YARD::Rake::YardocTask.new do |t|
|
7
|
+
t.files = ["README.md", "lib/**/*.rb"]
|
8
|
+
end
|
9
|
+
rescue LoadError
|
10
|
+
desc message = %{"gem install yard" to generate documentation}
|
11
|
+
task("yard") { abort message }
|
12
|
+
end
|
13
|
+
|
14
|
+
begin
|
15
|
+
require "metric_fu"
|
16
|
+
|
17
|
+
MetricFu::Configuration.run do |c|
|
18
|
+
c.metrics = [:churn, :flog, :flay, :reek, :roodi, :saikuro] # :rcov seems to be broken
|
19
|
+
c.graphs = [:flog, :flay, :reek, :roodi]
|
20
|
+
c.flay = { :dirs_to_flay => ["lib"], :minimum_score => 20 }
|
21
|
+
c.rcov[:rcov_opts] << "-Ilib -Ispec"
|
22
|
+
end
|
23
|
+
rescue LoadError
|
24
|
+
desc message = %{"gem install metric_fu" to generate metrics}
|
25
|
+
task("metrics:all") { abort message }
|
26
|
+
end
|
27
|
+
|
28
|
+
begin
|
29
|
+
require "rspec/core/rake_task"
|
30
|
+
|
31
|
+
RSpec::Core::RakeTask.new do |t|
|
32
|
+
t.rspec_opts = %w(-fd -c)
|
33
|
+
end
|
34
|
+
rescue LoadError
|
35
|
+
desc message = %{"gem install rspec --pre" to run the specs}
|
36
|
+
task(:spec) { abort message }
|
37
|
+
end
|
38
|
+
|
39
|
+
task :default => :spec
|
40
|
+
task :test => :spec
|
data/lib/savon.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require "savon/version"
|
2
|
+
require "savon/global"
|
3
|
+
require "savon/client"
|
4
|
+
|
5
|
+
module Savon
|
6
|
+
extend Global
|
7
|
+
|
8
|
+
# Yields this module to a given +block+. Please refer to the
|
9
|
+
# <tt>Savon::Global</tt> module for configuration options.
|
10
|
+
def self.configure
|
11
|
+
yield self if block_given?
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
data/lib/savon/client.rb
ADDED
@@ -0,0 +1,157 @@
|
|
1
|
+
require "httpi/request"
|
2
|
+
require "savon/soap/xml"
|
3
|
+
require "savon/soap/request"
|
4
|
+
require "savon/soap/response"
|
5
|
+
require "savon/wsdl/document"
|
6
|
+
require "savon/wsse"
|
7
|
+
|
8
|
+
module Savon
|
9
|
+
|
10
|
+
# = Savon::Client
|
11
|
+
#
|
12
|
+
# Savon::Client is the main object for connecting to a SOAP service. It includes methods to access
|
13
|
+
# both the Savon::WSDL::Document and HTTPI::Request object.
|
14
|
+
class Client
|
15
|
+
|
16
|
+
# Initializes the Savon::Client for a SOAP service. Accepts a +block+ which is evaluated in the
|
17
|
+
# context of this object to let you access the +wsdl+, +http+, and +wsse+ methods.
|
18
|
+
#
|
19
|
+
# == Examples
|
20
|
+
#
|
21
|
+
# # Using a remote WSDL
|
22
|
+
# client = Savon::Client.new { wsdl.document = "http://example.com/UserService?wsdl" }
|
23
|
+
#
|
24
|
+
# # Using a local WSDL
|
25
|
+
# client = Savon::Client.new { wsdl.document = "../wsdl/user_service.xml" }
|
26
|
+
#
|
27
|
+
# # Directly accessing a SOAP endpoint
|
28
|
+
# client = Savon::Client.new do
|
29
|
+
# wsdl.endpoint = "http://example.com/UserService"
|
30
|
+
# wsdl.namespace = "http://users.example.com"
|
31
|
+
# end
|
32
|
+
def initialize(&block)
|
33
|
+
process 1, &block if block
|
34
|
+
wsdl.request = http
|
35
|
+
end
|
36
|
+
|
37
|
+
# Returns the <tt>Savon::WSDL::Document</tt>.
|
38
|
+
def wsdl
|
39
|
+
@wsdl ||= WSDL::Document.new
|
40
|
+
end
|
41
|
+
|
42
|
+
# Returns the <tt>HTTPI::Request</tt>.
|
43
|
+
def http
|
44
|
+
@http ||= HTTPI::Request.new
|
45
|
+
end
|
46
|
+
|
47
|
+
# Returns the <tt>Savon::WSSE</tt> object.
|
48
|
+
def wsse
|
49
|
+
@wsse ||= WSSE.new
|
50
|
+
end
|
51
|
+
|
52
|
+
# Returns the <tt>Savon::SOAP::XML</tt> object. Please notice, that this object is only available
|
53
|
+
# in a block given to <tt>Savon::Client#request</tt>. A new instance of this object is created
|
54
|
+
# per SOAP request.
|
55
|
+
attr_reader :soap
|
56
|
+
|
57
|
+
# Executes a SOAP request for a given SOAP action. Accepts a +block+ which is evaluated in the
|
58
|
+
# context of this object to let you access the +soap+, +wsdl+, +http+ and +wsse+ methods.
|
59
|
+
#
|
60
|
+
# == Examples
|
61
|
+
#
|
62
|
+
# # Calls a "getUser" SOAP action with the payload of "<userId>123</userId>"
|
63
|
+
# client.request(:get_user) { soap.body = { :user_id => 123 } }
|
64
|
+
#
|
65
|
+
# # Prefixes the SOAP input tag with a given namespace: "<wsdl:GetUser>...</wsdl:GetUser>"
|
66
|
+
# client.request(:wsdl, "GetUser") { soap.body = { :user_id => 123 } }
|
67
|
+
#
|
68
|
+
# # SOAP input tag with attributes: <getUser xmlns:wsdl="http://example.com">...</getUser>"
|
69
|
+
# client.request(:get_user, "xmlns:wsdl" => "http://example.com")
|
70
|
+
def request(*args, &block)
|
71
|
+
raise ArgumentError, "Savon::Client#request requires at least one argument" if args.empty?
|
72
|
+
|
73
|
+
self.soap = SOAP::XML.new
|
74
|
+
preconfigure extract_options(args)
|
75
|
+
process &block if block
|
76
|
+
soap.wsse = wsse
|
77
|
+
|
78
|
+
response = SOAP::Request.new(http, soap).response
|
79
|
+
set_cookie response.http.headers
|
80
|
+
response
|
81
|
+
end
|
82
|
+
|
83
|
+
private
|
84
|
+
|
85
|
+
# Writer for the <tt>Savon::SOAP::XML</tt> object.
|
86
|
+
attr_writer :soap
|
87
|
+
|
88
|
+
# Accessor for the original self of a given block.
|
89
|
+
attr_accessor :original_self
|
90
|
+
|
91
|
+
# Passes a cookie from the last request +headers+ to the next one.
|
92
|
+
def set_cookie(headers)
|
93
|
+
http.headers["Cookie"] = headers["Set-Cookie"] if headers["Set-Cookie"]
|
94
|
+
end
|
95
|
+
|
96
|
+
# Expects an Array of +args+ and returns an Array containing the namespace (might be +nil+),
|
97
|
+
# the SOAP input and a Hash of attributes for the input tag (which might be empty).
|
98
|
+
def extract_options(args)
|
99
|
+
attributes = Hash === args.last ? args.pop : {}
|
100
|
+
namespace = args.size > 1 ? args.shift.to_sym : nil
|
101
|
+
input = args.first
|
102
|
+
|
103
|
+
[namespace, input, attributes]
|
104
|
+
end
|
105
|
+
|
106
|
+
# Expects and Array of +options+ and preconfigures the system.
|
107
|
+
def preconfigure(options)
|
108
|
+
soap.endpoint = wsdl.endpoint
|
109
|
+
soap.namespace_identifier = options[0]
|
110
|
+
soap.namespace = wsdl.namespace
|
111
|
+
soap.element_form_default = wsdl.element_form_default if wsdl.present?
|
112
|
+
soap.body = options[2].delete(:body) if options[2][:body]
|
113
|
+
|
114
|
+
set_soap_action options[1]
|
115
|
+
set_soap_input *options
|
116
|
+
end
|
117
|
+
|
118
|
+
# Expects an +input+ and sets the +SOAPAction+ HTTP headers.
|
119
|
+
def set_soap_action(input)
|
120
|
+
soap_action = wsdl.soap_action input.to_sym
|
121
|
+
soap_action ||= input.kind_of?(String) ? input : input.to_s.lower_camelcase
|
122
|
+
http.headers["SOAPAction"] = %{"#{soap_action}"}
|
123
|
+
end
|
124
|
+
|
125
|
+
# Expects a +namespace+, +input+ and +attributes+ and sets the SOAP input.
|
126
|
+
def set_soap_input(namespace, input, attributes)
|
127
|
+
new_input = wsdl.soap_input input.to_sym
|
128
|
+
new_input ||= input.kind_of?(String) ? input.to_sym : input.to_s.lower_camelcase.to_sym
|
129
|
+
soap.input = [namespace, new_input, attributes].compact
|
130
|
+
end
|
131
|
+
|
132
|
+
# Processes a given +block+. Yields objects if the block expects any arguments.
|
133
|
+
# Otherwise evaluates the block in the context of this object.
|
134
|
+
def process(offset = 0, &block)
|
135
|
+
block.arity > 0 ? yield_objects(offset, &block) : evaluate(&block)
|
136
|
+
end
|
137
|
+
|
138
|
+
# Yields a number of objects to a given +block+ depending on how many arguments
|
139
|
+
# the block is expecting.
|
140
|
+
def yield_objects(offset, &block)
|
141
|
+
yield *[soap, wsdl, http, wsse][offset, block.arity]
|
142
|
+
end
|
143
|
+
|
144
|
+
# Evaluates a given +block+ inside this object. Stores the original block binding.
|
145
|
+
def evaluate(&block)
|
146
|
+
self.original_self = eval "self", block.binding
|
147
|
+
instance_eval &block
|
148
|
+
end
|
149
|
+
|
150
|
+
# Handles calls to undefined methods by delegating to the original block binding.
|
151
|
+
def method_missing(method, *args, &block)
|
152
|
+
super unless original_self
|
153
|
+
original_self.send method, *args, &block
|
154
|
+
end
|
155
|
+
|
156
|
+
end
|
157
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require "builder"
|
2
|
+
|
3
|
+
require "savon"
|
4
|
+
require "savon/core_ext/object"
|
5
|
+
require "savon/core_ext/string"
|
6
|
+
|
7
|
+
module Savon
|
8
|
+
module CoreExt
|
9
|
+
module Hash
|
10
|
+
|
11
|
+
# Returns a new Hash with +self+ and +other_hash+ merged recursively.
|
12
|
+
# Modifies the receiver in place.
|
13
|
+
def deep_merge!(other_hash)
|
14
|
+
other_hash.each_pair do |k,v|
|
15
|
+
tv = self[k]
|
16
|
+
self[k] = tv.is_a?(Hash) && v.is_a?(Hash) ? tv.deep_merge(v) : v
|
17
|
+
end
|
18
|
+
self
|
19
|
+
end unless defined? deep_merge!
|
20
|
+
|
21
|
+
# Returns the values from the soap:Header element or an empty Hash in case the element could
|
22
|
+
# not be found.
|
23
|
+
def find_soap_header
|
24
|
+
find_soap_element /.+:Header/
|
25
|
+
end
|
26
|
+
|
27
|
+
# Returns the values from the soap:Body element or an empty Hash in case the element could
|
28
|
+
# not be found.
|
29
|
+
def find_soap_body
|
30
|
+
find_soap_element /.+:Body/
|
31
|
+
end
|
32
|
+
|
33
|
+
# Maps keys and values of a Hash created from SOAP response XML to more convenient Ruby Objects.
|
34
|
+
def map_soap_response
|
35
|
+
inject({}) do |hash, (key, value)|
|
36
|
+
value = case value
|
37
|
+
when ::Hash then value["xsi:nil"] ? nil : value.map_soap_response
|
38
|
+
when ::Array then value.map { |val| val.map_soap_response rescue val }
|
39
|
+
when ::String then value.map_soap_response
|
40
|
+
end
|
41
|
+
|
42
|
+
new_key = if Savon.strip_namespaces?
|
43
|
+
key.strip_namespace.snakecase.to_sym
|
44
|
+
else
|
45
|
+
key.snakecase
|
46
|
+
end
|
47
|
+
|
48
|
+
if hash[new_key] # key already exists, value should be added as an Array
|
49
|
+
hash[new_key] = [hash[new_key], value].flatten
|
50
|
+
result = hash
|
51
|
+
else
|
52
|
+
result = hash.merge new_key => value
|
53
|
+
end
|
54
|
+
result
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def find_soap_element(element)
|
61
|
+
envelope = self[keys.first] || {}
|
62
|
+
element_key = envelope.keys.find { |key| element =~ key } rescue nil
|
63
|
+
element_key ? envelope[element_key].map_soap_response : {}
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
Hash.send :include, Savon::CoreExt::Hash
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Savon
|
2
|
+
module CoreExt
|
3
|
+
module Object
|
4
|
+
|
5
|
+
# Returns +true+ if the Object is nil, false or empty. Implementation from ActiveSupport.
|
6
|
+
def blank?
|
7
|
+
respond_to?(:empty?) ? empty? : !self
|
8
|
+
end unless defined? blank?
|
9
|
+
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
Object.send :include, Savon::CoreExt::Object
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require "savon/soap"
|
2
|
+
|
3
|
+
module Savon
|
4
|
+
module CoreExt
|
5
|
+
module String
|
6
|
+
|
7
|
+
# Returns the String in snake_case.
|
8
|
+
def snakecase
|
9
|
+
str = dup
|
10
|
+
str.gsub! /::/, '/'
|
11
|
+
str.gsub! /([A-Z]+)([A-Z][a-z])/, '\1_\2'
|
12
|
+
str.gsub! /([a-z\d])([A-Z])/, '\1_\2'
|
13
|
+
str.tr! ".", "_"
|
14
|
+
str.tr! "-", "_"
|
15
|
+
str.downcase!
|
16
|
+
str
|
17
|
+
end
|
18
|
+
|
19
|
+
# Returns the String in lowerCamelCase.
|
20
|
+
def lower_camelcase
|
21
|
+
str = dup
|
22
|
+
str.gsub!(/\/(.?)/) { "::#{$1.upcase}" }
|
23
|
+
str.gsub!(/(?:_+|-+)([a-z])/) { $1.upcase }
|
24
|
+
str.gsub!(/(\A|\s)([A-Z])/) { $1 + $2.downcase }
|
25
|
+
str
|
26
|
+
end
|
27
|
+
|
28
|
+
# Returns whether the String starts with a given +prefix+.
|
29
|
+
def starts_with?(prefix)
|
30
|
+
prefix = prefix.to_s
|
31
|
+
self[0, prefix.length] == prefix
|
32
|
+
end unless defined? starts_with?
|
33
|
+
|
34
|
+
# Returns the String without namespace.
|
35
|
+
def strip_namespace
|
36
|
+
split(":").last
|
37
|
+
end
|
38
|
+
|
39
|
+
# Translates SOAP response values to Ruby Objects.
|
40
|
+
def map_soap_response
|
41
|
+
return ::DateTime.parse(self) if Savon::SOAP::DateTimeRegexp === self
|
42
|
+
return true if self.strip.downcase == "true"
|
43
|
+
return false if self.strip.downcase == "false"
|
44
|
+
self
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
String.send :include, Savon::CoreExt::String
|
data/lib/savon/error.rb
ADDED
data/lib/savon/global.rb
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
require "logger"
|
2
|
+
require "savon/soap"
|
3
|
+
|
4
|
+
module Savon
|
5
|
+
module Global
|
6
|
+
|
7
|
+
# Sets whether to log HTTP requests.
|
8
|
+
attr_writer :log
|
9
|
+
|
10
|
+
# Returns whether to log HTTP requests. Defaults to +true+.
|
11
|
+
def log?
|
12
|
+
@log != false
|
13
|
+
end
|
14
|
+
|
15
|
+
# Sets the logger to use.
|
16
|
+
attr_writer :logger
|
17
|
+
|
18
|
+
# Returns the logger. Defaults to an instance of +Logger+ writing to STDOUT.
|
19
|
+
def logger
|
20
|
+
@logger ||= ::Logger.new STDOUT
|
21
|
+
end
|
22
|
+
|
23
|
+
# Sets the log level.
|
24
|
+
attr_writer :log_level
|
25
|
+
|
26
|
+
# Returns the log level. Defaults to :debug.
|
27
|
+
def log_level
|
28
|
+
@log_level ||= :debug
|
29
|
+
end
|
30
|
+
|
31
|
+
# Logs a given +message+.
|
32
|
+
def log(message)
|
33
|
+
logger.send log_level, message if log?
|
34
|
+
end
|
35
|
+
|
36
|
+
# Sets whether to raise HTTP errors and SOAP faults.
|
37
|
+
attr_writer :raise_errors
|
38
|
+
|
39
|
+
# Returns whether to raise errors. Defaults to +true+.
|
40
|
+
def raise_errors?
|
41
|
+
@raise_errors != false
|
42
|
+
end
|
43
|
+
|
44
|
+
# Sets the global SOAP version.
|
45
|
+
def soap_version=(version)
|
46
|
+
raise ArgumentError, "Invalid SOAP version: #{version}" unless SOAP::Versions.include? version
|
47
|
+
@version = version
|
48
|
+
end
|
49
|
+
|
50
|
+
# Returns SOAP version. Defaults to +DefaultVersion+.
|
51
|
+
def soap_version
|
52
|
+
@version ||= SOAP::DefaultVersion
|
53
|
+
end
|
54
|
+
|
55
|
+
# Returns whether to strip namespaces in a SOAP response Hash.
|
56
|
+
# Defaults to +true+.
|
57
|
+
def strip_namespaces?
|
58
|
+
@strip_namespaces != false
|
59
|
+
end
|
60
|
+
|
61
|
+
# Sets whether to strip namespaces in a SOAP response Hash.
|
62
|
+
attr_writer :strip_namespaces
|
63
|
+
|
64
|
+
# Reset to default configuration.
|
65
|
+
def reset_config!
|
66
|
+
self.log = true
|
67
|
+
self.logger = ::Logger.new STDOUT
|
68
|
+
self.log_level = :debug
|
69
|
+
self.raise_errors = true
|
70
|
+
self.soap_version = SOAP::DefaultVersion
|
71
|
+
self.strip_namespaces = true
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
end
|