rexle 0.9.47 → 0.9.61
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/rexle.rb +36 -8
- metadata +3 -3
data/lib/rexle.rb
CHANGED
@@ -10,6 +10,10 @@ require 'cgi'
|
|
10
10
|
include REXML
|
11
11
|
|
12
12
|
# modifications:
|
13
|
+
# 20-Oct-2012: feature: added Rexle::Element#texts which is the equivalent
|
14
|
+
# of REXML::Element#texts
|
15
|
+
# feature: Rexle::Element#add_text is now the equivalent of
|
16
|
+
# REXML::Element#add_text
|
13
17
|
# 10-Sep-2012: bug fix: Removed code from method pretty_print in order to
|
14
18
|
# get the XML displayed properly
|
15
19
|
# 23-Aug-2012: feature: implemented xpath function contains()
|
@@ -37,8 +41,8 @@ include REXML
|
|
37
41
|
module XMLhelper
|
38
42
|
|
39
43
|
def doc_print(children)
|
40
|
-
|
41
|
-
body = (children.empty? or children.is_an_empty_string? ) ? '' : scan_print(children).join
|
44
|
+
|
45
|
+
body = (children.nil? or children.empty? or children.is_an_empty_string? ) ? '' : scan_print(children).join
|
42
46
|
a = self.root.attributes.to_a.map{|k,v| "%s='%s'" % [k,v]}
|
43
47
|
"<%s%s>%s</%s>" % [self.root.name, a.empty? ? '' : ' ' + a.join(' '), body, self.root.name]
|
44
48
|
end
|
@@ -118,6 +122,10 @@ class Rexle
|
|
118
122
|
|
119
123
|
attr_reader :prefixes
|
120
124
|
|
125
|
+
def self.version()
|
126
|
+
'0.9.xx'
|
127
|
+
end
|
128
|
+
|
121
129
|
def initialize(x=nil)
|
122
130
|
super()
|
123
131
|
|
@@ -213,6 +221,7 @@ class Rexle
|
|
213
221
|
procs = {
|
214
222
|
Array: proc {|x| block_given? ? x : x.flatten.uniq },
|
215
223
|
String: proc {|x| x},
|
224
|
+
Hash: proc {|x| x},
|
216
225
|
TrueClass: proc{|x| x},
|
217
226
|
FalseClass: proc{|x| x},
|
218
227
|
:"Rexle::Element" => proc {|x| [x]}
|
@@ -235,7 +244,6 @@ class Rexle
|
|
235
244
|
|
236
245
|
def query_xpath(raw_xpath_value, rlist=[], &blk)
|
237
246
|
|
238
|
-
#puts 'raw_xpath_value: ' + raw_xpath_value.inspect
|
239
247
|
#remove any pre'fixes
|
240
248
|
#@rexle.prefixes.each {|x| xpath_value.sub!(x + ':','') }
|
241
249
|
flag_func = false
|
@@ -277,6 +285,7 @@ class Rexle
|
|
277
285
|
|
278
286
|
attribute = xpath_value[/^(attribute::|@)(.*)/,2]
|
279
287
|
|
288
|
+
return @attributes if attribute == '*'
|
280
289
|
return [@attributes[attribute.to_sym]] if attribute and @attributes and @attributes.has_key?(attribute.to_sym)
|
281
290
|
s = a_path.shift
|
282
291
|
end
|
@@ -341,7 +350,9 @@ class Rexle
|
|
341
350
|
rtn_element = filter(x, i+1, attr_search){|e| r = e.xpath(a_path.join('/') + raw_condition.to_s + remaining_path, &blk); (r || e) }
|
342
351
|
next if rtn_element.nil? or (rtn_element.is_a? Array and rtn_element.empty?)
|
343
352
|
|
344
|
-
if rtn_element.is_a?
|
353
|
+
if rtn_element.is_a? Hash then
|
354
|
+
rtn_element
|
355
|
+
elsif rtn_element.is_a? Array then
|
345
356
|
rtn_element
|
346
357
|
elsif (rtn_element.is_a? String) || (rtn_element.is_a?(Array) and not(rtn_element[0].is_a? String))
|
347
358
|
rtn_element
|
@@ -411,7 +422,16 @@ class Rexle
|
|
411
422
|
@attributes.merge! h
|
412
423
|
end
|
413
424
|
|
414
|
-
def add_text(s)
|
425
|
+
def add_text(s)
|
426
|
+
if @child_elements.length < 1 then
|
427
|
+
@value = s;
|
428
|
+
else
|
429
|
+
if @child_elements.last.is_a? Rexle::Element then
|
430
|
+
self.add s
|
431
|
+
end
|
432
|
+
end
|
433
|
+
self
|
434
|
+
end
|
415
435
|
|
416
436
|
def attribute(key)
|
417
437
|
key = key.to_sym if key.is_a? String
|
@@ -421,7 +441,7 @@ class Rexle
|
|
421
441
|
def attributes() @attributes end
|
422
442
|
|
423
443
|
def children()
|
424
|
-
|
444
|
+
return unless @value
|
425
445
|
r = (@value.empty? ? [] : [@value]) + @child_elements
|
426
446
|
def r.is_an_empty_string?()
|
427
447
|
self.length == 1 and self.first == ''
|
@@ -459,7 +479,9 @@ class Rexle
|
|
459
479
|
end
|
460
480
|
|
461
481
|
def doc_root() @rexle.root end
|
462
|
-
def each(&blk)
|
482
|
+
def each(&blk)
|
483
|
+
@child_elements.each(&blk) #unless @child_elements.empty?
|
484
|
+
end
|
463
485
|
def has_elements?() !self.elements.empty? end
|
464
486
|
|
465
487
|
def insert_after(node) insert(node, 1) end
|
@@ -485,6 +507,10 @@ class Rexle
|
|
485
507
|
|
486
508
|
result
|
487
509
|
end
|
510
|
+
|
511
|
+
def texts()
|
512
|
+
[@value] + @child_elements.select {|x| x.is_a? String}
|
513
|
+
end
|
488
514
|
|
489
515
|
def value=(raw_s)
|
490
516
|
|
@@ -715,9 +741,11 @@ class Rexle
|
|
715
741
|
def xml(options={})
|
716
742
|
o = {pretty: false, declaration: true}.merge(options)
|
717
743
|
msg = o[:pretty] == false ? :doc_print : :doc_pretty_print
|
744
|
+
|
718
745
|
r = ''
|
719
746
|
r = "<?xml version='1.0' encoding='UTF-8'?>\n" if o[:declaration] == true
|
720
747
|
r << method(msg).call(self.root.children)
|
748
|
+
|
721
749
|
r
|
722
750
|
end
|
723
751
|
|
@@ -774,4 +802,4 @@ class Rexle
|
|
774
802
|
[node.name, node.text.to_s, attributes, *children]
|
775
803
|
end
|
776
804
|
|
777
|
-
end
|
805
|
+
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.61
|
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-10-
|
13
|
+
date: 2012-10-21 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rexleparser
|
@@ -92,6 +92,6 @@ rubyforge_project:
|
|
92
92
|
rubygems_version: 1.8.23
|
93
93
|
signing_key:
|
94
94
|
specification_version: 3
|
95
|
-
summary:
|
95
|
+
summary: Rexle is a simple XML parser written purely in Ruby
|
96
96
|
test_files: []
|
97
97
|
|