rexle 1.3.6 → 1.3.7

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: e527734ccca67f4c8b2ce057a3aa1026e846512c
4
- data.tar.gz: 8a3fc5b18b06c59e2462d27e3d83c6bb333a92e0
3
+ metadata.gz: f0db24e5f8ce1011dac3c9524af0c2a01d4923ab
4
+ data.tar.gz: 0e9124363806ef72b44a09ed758e89cc6b25524c
5
5
  SHA512:
6
- metadata.gz: ea3871b43ef0586dcfa4a70a6b39795201f7484e7b4f7861ec13b18e401a932507b5cf63ffa66a40674bbfe5898dce3f3dae1f322814bd48b4ba3268d250e4ed
7
- data.tar.gz: 13ce6eb8d612169fe5318ccd6d1c2717b7650613980f7e70e48706f0b5da9be1f16fd33490071e3139cb1e52e1c58a12b9b5c50f4e8a352b4c25e9f56840a475
6
+ metadata.gz: c6cce9a423805620f6acb1c4c9f9f7bc151b6297b93a65126723b8486347bc65e0b7fe3f5fa04640b31805db388795d6f8e7c3feea7d0cd42d5c6566a800bc2a
7
+ data.tar.gz: 71432178956463b3c60ced324d129f28a35662f69b26088643afe74d42650731eb06a914862422ce282e1962373ab38d350e356d8523bc679cee77b9381421c6
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/rexle.rb CHANGED
@@ -11,6 +11,8 @@ require 'cgi'
11
11
 
12
12
  # modifications:
13
13
 
14
+ # 15-Sep-2015: improvement: When handling the HTML element textarea, it
15
+ # is no longer printed as a self-closing tag
14
16
  # 25-May-2015: bug fix: If a Polyrex XML string is being parsed then the
15
17
  # XML instructions will also now be read.
16
18
  # 11-May-2015: improvement: when Rexle::Element#delete is passed an XPath it
@@ -219,7 +221,8 @@ module XMLhelper
219
221
  tag = x.name + (a.empty? ? '' : ' ' + a.join(' '))
220
222
 
221
223
  if (x.children and x.children.length > 0 \
222
- and not x.children.is_an_empty_string?) or x.name == 'script' then
224
+ and not x.children.is_an_empty_string?) or \
225
+ x.name == 'script' or x.name == 'textarea' then
223
226
 
224
227
  out = ["<%s>" % tag]
225
228
  out << scan_print(x.children)
@@ -278,7 +281,8 @@ module XMLhelper
278
281
 
279
282
  if (x.value and x.value.length > 0) \
280
283
  or (x.children and x.children.length > 0 \
281
- and not x.children.is_an_empty_string?) or x.name == 'script' then
284
+ and not x.children.is_an_empty_string?) or \
285
+ x.name == 'script' or x.name == 'textarea' then
282
286
 
283
287
  ind1 = (x.children and x.children.grep(Rexle::Element).length > 0) ?
284
288
  ("\n" + ' ' * indent) : ''
@@ -377,6 +381,7 @@ class Rexle
377
381
  raise "Element name must not be blank" unless name
378
382
  @child_elements = []
379
383
  self.add_text value if value
384
+ #@log = Logger.new('rexle.log','daily')
380
385
 
381
386
  end
382
387
 
@@ -389,7 +394,8 @@ class Rexle
389
394
  end
390
395
 
391
396
  def contains(raw_args)
392
-
397
+ #log = Logger.new('rexle.log','daily')
398
+ #log.debug 'inside contains'
393
399
  path, raw_val = raw_args.split(',',2)
