rexle 1.3.1 → 1.3.2

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
  SHA1:
3
- metadata.gz: 5bf60ae25658ed969dbe3950f707b4ff7e94afd0
4
- data.tar.gz: c30ecda0639ac7c4f8234143a65e3b9e9fd64a41
3
+ metadata.gz: 2c17be6210359cbed7e2a1698eed5c7b16c118ec
4
+ data.tar.gz: 1b73e55d26b5f68c66fb1cfa90703e4efff5314e
5
5
  SHA512:
6
- metadata.gz: 8b797c8787295ecfcf2c86bc84dd33be781eb9ba03a6c086346e7d453c044dfd9085d7849800d11188cb07e50fea6f47db215813174784db1037e2b0ee64f039
7
- data.tar.gz: e9cf788c8c308d81102a2a796571a95c2b8a054cf236f7cb79e079b861710e3e851c119b71e778a632c445322c5ba0dbe26255b4c2c790def110f24652fe4da3
6
+ metadata.gz: b9a2e7317838895ba06abc7931eac60936a22f4b3e1a60bc9ea031d14645851393381a4b90e2215b77d90f0d1a1b16ba9daa680736dcc43373bd7f7f7ca56945
7
+ data.tar.gz: bdeee7323744309d7eec27e72c714355a51733587925b90f0b36797235b0f8e0001e2ccc92a3dc276c8ddd02ea94afbfb1e507de38ea586dffe97763231ab381
checksums.yaml.gz.sig CHANGED
@@ -1,3 +1 @@
1
- H�=�,pr���@��]��PS*2��f�!��f`�0a):� ?!fi j���5�ĀFHDc��5�#Wf֗���9?SP
2
- ��£�꒘��Q �*���H~Hw��I`nh��e'jY�ICTA��������R��ϐ mBk�
3
- ��5��y<y�2ܺt��9��#�7���{i�d)��D�A�VC�)d3���j[vɍ��+��AN��Y �9�`,�C�x�ڣ6!C:���^�Ԋ���� �&2���
1
+ ��~&?��{��vJsG e57'J�[T@ҟ�M����$\b
data/lib/rexle.rb CHANGED
@@ -11,6 +11,8 @@ require 'cgi'
11
11
 
12
12
  # modifications:
13
13
 
14
+ # 02-May-2015: improvement: Rexle::Element#xpath function contains() can
15
+ # now be used as a condition .e.g. b[contains(c,'10')]
14
16
  # 30-Apr-2015: improvement: Rexle::Element#xpath function contains() can
15
17
  # now handle string values
16
18
  # feature: Implemented Rexle::Element#backtrack which
@@ -371,7 +373,7 @@ class Rexle
371
373
  end
372
374
 
373
375
  def backtrack()
374
- BacktrackXPath.new(self).to_s
376
+ BacktrackXPath.new(self)
375
377
  end
376
378
 
377
379
  def cdata?()
@@ -379,14 +381,18 @@ class Rexle
379
381
  end
380
382
 
381
383
  def contains(raw_args)
384
+
382
385
  path, raw_val = raw_args.split(',',2)
383
386
  val = raw_val.strip[/^["']?.*["']?$/]
384
387
 
385
388
  anode = query_xpath(path)
386
- return unless anode
389
+
390
+ return [false] if anode.nil? or anode.empty?
391
+
387
392
  a = scan_contents(anode.first)
388
-
389
- [a.grep(/#{val}/).length > 0]
393
+ r = [a.grep(/#{val.sub(/^["'](.*)["']$/,'\1')}/).length > 0]
394
+
395
+ r.any?
390
396
  end
391
397
 
392
398
  def count(path)
@@ -537,7 +543,6 @@ class Rexle
537
543
 
538
544
  def query_xpath(raw_xpath_value, rlist=[], &blk)
539
545
 
540
-
541
546
  flag_func = false
542
547
 
543
548
  xpath_value = raw_xpath_value.sub('child::','./')
@@ -555,14 +560,20 @@ class Rexle
555
560
 
556
561
  remaining_path = ($').to_s
557
562
 
563
+ if remaining_path[/^contains\(/] then
564
+ raw_condition = raw_condition ? raw_condition + '/' + remaining_path : remaining_path
565
+ remaining_path = ''
566
+ end
567
+
558
568
  r = raw_path[/^([^\/]+)(?=\/\/)/,1]
569
+
559
570
  if r then
560
571
  a_path = raw_path.split(/(?=\/\/)/,2)
561
572
  else
562
573
  a_path = raw_path.split('/',2)
563
574
  end
564
575
 
565
- condition = raw_condition if a_path.length <= 1
576
+ condition = raw_condition if a_path.length <= 1 #and not raw_condition[/^\[\w+\(.*\)\]$/]
566
577
 
567
578
  if raw_path[0,2] == '//' then
568
579
  s = ''
@@ -608,7 +619,7 @@ class Rexle
608
619
  #element_name ||= '*'
609
620
  raw_condition = '' if condition
610
621
 
611
- attr_search = format_condition(condition) if condition and condition.length > 0
622
+ attr_search = format_condition(condition) if condition and condition.length > 0
612
623
  attr_search2 = xpath_value[/^\[(.*)\]$/,1]
613
624
 
614
625
  if attr_search2 then
@@ -645,12 +656,12 @@ class Rexle
645
656
  if ename != '..' then
646
657
 
647
658
  return_elements = @child_elements.map.with_index.select do |x, i|
648
-
659
+
649
660
  next unless x.is_a? Rexle::Element
650
661
 
651
662
  (x.name == ename || ename == '.') or (ename == '*')
652
663
  end
653
-
664
+
654
665
  if selector then
655
666
  ne = return_elements.inject([]) do |r,x|
656
667
  i = x.last + selector
@@ -680,7 +691,13 @@ class Rexle
680
691
 
681
692
  if (a_path + [remaining_path]).join.empty? then
682
693
 
683
- rlist = return_elements.map.with_index {|x,i| filter(x, i+1, attr_search, &blk)}.compact
694
+ # pass in a block to the filter if it is function contains?
695
+ rlist = return_elements.map.with_index do |x,i|
696
+ r5 = filter(x, i+1, attr_search, &blk)
697
+
698
+ r5
699
+ end.compact
700
+
684
701
  rlist = rlist[0] if rlist.length == 1
685
702
 
686
703
  else
@@ -731,6 +748,7 @@ class Rexle
731
748
  rlist = rlist.flatten(1) unless not(rlist.is_a? Array) or (rlist.length > 1 and rlist[0].is_a? Array)
732
749
  rlist = [rlist] if rlist.is_a? Rexle::Element
733
750
  rlist = (rlist.length > 0 ? true : false) if flag_func == true
751
+
734
752
  rlist
735
753
  end
736
754
 
@@ -990,13 +1008,17 @@ class Rexle
990
1008
 
991
1009
  def format_condition(condition)
992
1010
 
993
- raw_items = condition[1..-1].scan(/\'[^\']*\'|\"[^\"]*\"|and|or|\d+|[!=<>]+|position\(\)|[@\w\.\/&;]+/)
994
-
1011
+ raw_items = condition[1..-1].scan(/\'[^\']*\'|\"[^\"]*\"|\
1012
+ and|or|\d+|[!=<>]+|position\(\)|contains\([^\)]+\)|[@\w\.\/&;]+/)
1013
+
1014
+
995
1015
  if raw_items[0][/^\d+$/] then
996
1016
  return raw_items[0].to_i
997
1017
  elsif raw_items[0] == 'position()' then
998
1018
  rrr = "i %s %s" % [raw_items[1].gsub('&lt;','<').gsub('&gt;','>'), raw_items[-1]]
999
1019
  return rrr
1020
+ elsif raw_items[0][/^contains\(/]
1021
+ return raw_items[0]
1000
1022
  else
1001
1023
 
1002
1024
  andor_items = raw_items.map.with_index.select{|x,i| x[/\band\b|\bor\b/]}.map{|x| [x.last, x.last + 1]}.flatten
@@ -1094,7 +1116,7 @@ class Rexle
1094
1116
 
1095
1117
 
1096
1118
  def filter(raw_element, i, attr_search, &blk)
1097
-
1119
+
1098
1120
  x, index = raw_element
1099
1121
  e = @child_elements[index]
1100
1122
 
@@ -1102,10 +1124,11 @@ class Rexle
1102
1124
  name, value = e.name, e.value if e.is_a? Rexle::Element
1103
1125
 
1104
1126
  h = x.attributes # <-- fetch the attributes
1105
-
1127
+
1106
1128
  if attr_search then
1107
1129
 
1108
- attribute_search(attr_search,e, h, i, &blk)
1130
+ r6 = attribute_search(attr_search,e, h, i, &blk)
1131
+ r6
1109
1132
  else
1110
1133
 
1111
1134
  block_given? ? blk.call(e) : e
@@ -1140,7 +1163,7 @@ class Rexle
1140
1163
  if eval(attr_search) then
1141
1164
  block_given? ? blk.call(e) : e
1142
1165
  end
1143
- elsif attr_search[/e\.xpath/] and eval(attr_search)
1166
+ elsif attr_search[/e\.xpath/] and eval(attr_search)
1144
1167
  block_given? ? blk.call(e) : e
1145
1168
  elsif e.element attr_search then
1146
1169
  block_given? ? blk.call(e) : e
data.tar.gz.sig CHANGED
@@ -1 +1 @@
1
- -X ���lr�.�`�6�1/iy�M�"�����؍F�`���cEzh�6 �Xq;jF1���5ji� �6o�#�3 ������xIK�{ep�A� �S��(���O���J���˯%nG ��t�� pX�%�I���բ��o"�����N�p//�˘ �F3��wF���g8t��ֶ1e�=�f�cQqv��r��"rX�I����ݸ�����᱌�n4���g�z�30Wl��.-i5V�lC(�|�j<
1
+ ������P����6��Ws��Nl3��uj���e,d>8����Kpe���
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.1
4
+ version: 1.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -31,7 +31,7 @@ cert_chain:
31
31
  Tkua07gB3/nVO3aPg7C3vEbDZCxT3WAMli2uZisYT6ozmdAlDsixLjipgFN4If3z
32
32
  Ej0QR3kvGcAvFQ==
33
33
  -----END CERTIFICATE-----
34
- date: 2015-04-30 00:00:00.000000000 Z
34
+ date: 2015-05-02 00:00:00.000000000 Z
35
35
  dependencies:
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rexleparser
metadata.gz.sig CHANGED
Binary file