Merge pull request #101 from albertsun/concerns

Using ActiveSupport::Concerns with agents

Andrew Cantino 10 年之前
父节点
当前提交
8d864c4a0b

+ 30 - 0
app/concerns/twitter_concern.rb

@@ -0,0 +1,30 @@
1
+module TwitterConcern
2
+  extend ActiveSupport::Concern
3
+
4
+  included do
5
+    self.validate :validate_twitter_options
6
+    self.after_initialize :configure_twitter
7
+  end
8
+
9
+  def validate_twitter_options
10
+    unless options[:consumer_key].present? &&
11
+      options[:consumer_secret].present? &&
12
+      options[:oauth_token].present? &&
13
+      options[:oauth_token_secret].present?
14
+      errors.add(:base, "consumer_key, consumer_secret, oauth_token and oauth_token_secret are required to authenticate with the Twitter API")
15
+    end
16
+  end
17
+
18
+  def configure_twitter
19
+    Twitter.configure do |config|
20
+      config.consumer_key = options[:consumer_key]
21
+      config.consumer_secret = options[:consumer_secret]
22
+      config.oauth_token = options[:oauth_token]
23
+      config.oauth_token_secret = options[:oauth_token_secret]
24
+    end
25
+  end
26
+
27
+  module ClassMethods
28
+
29
+  end
30
+end

+ 29 - 0
app/concerns/weibo_concern.rb

@@ -0,0 +1,29 @@
1
+module WeiboConcern
2
+  extend ActiveSupport::Concern
3
+
4
+  included do
5
+    self.validate :validate_weibo_options
6
+  end
7
+
8
+  def validate_weibo_options
9
+    unless options[:app_key].present? &&
10
+        options[:app_secret].present? &&
11
+        options[:access_token].present?
12
+        errors.add(:base, "app_key, app_secret and access_token are required")
13
+    end
14
+  end
15
+
16
+  def weibo_client
17
+    unless @weibo_client
18
+      WeiboOAuth2::Config.api_key = options[:app_key] # WEIBO_APP_KEY
19
+      WeiboOAuth2::Config.api_secret = options[:app_secret] # WEIBO_APP_SECRET
20
+      @weibo_client = WeiboOAuth2::Client.new
21
+      @weibo_client.get_token_from_hash :access_token => options[:access_token]
22
+    end
23
+    @weibo_client
24
+  end
25
+
26
+  module ClassMethods
27
+
28
+  end
29
+end

+ 4 - 14
app/models/agents/twitter_publish_agent.rb

@@ -2,6 +2,7 @@ require "twitter"
2 2
 
3 3
 module Agents
4 4
   class TwitterPublishAgent < Agent
5
+    include TwitterConcern
5 6
     cannot_be_scheduled!
6 7
 
7 8
     description <<-MD
@@ -19,13 +20,9 @@ module Agents
19 20
 
20 21
     def validate_options
21 22
       unless options[:username].present? &&
22
-        options[:expected_update_period_in_days].present? &&
23
-        options[:consumer_key].present? &&
24
-        options[:consumer_secret].present? &&
25
-        options[:oauth_token].present? &&
26
-        options[:oauth_token_secret].present?
27
-        errors.add(:base, "expected_update_period_in_days, username, consumer_key, consumer_secret, oauth_token and oauth_token_secret are required")
28
-      end
23
+        options[:expected_update_period_in_days].present?
24
+        errors.add(:base, "username and expected_update_period_in_days are required")
25
+      end      
29 26
     end
30 27
 
31 28
     def working?
@@ -72,13 +69,6 @@ module Agents
72 69
     end
73 70
 
74 71
     def publish_tweet text
75
-      Twitter.configure do |config|
76
-        config.consumer_key = options[:consumer_key]
77
-        config.consumer_secret = options[:consumer_secret]
78
-        config.oauth_token = options[:oauth_token]
79
-        config.oauth_token_secret = options[:oauth_token_secret]
80
-      end
81
-
82 72
       Twitter.update(text)
83 73
     end
84 74
 

+ 6 - 10
app/models/agents/twitter_user_agent.rb

@@ -2,6 +2,8 @@ require "twitter"
2 2
 
3 3
 module Agents
4 4
   class TwitterUserAgent < Agent
5
+    include TwitterConcern
6
+
5 7
     cannot_receive_events!
6 8
 
7 9
     description <<-MD
@@ -39,9 +41,10 @@ module Agents
39 41
     default_schedule "every_1h"
40 42
 
41 43
     def validate_options