394
400
  val = raw_val.strip[/^["']?.*["']?$/]
395
401
 
@@ -451,6 +457,16 @@ class Rexle
451
457
 
452
458
  alias next_sibling next_element
453
459
 
460
+ def notx(bool)
461
+ #log = Logger.new('rexle.log','daily')
462
+ #log.debug 'self ' + self.xml.inspect
463
+ #log.debug 'inside not() ' + bool.inspect
464
+ r = self.xpath(bool).any?
465
+ #log.debug 'r: ' + r.inspect
466
+ #log.debug 'r2: ' + (!r).inspect
467
+ !r
468
+ end
469
+
454
470
  def previous_element()
455
471
 
456
472
  id = self.object_id
@@ -464,22 +480,26 @@ class Rexle
464
480
  alias previous_sibling previous_element
465
481
 
466
482
  def xpath(path, rlist=[], &blk)
483
+ #@log.debug 'inside xpath ' + path.inspect
467
484
 
468
485
  r = filter_xpath(path, rlist=[], &blk)
486
+ #@log.debug 'after filter_xpath : ' + r.inspect
469
487
  r.is_a?(Array) ? r.compact : r
470
488
  end
471
489
 
472
490
  def filter_xpath(raw_path, rlist=[], &blk)
473
-
491
+ #@log.debug 'inside filter_xpath : ' + raw_path.inspect
474
492
  path = String.new raw_path
475
493
 
476
494
  # is it a function
477
495
  fn_match = path.match(/^(\w+)\(["']?([^\)]*)["']?\)(?:\[(.*)\])?$/)
496
+ #@log.debug 'fn_match : ' + fn_match.inspect
478
497
  end_fn_match = path.slice!(/\[\w+\(\)\]$/)
479
498
 
480
499
  if end_fn_match then
481
500
 
482
501
  m = end_fn_match[1..-4]
502
+ #@log.debug 'its a function'
483
503
  [method(m.to_sym).call(xpath path)]
484
504
 
485
505
  elsif (fn_match and fn_match.captures.first[/^(attribute|@)/])
@@ -547,7 +567,7 @@ class Rexle
547
567
  a = texts()
548
568
  return index ? a[index.to_i - 1].to_s : a
549
569
  end
550
-
570
+ #@log.debug 'before function call'
551
571
  raw_results = xpath_value.empty? ? method(m.to_sym).call \
552
572
  : method(m.to_sym).call(xpath_value)
553
573
 
@@ -558,12 +578,16 @@ class Rexle
558
578
  end
559
579
 
560
580
  def query_xpath(raw_xpath_value, rlist=[], &blk)
581
+
582
+ #@log.debug 'query_xpath : ' + raw_xpath_value.inspect
583
+ #@log.debug '++ ' + self.xml.inspect
561
584
 
562
585
  flag_func = false
563
586
 
564
587
  xpath_value = raw_xpath_value.sub('child::','./')
565
588
 
566
- if xpath_value[/^[\w\/]+\s*=.*/] then
589
+ if xpath_value[/^[\w\/]+\s*=.*/] then
590
+ #@log.debug 'yah'
567
591
  flag_func = true
568
592
 
569
593
  xpath_value.sub!(/^\w+\s*=.*/,'.[\0]')
@@ -575,6 +599,7 @@ class Rexle
575
599
  .match(/([^\[]+)(\[[^\]]+\])?/).captures
576
600
 
577
601
  remaining_path = ($').to_s
602
+ #@log.debug 'remaining_path: ' + remaining_path.inspect
578
603
 
579
604
  if remaining_path[/^contains\(/] then
580
605
  raw_condition = raw_condition ? raw_condition + '/' + remaining_path \
@@ -627,6 +652,7 @@ class Rexle
627
652
  condition = element_part
628
653
 
629
654
  attr_search = format_condition('[' + condition + ']')
655
+ #@log.debug 'attr_search : ' + attr_search.inspect
630
656
  return [attribute_search(attr_search, \
631
657
  self, self.attributes) != nil]
632
658
  end
@@ -640,9 +666,11 @@ class Rexle
640
666
 
641
667
  attr_search = format_condition(condition) if condition \
642
668
  and condition.length > 0
669
+ #@log.debug 'attr_search2 : ' + attr_search.inspect
643
670
  attr_search2 = xpath_value[/^\[(.*)\]$/,1]
644
671
 
645
672
  if attr_search2 then
673
+ #@log.debug 'before attribute_Search'
646
674
  r4 = attribute_search(attr_search, self, self.attributes)
647
675
  return r4
648
676
  end
@@ -1037,8 +1065,7 @@ class Rexle
1037
1065
  def format_condition(condition)
1038
1066
 
1039
1067
  raw_items = condition[1..-1].scan(/\'[^\']*\'|\"[^\"]*\"|\
1040
- and|or|\d+|[!=<>]+|position\(\)|contains\([^\)]+\)|[@\w\.\/&;]+/)
1041
-
1068
+ and|or|\d+|[!=<>]+|position\(\)|contains\([^\)]+\)|notx\([^\)]+\)|[@\w\.\/&;]+/)
1042
1069
 
1043
1070
  if raw_items[0][/^\d+$/] then
1044
1071
  return raw_items[0].to_i
@@ -1047,6 +1074,8 @@ class Rexle
1047
1074
  return rrr
1048
1075
  elsif raw_items[0][/^contains\(/]
1049
1076
  return raw_items[0]
1077
+ elsif raw_items[0][/^notx\(/]
1078
+ return raw_items[0]
1050
1079
  else
1051
1080
 
1052
1081
  andor_items = raw_items.map.with_index\
data.tar.gz.sig CHANGED
Binary file
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.6
4
+ version: 1.3.7
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-05-25 00:00:00.000000000 Z
34
+ date: 2015-09-15 00:00:00.000000000 Z
35
35
  dependencies:
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rexleparser
@@ -180,7 +180,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
180
180
  version: '0'
181
181
  requirements: []
182
182
  rubyforge_project:
183
- rubygems_version: 2.4.6
183
+ rubygems_version: 2.4.8
184
184
  signing_key:
185
185
  specification_version: 4
186
186
  summary: Rexle is an XML parser written purely in Ruby
metadata.gz.sig CHANGED
Binary file