Jelajahi Sumber

WebsiteAgent should interpolate values from incoming event payload.

Akinori MUSHA 10 tahun lalu
induk
melakukan
863e2b8c70

+ 7 - 0
app/models/agents/website_agent.rb

@@ -237,9 +237,16 @@ module Agents
 
     def receive(incoming_events)
       incoming_events.each do |event|
+        Thread.current[:current_event] = event
         url_to_scrape = event.payload['url']
         check_url(url_to_scrape) if url_to_scrape =~ /^https?:\/\//i
       end
+    ensure
+      Thread.current[:current_event] = nil
+    end
+
+    def interpolated(event = Thread.current[:current_event])
+      super
     end
 
     private

+ 17 - 1
spec/models/agents/website_agent_spec.rb

@@ -453,16 +453,32 @@ fire: hot
     end
 
     describe "#receive" do
-      it "should scrape from the url element in incoming event payload" do
+      before do
         @event = Event.new
         @event.agent = agents(:bob_rain_notifier_agent)
         @event.payload = { 'url' => "http://xkcd.com" }
+      end
 
+      it "should scrape from the url element in incoming event payload" do
         lambda {
           @checker.options = @valid_options
           @checker.receive([@event])
         }.should change { Event.count }.by(1)
       end
+
+      it "should interpolate values from incoming event payload" do
+        @event.payload['title'] = 'XKCD'
+
+        lambda {
+          @valid_options['extract']['site_title'] = {
+            'css' => "#comic img", 'value' => "'{{title}}'"
+          }
+          @checker.options = @valid_options
+          @checker.receive([@event])
+        }.should change { Event.count }.by(1)
+
+        Event.last.payload['site_title'].should == 'XKCD'
+      end
     end
   end