troelskn-handsoap 0.3.0 → 0.3.1
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/xml_query_front.rb +52 -2
- metadata +1 -1
data/VERSION.yml
CHANGED
@@ -62,6 +62,36 @@ module Handsoap
|
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
|
+
# NodeSelection is a wrapper around Array, that implicitly delegates BaseDriver methods to the first element.
|
66
|
+
#
|
67
|
+
# It makes mapping code prettier, since you often need to access the first element of a selection.
|
68
|
+
class NodeSelection < Array
|
69
|
+
def to_i
|
70
|
+
self.first.to_i if self.any?
|
71
|
+
end
|
72
|
+
def to_f
|
73
|
+
self.first.to_f if self.any?
|
74
|
+
end
|
75
|
+
def to_boolean
|
76
|
+
self.first.to_boolean if self.any?
|
77
|
+
end
|
78
|
+
def to_date
|
79
|
+
self.first.to_date if self.any?
|
80
|
+
end
|
81
|
+
def node_name
|
82
|
+
self.first.node_name if self.any?
|
83
|
+
end
|
84
|
+
def xpath(expression, ns = nil)
|
85
|
+
self.first.xpath(expression, ns)
|
86
|
+
end
|
87
|
+
def to_s
|
88
|
+
self.first.to_s if self.any?
|
89
|
+
end
|
90
|
+
def to_xml
|
91
|
+
self.first.to_xml if self.any?
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
65
95
|
# Wraps the underlying (native) xml driver, and provides a uniform interface.
|
66
96
|
module BaseDriver
|
67
97
|
def initialize(element, namespaces = {})
|
@@ -142,9 +172,17 @@ module Handsoap
|
|
142
172
|
def to_xml
|
143
173
|
raise NotImplementedError.new
|
144
174
|
end
|
145
|
-
#
|
175
|
+
# Calls +xpath+ and wraps the result in a +NodeSelection+.
|
146
176
|
def /(expression)
|
147
|
-
self.xpath(expression)
|
177
|
+
NodeSelection.new self.xpath(expression)
|
178
|
+
end
|
179
|
+
# Returns the attribute value of the underlying element.
|
180
|
+
#
|
181
|
+
# Shortcut for:
|
182
|
+
#
|
183
|
+
# (node/"@attribute_name").to_s
|
184
|
+
def [](attribute_name)
|
185
|
+
raise NotImplementedError.new
|
148
186
|
end
|
149
187
|
end
|
150
188
|
|
@@ -162,6 +200,10 @@ module Handsoap
|
|
162
200
|
assert_prefixes!(expression, ns)
|
163
201
|
@element.find(expression, ns.map{|k,v| "#{k}:#{v}" }).to_a.map{|node| LibXMLDriver.new(node, ns) }
|
164
202
|
end
|
203
|
+
def [](attribute_name)
|
204
|
+
raise ArgumentError.new unless attribute_name.kind_of? String
|
205
|
+
@element[attribute_name]
|
206
|
+
end
|
165
207
|
def to_xml
|
166
208
|
@element.to_s
|
167
209
|
end
|
@@ -188,6 +230,10 @@ module Handsoap
|
|
188
230
|
assert_prefixes!(expression, ns)
|
189
231
|
REXML::XPath.match(@element, expression, ns).map{|node| REXMLDriver.new(node, ns) }
|
190
232
|
end
|
233
|
+
def [](attribute_name)
|
234
|
+
raise ArgumentError.new unless attribute_name.kind_of? String
|
235
|
+
@element.attributes[attribute_name]
|
236
|
+
end
|
191
237
|
def to_xml
|
192
238
|
require 'rexml/formatters/pretty'
|
193
239
|
formatter = REXML::Formatters::Pretty.new
|
@@ -225,6 +271,10 @@ module Handsoap
|
|
225
271
|
assert_prefixes!(expression, ns)
|
226
272
|
@element.xpath(expression, ns).map{|node| NokogiriDriver.new(node, ns) }
|
227
273
|
end
|
274
|
+
def [](attribute_name)
|
275
|
+
raise ArgumentError.new unless attribute_name.kind_of? String
|
276
|
+
@element[attribute_name]
|
277
|
+
end
|
228
278
|
def to_xml
|
229
279
|
@element.serialize(NokogiriDriver.serialize_args)
|
230
280
|
end
|