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.
Files changed (2) hide show
  1. data/lib/rexslt.rb +41 -34
  2. metadata +2 -2
@@ -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).each do |child_node|
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.each do |child_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
- node = element.element, condition
219
- read_node(x, element, doc_element, indent) if node and node == true
221
+ condition = x.attributes[:test].gsub('position()',i.to_s).gsub('&lt;','<').gsub('&gt;','>')
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
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-24 00:00:00 Z
13
+ date: 2012-06-26 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rxfhelper