rexslt 0.6.9 → 0.7.0
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.
- checksums.yaml +5 -5
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/rexslt.rb +91 -31
- metadata +37 -34
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: aa90a309932376c100cce5be8f22d80a557b991f5fed84916eb7835c30bfd0a7
|
4
|
+
data.tar.gz: 41ad2d628a4c98d16a2d088b00dacb865c0935e1d57d0fde72f92a14860c45cf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b74db7015db32fd1f917974f499fe5542590ab7063fe0611e60969b085aa4a7710f0afcd892044958afe66f70a172d0fbcb8e1c25ba3b64330f948583b2dcc6
|
7
|
+
data.tar.gz: 14265ce7768530af39b2a6576d16c220008a12550cac838aa38ba4d3f16a4a044b5765719ae1657c12c1c004b1b0b06b6aa9e01ee95f602f83736595041f90fa
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/lib/rexslt.rb
CHANGED
@@ -4,10 +4,15 @@
|
|
4
4
|
|
5
5
|
require 'rexle'
|
6
6
|
require 'rxfhelper'
|
7
|
+
require 'logger'
|
7
8
|
|
8
9
|
|
9
10
|
# modifications:
|
10
|
-
|
11
|
+
#
|
12
|
+
# 01-Feb-2019: bug fix: new line characters are no longer stripped
|
13
|
+
# between XSL elements
|
14
|
+
# bug fix: An attribute variable value is now returned correctly
|
15
|
+
# 19-Jan-2018: feature: Implemented Rexslt#to_xml which returns pretty XML
|
11
16
|
# 16-Sep-2017: improvement: all predicates in an xsl:choose
|
12
17
|
# condition now must be true
|
13
18
|
# 15-Sep-2017: feature: Implemented xsl_call_template
|
@@ -57,31 +62,36 @@ end
|
|
57
62
|
|
58
63
|
class Rexslt
|
59
64
|
using RexPath
|
65
|
+
using ColouredText
|
60
66
|
|
61
|
-
def initialize(xsl, xml,
|
67
|
+
def initialize(xsl, xml, raw_params={}, debug: false)
|
62
68
|
|
63
69
|
## debugging variables
|
64
70
|
|
65
|
-
@log = Logger.new 'rxsl.log','daily'
|
66
71
|
@rn = 0
|
67
72
|
@rre = 0
|
68
73
|
|
69
74
|
super()
|
70
|
-
|
75
|
+
puts 'before options'.info if @debug
|
71
76
|
@options = {}
|
77
|
+
|
78
|
+
params = raw_params.merge({debug: false})
|
79
|
+
@debug = debug
|
72
80
|
custom_params = params.inject({}){|r,x| r.merge(Hash[x[0].to_s,x[1]])}
|
73
|
-
|
81
|
+
puts 'before xsl_transform'.info if @debug
|
74
82
|
|
75
83
|
xslt_transform(*[xsl, xml].map{|x| RXFHelper.read(x).first}, custom_params)
|
76
84
|
end
|
77
85
|
|
78
86
|
def to_s(options={})
|
79
|
-
@doc.to_s(@options.merge(options)).sub('
|
87
|
+
@doc.to_s(@options.merge(options)).sub(/<root4>/,'').sub(/<\/root4>$/m,'').lstrip
|
80
88
|
end
|
81
89
|
|
82
90
|
def to_doc(); @doc; end
|
83
91
|
|
84
|
-
|
92
|
+
def to_xml()
|
93
|
+
@doc.root.xml(pretty: true).sub(/<root4>/,'').sub(/<\/root4>$/m,'')
|
94
|
+
end
|
85
95
|
|
86
96
|
private
|
87
97
|
|
@@ -236,6 +246,24 @@ class Rexslt
|
|
236
246
|
end
|
237
247
|
|
238
248
|
end
|
249
|
+
|
250
|
+
def xsl_cdata(element, x, doc_element, indent, i)
|
251
|
+
puts ('cdata x: ' + element.inspect) if @debug
|
252
|
+
|
253
|
+
new_element = Rexle::CData.new(x.value.to_s)
|
254
|
+
|
255
|
+
read_node(x, element, new_element, indent, i)
|
256
|
+
doc_element.add new_element
|
257
|
+
end
|
258
|
+
|
259
|
+
def xsl_comment(element, x, doc_element, indent, i)
|
260
|
+
#puts ('comment x: ' + element.inspect) if @debug
|
261
|
+
|
262
|
+
new_element = Rexle::Comment.new(x.value.to_s)
|
263
|
+
|
264
|
+
read_node(x, element, new_element, indent, i)
|
265
|
+
doc_element.add new_element
|
266
|
+
end
|
239
267
|
|
240
268
|
def xsl_copy_of(element, x, doc_element, indent, i)
|
241
269
|
#jr251012 indent = 1 unless indent
|
@@ -255,12 +283,15 @@ class Rexslt
|
|
255
283
|
name = x.attributes[:name]
|
256
284
|
variable = name[/^\{(.*)\}$/,1]
|
257
285
|
|
286
|
+
puts 'variable: ' + variable.inspect if @debug
|
287
|
+
|
258
288
|
if variable then
|
259
289
|
name = element.element(variable)
|
260
290
|
end
|
261
291
|
|
262
292
|
new_element = Rexle::Element.new(name) # .add_text(x.value.strip)
|
263
|
-
|
293
|
+
puts 'element.text: ' + element.to_s.inspect
|
294
|
+
new_element.text = element.text.to_s.strip
|
264
295
|
|
265
296
|
read_node(x, element, new_element, indent, i)
|
266
297
|
doc_element.add new_element
|
@@ -343,9 +374,11 @@ class Rexslt
|
|
343
374
|
end
|
344
375
|
|
345
376
|
def indent_after(element, x, doc_element, prev_indent)
|
377
|
+
|
378
|
+
puts 'indent? : ' + @indent.inspect if @debug
|
346
379
|
|
347
380
|
if @indent == true then
|
348
|
-
doc_element.add_text
|
381
|
+
doc_element.add_text ' ' * (prev_indent > 0 ? prev_indent - 1 : prev_indent)
|
349
382
|
end
|
350
383
|
end
|
351
384
|
|
@@ -373,6 +406,7 @@ class Rexslt
|
|
373
406
|
|
374
407
|
template_node.children.each_with_index do |x,j|
|
375
408
|
|
409
|
+
puts ('x: ' + x.inspect).debug if @debug
|
376
410
|
name = if x.kind_of? Rexle::Element then :read_raw_element
|
377
411
|
elsif x.is_a? String then :read_raw_text
|
378
412
|
elsif x.class.to_s =~ /Rexle::Comment$/ then :ignore
|
@@ -380,7 +414,10 @@ class Rexslt
|
|
380
414
|
:ignore
|
381
415
|
end
|
382
416
|
|
383
|
-
method(name).call(element, x, doc_element, indent, i)
|
417
|
+
r2 = method(name).call(element, x, doc_element, indent, i)
|
418
|
+
puts 'r2: ' + r2.inspect if @debug
|
419
|
+
r2
|
420
|
+
|
384
421
|
end
|
385
422
|
|
386
423
|
end
|
@@ -393,11 +430,10 @@ class Rexslt
|
|
393
430
|
if x.to_s.strip.length > 0 then
|
394
431
|
|
395
432
|
val = x.to_s.strip #
|
396
|
-
|
433
|
+
puts ('val: ' + val.inspect).debug if @debug
|
434
|
+
doc_element.add_element x.to_s
|
397
435
|
end
|
398
436
|
|
399
|
-
#doc_element.add_text x if x.is_a? String
|
400
|
-
|
401
437
|
end
|
402
438
|
|
403
439
|
# element: xml element
|
@@ -427,20 +463,28 @@ class Rexslt
|
|
427
463
|
new_element.attributes.each do |k,raw_v|
|
428
464
|
|
429
465
|
v = raw_v.is_a?(Array) ? raw_v.join(' ') : raw_v
|
430
|
-
|
466
|
+
|
467
|
+
puts 'v: ' + v.inspect if @debug
|
468
|
+
|
431
469
|
if v[/{/] then
|
432
470
|
|
433
471
|
v.gsub!(/(\{[^\}]+\})/) do |x2|
|
434
472
|
|
435
473
|
xpath = x2[/\{([^\}]+)\}/,1]
|
436
|
-
text
|
474
|
+
puts 'element.text(xpath): ' + element.text(xpath).inspect if @debug
|
475
|
+
text = element.text(xpath).to_s.strip
|
476
|
+
puts 'text: ' + text.inspect if @debug
|
437
477
|
text ? text.clone : ''
|
438
478
|
|
439
479
|
end
|
480
|
+
|
481
|
+
puts '2. v: ' + v.inspect if @debug
|
440
482
|
|
441
483
|
end
|
442
484
|
end
|
443
|
-
|
485
|
+
|
486
|
+
puts 'x.children.length: ' + x.children.length.inspect if @debug
|
487
|
+
|
444
488
|
if x.children.length > 0 then
|
445
489
|
|
446
490
|
indent_before(element, x, doc_element, new_indent, j) if @indent == true
|
@@ -459,31 +503,43 @@ class Rexslt
|
|
459
503
|
|
460
504
|
else
|
461
505
|
|
462
|
-
indent_before(element, x,
|
506
|
+
indent_before(element, x, new_element, new_indent, j) if @indent == true
|
463
507
|
|
464
508
|
val = @indent == true ? x.to_s : x.to_s
|
465
|
-
doc_element.add val
|
509
|
+
#jr020219 doc_element.add val
|
510
|
+
doc_element.add new_element
|
466
511
|
|
467
512
|
end
|
468
|
-
|
513
|
+
|
469
514
|
end
|
515
|
+
#new_element
|
516
|
+
#puts 'attributes: ' + new_element.attributes.inspect if @debug
|
470
517
|
|
471
518
|
end
|
472
519
|
|
473
|
-
def value_of(x,
|
520
|
+
def value_of(x, elementx, i)
|
521
|
+
|
522
|
+
puts 'value_of: ' + elementx.to_s.inspect if @debug
|
474
523
|
|
475
524
|
field = x.attributes[:select]
|
476
525
|
|
477
526
|
o = case field
|
478
527
|
when '.'
|
479
|
-
|
528
|
+
elementx.value
|
480
529
|
when /^\$/
|
481
530
|
@param[field[/^\$(.*)/,1]]
|
482
531
|
when 'position()'
|
483
532
|
i.to_s
|
484
533
|
else
|
485
|
-
|
486
|
-
|
534
|
+
r = elementx.element(field)
|
535
|
+
if r.is_a? Rexle::Element::Attribute
|
536
|
+
r.value.to_s
|
537
|
+
elsif r.is_a? Rexle::Element
|
538
|
+
r.texts.join
|
539
|
+
else
|
540
|
+
''
|
541
|
+
end
|
542
|
+
|
487
543
|
end
|
488
544
|
|
489
545
|
end
|
@@ -507,7 +563,8 @@ class Rexslt
|
|
507
563
|
end
|
508
564
|
|
509
565
|
def xsl_value_of(element, x, doc_element, indent, i)
|
510
|
-
|
566
|
+
|
567
|
+
#puts 'xsl_value_of: ' + x.inspect if @debug
|
511
568
|
s = value_of(x, element,i)
|
512
569
|
doc_element.add_text s
|
513
570
|
doc_element
|
@@ -517,22 +574,22 @@ class Rexslt
|
|
517
574
|
|
518
575
|
def xslt_transform(raw_xsl, xml, custom_params={})
|
519
576
|
|
520
|
-
|
577
|
+
puts 'inside xslt_transform'.info if @debug
|
521
578
|
|
522
579
|
doc_xml = xml.is_a?(Rexle) ? xml : Rexle.new(xml)
|
523
580
|
|
524
|
-
@doc_xsl = raw_xsl.is_a?(Rexle) ? raw_xsl : Rexle.new(raw_xsl)
|
525
|
-
|
581
|
+
@doc_xsl = raw_xsl.is_a?(Rexle) ? raw_xsl : Rexle.new(raw_xsl.gsub(/(?<=\<\/xsl:text>)[^<]+/,''))
|
582
|
+
puts 'after @doc_xsl'.info if @debug
|
526
583
|
|
527
584
|
#jr2040516 filter_out_spaces @doc_xsl.root
|
528
585
|
|
529
|
-
@doc = Rexle.new '<
|
586
|
+
@doc = Rexle.new '<root4></root4>', debug: @debug
|
530
587
|
|
531
588
|
indent = 0
|
532
589
|
|
533
590
|
previous_indent = 0
|
534
591
|
@xsl_methods = %i(apply_templates value_of element if choose when copy_of
|
535
|
-
attribute for_each text output call_template).map do |x|
|
592
|
+
attribute for_each text output call_template comment cdata).map do |x|
|
536
593
|
('xsl_' + x.to_s).to_sym
|
537
594
|
end
|
538
595
|
|
@@ -548,7 +605,8 @@ class Rexslt
|
|
548
605
|
end
|
549
606
|
|
550
607
|
h = @doc_xsl.root.element("xsl:output/attribute::*")
|
551
|
-
|
608
|
+
puts 'h: ' + h.inspect if @debug
|
609
|
+
puts 'after h'.info if @debug
|
552
610
|
|
553
611
|
if h and ((h[:method] and h[:method].downcase == 'html') \
|
554
612
|
or h[:'omit-xml-declaration'] == 'yes') then
|
@@ -572,6 +630,8 @@ class Rexslt
|
|
572
630
|
# using the 1st template
|
573
631
|
xpath = String.new @templates.to_a[0][0]
|
574
632
|
out = read_node(@templates.to_a[0][-1], doc_xml.element(xpath), @doc.root, indent)
|
633
|
+
|
634
|
+
puts ('out: ' + out.inspect).debug if @debug
|
575
635
|
|
576
636
|
html = @doc.root.element('html')
|
577
637
|
|
@@ -610,4 +670,4 @@ class Rexslt
|
|
610
670
|
|
611
671
|
end
|
612
672
|
|
613
|
-
end
|
673
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rexslt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -10,49 +10,53 @@ bindir: bin
|
|
10
10
|
cert_chain:
|
11
11
|
- |
|
12
12
|
-----BEGIN CERTIFICATE-----
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
13
|
+
MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
|
14
|
+
YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjAwNjExMDg0NzI2WhcN
|
15
|
+
MjEwNjExMDg0NzI2WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
|
16
|
+
cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDPC1jP
|
17
|
+
UnBsDwh6SFog0UD7FfPwnsAyWkevkFcg/xnKOL9XvLlvfKl5bPZARVOmPh0CJU/e
|
18
|
+
YTPvmJ4LsLObJUNKvxuYkk2YVIAUFeMKrGrIbFkZ+Whs9qgDW8TOOsDoytNUcDau
|
19
|
+
92s+9eRmH9HyemjM8OavlfNunE+eQV7biidbdzBDXi0WZPzrofp28T/MsNkWv8mn
|
20
|
+
1qCIJQT10VrG/fz6P8gbnK/4Km4Dm42818TGg+hjyu6rZwaI8jseh6pDMCzBnXZg
|
21
|
+
NGI3EWs+InBv3EorhHhFXP11ZOj3NwJ6/LZMN6p22rTy9J6+3M1q6EKak3SkwQvp
|
22
|
+
ZupuK2wvrBQtb/YmYhqwpfrgtDCqB+mx4Fr6uE5xMqKYJz/SKr0UX4O4gnrVHAJt
|
23
|
+
okbBpJRnystbaLqokUkG1Y8wKN7N51HjN3I63js6uMwPNsxhE/06CfuqCAAsbuBw
|
24
|
+
ZNIuyS9VyBQZgg0RIof3vfYq9/aapYZKTRETBuO23gNnYJWZNGFld0cuwGkCAwEA
|
25
|
+
AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUmAFTYnIa
|
26
|
+
oQk0m1KXgr0YS/KmfUgwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
|
27
|
+
c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
|
28
|
+
BgkqhkiG9w0BAQsFAAOCAYEAC4Ug/dDQy6LlTghpYiXr7cx9xt9fSn54mEMpq3Sv
|
29
|
+
FDD+UmCvttADlo2vSk60EC6TUlW3sdlzP1w8FEeFyBp+y7biXK7DZHGUKxHCx9jy
|
30
|
+
hvbOS9okcb6k/7mAX1LYym+wmFN3+7gm2n1s94NIdJPpNhhnbbaDBaelKaWCg+TI
|
31
|
+
oIl3jIO7zoBIPnpIjYoH4Bl1gLesuvsmf31llGbHCQwuNMkYNmRxGO0zvvJ9I2VH
|
32
|
+
F9CN9sPeTRj9t1S0Qwkgw53+1Z9HCOSSTmhftpPRCYqXB3rWxQjjEhPPk+a39WWZ
|
33
|
+
ESidVaVw58zW50BejA4CitkgPe40gAYUbWLbl/JmaPEY7BusUghRxP0yE0SCTUPZ
|
34
|
+
Kd+1svoJytUIfwSCQoVgapdhxx6Z1sz9IeGswNCHPaP/jebMXJIL+PYU/7AHTRXu
|
35
|
+
/16J2OUcKrvQrokVNgm0rF4M9Hu4NBscxtnDWItY6latWceUQ8Er0p4Sgd2l5AGY
|
36
|
+
CeLdjbFCkrm/RzoszCPvxQcQ
|
33
37
|
-----END CERTIFICATE-----
|
34
|
-
date:
|
38
|
+
date: 2020-06-11 00:00:00.000000000 Z
|
35
39
|
dependencies:
|
36
40
|
- !ruby/object:Gem::Dependency
|
37
41
|
name: rxfhelper
|
38
42
|
requirement: !ruby/object:Gem::Requirement
|
39
43
|
requirements:
|
40
|
-
- - "~>"
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: '0.4'
|
43
44
|
- - ">="
|
44
45
|
- !ruby/object:Gem::Version
|
45
|
-
version: 0.
|
46
|
+
version: 1.0.0
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '1.0'
|
46
50
|
type: :runtime
|
47
51
|
prerelease: false
|
48
52
|
version_requirements: !ruby/object:Gem::Requirement
|
49
53
|
requirements:
|
50
|
-
- - "~>"
|
51
|
-
- !ruby/object:Gem::Version
|
52
|
-
version: '0.4'
|
53
54
|
- - ">="
|
54
55
|
- !ruby/object:Gem::Version
|
55
|
-
version: 0.
|
56
|
+
version: 1.0.0
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '1.0'
|
56
60
|
- !ruby/object:Gem::Dependency
|
57
61
|
name: rexle
|
58
62
|
requirement: !ruby/object:Gem::Requirement
|
@@ -62,7 +66,7 @@ dependencies:
|
|
62
66
|
version: '1.4'
|
63
67
|
- - ">="
|
64
68
|
- !ruby/object:Gem::Version
|
65
|
-
version: 1.4.
|
69
|
+
version: 1.4.12
|
66
70
|
type: :runtime
|
67
71
|
prerelease: false
|
68
72
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -72,7 +76,7 @@ dependencies:
|
|
72
76
|
version: '1.4'
|
73
77
|
- - ">="
|
74
78
|
- !ruby/object:Gem::Version
|
75
|
-
version: 1.4.
|
79
|
+
version: 1.4.12
|
76
80
|
description:
|
77
81
|
email: james@jamesrobertson.eu
|
78
82
|
executables: []
|
@@ -99,8 +103,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
99
103
|
- !ruby/object:Gem::Version
|
100
104
|
version: '0'
|
101
105
|
requirements: []
|
102
|
-
|
103
|
-
rubygems_version: 2.6.8
|
106
|
+
rubygems_version: 3.0.3
|
104
107
|
signing_key:
|
105
108
|
specification_version: 4
|
106
109
|
summary: Rexslt is an XSLT processor written purely in Ruby
|
metadata.gz.sig
CHANGED
Binary file
|