rexle-xpath-parser 0.1.18 → 0.1.19
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +2 -1
- data.tar.gz.sig +0 -0
- data/lib/rexle-xpath-parser.rb +59 -14
- metadata +2 -2
- metadata.gz.sig +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0eb094bc9685658e7742f8cf6b12b640f057ac2c
|
4
|
+
data.tar.gz: b18b160e6dc524e45ed86ba2a4b3a33cb67a9e62
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a16e477fec94065135404d1026d3011ae1d3901075de32e1034844ef6fbaee3431a1c10235e3a9fa3c125ad09a16a84b24cd1475e37ccbe019f2348df3b1f9dd
|
7
|
+
data.tar.gz: 2d580efe36ce525a3ad51f51bc6e5acbe844acf340a9ce6cf2e68e8853cb12f5f1a11fd78ec8b4d626da477f0385a474f25be0ef634d4b0f51e25611583df606
|
checksums.yaml.gz.sig
CHANGED
@@ -1 +1,2 @@
|
|
1
|
-
|
1
|
+
V�e�nL{�aMB�BsGX��-�ݱ$N1+"�u�3~f��i9IN�3s˔���g�>Hv�F�g%�\:�Ki��H����<�/�wQ���fNeg��ĿS�U����eWLX��_�,-Y�c���"������C�W�QB��Y�ӱ$�R�-�gE۷���z�N羟?��$���lc'f����ُ�m
|
2
|
+
\$����,"�4Ԃ�L������d��i������&
|
data.tar.gz.sig
CHANGED
Binary file
|
data/lib/rexle-xpath-parser.rb
CHANGED
@@ -24,14 +24,23 @@ class RexleXPathParser
|
|
24
24
|
#
|
25
25
|
def functionalise(a, r2=[])
|
26
26
|
|
27
|
-
a.inject(r2) do |r,x|
|
27
|
+
r4 = a.inject(r2) do |r,x|
|
28
28
|
|
29
29
|
return r << functionalise(x) if x.is_a? Array
|
30
30
|
|
31
|
-
if
|
32
|
-
r <<
|
31
|
+
if x =~ /^or$/ then
|
32
|
+
r << :|
|
33
|
+
|
34
|
+
elsif /^(?<func>\w+)\(\)(?:\s+(?<operator>[<>=])\s+(?<value>\w+))?/ =~ x
|
35
|
+
|
36
|
+
r << if operator then
|
37
|
+
x = ''
|
38
|
+
[func.to_sym, operator.to_sym, value]
|
39
|
+
else
|
40
|
+
func.to_sym
|
41
|
+
end
|
33
42
|
elsif /^@(?<attribute>[\w\/]+)/ =~ x
|
34
|
-
r << [
|
43
|
+
r << [:attribute, attribute]
|
35
44
|
elsif x =~ /^\/\//
|
36
45
|
r << [:recursive, *RexleXPathParser.new(x[2..-1]).to_a]
|
37
46
|
elsif x =~ /^[\w\/\*]+\[/
|
@@ -50,9 +59,9 @@ class RexleXPathParser
|
|
50
59
|
end
|
51
60
|
|
52
61
|
elsif /!=(?<value>.*)/ =~ x
|
53
|
-
r
|
62
|
+
r << [:value, :'!=', value.sub(/^["'](.*)["']$/,'\1')]
|
54
63
|
elsif /=(?<value>.*)/ =~ x
|
55
|
-
r
|
64
|
+
r << [:value, :==, value.sub(/^["'](.*)["']$/,'\1')]
|
56
65
|
elsif x =~ /\|/
|
57
66
|
r << [:union]
|
58
67
|
elsif x =~ /\s+or\s+/
|
@@ -63,21 +72,25 @@ class RexleXPathParser
|
|
63
72
|
r << [:index, x]
|
64
73
|
elsif /^attribute::(?<attribute>\w+)/ =~ x
|
65
74
|
r << [:attribute, attribute]
|
66
|
-
elsif /^(?<name>[\w\*\.]+)\/?/ =~ x
|
75
|
+
elsif x.is_a? String and /^(?<name>[\w\*\.]+)\/?/ =~ x
|
67
76
|
|
68
77
|
x.slice!(/^[\w\*\.]+\/?/)
|
69
|
-
r3 = [
|
78
|
+
r3 = [:select, name]
|
70
79
|
|
71
80
|
if x.length > 0 then
|
72
81
|
functionalise([x], r3)
|
73
82
|
|
74
83
|
end
|
75
84
|
r << r3
|
85
|
+
else
|
76
86
|
|
87
|
+
r
|
77
88
|
end
|
78
89
|
|
79
90
|
end
|
80
91
|
|
92
|
+
r4
|
93
|
+
|
81
94
|
end
|
82
95
|
|
83
96
|
# matches a left bracket with a right bracket recursively if necessary
|
@@ -134,11 +147,21 @@ class RexleXPathParser
|
|
134
147
|
def match(s)
|
135
148
|
|
136
149
|
a = []
|
137
|
-
|
138
|
-
#
|
150
|
+
|
151
|
+
# it's a function with no arguments
|
139
152
|
# e.g. position()
|
140
|
-
if /^\w+\(\)
|
153
|
+
if /^\w+\(\)/ =~ s then
|
154
|
+
|
141
155
|
a << s
|
156
|
+
|
157
|
+
elsif /^\w+\(\)/ =~ s then
|
158
|
+
|
159
|
+
fn, operator, val = s.match(/^(\w+)\(\)\s+(<|>|=)\s+(\w+)/).captures
|
160
|
+
|
161
|
+
a << [fn.to_sym, operator.to_sym, val]
|
162
|
+
return a
|
163
|
+
|
164
|
+
# it's a function with arguments
|
142
165
|
elsif s =~ /^\w+\(/
|
143
166
|
|
144
167
|
found, token, remainder = lmatch(s.chars, '(',')')
|
@@ -147,6 +170,7 @@ class RexleXPathParser
|
|
147
170
|
a << token
|
148
171
|
end
|
149
172
|
|
173
|
+
# it contains a predicate
|
150
174
|
# e.g. b[c='45']
|
151
175
|
elsif s =~ /^[\w\/\*]+\[/
|
152
176
|
|
@@ -158,16 +182,21 @@ class RexleXPathParser
|
|
158
182
|
a.concat a2[1..-1]
|
159
183
|
|
160
184
|
a2
|
185
|
+
|
186
|
+
# it's an element name e.g. b
|
161
187
|
elsif /^(?<name>[\w\*]+)\// =~ s
|
162
188
|
a << name << match($')
|
189
|
+
|
190
|
+
# it's something else e.g. @colour='red'
|
163
191
|
else
|
164
192
|
|
165
193
|
token = s.slice!(/^[@?\w\/:\*\(\)\.]+/)
|
194
|
+
|
166
195
|
a << token
|
167
196
|
remainder = s
|
168
197
|
end
|
169
198
|
|
170
|
-
return a if remainder.nil? or remainder.empty?
|
199
|
+
return a if remainder.nil? or remainder.strip.empty?
|
171
200
|
|
172
201
|
operator = remainder.slice!(/^\s*(?:\||or)\s*/)
|
173
202
|
|
@@ -185,7 +214,7 @@ class RexleXPathParser
|
|
185
214
|
#
|
186
215
|
def scan(s)
|
187
216
|
|
188
|
-
if s =~ /^\w+\(/ then
|
217
|
+
if s =~ /^\w+\([^\)]/ then
|
189
218
|
|
190
219
|
func = s.slice!(/\w+\(/)
|
191
220
|
remainder = s[0..-2]
|
@@ -203,6 +232,22 @@ class RexleXPathParser
|
|
203
232
|
end
|
204
233
|
end
|
205
234
|
|
206
|
-
alias tokenise match
|
235
|
+
#alias tokenise match
|
236
|
+
def tokenise(s)
|
237
|
+
|
238
|
+
if s =~ /\[/ then
|
239
|
+
match s
|
240
|
+
else
|
241
|
+
s.split(/(?=\bor\b)/).flat_map do |x|
|
242
|
+
|
243
|
+
if /^or\b\s+(?<exp>.*)/ =~ x then
|
244
|
+
match(exp).unshift 'or'
|
245
|
+
else
|
246
|
+
match x
|
247
|
+
end
|
248
|
+
|
249
|
+
end
|
250
|
+
end
|
251
|
+
end
|
207
252
|
|
208
253
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rexle-xpath-parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.19
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -31,7 +31,7 @@ cert_chain:
|
|
31
31
|
mkV2keVfUpfaTKNzUzo9lt/HSN8u98bD+dZh7rT5z8OBu6Kh0he35JvmyxOTg+Hg
|
32
32
|
u9W2yccAzoPxYA==
|
33
33
|
-----END CERTIFICATE-----
|
34
|
-
date: 2016-07
|
34
|
+
date: 2016-08-07 00:00:00.000000000 Z
|
35
35
|
dependencies: []
|
36
36
|
description:
|
37
37
|
email: james@r0bertson.co.uk
|
metadata.gz.sig
CHANGED
@@ -1 +1,2 @@
|
|
1
|
-
|
1
|
+
t�^]�s`�
|
2
|
+
5���gX��v~$io��ȩi�1R��d(Jr������E�AX����*�H���^`�51\�Ve��5��7�:5��r���=4C�Z�Xu�/}/��ޜ��pY�R �)���o�o�]%C\tw�S`7
|