handsoap 1.1.6 → 1.1.7
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/VERSION.yml +1 -1
- data/lib/handsoap/service.rb +29 -4
- data/lib/handsoap/xml_mason.rb +10 -7
- metadata +2 -2
data/VERSION.yml
CHANGED
data/lib/handsoap/service.rb
CHANGED
@@ -226,12 +226,15 @@ module Handsoap
|
|
226
226
|
end
|
227
227
|
doc = make_envelope do |body,header|
|
228
228
|
if options[:soap_header]
|
229
|
-
options[:soap_header]
|
230
|
-
header.add k,v
|
231
|
-
end
|
229
|
+
iterate_hash_array(header, options[:soap_header])
|
232
230
|
end
|
233
231
|
|
234
|
-
|
232
|
+
if options[:soap_body]
|
233
|
+
action_hash = { action => options[:soap_body] }
|
234
|
+
iterate_hash_array(body, action_hash)
|
235
|
+
else
|
236
|
+
body.add(action)
|
237
|
+
end
|
235
238
|
end
|
236
239
|
if block_given?
|
237
240
|
yield doc.find(action)
|
@@ -248,6 +251,8 @@ module Handsoap
|
|
248
251
|
end
|
249
252
|
end
|
250
253
|
|
254
|
+
|
255
|
+
|
251
256
|
# Async invocation
|
252
257
|
#
|
253
258
|
# Creates an XML document and sends it over HTTP.
|
@@ -319,6 +324,26 @@ module Handsoap
|
|
319
324
|
return nil
|
320
325
|
end
|
321
326
|
|
327
|
+
|
328
|
+
|
329
|
+
#Used to iterate over a Hash, that can include Hash, Array or String/Float/Integer etc and insert it in the correct element.
|
330
|
+
def iterate_hash_array(element, hash_array)
|
331
|
+
hash_array.each {|hash| iterate_hash_array(element, hash) } if hash_array.is_a?(Array)
|
332
|
+
hash_array.each do |name,value|
|
333
|
+
if value.is_a?(Hash)
|
334
|
+
element.add(name){|subelement| iterate_hash_array(subelement, value)}
|
335
|
+
elsif value.is_a?(Array)
|
336
|
+
element.add(name) do |subelement|
|
337
|
+
value.each do |item|
|
338
|
+
iterate_hash_array(subelement, item) if item.is_a?(Hash)
|
339
|
+
end
|
340
|
+
end
|
341
|
+
else
|
342
|
+
element.add name, value.to_s
|
343
|
+
end
|
344
|
+
end
|
345
|
+
end
|
346
|
+
|
322
347
|
# Hook that is called when a new request document is created.
|
323
348
|
#
|
324
349
|
# You can override this to add namespaces and other elements that are common to all requests (Such as authentication).
|
data/lib/handsoap/xml_mason.rb
CHANGED
@@ -15,9 +15,9 @@ module Handsoap
|
|
15
15
|
def initialize
|
16
16
|
@namespaces = {}
|
17
17
|
end
|
18
|
-
def add(node_name, value = nil,
|
18
|
+
def add(node_name, value = nil, options = {}) # :yields: Handsoap::XmlMason::Element
|
19
19
|
prefix, name = parse_ns(node_name)
|
20
|
-
node = append_child Element.new(self, prefix, name, value,
|
20
|
+
node = append_child Element.new(self, prefix, name, value, options)
|
21
21
|
if block_given?
|
22
22
|
yield node
|
23
23
|
end
|
@@ -105,7 +105,7 @@ module Handsoap
|
|
105
105
|
end
|
106
106
|
|
107
107
|
class Element < Node
|
108
|
-
def initialize(parent, prefix, node_name, value = nil,
|
108
|
+
def initialize(parent, prefix, node_name, value = nil, options = {}) # :yields: Handsoap::XmlMason::Element
|
109
109
|
super()
|
110
110
|
# if prefix.to_s == ""
|
111
111
|
# raise "missing prefix"
|
@@ -115,8 +115,11 @@ module Handsoap
|
|
115
115
|
@node_name = node_name
|
116
116
|
@children = []
|
117
117
|
@attributes = {}
|
118
|
+
if options[:attributes]
|
119
|
+
@attributes = options[:attributes]
|
120
|
+
end
|
118
121
|
if not value.nil?
|
119
|
-
set_value value.to_s,
|
122
|
+
set_value value.to_s, options
|
120
123
|
end
|
121
124
|
if block_given?
|
122
125
|
yield self
|
@@ -142,14 +145,14 @@ module Handsoap
|
|
142
145
|
end
|
143
146
|
# Sets the inner text of this element.
|
144
147
|
#
|
145
|
-
# By default the string is escaped, but you can pass the flag :raw to inject XML.
|
148
|
+
# By default the string is escaped, but you can pass the option flag :raw to inject XML.
|
146
149
|
#
|
147
150
|
# You usually won't need to call this method, but will rather use +add+
|
148
|
-
def set_value(value,
|
151
|
+
def set_value(value, options = {})
|
149
152
|
if @children.length > 0
|
150
153
|
raise "Element already has children. Can't set value"
|
151
154
|
end
|
152
|
-
if
|
155
|
+
if options && options.include?(:raw)
|
153
156
|
@children = [RawContent.new(value)]
|
154
157
|
else
|
155
158
|
@children = [TextNode.new(value)]
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: handsoap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Troels Knak-Nielsen
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2010-
|
13
|
+
date: 2010-02-11 00:00:00 +01:00
|
14
14
|
default_executable:
|
15
15
|
dependencies: []
|
16
16
|
|