xpath-simplify 0.0.0 → 0.0.1

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 (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/xpath-simplify.rb +72 -4
  3. metadata +4 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9e0b0d063d77a87c70f0209d8d1a97b656b1d9c3
4
- data.tar.gz: 4090e1d672b0d44583377a591f06474e0593a9ba
3
+ metadata.gz: b9d3e0c582cbc04824a98ffef49c6595586334f6
4
+ data.tar.gz: ea0a7a4d0339cf9e566c076abb4bd68a9629cffb
5
5
  SHA512:
6
- metadata.gz: a49fd8193836fcce1e7ad8849bfb9eae3852283a213b88d0ebd1b6732a8173fe8ee6ffd51de4461b9378fc2786971c218323b1be30c420f0d444375c2c58e5ee
7
- data.tar.gz: 7a477b9dbb84645e84033245997ee09e4af692163ea89f2b6d4a7b6c79570cbc483b62c04b20109526e9bb46751eebdfcbe5259e430c8bbe091e0d36372dd943
6
+ metadata.gz: fbf05a15111d0132a83d3c951de682773e1e5275a46cd0e8c761ccc3b0d7b2a8886acc05d26322841419542b06bb734eaa5f231ab507151c1e0a85f4bf44dffe
7
+ data.tar.gz: fb6797da83770ac5bf2f8ec58fa31c5c3fabb2702a691b3d69389cc50325b84652ccdb07d4a00196cbddc866878f01391abea241d084d58aa9b62b3492c5681f
@@ -1,5 +1,73 @@
1
- class SimplePath
2
- def self.hi
3
- puts "Hello world!"
1
+ class XPathSimplify
2
+ def self.simplify (str)
3
+ arr = str.split(/ /)
4
+ @f_and = false
5
+ @f_or = false
6
+ xp = convert(arr, false, false)
7
+ return xp
4
8
  end
5
- end
9
+
10
+ def self.convert (arr, f_attach, f_text)
11
+ xp = Array.new
12
+ i = 0
13
+ f_attach = "//*" unless f_attach
14
+ begin
15
+ while i < arr.length do
16
+ case arr[i]
17
+ when '((' then i += 1; xp[i] = convert(arr[i..arr.length], false, f_text); xp[i] = append_previous(xp, i); i = bracket_increment(arr,i)
18
+ when '))' then return xp.join('')
19
+ when '->' then i += 1; xp[i] = "[#{arr[i]}]"
20
+ when '>>' then i += 1; f_attach = xp[i-1]
21
+ when '&&' then if f_text then @f_and = true; return xp.join(''); else i += 1; xp[i] = " and #{convert(arr[i..arr.length], false, false)}"; i+=1; end
22
+ when '||' then if f_text then @f_or = true; return xp.join(''); else i += 1; xp[i] = " or #{convert(arr[i..arr.length], false, false)}"; i+=1; end
23
+ when '::' then if f_text then return xp.join(''); else i+=2; xp[i] = "#{f_attach}[contains(text(),'#{arr[i-1]}#{convert(arr[i..arr.length], f_attach, true)}')]"; i = text_increment(arr,i); end
24
+ else if f_text then xp[i] = " #{arr[i]}"
25
+ else
26
+ case arr[i]
27
+ when /^#.+/ then xp[i] = "#{f_attach}[@id='#{arr[i][1..-1]}']";
28
+ when /^\..+/ then xp[i] = "#{f_attach}[contains(@class,'#{arr[i][1..-1]}')]";
29
+ when 'li', 'ul', 'a', 'span', 'button', 'input', 'label', 'textarea' then xp[i] = "//#{arr[i]}"
30
+ when /^\/.+/, /^http.*/, /^mailto.*/ then xp[i] = "#{f_attach}[contains(@href,'#{arr[i]}')]";
31
+ else i+=1; xp[i] = "#{f_attach}[contains(text(),'#{arr[i-1]}#{convert(arr[i..arr.length], f_attach, true)}')]"; i = text_increment(arr,i); end
32
+ end
33
+ end
34
+ if @f_and then @f_and = false
35
+ elsif @f_or then @f_or = false
36
+ else i += 1 end
37
+ end
38
+ rescue then return xp.join('')
39
+ end
40
+ return xp.join('')
41
+ end
42
+
43
+ def self.text_increment(arr, i)
44
+ while i < arr.length do
45
+ if arr[i] === '::' || arr[i] === '&&' || arr[i] === '||' || arr[i] === '((' || arr[i] === '))' || arr[i] === '->' || arr[i] === '>>' then return i
46
+ else i+=1 end
47
+ end
48
+ return arr.length
49
+ end
50
+
51
+ def self.bracket_increment(arr, i)
52
+ counter = 0
53
+ while i < arr.length do
54
+ if arr[i] === '((' then counter += 1
55
+ elsif arr[i] === '))' then if counter == 0 then return i; else counter -=1; end
56
+ else i+=1; end
57
+ end
58
+ return arr.length
59
+ end
60
+
61
+ def self.append_previous(xp, i)
62
+ if i>1
63
+ begin
64
+ xp[i] = xp[i].gsub(' and //'," and #{xp[i-2]}//")
65
+ xp[i] = xp[i].gsub(' or //'," or #{xp[i-2]}//")
66
+ rescue
67
+ # Do Nothing
68
+ end
69
+ end
70
+ return xp[i]
71
+ end
72
+ end
73
+
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xpath-simplify
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Mackie
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-27 00:00:00.000000000 Z
11
+ date: 2016-06-28 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: A simple hello world gem
13
+ description: This gem helps streamline the creation of X-Paths!
14
14
  email: scottmackie@live.ca
15
15
  executables: []
16
16
  extensions: []
@@ -40,5 +40,5 @@ rubyforge_project:
40
40
  rubygems_version: 2.4.6
41
41
  signing_key:
42
42
  specification_version: 4
43
- summary: Hello!
43
+ summary: X-Path Simplifier
44
44
  test_files: []