rexleparser 0.9.5 → 0.9.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 625932990da23296e55a9893dc5875d561e67716d249dd259471e0da22ee10ef
4
- data.tar.gz: ee0c90ae8829a75c83cdd5a2090746b2316f0fcb60a4a5b816bf50c85afced4a
3
+ metadata.gz: 3059b4fd1544e6c16167934dbc60e77c82c0bf57674e0d99e71c39b96909efb1
4
+ data.tar.gz: 6f3377d006cd852abe4b88881a320207579d138fbadf5e8aa830a3d4ca24d598
5
5
  SHA512:
6
- metadata.gz: eaee723b0061c32e4af122918955a9633795c7477d6f81bfc27af6723a92b803f6f71bcaa6dcd72bb12d9c8f12c78c7d3a87e3ed719f7a2aabf9a1d5f9569382
7
- data.tar.gz: 841a859447b1e2ce669147ef377c69819f7be4955e67781a7f2224963bd27e6c878ce32142267f36f2a4d72b386d1e6d1c11ac679760bd5f49a364382ef0796c
6
+ metadata.gz: f2ddf0f05e84df521185a1606aa98b6a745902e2d35235d2ff6948e430ced3cfa2772aa1944191b00c8a045b16c58be884ce0a2f5dcdc7ec2e4e7cc078c5caa6
7
+ data.tar.gz: 8ef7aae9fc024a71d8ab79254f6ca7abb6d301ebd02696e15ea5138ab68074b2f57ebd8166a4f4421c61d24db2f94101654d753bf4af800ef593ae44c99d06ff
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/rexleparser.rb CHANGED
@@ -7,48 +7,48 @@
7
7
  class Attributes < Hash
8
8
 
9
9
  class Value < String
10
-
10
+
11
11
  def initialize(value)
12
12
  #jr2020-04-30 super(value.gsub("'", '&apos;'))
13
13
  super(value)
14
14
  end
15
-
15
+
16
16
  def <(val2)
17
17
  self.to_f < val2.to_f
18
- end
19
-
18
+ end
19
+
20
20
  def >(val2)
21
21
  self.to_f > val2.to_f
22
22
  end
23
-
23
+
24
24
  def inspect()
25
25
  super().gsub('&lt;','<',).gsub('&gt;','>').gsub('&pos;',"'")
26
26
  end
27
-
28
- def to_s()
29
- self.gsub('&lt;','<',).gsub('&gt;','>').gsub('&pos;',"'")
27
+
28
+ def to_s(unescape: true)
29
+ unescape ? self.gsub('&amp;','&').gsub('&pos;',"'") : self
30
30
  end
31
-
32
- end
33
-
31
+
32
+ end
33
+
34
34
  def initialize(h={})
35
35
  super().merge! h
36
36
  end
37
-
37
+
38
38
  def []=(k,v)
39
39
  super(k, k != :class ? Value.new(v) : v)
40
40
  end
41
-
41
+
42
42
  def merge(h)
43
43
 
44
- h2 = h.inject({}) do |r, kv|
44
+ h2 = h.inject({}) do |r, kv|
45
45
  k, raw_v = kv
46
46
  v = raw_v.is_a?(String) ? Value.new(raw_v) : raw_v
47
- r.merge(k => v)
47
+ r.merge(k => v)
48
48
  end
49
-
49
+
50
50
  super(h2)
51
-
51
+
52
52
  end
53
53
  end
54
54
 
@@ -64,7 +64,7 @@ class RexleParser
64
64
  super()
65
65
  s = raw_s.clone.strip
66
66
  return if s.empty?
67
-
67
+
68
68
  raw_xml, raw_instrctns = if s.lines.first =~ /<?xml/ then
69
69
  s.split(/(?=\?>\s*<\w)/,2).reverse
70
70
  else
@@ -76,10 +76,10 @@ class RexleParser
76
76
  @to_a = reverse(parse_node(raw_xml.strip.reverse))
77
77
 
78
78
  end
79
-
79
+
80
80
  private
81
81
 
82
-
82
+
83
83
  def scan_next(r, tagname)
84
84
 
85
85
  j = tagname
