twitter 5.8.0 → 5.9.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.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +18 -0
  3. data/README.md +10 -36
  4. data/lib/twitter/base.rb +20 -3
  5. data/lib/twitter/basic_user.rb +6 -4
  6. data/lib/twitter/client.rb +2 -1
  7. data/lib/twitter/configuration.rb +1 -1
  8. data/lib/twitter/cursor.rb +1 -1
  9. data/lib/twitter/entities.rb +10 -6
  10. data/lib/twitter/enumerable.rb +2 -2
  11. data/lib/twitter/error.rb +7 -0
  12. data/lib/twitter/geo_results.rb +1 -1
  13. data/lib/twitter/list.rb +3 -2
  14. data/lib/twitter/media/photo.rb +1 -1
  15. data/lib/twitter/place.rb +13 -15
  16. data/lib/twitter/profile.rb +1 -1
  17. data/lib/twitter/profile_banner.rb +1 -1
  18. data/lib/twitter/rest/client.rb +17 -2
  19. data/lib/twitter/rest/friends_and_followers.rb +1 -1
  20. data/lib/twitter/rest/lists.rb +4 -2
  21. data/lib/twitter/rest/spam_reporting.rb +1 -1
  22. data/lib/twitter/rest/tweets.rb +17 -17
  23. data/lib/twitter/rest/users.rb +77 -13
  24. data/lib/twitter/rest/utils.rb +10 -6
  25. data/lib/twitter/search_results.rb +1 -1
  26. data/lib/twitter/settings.rb +4 -3
  27. data/lib/twitter/source_user.rb +3 -2
  28. data/lib/twitter/streaming/client.rb +7 -2
  29. data/lib/twitter/streaming/connection.rb +9 -2
  30. data/lib/twitter/streaming/response.rb +3 -3
  31. data/lib/twitter/suggestion.rb +1 -1
  32. data/lib/twitter/target_user.rb +1 -1
  33. data/lib/twitter/trend.rb +2 -1
  34. data/lib/twitter/trend_results.rb +1 -1
  35. data/lib/twitter/tweet.rb +4 -4
  36. data/lib/twitter/user.rb +60 -19
  37. data/lib/twitter/utils.rb +12 -5
  38. data/lib/twitter/version.rb +1 -1
  39. data/spec/fixtures/following.json +1 -1
  40. data/spec/fixtures/sferik.json +1 -1
  41. data/spec/helper.rb +14 -5
  42. data/spec/twitter/base_spec.rb +16 -4
  43. data/spec/twitter/direct_message_spec.rb +12 -13
  44. data/spec/twitter/entity/uri_spec.rb +2 -2
  45. data/spec/twitter/error_spec.rb +2 -2
  46. data/spec/twitter/media/photo_spec.rb +4 -4
  47. data/spec/twitter/oembed_spec.rb +3 -3
  48. data/spec/twitter/place_spec.rb +1 -1
  49. data/spec/twitter/rest/client_spec.rb +54 -14
  50. data/spec/twitter/rest/friends_and_followers_spec.rb +76 -76
  51. data/spec/twitter/rest/lists_spec.rb +85 -64
  52. data/spec/twitter/rest/timelines_spec.rb +2 -2
  53. data/spec/twitter/rest/tweets_spec.rb +20 -16
  54. data/spec/twitter/rest/undocumented_spec.rb +17 -17
  55. data/spec/twitter/rest/users_spec.rb +101 -17
  56. data/spec/twitter/streaming/client_spec.rb +1 -1
  57. data/spec/twitter/streaming/connection_spec.rb +32 -0
  58. data/spec/twitter/streaming/response_spec.rb +21 -0
  59. data/spec/twitter/trend_spec.rb +1 -1
  60. data/spec/twitter/tweet_spec.rb +14 -23
  61. data/spec/twitter/user_spec.rb +120 -13
  62. data/twitter.gemspec +3 -3
  63. metadata +8 -4
@@ -108,8 +108,8 @@ describe Twitter::REST::Timelines do
108
108
  end
109
109
  it 'requests the correct resource' do
110
110
  @client.retweeted_to_me
