smacks-savon 0.0.75 → 0.0.91
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.rdoc +1 -1
- data/lib/savon/mash.rb +61 -0
- data/lib/savon/service.rb +33 -19
- data/test/savon/wsdl_test.rb +8 -0
- metadata +3 -2
data/README.rdoc
CHANGED
data/lib/savon/mash.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
module Savon
|
2
|
+
|
3
|
+
# Savon::Mash converts a given Hash into an Object.
|
4
|
+
class Mash
|
5
|
+
|
6
|
+
# Loops through a given +hash+, stores each value in an instance variable
|
7
|
+
# and creates getter and setter methods.
|
8
|
+
#
|
9
|
+
# === Parameters
|
10
|
+
#
|
11
|
+
# * +hash+ - The Hash to convert.
|
12
|
+
def initialize(hash)
|
13
|
+
hash.each do |key,value|
|
14
|
+
value = Savon::Mash.new(value) if value.is_a? Hash
|
15
|
+
|
16
|
+
if value.is_a? Array
|
17
|
+
value = value.map do |item|
|
18
|
+
if item.is_a?(Hash) then Savon::Mash.new(item) else item end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
set_instance_variable key, value
|
23
|
+
define_reader key
|
24
|
+
define_writer key
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
# Sets and instance variable with a given +name+ and +value+.
|
31
|
+
#
|
32
|
+
# === Parameters
|
33
|
+
#
|
34
|
+
# * +name+ - Name of the instance variable.
|
35
|
+
# * +value+ - Value of the instance variable.
|
36
|
+
def set_instance_variable(name, value)
|
37
|
+
self.instance_variable_set("@#{name}", value)
|
38
|
+
end
|
39
|
+
|
40
|
+
# Defines a reader method for a given instance +variable+.
|
41
|
+
#
|
42
|
+
# === Parameters
|
43
|
+
#
|
44
|
+
# * +variable+ - Name of the instance variable.
|
45
|
+
def define_reader(variable)
|
46
|
+
method = proc { self.instance_variable_get("@#{variable}") }
|
47
|
+
self.class.send(:define_method, variable, method)
|
48
|
+
end
|
49
|
+
|
50
|
+
# Defines a writer method for a given instance +variable+.
|
51
|
+
#
|
52
|
+
# === Parameters
|
53
|
+
#
|
54
|
+
# * +variable+ - Name of the instance variable.
|
55
|
+
def define_writer(variable)
|
56
|
+
method = proc { |value| self.instance_variable_set("@#{variable}", value) }
|
57
|
+
self.class.send(:define_method, "#{variable}=", method)
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
end
|
data/lib/savon/service.rb
CHANGED
@@ -40,6 +40,9 @@ module Savon
|
|
40
40
|
# response.to_mash("//user/email")
|
41
41
|
class Service
|
42
42
|
|
43
|
+
# The logger to use.
|
44
|
+
@@logger = nil
|
45
|
+
|
43
46
|
# The Net::HTTP connection instance to use.
|
44
47
|
attr_writer :http
|
45
48
|
|
@@ -58,15 +61,35 @@ module Savon
|
|
58
61
|
@wsdl
|
59
62
|
end
|
60
63
|
|
64
|
+
# Sets the logger to use.
|
65
|
+
def self.logger=(logger)
|
66
|
+
@@logger = logger
|
67
|
+
end
|
68
|
+
|
61
69
|
private
|
62
70
|
|
63
71
|
# Prepares and processes the SOAP request. Returns a Savon::Response object.
|
64
72
|
def call_service
|
65
73
|
headers = { "Content-Type" => "text/xml; charset=utf-8", "SOAPAction" => @action }
|
74
|
+
|
75
|
+
ApricotEatsGorilla.setup do |s|
|
76
|
+
s.nodes_to_namespace = wsdl.choice_elements
|
77
|
+
s.node_namespace = "wsdl"
|
78
|
+
end
|
66
79
|
body = ApricotEatsGorilla.soap_envelope("wsdl" => wsdl.namespace_uri) do
|
67
|
-
ApricotEatsGorilla["wsdl:#{@action}" =>
|
80
|
+
ApricotEatsGorilla["wsdl:#{@action}" => @options]
|
81
|
+
end
|
82
|
+
|
83
|
+
debug do |logger|
|
84
|
+
logger.info "Request; #{@uri}"
|
85
|
+
logger.info headers.map { |key, value| "#{key}: #{value}" }.join("\n")
|
86
|
+
logger.info body
|
68
87
|
end
|
69
88
|
response = @http.request_post(@uri.path, body, headers)
|
89
|
+
debug do |logger|
|
90
|
+
logger.info "Response (Status #{response.code}):"
|
91
|
+
logger.info response.body
|
92
|
+
end
|
70
93
|
Savon::Response.new(response)
|
71
94
|
end
|
72
95
|
|
@@ -87,26 +110,17 @@ module Savon
|
|
87
110
|
end
|
88
111
|
end
|
89
112
|
|
90
|
-
#
|
91
|
-
# the
|
92
|
-
def
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
current = options[key]
|
100
|
-
case current
|
101
|
-
when Array
|
102
|
-
options[key] << value
|
103
|
-
when nil
|
104
|
-
options[key] = value
|
105
|
-
else
|
106
|
-
options[key] = [current.dup, value]
|
113
|
+
# Debug method. Outputs a given +message+ to the defined @@logger or
|
114
|
+
# yields the @@logger to a +block+ in case one was given.
|
115
|
+
def debug(message = nil)
|
116
|
+
if @@logger
|
117
|
+
if message
|
118
|
+
@@logger.info(message)
|
119
|
+
end
|
120
|
+
if block_given?
|
121
|
+
yield @@logger
|
107
122
|
end
|
108
123
|
end
|
109
|
-
options
|
110
124
|
end
|
111
125
|
|
112
126
|
# Intercepts calls to SOAP service methods.
|
data/test/savon/wsdl_test.rb
CHANGED
@@ -41,4 +41,12 @@ class SavonWsdlTest < Test::Unit::TestCase
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
+
context "Savon::Wsdl with an invalid (non-WSDL) response" do
|
45
|
+
should "raise an ArgumentError" do
|
46
|
+
assert_raise ArgumentError do
|
47
|
+
Savon::Wsdl.new(some_uri, http_mock("Non-WSDL response"))
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
44
52
|
end
|
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.0.
|
4
|
+
version: 0.0.91
|
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.3.
|
33
|
+
version: 0.3.8
|
34
34
|
version:
|
35
35
|
description: Savon is a lightweight SOAP client.
|
36
36
|
email:
|
@@ -46,6 +46,7 @@ files:
|
|
46
46
|
- lib/savon/service.rb
|
47
47
|
- lib/savon/wsdl.rb
|
48
48
|
- lib/savon/response.rb
|
49
|
+
- lib/savon/mash.rb
|
49
50
|
has_rdoc: true
|
50
51
|
homepage: http://github.com/smacks/savon
|
51
52
|
post_install_message:
|