rexle 0.9.45 → 0.9.46
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/lib/rexle.rb +31 -3
- metadata +2 -2
data/lib/rexle.rb
CHANGED
@@ -10,6 +10,7 @@ require 'cgi'
|
|
10
10
|
include REXML
|
11
11
|
|
12
12
|
# modifications:
|
13
|
+
# 23-Aug-2012: feature: implemented xpath function contains()
|
13
14
|
# 17-Aug-2012: bug fix: pretty print now ignores text containing empty space
|
14
15
|
# 16-Aug-2012: the current element's text (if its not empty) is now returned
|
15
16
|
# from its children method
|
@@ -169,6 +170,19 @@ class Rexle
|
|
169
170
|
@child_lookup = []
|
170
171
|
end
|
171
172
|
|
173
|
+
def contains(raw_args)
|
174
|
+
path, raw_val = raw_args.split(',',2)
|
175
|
+
val = raw_val.strip[/^["']?.*["']?$/]
|
176
|
+
|
177
|
+
puts 'path : ' + path.inspect
|
178
|
+
|
179
|
+
anode = query_xpath(path)
|
180
|
+
return unless anode
|
181
|
+
a = scan_contents(anode.first)
|
182
|
+
|
183
|
+
[a.grep(/#{val}/).length > 0]
|
184
|
+
end
|
185
|
+
|
172
186
|
def count(path)
|
173
187
|
length = query_xpath(path).flatten.compact.length
|
174
188
|
length
|
@@ -196,7 +210,7 @@ class Rexle
|
|
196
210
|
def filter_xpath(path, rlist=[], &blk)
|
197
211
|
|
198
212
|
# is it a function
|
199
|
-
fn_match = path.match(/^(\w+)\(([^\)]*)
|
213
|
+
fn_match = path.match(/^(\w+)\(["']?([^\)]*)["']?\)$/)
|
200
214
|
|
201
215
|
# Array: proc {|x| x.flatten.compact},
|
202
216
|
if (fn_match and fn_match.captures.first[/^(attribute|@)/]) or fn_match.nil? then
|
@@ -217,7 +231,7 @@ class Rexle
|
|
217
231
|
procs[results.class.to_s.to_sym].call(results) if results
|
218
232
|
|
219
233
|
else
|
220
|
-
m, xpath_value = fn_match.captures
|
234
|
+
m, xpath_value = fn_match.captures
|
221
235
|
xpath_value.empty? ? method(m.to_sym).call : method(m.to_sym).call(xpath_value)
|
222
236
|
end
|
223
237
|
|
@@ -579,6 +593,20 @@ class Rexle
|
|
579
593
|
r << node.elements.map {|n| scan_match(n, path) if n.is_a? Rexle::Element}
|
580
594
|
r
|
581
595
|
end
|
596
|
+
|
597
|
+
# used by xpath function contains()
|
598
|
+
#
|
599
|
+
def scan_contents(node)
|
600
|
+
|
601
|
+
a = []
|
602
|
+
a << node.text
|
603
|
+
|
604
|
+
node.elements.each do |child|
|
605
|
+
a.concat scan_contents(child)
|
606
|
+
end
|
607
|
+
a
|
608
|
+
end
|
609
|
+
|
582
610
|
|
583
611
|
def filter(raw_element, i, attr_search, &blk)
|
584
612
|
|
@@ -743,4 +771,4 @@ class Rexle
|
|
743
771
|
[node.name, node.text.to_s, attributes, *children]
|
744
772
|
end
|
745
773
|
|
746
|
-
end
|
774
|
+
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: rexle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.9.
|
5
|
+
version: 0.9.46
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- James Robertson
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2012-
|
13
|
+
date: 2012-09-10 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rexleparser
|