twittertype 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/tweeterprofile.rb
CHANGED
@@ -5,6 +5,7 @@ module TwitterType
|
|
5
5
|
:tweet_count,
|
6
6
|
:reply_count,
|
7
7
|
:retweet_count,
|
8
|
+
:original_count,
|
8
9
|
:link_count,
|
9
10
|
:inferred_type
|
10
11
|
|
@@ -12,6 +13,7 @@ module TwitterType
|
|
12
13
|
@tweet_count = 0
|
13
14
|
@reply_count = 0
|
14
15
|
@retweet_count = 0
|
16
|
+
@original_count = 0
|
15
17
|
@link_count = 0
|
16
18
|
@screen_name = screen_name
|
17
19
|
end
|
@@ -20,18 +22,32 @@ module TwitterType
|
|
20
22
|
begin
|
21
23
|
@tweet_count = @tweet_count + 1
|
22
24
|
|
23
|
-
if tweet
|
25
|
+
if reply?(tweet)
|
24
26
|
@reply_count = @reply_count + 1
|
25
27
|
return
|
26
28
|
end
|
27
29
|
|
28
|
-
@retweet_count = @retweet_count + 1 if tweet
|
29
|
-
@link_count = @link_count + 1 if tweet
|
30
|
+
@retweet_count = @retweet_count + 1 if retweet?(tweet)
|
31
|
+
@link_count = @link_count + 1 if has_link?(tweet)
|
32
|
+
@original_count = @original_count + 1 if !retweet?(tweet) && !reply?(tweet)
|
33
|
+
|
30
34
|
rescue NoMethodError => root
|
31
35
|
raise ArgumentError.new("Missing method responses in tweet structure:" + root.to_s)
|
32
36
|
end
|
33
37
|
end
|
34
38
|
|
39
|
+
def retweet?(tweet)
|
40
|
+
tweet.text.slice(0, 2) == 'RT'
|
41
|
+
end
|
42
|
+
|
43
|
+
def has_link?(tweet)
|
44
|
+
tweet.text.index('http://') != nil
|
45
|
+
end
|
46
|
+
|
47
|
+
def reply?(tweet)
|
48
|
+
tweet.text.slice(0, 1) == '@'
|
49
|
+
end
|
50
|
+
|
35
51
|
def to_s
|
36
52
|
type_to_s = (@inferred_type ? "type " + @inferred_type.inspect + ", " : "")
|
37
53
|
@screen_name + ": " + type_to_s + "#tweets " + @tweet_count.to_s + ", #replies " + @reply_count.to_s + ", #retweets " + @retweet_count.to_s + ", #links " + @link_count.to_s + "\n"
|
data/lib/twitterclientwrapper.rb
CHANGED
@@ -16,6 +16,7 @@ module TwitterType
|
|
16
16
|
@client.gather_recent_tweets_for(screen_name)
|
17
17
|
rescue Twitter::RESTError => error
|
18
18
|
raise ProtectedUserAccessError.new(error.to_s) if ProtectedUserAccessError.fits(error)
|
19
|
+
raise InvalidUserAccessError.new(error.to_s) if InvalidUserAccessError.fits(error)
|
19
20
|
raise TwitterClientError.new(error.to_s)
|
20
21
|
end
|
21
22
|
end
|
@@ -36,4 +37,12 @@ module TwitterType
|
|
36
37
|
return !error.code.index(CODE).nil?
|
37
38
|
end
|
38
39
|
end
|
40
|
+
|
41
|
+
class InvalidUserAccessError < TwitterClientError
|
42
|
+
CODE = "404"
|
43
|
+
|
44
|
+
def self.fits(error)
|
45
|
+
return !error.code.index(CODE).nil?
|
46
|
+
end
|
47
|
+
end
|
39
48
|
end
|
data/lib/twittertypeinferrer.rb
CHANGED
@@ -19,6 +19,9 @@ module TwitterType
|
|
19
19
|
rescue TwitterType::ProtectedUserAccessError => error
|
20
20
|
@profile = ProfileFactory.new(user).build([])
|
21
21
|
@profile.inferred_type = :unknown_protected_user
|
22
|
+
rescue TwitterType::InvalidUserAccessError => error
|
23
|
+
@profile = ProfileFactory.new(user).build([])
|
24
|
+
@profile.inferred_type = :unknown_user
|
22
25
|
end
|
23
26
|
|
24
27
|
self
|
@@ -63,6 +63,23 @@ describe TwitterType::TweeterProfile, " being updated" do
|
|
63
63
|
|
64
64
|
end
|
65
65
|
|
66
|
+
it "should increase the original count for each non retweet and non reply tweet sent to a user" do
|
67
|
+
@profile.original_count.should == 0
|
68
|
+
|
69
|
+
@profile.update_from(Tweet.new("@user text"))
|
70
|
+
@profile.original_count.should == 0
|
71
|
+
|
72
|
+
@profile.update_from(Tweet.new("RT text"))
|
73
|
+
@profile.original_count.should == 0
|
74
|
+
|
75
|
+
@profile.update_from(Tweet.new("original"))
|
76
|
+
@profile.original_count.should == 1
|
77
|
+
|
78
|
+
@profile.update_from(Tweet.new("text http://www.twitter.com", nil))
|
79
|
+
@profile.original_count.should == 2
|
80
|
+
|
81
|
+
end
|
82
|
+
|
66
83
|
it "should increase the reply count for each tweet sent to a user" do
|
67
84
|
@profile.reply_count.should == 0
|
68
85
|
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require "spec"
|
2
2
|
require "twitterclientwrapper"
|
3
|
+
require 'twitter'
|
3
4
|
|
4
5
|
describe TwitterType::TwitterClientWrapper do
|
5
6
|
|
@@ -15,7 +16,7 @@ describe TwitterType::TwitterClientWrapper do
|
|
15
16
|
TwitterClientWrapper.new.client.class.should == TwitterClient
|
16
17
|
end
|
17
18
|
|
18
|
-
it "should
|
19
|
+
it "should raise a custom exception when an attempt to access a protected user's tweets is made" do
|
19
20
|
protected_user_access_error = Twitter::RESTError.new
|
20
21
|
protected_user_access_error.code = "401"
|
21
22
|
|
@@ -25,6 +26,16 @@ describe TwitterType::TwitterClientWrapper do
|
|
25
26
|
lambda{TwitterClientWrapper.new(client).gather_recent_tweets_for("protected_user")}.should raise_error(ProtectedUserAccessError)
|
26
27
|
end
|
27
28
|
|
29
|
+
it "should raise a custom exception when an attempt to access an unknown user's is made" do
|
30
|
+
invalid_user_access_error = Twitter::RESTError.new
|
31
|
+
invalid_user_access_error.code = "404"
|
32
|
+
|
33
|
+
client = mock
|
34
|
+
client.stub!(:gather_recent_tweets_for).with("invalid_user").and_raise(invalid_user_access_error)
|
35
|
+
|
36
|
+
lambda{TwitterClientWrapper.new(client).gather_recent_tweets_for("invalid_user")}.should raise_error(InvalidUserAccessError)
|
37
|
+
end
|
38
|
+
|
28
39
|
it "should turn any other exceptiona raised by client into a generci exception" do
|
29
40
|
access_error = Twitter::RESTError.new
|
30
41
|
access_error.code = "404"
|
@@ -34,6 +34,16 @@ describe TypeInferrer do
|
|
34
34
|
|
35
35
|
end
|
36
36
|
|
37
|
+
it "should use an unknown_user type for any invalid screen name" do
|
38
|
+
@mock_client.stub!(:gather_recent_tweets_for).with(VALID_TWITTER_USER).and_raise(InvalidUserAccessError.new(nil))
|
39
|
+
@cut.client = @mock_client
|
40
|
+
|
41
|
+
@cut.profile.should == nil
|
42
|
+
@cut.infer(VALID_TWITTER_USER)
|
43
|
+
@cut.profile.inferred_type.should == :unknown_user
|
44
|
+
|
45
|
+
end
|
46
|
+
|
37
47
|
it "should infer a type for a Twitter User" do
|
38
48
|
tweets = Array.new(1) {|i| Tweet.new("test", "to user")}
|
39
49
|
@mock_client.stub!(:gather_recent_tweets_for).with(VALID_TWITTER_USER).and_return(tweets)
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
7
|
+
- 2
|
8
8
|
- 0
|
9
|
-
version: 0.
|
9
|
+
version: 0.2.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Andy Marks
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-03-
|
17
|
+
date: 2010-03-08 00:00:00 +11:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|