twitter 5.0.0.rc.1 → 5.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +0 -0
- data/CHANGELOG.md +7 -1
- data/CONTRIBUTING.md +13 -15
- data/README.md +53 -33
- data/Rakefile +6 -0
- data/lib/twitter/arguments.rb +3 -0
- data/lib/twitter/base.rb +88 -89
- data/lib/twitter/client.rb +5 -41
- data/lib/twitter/configuration.rb +4 -5
- data/lib/twitter/core_ext/kernel.rb +5 -1
- data/lib/twitter/creatable.rb +6 -1
- data/lib/twitter/cursor.rb +16 -12
- data/lib/twitter/entity/uri.rb +2 -1
- data/lib/twitter/enumerable.rb +1 -1
- data/lib/twitter/error.rb +42 -39
- data/lib/twitter/factory.rb +12 -5
- data/lib/twitter/geo.rb +2 -7
- data/lib/twitter/geo_factory.rb +11 -7
- data/lib/twitter/geo_results.rb +12 -8
- data/lib/twitter/identity.rb +4 -12
- data/lib/twitter/list.rb +6 -3
- data/lib/twitter/media/photo.rb +5 -3
- data/lib/twitter/media_factory.rb +11 -7
- data/lib/twitter/null_object.rb +4 -3
- data/lib/twitter/place.rb +10 -16
- data/lib/twitter/profile_banner.rb +4 -5
- data/lib/twitter/rate_limit.rb +3 -0
- data/lib/twitter/relationship.rb +0 -9
- data/lib/twitter/rest/api/direct_messages.rb +9 -6
- data/lib/twitter/rest/api/favorites.rb +6 -11
- data/lib/twitter/rest/api/friends_and_followers.rb +6 -9
- data/lib/twitter/rest/api/lists.rb +27 -20
- data/lib/twitter/rest/api/oauth.rb +17 -0
- data/lib/twitter/rest/api/places_and_geo.rb +0 -18
- data/lib/twitter/rest/api/saved_searches.rb +6 -4
- data/lib/twitter/rest/api/suggested_users.rb +2 -2
- data/lib/twitter/rest/api/tweets.rb +7 -9
- data/lib/twitter/rest/api/users.rb +6 -6
- data/lib/twitter/rest/api/utils.rb +44 -17
- data/lib/twitter/rest/client.rb +25 -43
- data/lib/twitter/rest/response/parse_error_json.rb +15 -0
- data/lib/twitter/rest/response/parse_json.rb +5 -1
- data/lib/twitter/search_results.rb +12 -8
- data/lib/twitter/size.rb +2 -15
- data/lib/twitter/streaming/client.rb +23 -11
- data/lib/twitter/streaming/event.rb +35 -0
- data/lib/twitter/streaming/friend_list.rb +13 -0
- data/lib/twitter/streaming/message_parser.rb +18 -0
- data/lib/twitter/streaming/response.rb +4 -0
- data/lib/twitter/suggestion.rb +5 -10
- data/lib/twitter/token.rb +3 -1
- data/lib/twitter/trend.rb +2 -7
- data/lib/twitter/trend_results.rb +20 -14
- data/lib/twitter/tweet.rb +18 -23
- data/lib/twitter/user.rb +34 -19
- data/lib/twitter/version.rb +1 -1
- data/spec/fixtures/request_token.txt +6 -0
- data/spec/fixtures/track_streaming_user.json +5 -0
- data/spec/twitter/base_spec.rb +0 -16
- data/spec/twitter/basic_user_spec.rb +3 -3
- data/spec/twitter/cursor_spec.rb +4 -4
- data/spec/twitter/direct_message_spec.rb +9 -9
- data/spec/twitter/entity/uri_spec.rb +12 -11
- data/spec/twitter/geo/point_spec.rb +5 -5
- data/spec/twitter/geo/polygon_spec.rb +5 -5
- data/spec/twitter/geo_factory_spec.rb +2 -2
- data/spec/twitter/geo_spec.rb +6 -6
- data/spec/twitter/identifiable_spec.rb +5 -5
- data/spec/twitter/list_spec.rb +7 -7
- data/spec/twitter/media/photo_spec.rb +19 -18
- data/spec/twitter/media_factory_spec.rb +2 -2
- data/spec/twitter/null_object_spec.rb +7 -6
- data/spec/twitter/oembed_spec.rb +6 -6
- data/spec/twitter/place_spec.rb +37 -37
- data/spec/twitter/rate_limit_spec.rb +0 -17
- data/spec/twitter/relationship_spec.rb +4 -12
- data/spec/twitter/rest/api/direct_messages_spec.rb +8 -8
- data/spec/twitter/rest/api/friends_and_followers_spec.rb +50 -120
- data/spec/twitter/rest/api/geo_spec.rb +0 -14
- data/spec/twitter/rest/api/lists_spec.rb +39 -39
- data/spec/twitter/rest/api/oauth_spec.rb +15 -4
- data/spec/twitter/rest/api/saved_searches_spec.rb +6 -6
- data/spec/twitter/rest/api/tweets_spec.rb +6 -6
- data/spec/twitter/rest/api/users_spec.rb +4 -4
- data/spec/twitter/rest/client_spec.rb +9 -9
- data/spec/twitter/saved_search_spec.rb +5 -5
- data/spec/twitter/search_results_spec.rb +3 -3
- data/spec/twitter/settings_spec.rb +2 -2
- data/spec/twitter/size_spec.rb +5 -15
- data/spec/twitter/source_user_spec.rb +3 -3
- data/spec/twitter/streaming/client_spec.rb +33 -16
- data/spec/twitter/streaming/event_spec.rb +45 -0
- data/spec/twitter/suggestion_spec.rb +5 -15
- data/spec/twitter/target_user_spec.rb +3 -3
- data/spec/twitter/token_spec.rb +2 -2
- data/spec/twitter/trend_results_spec.rb +6 -6
- data/spec/twitter/trend_spec.rb +7 -17
- data/spec/twitter/tweet_spec.rb +31 -25
- data/spec/twitter/user_spec.rb +16 -16
- data/twitter.gemspec +5 -2
- metadata +67 -15
- metadata.gz.sig +0 -0
@@ -18,10 +18,7 @@ describe Twitter::REST::API::OAuth do
|
|
18
18
|
end
|
19
19
|
it "requests with the correct headers" do
|
20
20
|
@client.token
|
21
|
-
expect(a_request(:post, @oauth2_token_url).with(:headers => {
|
22
|
-
:content_type => "application/x-www-form-urlencoded; charset=UTF-8",
|
23
|
-
:accept => "*/*"
|
24
|
-
})).to have_been_made
|
21
|
+
expect(a_request(:post, @oauth2_token_url).with(:headers => {:content_type => "application/x-www-form-urlencoded; charset=UTF-8", :accept => "*/*"})).to have_been_made
|
25
22
|
end
|
26
23
|
it "returns the bearer token" do
|
27
24
|
bearer_token = @client.token
|
@@ -53,4 +50,18 @@ describe Twitter::REST::API::OAuth do
|
|
53
50
|
end
|
54
51
|
end
|
55
52
|
|
53
|
+
describe "#reverse_token" do
|
54
|
+
before do
|
55
|
+
# WebMock treats Basic Auth differently so we have to chack against the full URL with credentials.
|
56
|
+
@oauth_request_token_url = "https://api.twitter.com/oauth/request_token?x_auth_mode=reverse_auth"
|
57
|
+
stub_request(:post, @oauth_request_token_url).to_return(:body => fixture('request_token.txt'), :headers => {:content_type => "text/html; charset=utf-8"})
|
58
|
+
end
|
59
|
+
it "requests the correct resource" do
|
60
|
+
@client.reverse_token
|
61
|
+
expect(a_request(:post, @oauth_request_token_url).with(:params => {:x_auth_mode => "reverse_auth"})).to have_been_made
|
62
|
+
end
|
63
|
+
it "requests the correct resource" do
|
64
|
+
expect(@client.reverse_token).to eql fixture('request_token.txt').read
|
65
|
+
end
|
66
|
+
end
|
56
67
|
end
|
@@ -54,31 +54,31 @@ describe Twitter::REST::API::SavedSearches do
|
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
|
-
describe "#
|
57
|
+
describe "#create_saved_search" do
|
58
58
|
before do
|
59
59
|
stub_post("/1.1/saved_searches/create.json").with(:body => {:query => "twitter"}).to_return(:body => fixture("saved_search.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
60
60
|
end
|
61
61
|
it "requests the correct resource" do
|
62
|
-
@client.
|
62
|
+
@client.create_saved_search("twitter")
|
63
63
|
expect(a_post("/1.1/saved_searches/create.json").with(:body => {:query => "twitter"})).to have_been_made
|
64
64
|
end
|
65
65
|
it "returns the created saved search" do
|
66
|
-
saved_search = @client.
|
66
|
+
saved_search = @client.create_saved_search("twitter")
|
67
67
|
expect(saved_search).to be_a Twitter::SavedSearch
|
68
68
|
expect(saved_search.name).to eq("twitter")
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
72
|
-
describe "#
|
72
|
+
describe "#destroy_saved_search" do
|
73
73
|
before do
|
74
74
|
stub_post("/1.1/saved_searches/destroy/16129012.json").to_return(:body => fixture("saved_search.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
75
75
|
end
|
76
76
|
it "requests the correct resource" do
|
77
|
-
@client.
|
77
|
+
@client.destroy_saved_search(16129012)
|
78
78
|
expect(a_post("/1.1/saved_searches/destroy/16129012.json")).to have_been_made
|
79
79
|
end
|
80
80
|
it "returns an array of deleted saved searches" do
|
81
|
-
saved_searches = @client.
|
81
|
+
saved_searches = @client.destroy_saved_search(16129012)
|
82
82
|
expect(saved_searches).to be_an Array
|
83
83
|
expect(saved_searches.first).to be_a Twitter::SavedSearch
|
84
84
|
expect(saved_searches.first.name).to eq("twitter")
|
@@ -169,16 +169,16 @@ describe Twitter::REST::API::Tweets do
|
|
169
169
|
end
|
170
170
|
end
|
171
171
|
|
172
|
-
describe "#
|
172
|
+
describe "#destroy_status" do
|
173
173
|
before do
|
174
174
|
stub_post("/1.1/statuses/destroy/25938088801.json").to_return(:body => fixture("status.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
175
175
|
end
|
176
176
|
it "requests the correct resource" do
|
177
|
-
@client.
|
177
|
+
@client.destroy_status(25938088801)
|
178
178
|
expect(a_post("/1.1/statuses/destroy/25938088801.json")).to have_been_made
|
179
179
|
end
|
180
180
|
it "returns an array of Tweets" do
|
181
|
-
tweets = @client.
|
181
|
+
tweets = @client.destroy_status(25938088801)
|
182
182
|
expect(tweets).to be_an Array
|
183
183
|
expect(tweets.first).to be_a Twitter::Tweet
|
184
184
|
expect(tweets.first.text).to eq("The problem with your code is that it's doing exactly what you told it to do.")
|
@@ -186,20 +186,20 @@ describe Twitter::REST::API::Tweets do
|
|
186
186
|
context "with a URI object passed" do
|
187
187
|
it "requests the correct resource" do
|
188
188
|
tweet = URI.parse("https://twitter.com/sferik/status/25938088801")
|
189
|
-
@client.
|
189
|
+
@client.destroy_status(tweet)
|
190
190
|
expect(a_post("/1.1/statuses/destroy/25938088801.json")).to have_been_made
|
191
191
|
end
|
192
192
|
end
|
193
193
|
context "with a URI string passed" do
|
194
194
|
it "requests the correct resource" do
|
195
|
-
@client.
|
195
|
+
@client.destroy_status("https://twitter.com/sferik/status/25938088801")
|
196
196
|
expect(a_post("/1.1/statuses/destroy/25938088801.json")).to have_been_made
|
197
197
|
end
|
198
198
|
end
|
199
199
|
context "with a Tweet passed" do
|
200
200
|
it "requests the correct resource" do
|
201
201
|
tweet = Twitter::Tweet.new(:id => 25938088801)
|
202
|
-
@client.
|
202
|
+
@client.destroy_status(tweet)
|
203
203
|
expect(a_post("/1.1/statuses/destroy/25938088801.json")).to have_been_made
|
204
204
|
end
|
205
205
|
end
|
@@ -238,11 +238,11 @@ describe Twitter::REST::API::Users do
|
|
238
238
|
end
|
239
239
|
it "returns true if block exists" do
|
240
240
|
block = @client.block?("pengwynn")
|
241
|
-
expect(block).to
|
241
|
+
expect(block).to be true
|
242
242
|
end
|
243
243
|
it "returns false if block does not exist" do
|
244
244
|
block = @client.block?("sferik")
|
245
|
-
expect(block).to
|
245
|
+
expect(block).to be false
|
246
246
|
end
|
247
247
|
end
|
248
248
|
context "with a user ID passed" do
|
@@ -528,11 +528,11 @@ describe Twitter::REST::API::Users do
|
|
528
528
|
end
|
529
529
|
it "returns true if user exists" do
|
530
530
|
user = @client.user?("sferik")
|
531
|
-
expect(user).to
|
531
|
+
expect(user).to be true
|
532
532
|
end
|
533
533
|
it "returns false if user does not exist" do
|
534
534
|
user = @client.user?("pengwynn")
|
535
|
-
expect(user).to
|
535
|
+
expect(user).to be false
|
536
536
|
end
|
537
537
|
end
|
538
538
|
|
@@ -27,15 +27,15 @@ describe Twitter::REST::Client do
|
|
27
27
|
describe ".credentials?" do
|
28
28
|
it "returns true if only bearer_token is supplied" do
|
29
29
|
client = Twitter::REST::Client.new(:bearer_token => "BT")
|
30
|
-
expect(client.credentials?).to
|
30
|
+
expect(client.credentials?).to be true
|
31
31
|
end
|
32
32
|
it "returns true if all OAuth credentials are present" do
|
33
33
|
client = Twitter::REST::Client.new(:consumer_key => "CK", :consumer_secret => "CS", :access_token => "AT", :access_token_secret => "AS")
|
34
|
-
expect(client.credentials?).to
|
34
|
+
expect(client.credentials?).to be true
|
35
35
|
end
|
36
36
|
it "returns false if any credentials are missing" do
|
37
37
|
client = Twitter::REST::Client.new(:consumer_key => "CK", :consumer_secret => "CS", :access_token => "AT")
|
38
|
-
expect(client.credentials?).to
|
38
|
+
expect(client.credentials?).to be false
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
@@ -70,33 +70,33 @@ describe Twitter::REST::Client do
|
|
70
70
|
describe "#user_token?" do
|
71
71
|
it "returns true if the user token/secret are present" do
|
72
72
|
client = Twitter::REST::Client.new(:consumer_key => "CK", :consumer_secret => "CS", :access_token => "AT", :access_token_secret => "AS")
|
73
|
-
expect(client.user_token?).to
|
73
|
+
expect(client.user_token?).to be true
|
74
74
|
end
|
75
75
|
it "returns false if the user token/secret are not completely present" do
|
76
76
|
client = Twitter::REST::Client.new(:consumer_key => "CK", :consumer_secret => "CS", :access_token => "AT")
|
77
|
-
expect(client.user_token?).to
|
77
|
+
expect(client.user_token?).to be false
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
81
81
|
describe "#bearer_token?" do
|
82
82
|
it "returns true if the app token is present" do
|
83
83
|
client = Twitter::REST::Client.new(:consumer_key => "CK", :consumer_secret => "CS", :bearer_token => "BT")
|
84
|
-
expect(client.bearer_token?).to
|
84
|
+
expect(client.bearer_token?).to be true
|
85
85
|
end
|
86
86
|
it "returns false if the bearer_token is not present" do
|
87
87
|
client = Twitter::REST::Client.new(:consumer_key => "CK", :consumer_secret => "CS")
|
88
|
-
expect(client.bearer_token?).to
|
88
|
+
expect(client.bearer_token?).to be false
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
92
92
|
describe "#credentials?" do
|
93
93
|
it "returns true if all credentials are present" do
|
94
94
|
client = Twitter::REST::Client.new(:consumer_key => "CK", :consumer_secret => "CS", :access_token => "AT", :access_token_secret => "AS")
|
95
|
-
expect(client.credentials?).to
|
95
|
+
expect(client.credentials?).to be true
|
96
96
|
end
|
97
97
|
it "returns false if any credentials are missing" do
|
98
98
|
client = Twitter::REST::Client.new(:consumer_key => "CK", :consumer_secret => "CS", :access_token => "AT")
|
99
|
-
expect(client.credentials?).to
|
99
|
+
expect(client.credentials?).to be false
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
@@ -6,17 +6,17 @@ describe Twitter::SavedSearch do
|
|
6
6
|
it "returns true when objects IDs are the same" do
|
7
7
|
saved_search = Twitter::SavedSearch.new(:id => 1, :name => "foo")
|
8
8
|
other = Twitter::SavedSearch.new(:id => 1, :name => "bar")
|
9
|
-
expect(saved_search == other).to
|
9
|
+
expect(saved_search == other).to be true
|
10
10
|
end
|
11
11
|
it "returns false when objects IDs are different" do
|
12
12
|
saved_search = Twitter::SavedSearch.new(:id => 1)
|
13
13
|
other = Twitter::SavedSearch.new(:id => 2)
|
14
|
-
expect(saved_search == other).to
|
14
|
+
expect(saved_search == other).to be false
|
15
15
|
end
|
16
16
|
it "returns false when classes are different" do
|
17
17
|
saved_search = Twitter::SavedSearch.new(:id => 1)
|
18
18
|
other = Twitter::Identity.new(:id => 1)
|
19
|
-
expect(saved_search == other).to
|
19
|
+
expect(saved_search == other).to be false
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
@@ -34,11 +34,11 @@ describe Twitter::SavedSearch do
|
|
34
34
|
describe "#created?" do
|
35
35
|
it "returns true when created_at is set" do
|
36
36
|
saved_search = Twitter::SavedSearch.new(:id => 16129012, :created_at => "Mon Jul 16 12:59:01 +0000 2007")
|
37
|
-
expect(saved_search.created?).to
|
37
|
+
expect(saved_search.created?).to be true
|
38
38
|
end
|
39
39
|
it "returns false when created_at is not set" do
|
40
40
|
saved_search = Twitter::SavedSearch.new(:id => 16129012)
|
41
|
-
expect(saved_search.created?).to
|
41
|
+
expect(saved_search.created?).to be false
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
@@ -95,15 +95,15 @@ describe Twitter::SearchResults do
|
|
95
95
|
describe "#next_results?" do
|
96
96
|
it "returns true when next_results is set" do
|
97
97
|
next_results = Twitter::SearchResults.new(:search_metadata => {:next_results => "?"}).next_results?
|
98
|
-
expect(next_results).to
|
98
|
+
expect(next_results).to be true
|
99
99
|
end
|
100
100
|
it "returns false when next_results is not set" do
|
101
101
|
next_results = Twitter::SearchResults.new(:search_metadata => {}).next_results?
|
102
|
-
expect(next_results).to
|
102
|
+
expect(next_results).to be false
|
103
103
|
end
|
104
104
|
it "returns false is search_metadata is not set" do
|
105
105
|
next_results = Twitter::SearchResults.new().next_results?
|
106
|
-
expect(next_results).to
|
106
|
+
expect(next_results).to be false
|
107
107
|
end
|
108
108
|
end
|
109
109
|
|
@@ -16,11 +16,11 @@ describe Twitter::Settings do
|
|
16
16
|
describe "#trend_location?" do
|
17
17
|
it "returns true when trend_location is set" do
|
18
18
|
settings = Twitter::Settings.new(:trend_location => {:countryCode => "US", :name => "San Francisco", :country => "United States", :placeType => {:name => "Town", :code => 7}, :woeid => 2487956, :parentid => 23424977, :url => "http://where.yahooapis.com/v1/place/2487956"})
|
19
|
-
expect(settings.trend_location?).to
|
19
|
+
expect(settings.trend_location?).to be true
|
20
20
|
end
|
21
21
|
it "returns false when trend_location is not set" do
|
22
22
|
settings = Twitter::Settings.new
|
23
|
-
expect(settings.trend_location?).to
|
23
|
+
expect(settings.trend_location?).to be false
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
data/spec/twitter/size_spec.rb
CHANGED
@@ -3,35 +3,25 @@ require 'helper'
|
|
3
3
|
describe Twitter::Size do
|
4
4
|
|
5
5
|
describe "#==" do
|
6
|
-
it "returns
|
6
|
+
it "returns true for empty objects" do
|
7
7
|
size = Twitter::Size.new
|
8
8
|
other = Twitter::Size.new
|
9
|
-
expect(size == other).to
|
9
|
+
expect(size == other).to be true
|
10
10
|
end
|
11
11
|
it "returns true when objects height and width are the same" do
|
12
12
|
size = Twitter::Size.new(:h => 1, :w => 1, :resize => true)
|
13
13
|
other = Twitter::Size.new(:h => 1, :w => 1, :resize => false)
|
14
|
-
expect(size == other).to
|
14
|
+
expect(size == other).to be true
|
15
15
|
end
|
16
16
|
it "returns false when objects height or width are different" do
|
17
17
|
size = Twitter::Size.new(:h => 1, :w => 1)
|
18
18
|
other = Twitter::Size.new(:h => 1, :w => 2)
|
19
|
-
expect(size == other).to
|
19
|
+
expect(size == other).to be false
|
20
20
|
end
|
21
21
|
it "returns false when classes are different" do
|
22
22
|
size = Twitter::Size.new(:h => 1, :w => 1)
|
23
23
|
other = Twitter::Base.new(:h => 1, :w => 1)
|
24
|
-
expect(size == other).to
|
25
|
-
end
|
26
|
-
it "returns true when objects non-height and width attributes are the same" do
|
27
|
-
size = Twitter::Size.new(:resize => true)
|
28
|
-
other = Twitter::Size.new(:resize => true)
|
29
|
-
expect(size == other).to be_true
|
30
|
-
end
|
31
|
-
it "returns false when objects non-height and width attributes are different" do
|
32
|
-
size = Twitter::Size.new(:resize => true)
|
33
|
-
other = Twitter::Size.new(:resize => false)
|
34
|
-
expect(size == other).to be_false
|
24
|
+
expect(size == other).to be false
|
35
25
|
end
|
36
26
|
end
|
37
27
|
|
@@ -6,17 +6,17 @@ describe Twitter::SourceUser do
|
|
6
6
|
it "returns true when objects IDs are the same" do
|
7
7
|
saved_search = Twitter::SourceUser.new(:id => 1, :name => "foo")
|
8
8
|
other = Twitter::SourceUser.new(:id => 1, :name => "bar")
|
9
|
-
expect(saved_search == other).to
|
9
|
+
expect(saved_search == other).to be true
|
10
10
|
end
|
11
11
|
it "returns false when objects IDs are different" do
|
12
12
|
saved_search = Twitter::SourceUser.new(:id => 1)
|
13
13
|
other = Twitter::SourceUser.new(:id => 2)
|
14
|
-
expect(saved_search == other).to
|
14
|
+
expect(saved_search == other).to be false
|
15
15
|
end
|
16
16
|
it "returns false when classes are different" do
|
17
17
|
saved_search = Twitter::SourceUser.new(:id => 1)
|
18
18
|
other = Twitter::Identity.new(:id => 1)
|
19
|
-
expect(saved_search == other).to
|
19
|
+
expect(saved_search == other).to be false
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
@@ -17,59 +17,76 @@ describe Twitter::Streaming::Client do
|
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
-
it "
|
20
|
+
it "#before_request" do
|
21
|
+
@client.connection = FakeConnection.new(fixture("track_streaming.json"))
|
22
|
+
var = false
|
23
|
+
@client.before_request do
|
24
|
+
var = true
|
25
|
+
end
|
26
|
+
expect(var).to be false
|
27
|
+
@client.user{}
|
28
|
+
expect(var).to be true
|
29
|
+
end
|
30
|
+
|
31
|
+
it "#filter" do
|
21
32
|
@client.connection = FakeConnection.new(fixture("track_streaming.json"))
|
22
33
|
tweets = []
|
23
34
|
@client.filter(:track => "india") do |tweet|
|
24
35
|
tweets << tweet
|
25
36
|
end
|
26
|
-
expect(tweets).to
|
37
|
+
expect(tweets.size).to eq(2)
|
27
38
|
expect(tweets.first).to be_a Twitter::Tweet
|
28
39
|
expect(tweets.first.text).to eq "The problem with your code is that it's doing exactly what you told it to do."
|
29
40
|
end
|
30
41
|
|
31
|
-
it "
|
42
|
+
it "#firehose" do
|
32
43
|
@client.connection = FakeConnection.new(fixture("track_streaming.json"))
|
33
44
|
tweets = []
|
34
45
|
@client.firehose do |tweet|
|
35
46
|
tweets << tweet
|
36
47
|
end
|
37
|
-
expect(tweets).to
|
48
|
+
expect(tweets.size).to eq(2)
|
38
49
|
expect(tweets.first).to be_a Twitter::Tweet
|
39
50
|
expect(tweets.first.text).to eq "The problem with your code is that it's doing exactly what you told it to do."
|
40
51
|
end
|
41
52
|
|
42
|
-
it "
|
53
|
+
it "#sample" do
|
43
54
|
@client.connection = FakeConnection.new(fixture("track_streaming.json"))
|
44
55
|
tweets = []
|
45
56
|
@client.sample do |tweet|
|
46
57
|
tweets << tweet
|
47
58
|
end
|
48
|
-
expect(tweets).to
|
59
|
+
expect(tweets.size).to eq(2)
|
49
60
|
expect(tweets.first).to be_a Twitter::Tweet
|
50
61
|
expect(tweets.first.text).to eq "The problem with your code is that it's doing exactly what you told it to do."
|
51
62
|
end
|
52
63
|
|
53
|
-
it "
|
64
|
+
it "#site" do
|
54
65
|
@client.connection = FakeConnection.new(fixture("track_streaming.json"))
|
55
66
|
tweets = []
|
56
67
|
@client.site(7505382) do |tweet|
|
57
68
|
tweets << tweet
|
58
69
|
end
|
59
|
-
expect(tweets).to
|
70
|
+
expect(tweets.size).to eq(2)
|
60
71
|
expect(tweets.first).to be_a Twitter::Tweet
|
61
72
|
expect(tweets.first.text).to eq "The problem with your code is that it's doing exactly what you told it to do."
|
62
73
|
end
|
63
74
|
|
64
|
-
it "
|
65
|
-
@client.connection = FakeConnection.new(fixture("
|
66
|
-
|
67
|
-
@client.user do |
|
68
|
-
|
75
|
+
it "#user" do
|
76
|
+
@client.connection = FakeConnection.new(fixture("track_streaming_user.json"))
|
77
|
+
items = []
|
78
|
+
@client.user do |item|
|
79
|
+
items << item
|
69
80
|
end
|
70
|
-
expect(
|
71
|
-
expect(
|
72
|
-
expect(
|
81
|
+
expect(items.size).to eq(5)
|
82
|
+
expect(items[0]).to be_a Twitter::Streaming::FriendList
|
83
|
+
expect(items[0].friend_ids).to eq([488736931,311444249])
|
84
|
+
expect(items[1]).to be_a Twitter::Tweet
|
85
|
+
expect(items[1].text).to eq "The problem with your code is that it's doing exactly what you told it to do."
|
86
|
+
expect(items[3]).to be_a Twitter::DirectMessage
|
87
|
+
expect(items[3].text).to eq "hello bot"
|
88
|
+
expect(items[4]).to be_a Twitter::Streaming::Event
|
89
|
+
expect(items[4].name).to be(:follow)
|
73
90
|
end
|
74
91
|
|
75
92
|
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Twitter::Streaming::Event do
|
4
|
+
describe "#initialize" do
|
5
|
+
before(:each) do
|
6
|
+
@data = {:event=>"follow", :source=>{:id=>10083602, :id_str=>"10083602", :name=>"Adam Bird", :screen_name=>"adambird", :location=>"Nottingham, UK", :url=>"http://t.co/M1eaIKDQyz", :description=>"CEO @onediaryapp, ex @esendex CTO and co-founder, still cycling", :protected=>false, :followers_count=>1295, :friends_count=>850, :listed_count=>53, :created_at=>"Fri Nov 09 00:35:12 +0000 2007", :favourites_count=>93, :utc_offset=>0, :time_zone=>"London", :geo_enabled=>true, :verified=>false, :statuses_count=>13507, :lang=>"en", :contributors_enabled=>false, :is_translator=>false, :profile_background_color=>"C0DEED", :profile_background_image_url=>"http://abs.twimg.com/images/themes/theme1/bg.png", :profile_background_image_url_https=>"https://abs.twimg.com/images/themes/theme1/bg.png", :profile_background_tile=>false, :profile_image_url=>"http://pbs.twimg.com/profile_images/378800000477232297/23d85bb78f71534eea1e1133fb771f86_normal.jpeg", :profile_image_url_https=>"https://pbs.twimg.com/profile_images/378800000477232297/23d85bb78f71534eea1e1133fb771f86_normal.jpeg", :profile_link_color=>"0084B4", :profile_sidebar_border_color=>"C0DEED", :profile_sidebar_fill_color=>"DDEEF6", :profile_text_color=>"333333", :profile_use_background_image=>true, :default_profile=>true, :default_profile_image=>false, :following=>false, :follow_request_sent=>false, :notifications=>false}, :target=>{:id=>1292911088, :id_str=>"1292911088", :name=>"One Diary Bot", :screen_name=>"onediarybot", :location=>nil, :url=>"http://t.co/etHGc0xHX4", :description=>"I'm the One Diary bot, here to help you with your life including personal cycling weather forecasts.", :protected=>false, :followers_count=>123, :friends_count=>157, :listed_count=>1, :created_at=>"Sat Mar 23 23:52:18 +0000 2013", :favourites_count=>0, :utc_offset=>nil, :time_zone=>nil, :geo_enabled=>false, :verified=>false, :statuses_count=>9637, :lang=>"en", :contributors_enabled=>false, :is_translator=>false, :profile_background_color=>"C0DEED", :profile_background_image_url=>"http://abs.twimg.com/images/themes/theme1/bg.png", :profile_background_image_url_https=>"https://abs.twimg.com/images/themes/theme1/bg.png", :profile_background_tile=>false, :profile_image_url=>"http://pbs.twimg.com/profile_images/3651575369/090551d8dd92080198f707769239ff43_normal.jpeg", :profile_image_url_https=>"https://pbs.twimg.com/profile_images/3651575369/090551d8dd92080198f707769239ff43_normal.jpeg", :profile_link_color=>"0084B4", :profile_sidebar_border_color=>"C0DEED", :profile_sidebar_fill_color=>"DDEEF6", :profile_text_color=>"333333", :profile_use_background_image=>true, :default_profile=>true, :default_profile_image=>false, :following=>false, :follow_request_sent=>false, :notifications=>false}, :created_at=>"Sun Oct 27 20:44:19 +0000 2013"}
|
7
|
+
end
|
8
|
+
|
9
|
+
subject { Twitter::Streaming::Event.new(@data) }
|
10
|
+
|
11
|
+
it "should set the name to be a symbolised version of string string" do
|
12
|
+
expect(subject.name).to eq(:follow)
|
13
|
+
end
|
14
|
+
it "should set the source to be the User" do
|
15
|
+
expect(subject.source).to be_a(Twitter::User)
|
16
|
+
expect(subject.source.id).to eq(10083602)
|
17
|
+
end
|
18
|
+
it "should set the target to be the User" do
|
19
|
+
expect(subject.target).to be_a(Twitter::User)
|
20
|
+
expect(subject.target.id).to eq(1292911088)
|
21
|
+
end
|
22
|
+
|
23
|
+
context "when target object is a list" do
|
24
|
+
before(:each) do
|
25
|
+
@data = {:event=>"list_member_added", :target_object=>{:full_name=>"@adambird/lists/dev", :user=>{:default_profile_image=>false, :profile_text_color=>"333333", :created_at=>"Fri Nov 09 00:35:12 +0000 2007", :is_translator=>false, :name=>"Adam Bird", :screen_name=>"adambird", :geo_enabled=>true, :follow_request_sent=>false, :profile_sidebar_border_color=>"C0DEED", :default_profile=>true, :id=>10083602, :contributors_enabled=>false, :followers_count=>1295, :lang=>"en", :profile_background_tile=>false, :url=>"http://about.me/adambird", :profile_sidebar_fill_color=>"DDEEF6", :listed_count=>53, :utc_offset=>0, :location=>"Nottingham, UK", :time_zone=>"London", :profile_background_color=>"C0DEED", :following=>false, :protected=>false, :description=>"CEO @onediaryapp, ex @esendex CTO and co-founder, still cycling", :profile_image_url_https=>"https://pbs.twimg.com/profile_images/378800000477232297/23d85bb78f71534eea1e1133fb771f86_normal.jpeg", :profile_background_image_url=>"http://abs.twimg.com/images/themes/theme1/bg.png", :profile_link_color=>"0084B4", :notifications=>false, :profile_background_image_url_https=>"https://abs.twimg.com/images/themes/theme1/bg.png", :favourites_count=>93, :id_str=>"10083602", :statuses_count=>13507, :verified=>false, :profile_image_url=>"http://pbs.twimg.com/profile_images/378800000477232297/23d85bb78f71534eea1e1133fb771f86_normal.jpeg", :profile_use_background_image=>true, :friends_count=>851}, :uri=>"/adambird/lists/dev", :subscriber_count=>0, :id_str=>"60314359", :created_at=>"Sun Dec 04 19:54:20 +0000 2011", :id=>60314359, :following=>false, :mode=>"public", :member_count=>13, :description=>"", :slug=>"dev", :name=>"dev"}, :source=>{:default_profile_image=>false, :profile_text_color=>"333333", :created_at=>"Fri Nov 09 00:35:12 +0000 2007", :is_translator=>false, :name=>"Adam Bird", :screen_name=>"adambird", :geo_enabled=>true, :follow_request_sent=>false, :profile_sidebar_border_color=>"C0DEED", :default_profile=>true, :id=>10083602, :contributors_enabled=>false, :followers_count=>1295, :lang=>"en", :profile_background_tile=>false, :url=>"http://about.me/adambird", :profile_sidebar_fill_color=>"DDEEF6", :listed_count=>53, :utc_offset=>0, :location=>"Nottingham, UK", :time_zone=>"London", :profile_background_color=>"C0DEED", :following=>false, :protected=>false, :description=>"CEO @onediaryapp, ex @esendex CTO and co-founder, still cycling", :profile_image_url_https=>"https://pbs.twimg.com/profile_images/378800000477232297/23d85bb78f71534eea1e1133fb771f86_normal.jpeg", :profile_background_image_url=>"http://abs.twimg.com/images/themes/theme1/bg.png", :profile_link_color=>"0084B4", :notifications=>false, :profile_background_image_url_https=>"https://abs.twimg.com/images/themes/theme1/bg.png", :favourites_count=>93, :id_str=>"10083602", :statuses_count=>13507, :verified=>false, :profile_image_url=>"http://pbs.twimg.com/profile_images/378800000477232297/23d85bb78f71534eea1e1133fb771f86_normal.jpeg", :profile_use_background_image=>true, :friends_count=>851}, :created_at=>"Sun Oct 27 20:54:51 +0000 2013", :target=>{:default_profile_image=>false, :profile_text_color=>"333333", :created_at=>"Sat Mar 23 23:52:18 +0000 2013", :is_translator=>false, :name=>"One Diary Bot", :screen_name=>"onediarybot", :geo_enabled=>false, :follow_request_sent=>false, :profile_sidebar_border_color=>"C0DEED", :default_profile=>true, :id=>1292911088, :contributors_enabled=>false, :followers_count=>124, :lang=>"en", :profile_background_tile=>false, :url=>"http://www.onediary.com", :profile_sidebar_fill_color=>"DDEEF6", :listed_count=>2, :utc_offset=>nil, :location=>nil, :time_zone=>nil, :profile_background_color=>"C0DEED", :following=>true, :protected=>false, :description=>"I'm the One Diary bot, here to help you with your life including personal cycling weather forecasts.", :profile_image_url_https=>"https://pbs.twimg.com/profile_images/3651575369/090551d8dd92080198f707769239ff43_normal.jpeg", :profile_background_image_url=>"http://abs.twimg.com/images/themes/theme1/bg.png", :profile_link_color=>"0084B4", :notifications=>false, :profile_background_image_url_https=>"https://abs.twimg.com/images/themes/theme1/bg.png", :favourites_count=>0, :id_str=>"1292911088", :statuses_count=>9637, :verified=>false, :profile_image_url=>"http://pbs.twimg.com/profile_images/3651575369/090551d8dd92080198f707769239ff43_normal.jpeg", :profile_use_background_image=>true, :friends_count=>157}}
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should have the list object as the target object" do
|
29
|
+
expect(subject.target_object).to be_a(Twitter::List)
|
30
|
+
expect(subject.target_object.full_name).to eq("@adambird/lists/dev")
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context "when target object is a tweet" do
|
35
|
+
before(:each) do
|
36
|
+
@data = {:event=>"favorite", :target_object=>{:in_reply_to_status_id=>394341960603172864, :favorited=>true, :entities=>{:hashtags=>[], :urls=>[], :user_mentions=>[{:screen_name=>"darrenliddell", :id_str=>"18845675", :id=>18845675, :indices=>[0, 14], :name=>"Darren Liddell"}]}, :user=>{:default_profile_image=>false, :profile_text_color=>"333333", :created_at=>"Sat Mar 23 23:52:18 +0000 2013", :is_translator=>false, :name=>"One Diary Bot", :screen_name=>"onediarybot", :geo_enabled=>false, :follow_request_sent=>false, :profile_sidebar_border_color=>"C0DEED", :default_profile=>true, :id=>1292911088, :contributors_enabled=>false, :followers_count=>124, :lang=>"en", :profile_background_tile=>false, :url=>"http://www.onediary.com", :profile_sidebar_fill_color=>"DDEEF6", :listed_count=>1, :utc_offset=>nil, :location=>nil, :time_zone=>nil, :profile_background_color=>"C0DEED", :following=>true, :protected=>false, :description=>"I'm the One Diary bot, here to help you with your life including personal cycling weather forecasts.", :profile_background_image_url=>"http://abs.twimg.com/images/themes/theme1/bg.png", :profile_link_color=>"0084B4", :notifications=>false, :profile_background_image_url_https=>"https://abs.twimg.com/images/themes/theme1/bg.png", :favourites_count=>0, :id_str=>"1292911088", :statuses_count=>9637, :verified=>false, :profile_image_url=>"http://pbs.twimg.com/profile_images/3651575369/090551d8dd92080198f707769239ff43_normal.jpeg", :profile_use_background_image=>true, :profile_image_url_https=>"https://pbs.twimg.com/profile_images/3651575369/090551d8dd92080198f707769239ff43_normal.jpeg", :friends_count=>157}, :in_reply_to_screen_name=>"darrenliddell", :place=>nil, :coordinates=>nil, :id_str=>"394454214132256768", :source=>"web", :retweet_count=>0, :id=>394454214132256768, :created_at=>"Sun Oct 27 13:23:07 +0000 2013", :in_reply_to_status_id_str=>"394341960603172864", :retweeted=>false, :in_reply_to_user_id=>18845675, :truncated=>false, :contributors=>nil, :geo=>nil, :in_reply_to_user_id_str=>"18845675", :text=>"@darrenliddell my programmers thought that they had that one covered. I have admonished them."}, :source=>{:default_profile_image=>false, :profile_text_color=>"333333", :created_at=>"Fri Nov 09 00:35:12 +0000 2007", :is_translator=>false, :name=>"Adam Bird", :screen_name=>"adambird", :geo_enabled=>true, :follow_request_sent=>false, :profile_sidebar_border_color=>"C0DEED", :default_profile=>true, :id=>10083602, :contributors_enabled=>false, :followers_count=>1295, :lang=>"en", :profile_background_tile=>false, :url=>"http://about.me/adambird", :profile_sidebar_fill_color=>"DDEEF6", :listed_count=>53, :utc_offset=>0, :location=>"Nottingham, UK", :time_zone=>"London", :profile_background_color=>"C0DEED", :following=>false, :protected=>false, :description=>"CEO @onediaryapp, ex @esendex CTO and co-founder, still cycling", :profile_background_image_url=>"http://abs.twimg.com/images/themes/theme1/bg.png", :profile_link_color=>"0084B4", :notifications=>false, :profile_background_image_url_https=>"https://abs.twimg.com/images/themes/theme1/bg.png", :favourites_count=>93, :id_str=>"10083602", :statuses_count=>13507, :verified=>false, :profile_image_url=>"http://pbs.twimg.com/profile_images/378800000477232297/23d85bb78f71534eea1e1133fb771f86_normal.jpeg", :profile_use_background_image=>true, :profile_image_url_https=>"https://pbs.twimg.com/profile_images/378800000477232297/23d85bb78f71534eea1e1133fb771f86_normal.jpeg", :friends_count=>851}, :created_at=>"Sun Oct 27 21:05:35 +0000 2013", :target=>{:default_profile_image=>false, :profile_text_color=>"333333", :created_at=>"Sat Mar 23 23:52:18 +0000 2013", :is_translator=>false, :name=>"One Diary Bot", :screen_name=>"onediarybot", :geo_enabled=>false, :follow_request_sent=>false, :profile_sidebar_border_color=>"C0DEED", :default_profile=>true, :id=>1292911088, :contributors_enabled=>false, :followers_count=>124, :lang=>"en", :profile_background_tile=>false, :url=>"http://www.onediary.com", :profile_sidebar_fill_color=>"DDEEF6", :listed_count=>1, :utc_offset=>nil, :location=>nil, :time_zone=>nil, :profile_background_color=>"C0DEED", :following=>true, :protected=>false, :description=>"I'm the One Diary bot, here to help you with your life including personal cycling weather forecasts.", :profile_background_image_url=>"http://abs.twimg.com/images/themes/theme1/bg.png", :profile_link_color=>"0084B4", :notifications=>false, :profile_background_image_url_https=>"https://abs.twimg.com/images/themes/theme1/bg.png", :favourites_count=>0, :id_str=>"1292911088", :statuses_count=>9637, :verified=>false, :profile_image_url=>"http://pbs.twimg.com/profile_images/3651575369/090551d8dd92080198f707769239ff43_normal.jpeg", :profile_use_background_image=>true, :profile_image_url_https=>"https://pbs.twimg.com/profile_images/3651575369/090551d8dd92080198f707769239ff43_normal.jpeg", :friends_count=>157}}
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should have the tweet as the target object" do
|
40
|
+
expect(subject.target_object).to be_a(Twitter::Tweet)
|
41
|
+
expect(subject.target_object.id).to eq(394454214132256768)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|