42
-      unless options[:username].present? && options[:expected_update_period_in_days].present? && options[:consumer_key].present? && options[:consumer_secret].present? && options[:oauth_token].present? && options[:oauth_token_secret].present?
43
-        errors.add(:base, "expected_update_period_in_days, username, consumer_key, consumer_secret, oauth_token and oauth_token_secret are required")
44
-      end
44
+      unless options[:username].present? &&
45
+        options[:expected_update_period_in_days].present?
46
+        errors.add(:base, "username and expected_update_period_in_days are required")
47
+      end      
45 48
     end
46 49
 
47 50
     def working?
@@ -60,13 +63,6 @@ module Agents
60 63
     end
61 64
 
62 65
     def check
63
-      Twitter.configure do |config|
64
-        config.consumer_key = options[:consumer_key]
65
-        config.consumer_secret = options[:consumer_secret]
66
-        config.oauth_token = options[:oauth_token]
67
-        config.oauth_token_secret = options[:oauth_token_secret]
68
-      end
69
-
70 66
       since_id = memory[:since_id] || nil
71 67
       opts = {:count => 200, :include_rts => true, :exclude_replies => false, :include_entities => true, :contributor_details => true}
72 68
       opts.merge! :since_id => since_id unless since_id.nil?

+ 5 - 11
app/models/agents/weibo_publish_agent.rb

@@ -3,6 +3,8 @@ require "weibo_2"
3 3
 
4 4
 module Agents
5 5
   class WeiboPublishAgent < Agent
6
+    include WeiboConcern
7
+
6 8
     cannot_be_scheduled!
7 9
 
8 10
     description <<-MD
@@ -19,11 +21,8 @@ module Agents
19 21
 
20 22
     def validate_options
21 23
       unless options[:uid].present? &&
22
-        options[:expected_update_period_in_days].present? &&
23
-        options[:app_key].present? &&
24
-        options[:app_secret].present? &&
25
-        options[:access_token].present?
26
-        errors.add(:base, "expected_update_period_in_days, uid, and access_token are required")
24
+        options[:expected_update_period_in_days].present?
25
+        errors.add(:base, "expected_update_period_in_days and uid are required")
27 26
       end
28 27
     end
29 28
 
@@ -73,12 +72,7 @@ module Agents
73 72
     end
74 73
 
75 74
     def publish_tweet text
76
-      WeiboOAuth2::Config.api_key = options[:app_key] # WEIBO_APP_KEY
77
-      WeiboOAuth2::Config.api_secret = options[:app_secret] # WEIBO_APP_SECRET
78
-      client = WeiboOAuth2::Client.new
79
-      client.get_token_from_hash :access_token => options[:access_token]
80
-
81
-      client.statuses.update text
75
+      weibo_client.statuses.update text
82 76
     end
83 77
 
84 78
     def unwrap_tco_urls text, tweet_json

+ 5 - 12
app/models/agents/weibo_user_agent.rb

@@ -3,6 +3,8 @@ require "weibo_2"
3 3
 
4 4
 module Agents
5 5
   class WeiboUserAgent < Agent
6
+    include WeiboConcern
7
+
6 8
     cannot_receive_events!
7 9
 
8 10
     description <<-MD
@@ -69,11 +71,8 @@ module Agents
69 71
 
70 72
     def validate_options
71 73
       unless options[:uid].present? &&
72
-        options[:expected_update_period_in_days].present? &&
73
-        options[:app_key].present? &&
74
-        options[:app_secret].present? &&
75
-        options[:access_token].present?
76
-        errors.add(:base, "expected_update_period_in_days, uid, app_key, app_secret and access_token are required")
74
+        options[:expected_update_period_in_days].present?
75
+        errors.add(:base, "expected_update_period_in_days and uid are required")
77 76
       end
78 77
     end
79 78
 
@@ -92,18 +91,12 @@ module Agents
92 91
     end
93 92
 
94 93
     def check
95
-      WeiboOAuth2::Config.api_key = options[:app_key] # WEIBO_APP_KEY
96
-      WeiboOAuth2::Config.api_secret = options[:app_secret] # WEIBO_APP_SECRET
97
-      client = WeiboOAuth2::Client.new
98
-      client.get_token_from_hash :access_token => options[:access_token]
99
-
100
-
101 94
       since_id = memory[:since_id] || nil
102 95
       opts = {:uid => options[:uid].to_i}
103 96
       opts.merge! :since_id => since_id unless since_id.nil?
104 97
 
105 98
       # http://open.weibo.com/wiki/2/statuses/user_timeline/en
106
-      resp = client.statuses.user_timeline opts
99
+      resp = weibo_client.statuses.user_timeline opts
107 100
       if resp[:statuses]
108 101
 
109 102