rexle 1.3.23 → 1.3.24

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a6c5957458176112c174e906f22b66b4bcf89491
4
- data.tar.gz: d90e7b7fab6073f713389f5322bb77e9360f4051
3
+ metadata.gz: 50783241717d52838cb563f1597366f8c7ed5fb3
4
+ data.tar.gz: 53abc4c8932cb1c4945ed414bc731931797f4b39
5
5
  SHA512:
6
- metadata.gz: 0dfd23f375e064a7fb3521c72e8c9d2797f39199aff63921fc9220ef345c37c30e51a62efa06798a73d9edc174956b70de7c068738e762099efb6bea61b56142
7
- data.tar.gz: 494fef4519f78b160ba8ffb9e8cc99246b1c8e30626c40d65e440b0e22043dce2a36cf7add7c694b34a4e8fd25949c23f9a3e726d73afb0b0331d24fa727db52
6
+ metadata.gz: 6ac63ab6be0d1d501be89d8515cb37cfa48ef31993f8a2fe0ed3b70d96e2e209b336d7c80a64a60b8d1db4925285995073ba38ecc62ce92503b02811ede58a7c
7
+ data.tar.gz: 4dd0880b32a643bb98cd39002ae983df5a085514cfd54483ed55be7a89bb6937fefcfdcccd301229f44f57ef3365b1219e2101a010e061f0ddec68d92eac67ad
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
Binary file
data/lib/rexle.rb CHANGED
@@ -12,6 +12,8 @@ require 'backtrack-xpath'
12
12
 
13
13
  # modifications:
14
14
 
15
+ # 22-Apr-2016: feature: Using an XPath A pure logic predicate can now be
16
+ # processed e.g. (4 % 1) != 1
15
17
  # 21-Apr-2016: feature: The xpath() method now returns a Rexle::Recordset object
16
18
  # which itself can be treat as a Rexle document
17
19
  # An xpath predicate can now contain the mod operator as well as
@@ -411,6 +413,7 @@ class Rexle
411
413
  alias previous_sibling previous_element
412
414
 
413
415
  def xpath(path, rlist=[], &blk)
416
+
414
417
  #@log.debug 'inside xpath ' + path.inspect
415
418
 
416
419
  r = filter_xpath(path, rlist=[], &blk)
@@ -461,7 +464,6 @@ class Rexle
461
464
  }
462
465
  bucket = []
463
466
  raw_results = path.split('|').map do |xp|
464
-
465
467
  query_xpath(xp.strip, bucket, &blk)
466
468
  end
467
469
 
@@ -489,7 +491,6 @@ class Rexle
489
491
  }
490
492
  bucket = []
491
493
  raw_results = path.split('|').map do |xp|
492
-
493
494
  query_xpath(xp.strip, bucket, &blk)
494
495
  end
495
496
 
@@ -497,7 +498,7 @@ class Rexle
497
498
  results = raw_results # .flatten.select {|x| x}
498
499
 
499
500
  procs[results.class.to_s.to_sym].call(results) if results
500
-
501
+
501
502
  else
502
503
 
503
504
  m, xpath_value, index = fn_match.captures
@@ -526,7 +527,7 @@ class Rexle
526
527
  xpath_value = raw_xpath_value.sub('child::','./')
527
528
 
528
529
  if xpath_value[/^[\w\/]+\s*=.*/] then
529
- #@log.debug 'yah'
530
+
530
531
  flag_func = true
531
532
 
532
533
  xpath_value.sub!(/^\w+\s*=.*/,'.[\0]')
@@ -535,7 +536,7 @@ class Rexle
535
536
  end
536
537
 
537
538
  raw_path, raw_condition = xpath_value.sub(/^\.?\/(?!\/)/,'')\
538
- .match(/([^\[]+)(\[[^\]]+\])?/).captures
539
+ .match(/([^\[]+)(\[[^\]]+\])?/).captures
539
540
 
