rexle 0.8.4 → 0.8.5
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 +73 -60
- metadata +1 -1
data/lib/rexle.rb
CHANGED
@@ -6,10 +6,69 @@ require 'rexml/document'
|
|
6
6
|
require 'rexleparser'
|
7
7
|
require 'dynarex-parser'
|
8
8
|
require 'polyrex-parser'
|
9
|
-
require 'pretty-xml'
|
10
9
|
include REXML
|
11
10
|
|
11
|
+
module XMLhelper
|
12
|
+
|
13
|
+
def doc_print(children)
|
14
|
+
|
15
|
+
body = scan_print(children).join
|
16
|
+
a = self.root.attributes.to_a.map{|k,v| "%s='%s'" % [k,v]}
|
17
|
+
"<%s%s>%s</%s>" % [self.root.name, a.empty? ? '' : ' ' + a.join(' '), body, self.root.name]
|
18
|
+
end
|
19
|
+
|
20
|
+
def doc_pretty_print(children)
|
21
|
+
|
22
|
+
body = pretty_print(children,2).join
|
23
|
+
a = self.root.attributes.to_a.map{|k,v| "%s='%s'" % [k,v]}
|
24
|
+
ind = "\n "
|
25
|
+
"<%s%s>%s%s%s</%s>" % [self.root.name, a.empty? ? '' : ' ' + a.join(' '), ind, body, "\n", self.root.name]
|
26
|
+
end
|
27
|
+
|
28
|
+
def scan_print(nodes)
|
29
|
+
|
30
|
+
nodes.map do |x|
|
31
|
+
unless x.name == '![' then
|
32
|
+
a = x.attributes.to_a.map{|k,v| "%s='%s'" % [k,v]}
|
33
|
+
tag = x.name + (a.empty? ? '' : ' ' + a.join(' '))
|
34
|
+
|
35
|
+
out = ["<%s>" % tag]
|
36
|
+
out << x.value unless x.value.nil? || x.value.empty?
|
37
|
+
out << scan_print(x.children)
|
38
|
+
out << "</%s>" % x.name
|
39
|
+
else
|
40
|
+
"<![CDATA[%s]]>" % x.value
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
def pretty_print(nodes, indent='0')
|
47
|
+
indent = indent.to_i
|
48
|
+
nodes.map.with_index do |x, i|
|
49
|
+
unless x.name == '![' then
|
50
|
+
a = x.attributes.to_a.map{|k,v| "%s='%s'" % [k,v]}
|
51
|
+
tag = x.name + (a.empty? ? '' : ' ' + a.join(' '))
|
52
|
+
|
53
|
+
ind1 = x.children.length > 0 ? ("\n" + ' ' * indent) : ''
|
54
|
+
start = i > 0 ? ("\n" + ' ' * (indent - 1)) : ''
|
55
|
+
out = ["%s<%s>%s" % [start, tag, ind1]]
|
56
|
+
|
57
|
+
out << x.value.sub(/^[\n\s]+$/,'') unless x.value.nil? || x.value.empty?
|
58
|
+
out << pretty_print(x.children, (indent + 1).to_s.clone)
|
59
|
+
ind2 = x.children.length > 0 ? ("\n" + ' ' * (indent - 1)) : ''
|
60
|
+
out << "%s</%s>" % [ind2, x.name]
|
61
|
+
else
|
62
|
+
"<![CDATA[%s]]>" % x.value
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
12
70
|
class Rexle
|
71
|
+
include XMLhelper
|
13
72
|
|
14
73
|
def initialize(x=nil)
|
15
74
|
super()
|
@@ -51,6 +110,8 @@ class Rexle
|
|
51
110
|
end
|
52
111
|
|
53
112
|
class Element
|
113
|
+
include XMLhelper
|
114
|
+
|
54
115
|
attr_accessor :name, :value, :parent
|
55
116
|
attr_reader :child_lookup
|
56
117
|
|
@@ -228,9 +289,17 @@ class Rexle
|
|
228
289
|
|
229
290
|
alias text= value=
|
230
291
|
|
292
|
+
def xml(options={})
|
293
|
+
o = {pretty: false}.merge(options)
|
294
|
+
msg = o[:pretty] == false ? :doc_print : :doc_pretty_print
|
295
|
+
method(msg).call(self.children)
|
296
|
+
end
|
297
|
+
|
298
|
+
# temp methods
|
299
|
+
|
231
300
|
private
|
232
301
|
|
233
|
-
def
|
302
|
+
def scan_print222(nodes)
|
234
303
|
out = []
|
235
304
|
nodes.each do |x|
|
236
305
|
out << "<%s>" % x.name
|
@@ -295,6 +364,8 @@ class Rexle
|
|
295
364
|
return items.join(' ')
|
296
365
|
end
|
297
366
|
end
|
367
|
+
|
368
|
+
|
298
369
|
end
|
299
370
|
|
300
371
|
def scan_match(nodes, element, attr_search, condition, rlist)
|
@@ -444,64 +515,6 @@ class Rexle
|
|
444
515
|
return element
|
445
516
|
end
|
446
517
|
|
447
|
-
def doc_print(children)
|
448
|
-
|
449
|
-
body = scan_print(children).join
|
450
|
-
a = self.root.attributes.to_a.map{|k,v| "%s='%s'" % [k,v]}
|
451
|
-
"<%s%s>%s</%s>" % [self.root.name, a.empty? ? '' : ' ' + a.join(' '), body, self.root.name]
|
452
|
-
end
|
453
|
-
|
454
|
-
|
455
|
-
def doc_pretty_print(children)
|
456
|
-
|
457
|
-
body = pretty_print(children,2).join
|
458
|
-
a = self.root.attributes.to_a.map{|k,v| "%s='%s'" % [k,v]}
|
459
|
-
ind = "\n "
|
460
|
-
"<%s%s>%s%s%s</%s>" % [self.root.name, a.empty? ? '' : ' ' + a.join(' '), ind, body, "\n", self.root.name]
|
461
|
-
end
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
def scan_print(nodes)
|
466
|
-
|
467
|
-
nodes.map do |x|
|
468
|
-
unless x.name == '![' then
|
469
|
-
a = x.attributes.to_a.map{|k,v| "%s='%s'" % [k,v]}
|
470
|
-
tag = x.name + (a.empty? ? '' : ' ' + a.join(' '))
|
471
|
-
|
472
|
-
out = ["<%s>" % tag]
|
473
|
-
out << x.value unless x.value.nil? || x.value.empty?
|
474
|
-
out << scan_print(x.children)
|
475
|
-
out << "</%s>" % x.name
|
476
|
-
else
|
477
|
-
"<![CDATA[%s]]>" % x.value
|
478
|
-
end
|
479
|
-
end
|
480
|
-
|
481
|
-
end
|
482
|
-
|
483
|
-
def pretty_print(nodes, indent='0')
|
484
|
-
indent = indent.to_i
|
485
|
-
nodes.map.with_index do |x, i|
|
486
|
-
unless x.name == '![' then
|
487
|
-
a = x.attributes.to_a.map{|k,v| "%s='%s'" % [k,v]}
|
488
|
-
tag = x.name + (a.empty? ? '' : ' ' + a.join(' '))
|
489
|
-
|
490
|
-
ind1 = x.children.length > 0 ? ("\n" + ' ' * indent) : ''
|
491
|
-
start = i > 0 ? ("\n" + ' ' * (indent - 1)) : ''
|
492
|
-
out = ["%s<%s>%s" % [start, tag, ind1]]
|
493
|
-
|
494
|
-
out << x.value.sub(/^[\n\s]+$/,'') unless x.value.nil? || x.value.empty?
|
495
|
-
out << pretty_print(x.children, (indent + 1).to_s.clone)
|
496
|
-
ind2 = x.children.length > 0 ? ("\n" + ' ' * (indent - 1)) : ''
|
497
|
-
out << "%s</%s>" % [ind2, x.name]
|
498
|
-
else
|
499
|
-
"<![CDATA[%s]]>" % x.value
|
500
|
-
end
|
501
|
-
end
|
502
|
-
|
503
|
-
end
|
504
|
-
|
505
518
|
def count(path) @doc.xpath(path).flatten.compact.length end
|
506
519
|
def max(path) @doc.xpath(path).map(&:to_i).max end
|
507
520
|
|