@@ -231,7 +231,7 @@ module Agents |
||
| 231 | 231 |
when Integer |
| 232 | 232 |
# ok |
| 233 | 233 |
when String |
| 234 |
- if re && !re.names.include?(index) |
|
| 234 |
+ if index.to_i.to_s != index && re && !re.names.include?(index) |
|
| 235 | 235 |
errors.add(:base, "no named capture #{index.inspect} found in regexp for #{name.inspect})")
|
| 236 | 236 |
end |
| 237 | 237 |
when nil |
@@ -429,7 +429,11 @@ module Agents |
||
| 429 | 429 |
regexp = Regexp.new(extraction_details['regexp']) |
| 430 | 430 |
result = [] |
| 431 | 431 |
doc.scan(regexp) {
|
| 432 |
- result << Regexp.last_match[extraction_details['index']] |
|
| 432 |
+ index_or_named_group = extraction_details['index'] |
|
| 433 |
+ if index_or_named_group.is_a?(String) && index_or_named_group.to_i.to_s == index_or_named_group |
|
| 434 |
+ index_or_named_group = index_or_named_group.to_i |
|
| 435 |
+ end |
|
| 436 |
+ result << Regexp.last_match[index_or_named_group] |
|
| 433 | 437 |
} |
| 434 | 438 |
log "Extracting #{extraction_type} at #{regexp}: #{result}"
|
| 435 | 439 |
result |
@@ -105,6 +105,8 @@ describe LiquidInterpolatable::Filters do |
||
| 105 | 105 |
to_return(status: 301, headers: { Location: 'http://tinyurl.com.x/cccc' })
|
| 106 | 106 |
stub_request(:head, 'http://tinyurl.com.x/cccc'). |
| 107 | 107 |
to_return(status: 301, headers: { Location: 'http://www.example.com/welcome' })
|
| 108 |
+ stub_request(:head, 'http://www.example.com/welcome'). |
|
| 109 |
+ to_return(status: 200) |
|
| 108 | 110 |
|
| 109 | 111 |
(1..5).each do |i| |
| 110 | 112 |
stub_request(:head, "http://2many.x/#{i}").
|
@@ -577,7 +577,7 @@ fire: hot |
||
| 577 | 577 |
'mode' => 'on_change', |
| 578 | 578 |
'extract' => {
|
| 579 | 579 |
'word' => { 'regexp' => '^(.+?): (.+)$', index: 1 },
|
| 580 |
- 'property' => { 'regexp' => '^(.+?): (.+)$', index: 2 },
|
|
| 580 |
+ 'property' => { 'regexp' => '^(.+?): (.+)$', index: '2' },
|
|
| 581 | 581 |
} |
| 582 | 582 |
} |
| 583 | 583 |
@checker = Agents::WebsiteAgent.new(name: 'Text Site', options: site) |
@@ -585,7 +585,7 @@ fire: hot |
||
| 585 | 585 |
@checker.save! |
| 586 | 586 |
end |
| 587 | 587 |
|
| 588 |
- it "works with regexp" do |
|
| 588 |
+ it "works with regexp with named capture" do |
|
| 589 | 589 |
@checker.options = @checker.options.merge('extract' => {
|
| 590 | 590 |
'word' => { 'regexp' => '^(?<word>.+?): (?<property>.+)$', index: 'word' },
|
| 591 | 591 |
'property' => { 'regexp' => '^(?<word>.+?): (?<property>.+)$', index: 'property' },
|
@@ -602,7 +602,7 @@ fire: hot |
||
| 602 | 602 |
expect(event2.payload['property']).to eq('hot')
|
| 603 | 603 |
end |
| 604 | 604 |
|
| 605 |
- it "works with regexp with named capture" do |
|
| 605 |
+ it "works with regexp" do |
|
| 606 | 606 |
expect {
|
| 607 | 607 |
@checker.check |
| 608 | 608 |
}.to change { Event.count }.by(2)
|