stripping cdata should be the default behaviour

oroce 9 anni fa
parent
commit
a796caa306
2 ha cambiato i file con 6 aggiunte e 6 eliminazioni
  1. 2 2
      app/models/agents/website_agent.rb
  2. 4 4
      spec/models/agents/website_agent_spec.rb

+ 2 - 2
app/models/agents/website_agent.rb

@@ -442,9 +442,9 @@ module Agents
442 442
         when Nokogiri::XML::NodeSet
443 443
           result = nodes.map { |node|
444 444
             value = node.xpath(extraction_details['value'] || '.')
445
-            if extraction_details['strip_cdata']
445
+            if value.is_a?(Nokogiri::XML::NodeSet)
446 446
               child = value.first
447
-              if child.cdata?
447
+              if child && child.cdata?
448 448
                 value = child.text
449 449
               end
450 450
             end

+ 4 - 4
spec/models/agents/website_agent_spec.rb

@@ -543,8 +543,8 @@ describe Agents::WebsiteAgent do
543 543
             'url' => 'http://example.com/cdata_rss.atom',
544 544
             'mode' => 'on_change',
545 545
             'extract' => {
546
-              'author' => { 'xpath' => '/feed/entry/author/name', 'value' => './/text()', 'strip_cdata' => true },
547
-              'title' => { 'xpath' => '/feed/entry/title', 'value' => './/text()', 'strip_cdata' => false },
546
+              'author' => { 'xpath' => '/feed/entry/author/name', 'value' => './/text()'},
547
+              'title' => { 'xpath' => '/feed/entry/title', 'value' => './/text()' },
548 548
               'content' => { 'xpath' => '/feed/entry/content', 'value' => './/text()' },
549 549
             }
550 550
           }, keep_events_for: 2.days)
@@ -558,8 +558,8 @@ describe Agents::WebsiteAgent do
558 558
           }.to change { Event.count }.by(10)
559 559
           event = Event.last
560 560
           expect(event.payload['author']).to eq('bill98')
561
-          expect(event.payload['title']).to eq('<![CDATA[Help: Rainmeter Skins • Test if Today is Between 2 Dates]]>')
562
-          expect(event.payload['content']).to start_with('<![CDATA[Can I ')
561
+          expect(event.payload['title']).to eq('Help: Rainmeter Skins • Test if Today is Between 2 Dates')
562
+          expect(event.payload['content']).to start_with('Can I ')
563 563
         end
564 564
 
565 565
       end