rexslt 0.3.5 → 0.3.6
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 +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
|