540
541
  remaining_path = ($').to_s
541
542
 
@@ -549,7 +550,7 @@ class Rexle
549
550
  end
550
551
 
551
552
  r = raw_path[/^([^\/]+)(?=\/\/)/,1]
552
-
553
+
553
554
  if r then
554
555
  a_path = raw_path.split(/(?=\/\/)/,2)
555
556
  else
@@ -577,13 +578,16 @@ class Rexle
577
578
 
578
579
  # isolate the xpath to return just the path to the current element
579
580
 
580
- elmnt_path = s[/^([\w:\-\*]+\[[^\]]+\])|[\/]+{,2}[^\/]+/]
581
+ elmnt_path = s[/^([a-zA-Z:\-\*]+\[[^\]]+\])|[\/]+{,2}[^\/]+/]
582
+
581
583
  element_part = elmnt_path[/(^@?[^\[]+)?/,1] if elmnt_path
582
584
 
583
585
  if element_part then
584
586
 
585
587
  unless element_part[/^(@|[@\.\w]+[\s=])/] then
586
588
  element_name = element_part[/^[\w:\-\*\.]+/]
589
+
590
+ condition = raw_xpath_value unless element_name
587
591
 
588
592
  else
589
593
  if xpath_value[/^\[/] then
@@ -601,7 +605,7 @@ class Rexle
601
605
  end
602
606
 
603
607
  end
604
-
608
+
605
609
  #element_name ||= '*'
606
610
  raw_condition = '' if condition
607
611
 
@@ -655,7 +659,8 @@ class Rexle
655
659
 
656
660
  remaining_xpath = raw_path[1..-1]
657
661
  return remaining_xpath.empty? ? self : self.xpath(remaining_xpath)
658
-
662
+ elsif element_name.nil?
663
+ return eval attr_search
659
664
  else
660
665
 
661
666
  return_elements = @child_elements.map.with_index.select do |x, i|
@@ -1017,10 +1022,15 @@ class Rexle
1017
1022
  def format_condition(condition)
1018
1023
 
1019
1024
  raw_items = condition[1..-1].scan(/\'[^\']*\'|\"[^\"]*\"|\
1020
- and|or|\d+|[!=<>]+|position\(\)|contains\([^\)]+\)|notx\([^\)]+\)|[@\w\.\/&;]+/)
1025
+ and|or|\d+|[!=<>%]+|position\(\)|contains\([^\)]+\)|notx\([^\)]+\)|[@\w\.\/&;]+/)
1021
1026
 
1022
1027
  if raw_items[0][/^\d+$/] then
1023
- return raw_items[0].to_i
1028
+
1029
+ if condition[0 ] == '[' then
1030
+ return raw_items[0].to_i
1031
+ else
1032
+ return condition
1033
+ end
1024
1034
  elsif raw_items[0] == 'position()' then
1025
1035
 
1026
1036
  rrr = condition[1..-2].gsub(/position\(\)/,'i').gsub('&lt;','<')\
@@ -1181,7 +1191,7 @@ class Rexle
1181
1191
  end
1182
1192
  elsif attr_search[/e\.xpath/] and eval(attr_search)
1183
1193
  block_given? ? blk.call(e) : e
1184
- elsif attr_search[/^\w+\(/] and e.element(attr_search)
1194
+ elsif attr_search[/^\w*\(/] and e.element(attr_search)
1185
1195
  block_given? ? blk.call(e) : e
1186
1196
  end
1187
1197
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rexle
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.23
4
+ version: 1.3.24
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -31,7 +31,7 @@ cert_chain:
31
31
  pOw2Fx4uv9tO6wagRTcaHduxkh4jYfPDQI9mODFccHeY+wRLDGTENQwIILvMgEa7
32
32
  50vRuyU+obGfjg==
33
33
  -----END CERTIFICATE-----
34
- date: 2016-04-21 00:00:00.000000000 Z
34
+ date: 2016-04-23 00:00:00.000000000 Z
35
35
  dependencies:
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rexleparser
metadata.gz.sig CHANGED
Binary file