rexslt 0.3.5 → 0.3.6
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/rexslt.rb +41 -34
- metadata +2 -2
data/lib/rexslt.rb
CHANGED
@@ -47,7 +47,7 @@ class Rexslt
|
|
47
47
|
|
48
48
|
private
|
49
49
|
|
50
|
-
def xsl_apply_templates(element, x, doc_element, indent)
|
50
|
+
def xsl_apply_templates(element, x, doc_element, indent, i)
|
51
51
|
|
52
52
|
field = x.attributes[:select]
|
53
53
|
node = element.element field
|
@@ -70,6 +70,7 @@ class Rexslt
|
|
70
70
|
|
71
71
|
raw_template = @templates.to_a.find do |raw_item, template|
|
72
72
|
|
73
|
+
|
73
74
|
item = raw_item.split('/')
|
74
75
|
|
75
76
|
if match? keypath, item then
|
@@ -104,12 +105,12 @@ class Rexslt
|
|
104
105
|
end
|
105
106
|
end
|
106
107
|
|
107
|
-
matched_node.sort_by(&sort_order).
|
108
|
-
read_node template, child_node, doc_element, indent
|
108
|
+
matched_node.sort_by(&sort_order).each_with_index do |child_node,i|
|
109
|
+
read_node template, child_node, doc_element, indent, i+1
|
109
110
|
end
|
110
111
|
else
|
111
|
-
matched_node.
|
112
|
-
read_node template, child_node, doc_element, indent
|
112
|
+
matched_node.each_with_index do |child_node,i|
|
113
|
+
read_node template, child_node, doc_element, indent, i+1
|
113
114
|
end
|
114
115
|
end
|
115
116
|
end
|
@@ -130,15 +131,18 @@ class Rexslt
|
|
130
131
|
keypath == path
|
131
132
|
end
|
132
133
|
|
134
|
+
def position()
|
135
|
+
@position ||= 0
|
136
|
+
end
|
133
137
|
|
134
|
-
def xsl_attribute(element, x, doc_element, indent)
|
138
|
+
def xsl_attribute(element, x, doc_element, indent, i)
|
135
139
|
|
136
140
|
name = x.attributes[:name]
|
137
141
|
value = x.text
|
138
142
|
doc_element.add_attribute name, value
|
139
143
|
end
|
140
144
|
|
141
|
-
def xsl_choose(element, x, doc_element, indent)
|
145
|
+
def xsl_choose(element, x, doc_element, indent, i)
|
142
146
|
|
143
147
|
#get the when clause
|
144
148
|
|
@@ -148,7 +152,7 @@ class Rexslt
|
|
148
152
|
node = element.element condition
|
149
153
|
|
150
154
|
if node and node == true
|
151
|
-
read_node(xsl_node, element, doc_element, indent)
|
155
|
+
read_node(xsl_node, element, doc_element, indent, i)
|
152
156
|
true
|
153
157
|
else
|
154
158
|
false
|
@@ -162,7 +166,7 @@ class Rexslt
|
|
162
166
|
|
163
167
|
end
|
164
168
|
|
165
|
-
def xsl_copy_of(element, x, doc_element, indent)
|
169
|
+
def xsl_copy_of(element, x, doc_element, indent, i)
|
166
170
|
|
167
171
|
indent_element(element, x, doc_element, indent, indent - 1) do
|
168
172
|
doc_element.add element
|
@@ -170,17 +174,17 @@ class Rexslt
|
|
170
174
|
|
171
175
|
end
|
172
176
|
|
173
|
-
def xsl_element(element, x, doc_element, indent)
|
177
|
+
def xsl_element(element, x, doc_element, indent, i)
|
174
178
|
|
175
|
-
indent_before(element, x, doc_element, indent + 1) if @indent == true
|
179
|
+
indent_before(element, x, doc_element, indent + 1, i) if @indent == true
|
176
180
|
name = x.attributes[:name]
|
177
181
|
new_element = Rexle::Element.new(name).add_text(x.text)
|
178
182
|
doc_element.add new_element
|
179
|
-
read_node(x, element, new_element, indent)
|
180
|
-
indent_after(element, x, doc_element, indent) if @indent == true
|
183
|
+
read_node(x, element, new_element, indent, i)
|
184
|
+
indent_after(element, x, doc_element, indent, i) if @indent == true
|
181
185
|
end
|
182
186
|
|
183
|
-
def xsl_for_each(element, x, doc_element, indent)
|
187
|
+
def xsl_for_each(element, x, doc_element, indent, i)
|
184
188
|
|
185
189
|
xpath = x.attributes[:select]
|
186
190
|
nodes = element.match xpath
|
@@ -208,18 +212,21 @@ class Rexslt
|
|
208
212
|
nodes.reverse! if order.downcase == 'descending'
|
209
213
|
end
|
210
214
|
|
211
|
-
nodes.each {|node| read_node(x, node, doc_element, indent)}
|
215
|
+
nodes.each {|node| read_node(x, node, doc_element, indent, i)}
|
212
216
|
|
213
217
|
end
|
214
218
|
|
215
|
-
def xsl_if(element, x, doc_element, indent)
|
219
|
+
def xsl_if(element, x, doc_element, indent, i=0)
|
216
220
|
|
217
|
-
condition = x.attributes[:test]
|
218
|
-
|
219
|
-
|
221
|
+
condition = x.attributes[:test].gsub('position()',i.to_s).gsub('<','<').gsub('>','>')
|
222
|
+
result = eval(condition)
|
223
|
+
|
224
|
+
if result then
|
225
|
+
read_node(x, element, doc_element, indent)
|
226
|
+
end
|
220
227
|
end
|
221
228
|
|
222
|
-
def indent_before(element, x, doc_element, indent)
|
229
|
+
def indent_before(element, x, doc_element, indent, i)
|
223
230
|
text = ''
|
224
231
|
unless doc_element.texts.empty? and doc_element.texts.last.nil? then
|
225
232
|
text = ' ' * (indent - 1) unless doc_element.texts.last.to_s[/^\n\s/m]
|
@@ -239,9 +246,9 @@ class Rexslt
|
|
239
246
|
end
|
240
247
|
|
241
248
|
def indent_element(element, x, doc_element, indent, previous_indent)
|
242
|
-
indent_before(element, x, doc_element, indent) if @indent == true
|
249
|
+
indent_before(element, x, doc_element, indent, i) if @indent == true
|
243
250
|
yield
|
244
|
-
indent_after(element, x, doc_element, previous_indent) if @indent == true
|
251
|
+
indent_after(element, x, doc_element, previous_indent, i) if @indent == true
|
245
252
|
end
|
246
253
|
|
247
254
|
def padding(element,raw_indent, x)
|
@@ -252,18 +259,18 @@ class Rexslt
|
|
252
259
|
x.to_s.strip.length > 0 ? ' ' * indent : ''
|
253
260
|
end
|
254
261
|
|
255
|
-
def read_node(template_node, element, doc_element, indent)
|
262
|
+
def read_node(template_node, element, doc_element, indent, i=0)
|
256
263
|
|
257
264
|
procs = {"Rexle::Element" => :read_raw_element, "String" => :read_raw_text}
|
258
265
|
|
259
266
|
template_node.each do |x|
|
260
|
-
method(procs[x.class.to_s]).call(element, x, doc_element, indent)
|
267
|
+
method(procs[x.class.to_s]).call(element, x, doc_element, indent, i)
|
261
268
|
end
|
262
269
|
end
|
263
270
|
|
264
271
|
# element: xml source element, x: xsl element, doc_element: current destination xml element
|
265
272
|
#
|
266
|
-
def read_raw_text(element, x, doc_element, raw_indent)
|
273
|
+
def read_raw_text(element, x, doc_element, raw_indent, i)
|
267
274
|
#val = @indent == true ? padding(doc_element, raw_indent, x) : ''
|
268
275
|
if x.to_s.strip.length > 0 then
|
269
276
|
val = x.to_s #
|
@@ -271,12 +278,12 @@ class Rexslt
|
|
271
278
|
end
|
272
279
|
end
|
273
280
|
|
274
|
-
def read_raw_element(element, x, doc_element, indent)
|
281
|
+
def read_raw_element(element, x, doc_element, indent, i)
|
275
282
|
|
276
283
|
method_name = x.name.gsub(/[:-]/,'_').to_sym
|
277
284
|
|
278
285
|
if @xsl_methods.include? method_name then
|
279
|
-
method(method_name).call(element, x, doc_element, indent)
|
286
|
+
method(method_name).call(element, x, doc_element, indent, i)
|
280
287
|
else
|
281
288
|
|
282
289
|
previous_indent = indent
|
@@ -299,40 +306,40 @@ class Rexslt
|
|
299
306
|
end
|
300
307
|
end
|
301
308
|
|
302
|
-
indent_before(element, x, doc_element, new_indent) if @indent == true
|
309
|
+
indent_before(element, x, doc_element, new_indent, i) if @indent == true
|
303
310
|
|
304
311
|
#jr070412 new_element.text = new_element.text.strip if @indent == false
|
305
312
|
|
306
313
|
new_element2.text = new_element2.text.strip
|
307
314
|
doc_element.add new_element2
|
308
315
|
|
309
|
-
read_node(x, element, new_element2, new_indent)
|
310
|
-
indent_after(element, x, doc_element, previous_indent) if @indent == true
|
316
|
+
read_node(x, element, new_element2, new_indent, i)
|
317
|
+
indent_after(element, x, doc_element, previous_indent, i) if @indent == true
|
311
318
|
|
312
319
|
else
|
313
320
|
|
314
321
|
unless doc_element.children.length > 0
|
315
|
-
indent_before(element, x, doc_element, indent) if @indent == true
|
322
|
+
indent_before(element, x, doc_element, indent, i) if @indent == true
|
316
323
|
end
|
317
324
|
|
318
325
|
val = @indent == true ? ' ' + x.to_s : x.to_s
|
319
326
|
doc_element.add val
|
320
327
|
|
321
328
|
if @indent == true then
|
322
|
-
indent_after(element, x, doc_element, previous_indent)
|
329
|
+
indent_after(element, x, doc_element, previous_indent, i)
|
323
330
|
end
|
324
331
|
|
325
332
|
end
|
326
333
|
end
|
327
334
|
end
|
328
335
|
|
329
|
-
def xsl_text(element, x, doc_element, indent)
|
336
|
+
def xsl_text(element, x, doc_element, indent, i)
|
330
337
|
val = @indent == true ? padding(doc_element, indent, x) : ''
|
331
338
|
val += x.text
|
332
339
|
doc_element.add_element val
|
333
340
|
end
|
334
341
|
|
335
|
-
def xsl_value_of(element, x, doc_element, indent)
|
342
|
+
def xsl_value_of(element, x, doc_element, indent, i)
|
336
343
|
field = x.attributes[:select]
|
337
344
|
o = field == '.' ? element.text : element.text(field)
|
338
345
|
doc_element.add_element o.to_s
|
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.6
|
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-06-
|
13
|
+
date: 2012-06-26 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rxfhelper
|