rexslt 0.3.4 → 0.3.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/rexslt.rb +44 -18
- metadata +3 -5
data/lib/rexslt.rb
CHANGED
@@ -37,8 +37,8 @@ class Rexslt
|
|
37
37
|
xslt_transform *[xsl, xml].map{|x| RXFHelper.read(x).first}
|
38
38
|
end
|
39
39
|
|
40
|
-
def to_s()
|
41
|
-
@doc.to_s[/<root>(.*)<\/root>/m,1]
|
40
|
+
def to_s(options={})
|
41
|
+
@doc.to_s(options)[/<root>(.*)<\/root>/m,1]
|
42
42
|
end
|
43
43
|
|
44
44
|
def to_doc(); @doc; end
|
@@ -51,7 +51,6 @@ class Rexslt
|
|
51
51
|
|
52
52
|
field = x.attributes[:select]
|
53
53
|
node = element.element field
|
54
|
-
|
55
54
|
return unless node
|
56
55
|
|
57
56
|
keypath = node.to_xpath :no_cond
|
@@ -60,9 +59,13 @@ class Rexslt
|
|
60
59
|
# check for a nest <xsl:sort element
|
61
60
|
|
62
61
|
sort = x.element('xsl:sort')
|
62
|
+
|
63
63
|
if sort then
|
64
|
-
|
64
|
+
|
65
|
+
orderx = sort.attributes[:order] || 'ascending'
|
65
66
|
sort_field = sort.attributes[:select]
|
67
|
+
data_type = sort.attributes[:'data-type'] || 'text'
|
68
|
+
|
66
69
|
end
|
67
70
|
|
68
71
|
raw_template = @templates.to_a.find do |raw_item, template|
|
@@ -86,7 +89,22 @@ class Rexslt
|
|
86
89
|
template_xpath, template = raw_template
|
87
90
|
|
88
91
|
if sort_field then
|
89
|
-
|
92
|
+
sort_order = lambda do |x|
|
93
|
+
r = x.element(sort_field);
|
94
|
+
|
95
|
+
if r.respond_to?(:text) then
|
96
|
+
orderx == 'ascending' ? r.text : -r.text
|
97
|
+
else
|
98
|
+
|
99
|
+
if orderx == 'ascending' then
|
100
|
+
data_type == 'text' ? r : r.to_i
|
101
|
+
else
|
102
|
+
data_type == 'text' ? -r : -r.to_i
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
matched_node.sort_by(&sort_order).each do |child_node|
|
90
108
|
read_node template, child_node, doc_element, indent
|
91
109
|
end
|
92
110
|
else
|
@@ -98,9 +116,18 @@ class Rexslt
|
|
98
116
|
|
99
117
|
end
|
100
118
|
|
101
|
-
def match?(
|
102
|
-
|
103
|
-
|
119
|
+
def match?(raw_keypath, raw_path)
|
120
|
+
return false if raw_path == ['*']
|
121
|
+
keypath = raw_keypath.split('/').reverse.take raw_path.length
|
122
|
+
path = raw_path.reverse
|
123
|
+
r = path.map.with_index.select{|x,i|x == '*'}.map(&:last)
|
124
|
+
|
125
|
+
r.each do |n|
|
126
|
+
# get the relative value from path
|
127
|
+
path[n] = keypath[n]
|
128
|
+
end
|
129
|
+
|
130
|
+
keypath == path
|
104
131
|
end
|
105
132
|
|
106
133
|
|
@@ -146,7 +173,6 @@ class Rexslt
|
|
146
173
|
def xsl_element(element, x, doc_element, indent)
|
147
174
|
|
148
175
|
indent_before(element, x, doc_element, indent + 1) if @indent == true
|
149
|
-
|
150
176
|
name = x.attributes[:name]
|
151
177
|
new_element = Rexle::Element.new(name).add_text(x.text)
|
152
178
|
doc_element.add new_element
|
@@ -246,19 +272,19 @@ class Rexslt
|
|
246
272
|
end
|
247
273
|
|
248
274
|
def read_raw_element(element, x, doc_element, indent)
|
249
|
-
|
275
|
+
|
250
276
|
method_name = x.name.gsub(/[:-]/,'_').to_sym
|
251
|
-
|
277
|
+
|
252
278
|
if @xsl_methods.include? method_name then
|
253
279
|
method(method_name).call(element, x, doc_element, indent)
|
254
280
|
else
|
255
281
|
|
256
|
-
previous_indent = indent
|
282
|
+
previous_indent = indent
|
257
283
|
la = x.name
|
258
284
|
|
259
285
|
if x.children.length > 0 then
|
260
286
|
|
261
|
-
new_indent = indent + 1
|
287
|
+
new_indent = indent + 1 if @indent == true
|
262
288
|
new_element = x.clone
|
263
289
|
|
264
290
|
new_element2 = new_element.deep_clone
|
@@ -276,6 +302,8 @@ class Rexslt
|
|
276
302
|
indent_before(element, x, doc_element, new_indent) if @indent == true
|
277
303
|
|
278
304
|
#jr070412 new_element.text = new_element.text.strip if @indent == false
|
305
|
+
|
306
|
+
new_element2.text = new_element2.text.strip
|
279
307
|
doc_element.add new_element2
|
280
308
|
|
281
309
|
read_node(x, element, new_element2, new_indent)
|
@@ -297,7 +325,7 @@ class Rexslt
|
|
297
325
|
end
|
298
326
|
end
|
299
327
|
end
|
300
|
-
|
328
|
+
|
301
329
|
def xsl_text(element, x, doc_element, indent)
|
302
330
|
val = @indent == true ? padding(doc_element, indent, x) : ''
|
303
331
|
val += x.text
|
@@ -305,7 +333,6 @@ class Rexslt
|
|
305
333
|
end
|
306
334
|
|
307
335
|
def xsl_value_of(element, x, doc_element, indent)
|
308
|
-
|
309
336
|
field = x.attributes[:select]
|
310
337
|
o = field == '.' ? element.text : element.text(field)
|
311
338
|
doc_element.add_element o.to_s
|
@@ -348,13 +375,12 @@ class Rexslt
|
|
348
375
|
|
349
376
|
# using the 1st template
|
350
377
|
xpath = String.new @templates.to_a[0][0]
|
351
|
-
|
378
|
+
|
352
379
|
if doc_xml.root.name == xpath then
|
353
380
|
read_node(@templates.to_a[0][-1], doc_xml.element(xpath), @doc.root, indent)
|
354
381
|
else
|
355
382
|
# use this template
|
356
|
-
|
357
|
-
read_node(@templates.to_a[0][-1], doc_xml, node, indent)
|
383
|
+
read_node(@templates.to_a[0][-1], doc_xml.element(xpath), @doc.root, indent)
|
358
384
|
end
|
359
385
|
|
360
386
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: rexslt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.3.
|
5
|
+
version: 0.3.5
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- James Robertson
|
@@ -10,8 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2012-
|
14
|
-
default_executable:
|
13
|
+
date: 2012-06-24 00:00:00 Z
|
15
14
|
dependencies:
|
16
15
|
- !ruby/object:Gem::Dependency
|
17
16
|
name: rxfhelper
|
@@ -45,7 +44,6 @@ extra_rdoc_files: []
|
|
45
44
|
|
46
45
|
files:
|
47
46
|
- lib/rexslt.rb
|
48
|
-
has_rdoc: true
|
49
47
|
homepage:
|
50
48
|
licenses: []
|
51
49
|
|
@@ -69,7 +67,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
69
67
|
requirements: []
|
70
68
|
|
71
69
|
rubyforge_project:
|
72
|
-
rubygems_version: 1.
|
70
|
+
rubygems_version: 1.8.23
|
73
71
|
signing_key:
|
74
72
|
specification_version: 3
|
75
73
|
summary: rexslt
|