@@ -88,7 +88,7 @@ class RexleParser
88
88
 
89
89
  # end tag match
90
90
  tag = r[/^>[^<]+</]
91
-
91
+
92
92
  if tag[1][/[ \w"']/] and tag[-2] != '/' then
93
93
 
94
94
  # is it the end tag to match the start tag?
@@ -96,18 +96,18 @@ class RexleParser
96
96
  end_tag = tag[/^>[^>]*#{j}<$/]
97
97
 
98
98
  if end_tag then
99
-
99
+
100
100
  j = nil
101
101
  return [:end_tag, end_tag]
102
102
 
103
103
  elsif tag[/^>[^>]*\w+<$/] then
104
104
  # broken tag found
105
105
  broken_tag = tag
106
- return [:child, [nil, [], broken_tag]] if broken_tag
106
+ return [:child, [nil, [], broken_tag]] if broken_tag
107
107
  else
108
-
108
+
109
109
  text, newtag = tag.sub('>',';tg&').split(/>/,2)
110
-
110
+
111
111
  if newtag then
112
112
  tag = newtag
113
113
  r.prepend '>' + tag
@@ -116,16 +116,16 @@ class RexleParser
116
116
  return [:child, text]
117
117
  end
118
118
  elsif r[0,3] == '>--' then # comment tag found
119
-
119
+
120
120
  r.slice!(0,3)
121
121
  i = r =~ /(\-\-!<)/
122
122
  s = r.slice!(0,i)
123
123
  r.slice!(0,4)
124
124
 
125
125
  tagname, content = ['-!',s]
126
-
126
+
127
127
  return [:child, [">#{tagname}<", [content], ">#{tagname}/<"]]
128
-
128
+
129
129
  elsif r[0,3] == '>]]' then # CDATA tag found
130
130
 
131
131
  r.slice!(0,3)
@@ -135,22 +135,22 @@ class RexleParser
135
135
 
136
136
  tagname, content = ['[!',s]
137
137
 
138
- return [:child, [">#{tagname}<", [content], ">#{tagname}/<"]]
139
-
138
+ return [:child, [">#{tagname}<", [content], ">#{tagname}/<"]]
139
+
140
140
  elsif tag[/>\/|\/<$/] or tag[/^>.*[\w!]+\/<$/] then
141
-
142
- return [:newnode]
143
-
141
+
142
+ return [:newnode]
143
+
144
144
  else
145
-
146
- r.sub!('>',';tg&')
145
+
146
+ r.sub!('>',';tg&')
147
147
  i = r =~ />(?:[\-\/"'\w]|\]\])/ # collect until a tag is found or a CDATA element
148
148
  text = r.slice!(0,i)
149
149
 
150
150
  return [:child, text] if text
151
151
 
152
152
  end # end of tag match
153
-
153
+
154
154
  else
155
155
 
156
156
  # it's a text value
@@ -160,12 +160,12 @@ class RexleParser
160
160
  return [:child, text] if text
161
161
  end
162
162
  end
163
-
163
+
164
164
  def parse_node(r, j=nil)
165
-
165
+
166
166
  return unless r.length > 0
167
167
  tag = r.slice!(/^>[^<]+</) if (r =~ /^>[^<]+</) == 0
168
- tagname = tag[/([\w!:]+)\/?<$/,1]
168
+ tagname = tag[/([\w!:]+)\/?<$/,1]
169
169
 
170
170
  # self closing tag?
171
171
  if tag[/^>\/.*#{tagname}<$/m] then
@@ -179,16 +179,16 @@ class RexleParser
179
179
  start_tag.reverse + '; context: ' + r[0..120].reverse.inspect
180
180
  end
181
181
 
182
- until end_tag do
183
-
184
- key, res = scan_next r, tagname
185
-
186
- case key
182
+ until end_tag do
183
+
184
+ key, res = scan_next r, tagname
185
+
186
+ case key
187
187
  when :end_tag
188
188
  end_tag = res
189
189
  r2 = [start_tag, children, end_tag]
190
190
  end_tag = nil
191
-
191
+
192
192
  return r2
193
193
  when :child
194
194
  children << res
@@ -203,13 +203,13 @@ class RexleParser
203
203
  end
204
204
 
205
205
  def get_attributes(raw_attributes)
206
-
206
+
207
207
  r1 = /([\w\-:\(\)]+\='[^']*)'/
208
208
  r2 = /([\w\-:\(\)]+\="[^"]*)"/
209
-
209
+
210
210
  r = raw_attributes.scan(/#{r1}|#{r2}/).map(&:compact)\
211
211
  .flatten.inject(Attributes.new) do |r, x|
212
- attr_name, raw_val = x.split(/=/,2)
212
+ attr_name, raw_val = x.split(/=/,2)
213
213
  val = attr_name != 'class' ? raw_val[1..-1] : raw_val[1..-1].split
214
214
  r.merge(attr_name.to_sym => val)
215
215
  end
@@ -218,17 +218,17 @@ class RexleParser
218
218
  end
219
219
 
220
220
  def reverse(raw_obj)
221
-
221
+
222
222
  return unless raw_obj
223
223
  obj = raw_obj.clone
224
224
  return obj.reverse! if obj.is_a? String
225
225
 
226
226
  tag = obj.pop.reverse
227
-
227
+
228
228
  children = obj[-1]
229
229
 
230
230
  r = children.reverse.map {|x| reverse(x)}
231
-
231
+
232
232
  return [tag[/[!\-\w:\[]+/], get_attributes(tag), *r]
233
- end
233
+ end
234
234
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rexleparser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.5
4
+ version: 0.9.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -11,34 +11,34 @@ cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
13
  MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
14
- YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMTkwOTMwMjAwODA5WhcN
15
- MjAwOTI5MjAwODA5WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
- cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDk5pTR
17
- pX4gfQNbdtleggKLuPVnWNjmpA9dhXvIU5wmWsOFv9Iz9S6IcCo6jphqosofb8PI
18
- c79Jv3a0COalq4Qka3g84ew6SuUf1MeVN9Q8V4bhUiuNLC+I/zu66TldHOpGFG+F
19
- oz/GiusJvsDI5/VbsWasECR9zvrPcLEz8As+hKDsrQK0ugEWqcBwQv/DvGi/bwkS
20
- NSVhtms8DTWapCmF61ZtDzqtKHCInGNHgEb4t2VZ0CqvLVfbiD+H3E0OV2STh7Tj
21
- rmV6otJltarcdqmLc5Aq8mkrQPVd0263BtLYbvF0e/BuU9g6Vrs55VxPHrzt2zxz
22
- wL9ETVOXUbpMnjLEhlTjBqai+GALjFezpziR8SmK13luPMVmlT8CGBYVAvOTzvL7
23
- SDju4bVcCRXdx+BUwviB3m/Dbm26iE4HK/NIB5sydvnZcAu/FNrjI1POQirzQ640
24
- OJjtQnl40r7nNDJwCsDI4xHpOjgeacU6lJ0ttpS3Uakgwfe5Iwk7xPNrCUkCAwEA
25
- AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUKZMicNOO
26
- WygILTKTnC128Qm/i9gwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
14
+ YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjEwNDAxMTI1NDA1WhcN
15
+ MjIwNDAxMTI1NDA1WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
+ cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQC9tf0T
17
+ BYEECADFGYQisEHfQBwZtTbhsjWGAsDG1CCEg+Zje9gQIwCPVPUYtEiZkmPtb2en
18
+ YQ0gdCvrSdaxyeP+O7UnN2sR/Rb0G/4Nx3gzY5e+k1PeZ+YEHhehzF/CjpxCpief
19
+ Mhi2HgToCQ71U1iyUT3Squb3CBA6vwLJI6MMh71GWU01aqrMT/l9W3vN54SAZ5i7
20
+ Ud9nVF4JsMXwHyzikv5MH6WwIOzMhqKMUxaAeeGAlFN3u2G2DGW+7fd9/z5zpD6S
21
+ XJEvqjllf5fetAk77Lvw7hPfK0gHJHwTva7k87K704pYgKvi8bAwcnhk/aHXgyON
22
+ D42nLpNYipRRVTXiNXxo9svPTSDGsee5e0prmpC/U9bD2T4SxCrM7VvfVWXbhhEX
23
+ 47iZDeo2KllKmocjA02vfqtbaQXEATi3fSz/pdRpCr1g/Rd/JdAjRnxHgUu1q1TU
24
+ JU99/sfjaxBGvbL+C20cfMgdXdPrkGPNsiEDqfxK5IIBfaob8cp6jzKNDosCAwEA
25
+ AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUgG4OM1TJ
26
+ YfZh1FAIhnVN+TXDs64wJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
27
27
  c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
28
- BgkqhkiG9w0BAQsFAAOCAYEAWznQuPa0IAove4YVnnxZPpfBa4fA2acbeeigtMp8
29
- Y/WehyRBB60VNtRY/KuIdnJkgFmJntLnWK9E7YNw9cdexIZ3fw5uAqNqBgRx6+pW
30
- 5Aj3KfQq3ZP5WtWEXnOVq1A+S3/Id8xpJvHSI1GkQ6X/GCbq4AgHvouRWQNwywCR
31
- ssFgqF/VAwpp/5Xo/NiXsI4o6k9bWGuKM97T//HxVYjHNKFF+kUy8NtEIYryf76E
32
- +4tG+7dEUen0OkYgA/syu5OZHm+ARXVL7G+idlPkGv4ZyJZ7RNGg83cX0LpimoAX
33
- u+M+EVXoKE4kyNLbBsFySWQGP0958ELchC6pL3VSveL50NGhb6+Agp7Pavy4vcFC
34
- TFi1rfWwx2iTO1P17jHl8X0nNHB23O/MffFDU+kugutdTwLTajFUZNrf8R74c69S
35
- T71m/FVIgpvTDrvFUbSk75LOR+Sh7epwzIFUPsY3RNhBU1HuZrPEBI6IK8Xjc27P
36
- ahkta6LWar5SSzKmTY034ms+
28
+ BgkqhkiG9w0BAQsFAAOCAYEACka8bLaU+wG55T9M2lqOrmXMsKpHQ5xtmSQk29OJ
29
+ 4FUZ4aJEhTYxzJosvMNpauZVyrk+KyF/8uuGz5CfG/aPbOboB9+EIsmIcvRZ696M
30
+ BUXc6OuHE8SL0C9yuB9PloIZy2nxrRENFSV5xxyMS04bcaQjKCqtKw69+QT6lbra
31
+ iAU2EIebKyy0UIbrJSBIDKfig9KMEUrXvFUR4hu0lWpeT1bwq4sYeIeZNcg3v/y3
32
+ EbV3QK7AumvKgYvaz7iTu+9FKWT7AqIOH9wuPNPeXDLgyuKhLjdMaugz0wy6RYhT
33
+ Q8tgppTgSzQP8XwMg3xsaM+gWHbRLy8tO+3dkWTPN1m0xETWlSWFCiyi6oq8G4wC
34
+ t4pClPXscWrfmQa/u189WCF/O5BbsElrKQqx0vjq73l2apKjN9xViJi4LrEsZTuz
35
+ cF/nszU+U7PJ1WnQ+W7QTqoViru4N0S9bwi3YV5F5NPPeVnnrtmC2yruRfgTCI4b
36
+ 3nEas0DJDZbQSkPP1mVcybEA
37
37
  -----END CERTIFICATE-----
38
- date: 2020-04-30 00:00:00.000000000 Z
38
+ date: 2022-01-15 00:00:00.000000000 Z
39
39
  dependencies: []
40
40
  description:
41
- email: james@jamesrobertson.eu
41
+ email: digital.robertson@gmail.com
42
42
  executables: []
43
43
  extensions: []
44
44
  extra_rdoc_files: []
@@ -63,7 +63,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
63
63
  - !ruby/object:Gem::Version
64
64
  version: '0'
65
65
  requirements: []
66
- rubygems_version: 3.0.3
66
+ rubyforge_project:
67
+ rubygems_version: 2.7.10
67
68
  signing_key:
68
69
  specification_version: 4
69
70
  summary: Rexleparser is an XML parser used by the Rexle gem
metadata.gz.sig CHANGED
Binary file