111
- expect(stub_get('/1.1/statuses/home_timeline.json').with(:query => {:include_rts => 'true', :count => '200'})).to have_been_made
112
- expect(stub_get('/1.1/statuses/home_timeline.json').with(:query => {:include_rts => 'true', :count => '200', :max_id => '244102729860009983'})).to have_been_made.times(3)
111
+ expect(a_get('/1.1/statuses/home_timeline.json').with(:query => {:include_rts => 'true', :count => '200'})).to have_been_made
112
+ expect(a_get('/1.1/statuses/home_timeline.json').with(:query => {:include_rts => 'true', :count => '200', :max_id => '244102729860009983'})).to have_been_made.times(3)
113
113
  end
114
114
  it 'returns the 20 most recent retweets posted by users the authenticating user follow' do
115
115
  tweets = @client.retweeted_to_me
@@ -135,36 +135,34 @@ describe Twitter::REST::Tweets do
135
135
 
136
136
  describe '#statuses' do
137
137
  before do
138
- stub_get('/1.1/statuses/show/25938088801.json').to_return(:body => fixture('status.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
138
+ stub_post('/1.1/statuses/lookup.json').with(:body => {:id => '25938088801,91151181040201728'}).to_return(:body => fixture('statuses.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
139
139
  end
140
140
  it 'requests the correct resource' do
141
- @client.statuses(25_938_088_801)
142
- expect(a_get('/1.1/statuses/show/25938088801.json')).to have_been_made
141
+ @client.statuses(25_938_088_801, 91_151_181_040_201_728)
142
+ expect(a_post('/1.1/statuses/lookup.json').with(:body => {:id => '25938088801,91151181040201728'})).to have_been_made
143
143
  end
144
144
  it 'returns an array of Tweets' do
145
- tweets = @client.statuses(25_938_088_801)
145
+ tweets = @client.statuses(25_938_088_801, 91_151_181_040_201_728)
146
146
  expect(tweets).to be_an Array
147
147
  expect(tweets.first).to be_a Twitter::Tweet
148
- expect(tweets.first.text).to eq("The problem with your code is that it's doing exactly what you told it to do.")
148
+ expect(tweets.first.text).to eq('Happy Birthday @imdane. Watch out for those @rally pranksters!')
149
149
  end
150
- context 'with a URI object passed' do
150
+ context 'with URI objects passed' do
151
151
  it 'requests the correct resource' do
152
- tweet = URI.parse('https://twitter.com/sferik/status/25938088801')
153
- @client.statuses(tweet)
154
- expect(a_get('/1.1/statuses/show/25938088801.json')).to have_been_made
152
+ @client.statuses(URI.parse('https://twitter.com/sferik/status/25938088801'), URI.parse('https://twitter.com/sferik/status/91151181040201728'))
153
+ expect(a_post('/1.1/statuses/lookup.json').with(:body => {:id => '25938088801,91151181040201728'})).to have_been_made
155
154
  end
156
155
  end
157
- context 'with a URI string passed' do
156
+ context 'with URI strings passed' do
158
157
  it 'requests the correct resource' do
159
- @client.statuses('https://twitter.com/sferik/status/25938088801')
160
- expect(a_get('/1.1/statuses/show/25938088801.json')).to have_been_made
158
+ @client.statuses('https://twitter.com/sferik/status/25938088801', 'https://twitter.com/sferik/status/91151181040201728')
159
+ expect(a_post('/1.1/statuses/lookup.json').with(:body => {:id => '25938088801,91151181040201728'})).to have_been_made
161
160
  end
162
161
  end
163
- context 'with a Tweet passed' do
162
+ context 'with Tweets passed' do
164
163
  it 'requests the correct resource' do
165
- tweet = Twitter::Tweet.new(:id => 25_938_088_801)
166
- @client.statuses(tweet)
167
- expect(a_get('/1.1/statuses/show/25938088801.json')).to have_been_made
164
+ @client.statuses(Twitter::Tweet.new(:id => 25_938_088_801), Twitter::Tweet.new(:id => 91_151_181_040_201_728))
165
+ expect(a_post('/1.1/statuses/lookup.json').with(:body => {:id => '25938088801,91151181040201728'})).to have_been_made
168
166
  end
169
167
  end
170
168
  end
@@ -474,6 +472,12 @@ describe Twitter::REST::Tweets do
474
472
  expect(a_post('/1.1/statuses/update_with_media.json')).to have_been_made
475
473
  end
476
474
  end
475
+ context 'A non IO object' do
476
+ it 'raises an error' do
477
+ update = lambda { @client.update_with_media('You always have options', 'Unacceptable IO') }
478
+ expect { update.call }.to raise_error(Twitter::Error::UnacceptableIO)
479
+ end
480
+ end
477
481
  context 'already posted' do
478
482
  before do
479
483
  stub_post('/1.1/statuses/update_with_media.json').to_return(:status => 403, :body => fixture('already_posted.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
@@ -9,11 +9,11 @@ describe Twitter::REST::Undocumented do
9
9
  describe '#following_followers_of' do
10
10
  context 'with a screen_name passed' do
11
11
  before do
12
- stub_get('/users/following_followers_of.json').with(:query => {:cursor => '-1', :screen_name => 'sferik'}).to_return(:body => fixture('users_list.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
12
+ stub_get('/users/following_followers_of.json').with(:query => {:screen_name => 'sferik', :cursor => '-1'}).to_return(:body => fixture('users_list.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
13
13
  end
14
14
  it 'requests the correct resource' do
15
15
  @client.following_followers_of('sferik')
16
- expect(a_get('/users/following_followers_of.json').with(:query => {:cursor => '-1', :screen_name => 'sferik'})).to have_been_made
16
+ expect(a_get('/users/following_followers_of.json').with(:query => {:screen_name => 'sferik', :cursor => '-1'})).to have_been_made
17
17
  end
18
18
  it 'returns an array of numeric IDs for every user following the specified user' do
19
19
  following_followers_of = @client.following_followers_of('sferik')
@@ -22,43 +22,43 @@ describe Twitter::REST::Undocumented do
22
22
  end
23
23
  context 'with each' do
24
24
  before do
25
- stub_get('/users/following_followers_of.json').with(:query => {:cursor => '1322801608223717003', :screen_name => 'sferik'}).to_return(:body => fixture('users_list2.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
25
+ stub_get('/users/following_followers_of.json').with(:query => {:screen_name => 'sferik', :cursor => '1322801608223717003'}).to_return(:body => fixture('users_list2.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
26
26
  end
27
27
  it 'requests the correct resource' do
28
28
  @client.following_followers_of('sferik').each {}
29
- expect(a_get('/users/following_followers_of.json').with(:query => {:cursor => '-1', :screen_name => 'sferik'})).to have_been_made
30
- expect(a_get('/users/following_followers_of.json').with(:query => {:cursor => '1322801608223717003', :screen_name => 'sferik'})).to have_been_made
29
+ expect(a_get('/users/following_followers_of.json').with(:query => {:screen_name => 'sferik', :cursor => '-1'})).to have_been_made
30
+ expect(a_get('/users/following_followers_of.json').with(:query => {:screen_name => 'sferik', :cursor => '1322801608223717003'})).to have_been_made
31
31
  end
32
32
  end
33
33
  end
34
34
  context 'with a user ID passed' do
35
35
  before do
36
- stub_get('/users/following_followers_of.json').with(:query => {:cursor => '-1', :user_id => '7505382'}).to_return(:body => fixture('users_list.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
36
+ stub_get('/users/following_followers_of.json').with(:query => {:user_id => '7505382', :cursor => '-1'}).to_return(:body => fixture('users_list.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
37
37
  end
38
38
  it 'requests the correct resource' do
39
39
  @client.following_followers_of(7_505_382)
40
- expect(a_get('/users/following_followers_of.json').with(:query => {:cursor => '-1', :user_id => '7505382'})).to have_been_made
40
+ expect(a_get('/users/following_followers_of.json').with(:query => {:user_id => '7505382', :cursor => '-1'})).to have_been_made
41
41
  end
42
42
  context 'with each' do
43
43
  before do
44
- stub_get('/users/following_followers_of.json').with(:query => {:cursor => '1322801608223717003', :user_id => '7505382'}).to_return(:body => fixture('users_list2.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
44
+ stub_get('/users/following_followers_of.json').with(:query => {:user_id => '7505382', :cursor => '1322801608223717003'}).to_return(:body => fixture('users_list2.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
45
45
  end
46
46
  it 'requests the correct resource' do
47
47
  @client.following_followers_of(7_505_382).each {}
48
- expect(a_get('/users/following_followers_of.json').with(:query => {:cursor => '-1', :user_id => '7505382'})).to have_been_made
49
- expect(a_get('/users/following_followers_of.json').with(:query => {:cursor => '1322801608223717003', :user_id => '7505382'})).to have_been_made
48
+ expect(a_get('/users/following_followers_of.json').with(:query => {:user_id => '7505382', :cursor => '-1'})).to have_been_made
49
+ expect(a_get('/users/following_followers_of.json').with(:query => {:user_id => '7505382', :cursor => '1322801608223717003'})).to have_been_made
50
50
  end
51
51
  end
52
52
  end
53
53
  context 'without arguments passed' do
54
54
  before do
55
- stub_get('/1.1/account/verify_credentials.json').to_return(:body => fixture('sferik.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
56
- stub_get('/users/following_followers_of.json').with(:query => {:cursor => '-1', :screen_name => 'sferik'}).to_return(:body => fixture('users_list.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
55
+ stub_get('/1.1/account/verify_credentials.json').with(:query => {:include_entities => 'false', :skip_status => 'true'}).to_return(:body => fixture('sferik.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
56
+ stub_get('/users/following_followers_of.json').with(:query => {:user_id => '7505382', :cursor => '-1'}).to_return(:body => fixture('users_list.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
57
57
  end
58
58
  it 'requests the correct resource' do
59
59
  @client.following_followers_of
60
- expect(a_get('/1.1/account/verify_credentials.json')).to have_been_made
61
- expect(a_get('/users/following_followers_of.json').with(:query => {:cursor => '-1', :screen_name => 'sferik'})).to have_been_made
60
+ expect(a_get('/1.1/account/verify_credentials.json').with(:query => {:include_entities => 'false', :skip_status => 'true'})).to have_been_made
61
+ expect(a_get('/users/following_followers_of.json').with(:query => {:user_id => '7505382', :cursor => '-1'})).to have_been_made
62
62
  end
63
63
  it 'returns an array of numeric IDs for every user following the specified user' do
64
64
  following_followers_of = @client.following_followers_of
@@ -67,12 +67,12 @@ describe Twitter::REST::Undocumented do
67
67
  end
68
68
  context 'with each' do
69
69
  before do
70
- stub_get('/users/following_followers_of.json').with(:query => {:cursor => '1322801608223717003', :screen_name => 'sferik'}).to_return(:body => fixture('users_list2.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
70
+ stub_get('/users/following_followers_of.json').with(:query => {:user_id => '7505382', :cursor => '1322801608223717003'}).to_return(:body => fixture('users_list2.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
71
71
  end
72
72
  it 'requests the correct resource' do
73
73
  @client.following_followers_of.each {}
74
- expect(a_get('/users/following_followers_of.json').with(:query => {:cursor => '-1', :screen_name => 'sferik'})).to have_been_made
75
- expect(a_get('/users/following_followers_of.json').with(:query => {:cursor => '1322801608223717003', :screen_name => 'sferik'})).to have_been_made
74
+ expect(a_get('/users/following_followers_of.json').with(:query => {:user_id => '7505382', :cursor => '-1'})).to have_been_made
75
+ expect(a_get('/users/following_followers_of.json').with(:query => {:user_id => '7505382', :cursor => '1322801608223717003'})).to have_been_made
76
76
  end
77
77
  end
78
78
  end
@@ -171,26 +171,26 @@ describe Twitter::REST::Users do
171
171
  end
172
172
  end
173
173
 
174
- describe '#blocking' do
174
+ describe '#blocked' do
175
175
  before do
176
176
  stub_get('/1.1/blocks/list.json').with(:query => {:cursor => '-1'}).to_return(:body => fixture('users_list.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
177
177
  end
178
178
  it 'requests the correct resource' do
179
- @client.blocking
179
+ @client.blocked
180
180
  expect(a_get('/1.1/blocks/list.json').with(:query => {:cursor => '-1'})).to have_been_made
181
181
  end
182
182
  it 'returns an array of user objects that the authenticating user is blocking' do
183
- blocking = @client.blocking
184
- expect(blocking).to be_a Twitter::Cursor
185
- expect(blocking.first).to be_a Twitter::User
186
- expect(blocking.first.id).to eq(7_505_382)
183
+ blocked = @client.blocked
184
+ expect(blocked).to be_a Twitter::Cursor
185
+ expect(blocked.first).to be_a Twitter::User
186
+ expect(blocked.first.id).to eq(7_505_382)
187
187
  end
188
188
  context 'with each' do
189
189
  before do
190
190
  stub_get('/1.1/blocks/list.json').with(:query => {:cursor => '1322801608223717003'}).to_return(:body => fixture('users_list2.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
191
191
  end
192
192
  it 'requests the correct resource' do
193
- @client.blocking.each {}
193
+ @client.blocked.each {}
194
194
  expect(a_get('/1.1/blocks/list.json').with(:query => {:cursor => '-1'})).to have_been_made
195
195
  expect(a_get('/1.1/blocks/list.json').with(:query => {:cursor => '1322801608223717003'})).to have_been_made
196
196
  end
@@ -579,12 +579,13 @@ describe Twitter::REST::Users do
579
579
  end
580
580
  context 'without arguments passed' do
581
581
  before do
582
- stub_get('/1.1/account/verify_credentials.json').to_return(:body => fixture('sferik.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
583
- stub_get('/1.1/users/contributees.json').with(:query => {:screen_name => 'sferik'}).to_return(:body => fixture('contributees.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
582
+ stub_get('/1.1/account/verify_credentials.json').with(:query => {:include_entities => 'false', :skip_status => 'true'}).to_return(:body => fixture('sferik.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
583
+ stub_get('/1.1/users/contributees.json').with(:query => {:user_id => '7505382'}).to_return(:body => fixture('contributees.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
584
584
  end
585
585
  it 'requests the correct resource' do
586
586
  @client.contributees
587
- expect(a_get('/1.1/users/contributees.json').with(:query => {:screen_name => 'sferik'})).to have_been_made
587
+ expect(a_get('/1.1/account/verify_credentials.json').with(:query => {:include_entities => 'false', :skip_status => 'true'})).to have_been_made
588
+ expect(a_get('/1.1/users/contributees.json').with(:query => {:user_id => '7505382'})).to have_been_made
588
589
  end
589
590
  it 'returns contributees' do
590
591
  contributees = @client.contributees
@@ -622,12 +623,13 @@ describe Twitter::REST::Users do
622
623
  end
623
624
  context 'without arguments passed' do
624
625
  before do
625
- stub_get('/1.1/account/verify_credentials.json').to_return(:body => fixture('sferik.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
626
- stub_get('/1.1/users/contributors.json').with(:query => {:screen_name => 'sferik'}).to_return(:body => fixture('members.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
626
+ stub_get('/1.1/account/verify_credentials.json').with(:query => {:include_entities => 'false', :skip_status => 'true'}).to_return(:body => fixture('sferik.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
627
+ stub_get('/1.1/users/contributors.json').with(:query => {:user_id => '7505382'}).to_return(:body => fixture('members.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
627
628
  end
628
629
  it 'requests the correct resource' do
629
630
  @client.contributors
630
- expect(a_get('/1.1/users/contributors.json').with(:query => {:screen_name => 'sferik'})).to have_been_made
631
+ expect(a_get('/1.1/account/verify_credentials.json').with(:query => {:include_entities => 'false', :skip_status => 'true'})).to have_been_made
632
+ expect(a_get('/1.1/users/contributors.json').with(:query => {:user_id => '7505382'})).to have_been_made
631
633
  end
632
634
  it 'returns contributors' do
633
635
  contributors = @client.contributors
@@ -693,13 +695,13 @@ describe Twitter::REST::Users do
693
695
  end
694
696
  context 'without arguments passed' do
695
697
  before do
696
- stub_get('/1.1/account/verify_credentials.json').to_return(:body => fixture('sferik.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
697
- stub_get('/1.1/users/profile_banner.json').with(:query => {:screen_name => 'sferik'}).to_return(:body => fixture('profile_banner.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
698
+ stub_get('/1.1/account/verify_credentials.json').with(:query => {:include_entities => 'false', :skip_status => 'true'}).to_return(:body => fixture('sferik.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
699
+ stub_get('/1.1/users/profile_banner.json').with(:query => {:user_id => '7505382'}).to_return(:body => fixture('profile_banner.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
698
700
  end
699
701
  it 'requests the correct resource' do
700
702
  @client.profile_banner
701
- expect(a_get('/1.1/account/verify_credentials.json')).to have_been_made
702
- expect(a_get('/1.1/users/profile_banner.json').with(:query => {:screen_name => 'sferik'})).to have_been_made
703
+ expect(a_get('/1.1/account/verify_credentials.json').with(:query => {:include_entities => 'false', :skip_status => 'true'})).to have_been_made
704
+ expect(a_get('/1.1/users/profile_banner.json').with(:query => {:user_id => '7505382'})).to have_been_made
703
705
  end
704
706
  it 'returns an array of numeric IDs for every user following the specified user' do
705
707
  banner = @client.profile_banner
@@ -710,4 +712,86 @@ describe Twitter::REST::Users do
710
712
  end
711
713
  end
712
714
 
715
+ describe '#mute' do
716
+ before do
717
+ stub_post('/1.1/mutes/users/create.json').with(:body => {:screen_name => 'sferik'}).to_return(:body => fixture('sferik.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
718
+ end
719
+ it 'requests the correct resource' do
720
+ @client.mute('sferik')
721
+ expect(a_post('/1.1/mutes/users/create.json')).to have_been_made
722
+ end
723
+ it 'returns an array of muteed users' do
724
+ users = @client.mute('sferik')
725
+ expect(users).to be_an Array
726
+ expect(users.first).to be_a Twitter::User
727
+ expect(users.first.id).to eq(7_505_382)
728
+ end
729
+ end
730
+
731
+ describe '#unmute' do
732
+ before do
733
+ stub_post('/1.1/mutes/users/destroy.json').with(:body => {:screen_name => 'sferik'}).to_return(:body => fixture('sferik.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
734
+ end
735
+ it 'requests the correct resource' do
736
+ @client.unmute('sferik')
737
+ expect(a_post('/1.1/mutes/users/destroy.json').with(:body => {:screen_name => 'sferik'})).to have_been_made
738
+ end
739
+ it 'returns an array of un-muteed users' do
740
+ users = @client.unmute('sferik')
741
+ expect(users).to be_an Array
742
+ expect(users.first).to be_a Twitter::User
743
+ expect(users.first.id).to eq(7_505_382)
744
+ end
745
+ end
746
+
747
+ describe '#muted' do
748
+ before do
749
+ stub_get('/1.1/mutes/users/list.json').with(:query => {:cursor => '-1'}).to_return(:body => fixture('users_list.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
750
+ end
751
+ it 'requests the correct resource' do
752
+ @client.muted
753
+ expect(a_get('/1.1/mutes/users/list.json').with(:query => {:cursor => '-1'})).to have_been_made
754
+ end
755
+ it 'returns an array of user objects that the authenticating user is muting' do
756
+ muted = @client.muted
757
+ expect(muted).to be_a Twitter::Cursor
758
+ expect(muted.first).to be_a Twitter::User
759
+ expect(muted.first.id).to eq(7_505_382)
760
+ end
761
+ context 'with each' do
762
+ before do
763
+ stub_get('/1.1/mutes/users/list.json').with(:query => {:cursor => '1322801608223717003'}).to_return(:body => fixture('users_list2.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
764
+ end
765
+ it 'requests the correct resource' do
766
+ @client.muted.each {}
767
+ expect(a_get('/1.1/mutes/users/list.json').with(:query => {:cursor => '-1'})).to have_been_made
768
+ expect(a_get('/1.1/mutes/users/list.json').with(:query => {:cursor => '1322801608223717003'})).to have_been_made
769
+ end
770
+ end
771
+ end
772
+
773
+ describe '#muted_ids' do
774
+ before do
775
+ stub_get('/1.1/mutes/users/ids.json').with(:query => {:cursor => '-1'}).to_return(:body => fixture('ids_list.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
776
+ end
777
+ it 'requests the correct resource' do
778
+ @client.muted_ids
779
+ expect(a_get('/1.1/mutes/users/ids.json').with(:query => {:cursor => '-1'})).to have_been_made
780
+ end
781
+ it 'returns an array of numeric user IDs the authenticating user is muting' do
782
+ muted_ids = @client.muted_ids
783
+ expect(muted_ids).to be_a Twitter::Cursor
784
+ expect(muted_ids.first).to eq(20_009_713)
785
+ end
786
+ context 'with each' do
787
+ before do
788
+ stub_get('/1.1/mutes/users/ids.json').with(:query => {:cursor => '1305102810874389703'}).to_return(:body => fixture('ids_list2.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
789
+ end
790
+ it 'requests the correct resource' do
791
+ @client.muted_ids.each {}
792
+ expect(a_get('/1.1/mutes/users/ids.json').with(:query => {:cursor => '-1'})).to have_been_made
793
+ expect(a_get('/1.1/mutes/users/ids.json').with(:query => {:cursor => '1305102810874389703'})).to have_been_made
794
+ end
795
+ end
796
+ end
713
797
  end
@@ -10,7 +10,7 @@ describe Twitter::Streaming::Client do
10
10
  @body = body
11
11
  end
12
12
 
13
- def stream(request, response)
13
+ def stream(_, response)
14
14
  @body.each_line do |line|
15
15
  response.on_body(line)
16
16
  end
@@ -0,0 +1,32 @@
1
+ require 'helper'
2
+
3
+ describe Twitter::Streaming::Connection do
4
+
5
+ describe 'initialize' do
6
+ context 'no options provided' do
7
+ subject(:connection) { Twitter::Streaming::Connection.new }
8
+
9
+ it 'sets the default socket classes' do
10
+ expect(connection.tcp_socket_class).to eq TCPSocket
11
+ expect(connection.ssl_socket_class).to eq OpenSSL::SSL::SSLSocket
12
+ end
13
+ end
14
+
15
+ context 'custom socket classes provided in opts' do
16
+ class DummyTCPSocket; end
17
+ class DummySSLSocket; end
18
+
19
+ subject(:connection) do
20
+ Twitter::Streaming::Connection.new(
21
+ :tcp_socket_class => DummyTCPSocket,
22
+ :ssl_socket_class => DummySSLSocket
23
+ )
24
+ end
25
+
26
+ it 'sets the default socket classes' do
27
+ expect(connection.tcp_socket_class).to eq DummyTCPSocket
28
+ expect(connection.ssl_socket_class).to eq DummySSLSocket
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,21 @@
1
+ require 'helper'
2
+
3
+ describe Twitter::Streaming::Response do
4
+ subject { Twitter::Streaming::Response.new }
5
+
6
+ describe '#on_headers_complete' do
7
+ it 'should not error if status code is 200' do
8
+ expect do
9
+ subject << "HTTP/1.1 200 OK\r\nSome-Header: Woo\r\n\r\n"
10
+ end.to_not raise_error
11
+ end
12
+
13
+ Twitter::Error.errors.each do |code, klass|
14
+ it "should raise an exception of type #{klass} for status code #{code}" do
15
+ expect do
16
+ subject << "HTTP/1.1 #{code} NOK\r\nSome-Header: Woo\r\n\r\n"
17
+ end.to raise_error(klass)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -28,7 +28,7 @@ describe Twitter::Trend do
28
28
  describe '#uri' do
29
29
  it 'returns a URI when the url is set' do
30
30
  trend = Twitter::Trend.new(:url => 'http://twitter.com/search/?q=%23sevenwordsaftersex')
31
- expect(trend.uri).to be_a Addressable::URI
31
+ expect(trend.uri).to be_an Addressable::URI
32
32
  expect(trend.uri.to_s).to eq('http://twitter.com/search/?q=%23sevenwordsaftersex')
33
33
  end
34
34
  it 'returns nil when the url is not set' do
@@ -53,27 +53,26 @@ describe Twitter::Tweet do
53
53
  end
54
54
 
55
55
  describe '#entities?' do
56
- it 'returns false if there are no entities set' do
57
- tweet = Twitter::Tweet.new(:id => 28_669_546_014)
58
- expect(tweet.entities?).to be false
59
- end
60
-
61
- it 'returns false if there are blank lists of entities set' do
62
- tweet = Twitter::Tweet.new(:id => 28_669_546_014, :entities => {:urls => []})
63
- expect(tweet.entities?).to be false
64
- end
65
56
  it 'returns true if there are entities set' do
66
57
  urls_array = [
67
58
  {
68
- :url => 'http://example.com/t.co',
59
+ :url => 'https://t.co/L2xIBazMPf',
69
60
  :expanded_url => 'http://example.com/expanded',
70
- :display_url => 'example.com/expandedâ¦',
61
+ :display_url => 'example.com/expanded',
71
62
  :indices => [10, 33],
72
63
  }
73
64
  ]
74
65
  tweet = Twitter::Tweet.new(:id => 28_669_546_014, :entities => {:urls => urls_array})
75
66
  expect(tweet.entities?).to be true
76
67
  end
68
+ it 'returns false if there are blank lists of entities set' do
69
+ tweet = Twitter::Tweet.new(:id => 28_669_546_014, :entities => {:urls => []})
70
+ expect(tweet.entities?).to be false
71
+ end
72
+ it 'returns false if there are no entities set' do
73
+ tweet = Twitter::Tweet.new(:id => 28_669_546_014)
74
+ expect(tweet.entities?).to be false
75
+ end
77
76
  end
78
77
 
79
78
  describe '#filter_level' do
@@ -140,11 +139,9 @@ describe Twitter::Tweet do
140
139
  :indices => [10, 33],
141
140
  }]
142
141
  end
143
-
144
142
  let(:subject) do
145
143
  Twitter::Tweet.new(:id => 28_669_546_014, :entities => {:hashtags => hashtags_array})
146
144
  end
147
-
148
145
  it 'returns an array of Entity::Hashtag' do
149
146
  hashtags = subject.hashtags
150
147
  expect(hashtags).to be_an Array
@@ -153,27 +150,21 @@ describe Twitter::Tweet do
153
150
  expect(hashtags.first.text).to eq('twitter')
154
151
  end
155
152
  end
156
-
157
153
  context 'when entities are set, but empty' do
158
154
  subject { Twitter::Tweet.new(:id => 28_669_546_014, :entities => {:hashtags => []}) }
159
-
160
155
  it 'is empty' do
161
156
  expect(subject.hashtags).to be_empty
162
157
  end
163
-
164
158
  it 'does not warn' do
165
159
  subject.hashtags
166
160
  expect($stderr.string).to be_empty
167
161
  end
168
162
  end
169
-
170
163
  context 'when entities are not set' do
171
164
  subject { Twitter::Tweet.new(:id => 28_669_546_014) }
172
-
173
165
  it 'is empty' do
174
166
  expect(subject.hashtags).to be_empty
175
167
  end
176
-
177
168
  it 'warns' do
178
169
  subject.hashtags
179
170
  expect($stderr.string).to match(/To get hashtags, you must pass `:include_entities => true` when requesting the Twitter::Tweet\./)
@@ -355,7 +346,7 @@ describe Twitter::Tweet do
355
346
  it 'returns an array of Entity::URIs when entities are set' do
356
347
  urls_array = [
357
348
  {
358
- :url => 'http://example.com/t.co',
349
+ :url => 'https://t.co/L2xIBazMPf',
359
350
  :expanded_url => 'http://example.com/expanded',
360
351
  :display_url => 'example.com/expanded…',
361
352
  :indices => [10, 33],
@@ -379,7 +370,7 @@ describe Twitter::Tweet do
379
370
  it 'can handle strange urls' do
380
371
  urls_array = [
381
372
  {
382
- :url => 'http://with_underscore.example.com/t.co',
373
+ :url => 'https://t.co/L2xIBazMPf',
383
374
  :expanded_url => 'http://with_underscore.example.com/expanded',
384
375
  :display_url => 'with_underscore.example.com/expanded…',
385
376
  :indices => [10, 33],
@@ -396,7 +387,7 @@ describe Twitter::Tweet do
396
387
  describe '#uri' do
397
388
  it 'returns the URI to the tweet' do
398
389
  tweet = Twitter::Tweet.new(:id => 28_669_546_014, :user => {:id => 7_505_382, :screen_name => 'sferik'})
399
- expect(tweet.uri).to be_a Addressable::URI
390
+ expect(tweet.uri).to be_an Addressable::URI
400
391
  expect(tweet.uri.to_s).to eq('https://twitter.com/sferik/status/28669546014')
401
392
  end
402
393
  end
@@ -404,7 +395,7 @@ describe Twitter::Tweet do
404
395
  describe '#uris?' do
405
396
  it 'returns true when the tweet includes urls entities' do
406
397
  entities = {
407
- :urls => [{:url => 'http://with_underscore.example.com/t.co'}]
398
+ :urls => [{:url => 'https://t.co/L2xIBazMPf'}]
408
399
  }
409
400
  tweet = Twitter::Tweet.new(:id => 28_669_546_014, :entities => entities)
410
401
  expect(tweet.uris?).to be true