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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +18 -0
- data/README.md +10 -36
- data/lib/twitter/base.rb +20 -3
- data/lib/twitter/basic_user.rb +6 -4
- data/lib/twitter/client.rb +2 -1
- data/lib/twitter/configuration.rb +1 -1
- data/lib/twitter/cursor.rb +1 -1
- data/lib/twitter/entities.rb +10 -6
- data/lib/twitter/enumerable.rb +2 -2
- data/lib/twitter/error.rb +7 -0
- data/lib/twitter/geo_results.rb +1 -1
- data/lib/twitter/list.rb +3 -2
- data/lib/twitter/media/photo.rb +1 -1
- data/lib/twitter/place.rb +13 -15
- data/lib/twitter/profile.rb +1 -1
- data/lib/twitter/profile_banner.rb +1 -1
- data/lib/twitter/rest/client.rb +17 -2
- data/lib/twitter/rest/friends_and_followers.rb +1 -1
- data/lib/twitter/rest/lists.rb +4 -2
- data/lib/twitter/rest/spam_reporting.rb +1 -1
- data/lib/twitter/rest/tweets.rb +17 -17
- data/lib/twitter/rest/users.rb +77 -13
- data/lib/twitter/rest/utils.rb +10 -6
- data/lib/twitter/search_results.rb +1 -1
- data/lib/twitter/settings.rb +4 -3
- data/lib/twitter/source_user.rb +3 -2
- data/lib/twitter/streaming/client.rb +7 -2
- data/lib/twitter/streaming/connection.rb +9 -2
- data/lib/twitter/streaming/response.rb +3 -3
- data/lib/twitter/suggestion.rb +1 -1
- data/lib/twitter/target_user.rb +1 -1
- data/lib/twitter/trend.rb +2 -1
- data/lib/twitter/trend_results.rb +1 -1
- data/lib/twitter/tweet.rb +4 -4
- data/lib/twitter/user.rb +60 -19
- data/lib/twitter/utils.rb +12 -5
- data/lib/twitter/version.rb +1 -1
- data/spec/fixtures/following.json +1 -1
- data/spec/fixtures/sferik.json +1 -1
- data/spec/helper.rb +14 -5
- data/spec/twitter/base_spec.rb +16 -4
- data/spec/twitter/direct_message_spec.rb +12 -13
- data/spec/twitter/entity/uri_spec.rb +2 -2
- data/spec/twitter/error_spec.rb +2 -2
- data/spec/twitter/media/photo_spec.rb +4 -4
- data/spec/twitter/oembed_spec.rb +3 -3
- data/spec/twitter/place_spec.rb +1 -1
- data/spec/twitter/rest/client_spec.rb +54 -14
- data/spec/twitter/rest/friends_and_followers_spec.rb +76 -76
- data/spec/twitter/rest/lists_spec.rb +85 -64
- data/spec/twitter/rest/timelines_spec.rb +2 -2
- data/spec/twitter/rest/tweets_spec.rb +20 -16
- data/spec/twitter/rest/undocumented_spec.rb +17 -17
- data/spec/twitter/rest/users_spec.rb +101 -17
- data/spec/twitter/streaming/client_spec.rb +1 -1
- data/spec/twitter/streaming/connection_spec.rb +32 -0
- data/spec/twitter/streaming/response_spec.rb +21 -0
- data/spec/twitter/trend_spec.rb +1 -1
- data/spec/twitter/tweet_spec.rb +14 -23
- data/spec/twitter/user_spec.rb +120 -13
- data/twitter.gemspec +3 -3
- metadata +8 -4
@@ -151,7 +151,7 @@ module Twitter
|
|
151
151
|
# @param users [Enumerable<Integer, String, Twitter::User>] A collection of Twitter user IDs, screen names, or objects.
|
152
152
|
# @param options [Hash] A customizable set of options.
|
153
153
|
def unfollow(*args)
|
154
|
-
|
154
|
+
parallel_users_from_response(:post, '/1.1/friendships/destroy.json', args)
|
155
155
|
end
|
156
156
|
alias_method :destroy_friendship, :unfollow
|
157
157
|
deprecate_alias :friendship_destroy, :unfollow
|
data/lib/twitter/rest/lists.rb
CHANGED
@@ -477,10 +477,12 @@ module Twitter
|
|
477
477
|
# @param user[Integer, String, Twitter::User] A Twitter user ID, screen_name, or object.
|
478
478
|
# @return [Hash]
|
479
479
|
def merge_owner!(hash, user)
|
480
|
-
|
481
|
-
|
480
|
+
return hash if hash[:owner_id] || hash[:owner_screen_name]
|
481
|
+
if user
|
482
482
|
merge_user!(hash, user, 'owner')
|
483
483
|
hash[:owner_id] = hash.delete(:owner_user_id) unless hash[:owner_user_id].nil?
|
484
|
+
else
|
485
|
+
hash[:owner_id] = user_id
|
484
486
|
end
|
485
487
|
hash
|
486
488
|
end
|
@@ -20,7 +20,7 @@ module Twitter
|
|
20
20
|
# @param users [Enumerable<Integer, String, Twitter::User>] A collection of Twitter user IDs, screen names, or objects.
|
21
21
|
# @param options [Hash] A customizable set of options.
|
22
22
|
def report_spam(*args)
|
23
|
-
|
23
|
+
parallel_users_from_response(:post, '/1.1/users/report_spam.json', args)
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
data/lib/twitter/rest/tweets.rb
CHANGED
@@ -11,6 +11,7 @@ module Twitter
|
|
11
11
|
module Tweets
|
12
12
|
include Twitter::REST::Utils
|
13
13
|
include Twitter::Utils
|
14
|
+
MAX_TWEETS_PER_REQUEST = 100
|
14
15
|
|
15
16
|
# Returns up to 100 of the first retweets of a given tweet
|
16
17
|
#
|
@@ -38,7 +39,7 @@ module Twitter
|
|
38
39
|
# @param options [Hash] A customizable set of options.
|
39
40
|
# @option options [Integer] :count Specifies the number of records to retrieve. Must be less than or equal to 100.
|
40
41
|
# @option options [Boolean, String, Integer] :trim_user Each tweet returned in a timeline will include a user object with only the author's numerical ID when set to true, 't' or 1.
|
41
|
-
# @option options [Boolean] :ids_only ('false') Only return user
|
42
|
+
# @option options [Boolean] :ids_only ('false') Only return user IDs instead of full user objects.
|
42
43
|
def retweeters_of(tweet, options = {})
|
43
44
|
ids_only = !!options.delete(:ids_only)
|
44
45
|
retweeters = retweets(tweet, options).collect(&:user)
|
@@ -62,19 +63,24 @@ module Twitter
|
|
62
63
|
|
63
64
|
# Returns Tweets
|
64
65
|
#
|
65
|
-
# @see https://dev.twitter.com/docs/api/1.1/get/statuses/
|
66
|
+
# @see https://dev.twitter.com/docs/api/1.1/get/statuses/lookup
|
66
67
|
# @rate_limited Yes
|
67
|
-
# @authentication
|
68
|
-
# @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid.
|
68
|
+
# @authentication Required
|
69
69
|
# @return [Array<Twitter::Tweet>] The requested Tweets.
|
70
70
|
# @overload statuses(*tweets)
|
71
71
|
# @param tweets [Enumerable<Integer, String, URI, Twitter::Tweet>] A collection of Tweet IDs, URIs, or objects.
|
72
72
|
# @overload statuses(*tweets, options)
|
73
73
|
# @param tweets [Enumerable<Integer, String, URI, Twitter::Tweet>] A collection of Tweet IDs, URIs, or objects.
|
74
74
|
# @param options [Hash] A customizable set of options.
|
75
|
+
# @option options [Symbol, String] :method Requests users via a GET request instead of the standard POST request if set to ':get'.
|
76
|
+
# @option options [Boolean] :include_entities The tweet entities node will be disincluded when set to false.
|
75
77
|
# @option options [Boolean, String, Integer] :trim_user Each tweet returned in a timeline will include a user object with only the author's numerical ID when set to true, 't' or 1.
|
76
78
|
def statuses(*args)
|
77
|
-
|
79
|
+
arguments = Twitter::Arguments.new(args)
|
80
|
+
request_method = arguments.options.delete(:method) || :post
|
81
|
+
flat_pmap(arguments.each_slice(MAX_TWEETS_PER_REQUEST)) do |tweets|
|
82
|
+
perform_with_objects(request_method, '/1.1/statuses/lookup.json', arguments.options.merge(:id => tweets.collect { |u| extract_id(u) }.join(',')), Twitter::Tweet)
|
83
|
+
end
|
78
84
|
end
|
79
85
|
|
80
86
|
# Destroys the specified Tweets
|
@@ -92,7 +98,10 @@ module Twitter
|
|
92
98
|
# @param options [Hash] A customizable set of options.
|
93
99
|
# @option options [Boolean, String, Integer] :trim_user Each tweet returned in a timeline will include a user object with only the author's numerical ID when set to true, 't' or 1.
|
94
100
|
def destroy_status(*args)
|
95
|
-
|
101
|
+
arguments = Twitter::Arguments.new(args)
|
102
|
+
pmap(arguments) do |tweet|
|
103
|
+
perform_with_object(:post, "/1.1/statuses/destroy/#{extract_id(tweet)}.json", arguments.options, Twitter::Tweet)
|
104
|
+
end
|
96
105
|
end
|
97
106
|
alias_method :destroy_tweet, :destroy_status
|
98
107
|
deprecate_alias :status_destroy, :destroy_status
|
@@ -200,6 +209,7 @@ module Twitter
|
|
200
209
|
# @rate_limited No
|
201
210
|
# @authentication Requires user context
|
202
211
|
# @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid.
|
212
|
+
# @raise [Twitter::Error::UnacceptableIO] Error when the IO object for the media argument does not have a to_io method.
|
203
213
|
# @return [Twitter::Tweet] The created Tweet.
|
204
214
|
# @param status [String] The text of your status update, up to 140 characters.
|
205
215
|
# @param media [File, Hash] A File object with your picture (PNG, JPEG or GIF)
|
@@ -214,6 +224,7 @@ module Twitter
|
|
214
224
|
# @option options [String] :display_coordinates Whether or not to put a pin on the exact coordinates a tweet has been sent from.
|
215
225
|
# @option options [Boolean, String, Integer] :trim_user Each tweet returned in a timeline will include a user object with only the author's numerical ID when set to true, 't' or 1.
|
216
226
|
def update_with_media(status, media, options = {})
|
227
|
+
fail(Twitter::Error::UnacceptableIO.new) unless media.respond_to?(:to_io)
|
217
228
|
hash = options.dup
|
218
229
|
hash[:in_reply_to_status_id] = hash.delete(:in_reply_to_status).id unless hash[:in_reply_to_status].nil?
|
219
230
|
hash[:place_id] = hash.delete(:place).woeid unless hash[:place].nil?
|
@@ -287,17 +298,6 @@ module Twitter
|
|
287
298
|
|
288
299
|
private
|
289
300
|
|
290
|
-
# @param request_method [Symbol]
|
291
|
-
# @param path [String]
|
292
|
-
# @param args [Array]
|
293
|
-
# @return [Array<Twitter::Tweet>]
|
294
|
-
def parallel_tweets_from_response(request_method, path, args)
|
295
|
-
arguments = Twitter::Arguments.new(args)
|
296
|
-
pmap(arguments) do |tweet|
|
297
|
-
perform_with_object(request_method, path + "/#{extract_id(tweet)}.json", arguments.options, Twitter::Tweet)
|
298
|
-
end
|
299
|
-
end
|
300
|
-
|
301
301
|
def post_retweet(tweet, options)
|
302
302
|
response = post("/1.1/statuses/retweet/#{extract_id(tweet)}.json", options).body
|
303
303
|
Twitter::Tweet.new(response)
|
data/lib/twitter/rest/users.rb
CHANGED
@@ -34,7 +34,7 @@ module Twitter
|
|
34
34
|
request_method = options.size.zero? ? :get : :post
|
35
35
|
response = send(request_method.to_sym, '/1.1/account/settings.json', options).body
|
36
36
|
# https://dev.twitter.com/issues/59
|
37
|
-
response.update(:trend_location =>
|
37
|
+
response.update(:trend_location => response.fetch(:trend_location, []).first)
|
38
38
|
Twitter::Settings.new(response)
|
39
39
|
end
|
40
40
|
|
@@ -136,19 +136,21 @@ module Twitter
|
|
136
136
|
# @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid.
|
137
137
|
# @return [Array<Twitter::User>] User objects that the authenticating user is blocking.
|
138
138
|
# @param options [Hash] A customizable set of options.
|
139
|
-
# @option options [
|
140
|
-
|
139
|
+
# @option options [Boolean] :include_entities The tweet entities node will be disincluded when set to false.
|
140
|
+
# @option options [Boolean, String, Integer] :skip_status Do not include user's Tweets when set to true, 't' or 1.
|
141
|
+
def blocked(options = {})
|
141
142
|
perform_with_cursor(:get, '/1.1/blocks/list.json', options, :users, Twitter::User)
|
142
143
|
end
|
144
|
+
deprecate_alias :blocking, :blocked
|
143
145
|
|
144
|
-
# Returns an array of numeric user
|
146
|
+
# Returns an array of numeric user IDs the authenticating user is blocking
|
145
147
|
#
|
146
148
|
# @see https://dev.twitter.com/docs/api/1.1/get/blocks/ids
|
147
149
|
# @rate_limited Yes
|
148
150
|
# @authentication Requires user context
|
149
151
|
# @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid.
|
150
152
|
# @return [Twitter::Cursor] Numeric user IDs the authenticating user is blocking.
|
151
|
-
# @overload
|
153
|
+
# @overload blocked_ids(options = {})
|
152
154
|
# @param options [Hash] A customizable set of options.
|
153
155
|
def blocked_ids(*args)
|
154
156
|
arguments = Twitter::Arguments.new(args)
|
@@ -191,7 +193,7 @@ module Twitter
|
|
191
193
|
# @param users [Enumerable<Integer, String, Twitter::User>] A collection of Twitter user IDs, screen names, or objects.
|
192
194
|
# @param options [Hash] A customizable set of options.
|
193
195
|
def block(*args)
|
194
|
-
|
196
|
+
parallel_users_from_response(:post, '/1.1/blocks/create.json', args)
|
195
197
|
end
|
196
198
|
|
197
199
|
# Un-blocks the users specified by the authenticating user
|
@@ -207,14 +209,14 @@ module Twitter
|
|
207
209
|
# @param users [Enumerable<Integer, String, Twitter::User>] A collection of Twitter user IDs, screen names, or objects.
|
208
210
|
# @param options [Hash] A customizable set of options.
|
209
211
|
def unblock(*args)
|
210
|
-
|
212
|
+
parallel_users_from_response(:post, '/1.1/blocks/destroy.json', args)
|
211
213
|
end
|
212
214
|
|
213
215
|
# Returns extended information for up to 100 users
|
214
216
|
#
|
215
217
|
# @see https://dev.twitter.com/docs/api/1.1/get/users/lookup
|
216
218
|
# @rate_limited Yes
|
217
|
-
# @authentication
|
219
|
+
# @authentication Required
|
218
220
|
# @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid.
|
219
221
|
# @return [Array<Twitter::User>] The requested users.
|
220
222
|
# @overload users(*users)
|
@@ -252,8 +254,8 @@ module Twitter
|
|
252
254
|
# @option options [Boolean, String, Integer] :skip_status Do not include user's Tweets when set to true, 't' or 1.
|
253
255
|
def user(*args)
|
254
256
|
arguments = Twitter::Arguments.new(args)
|
255
|
-
if arguments.last
|
256
|
-
merge_user!(arguments.options, arguments.pop)
|
257
|
+
if arguments.last || user_id?
|
258
|
+
merge_user!(arguments.options, arguments.pop || user_id)
|
257
259
|
perform_with_object(:get, '/1.1/users/show.json', arguments.options, Twitter::User)
|
258
260
|
else
|
259
261
|
verify_credentials(arguments.options)
|
@@ -305,7 +307,7 @@ module Twitter
|
|
305
307
|
# @param options [Hash] A customizable set of options.
|
306
308
|
# @option options [Boolean, String, Integer] :skip_status Do not include contributee's Tweets when set to true, 't' or 1.
|
307
309
|
def contributees(*args)
|
308
|
-
|
310
|
+
users_from_response(:get, '/1.1/users/contributees.json', args)
|
309
311
|
end
|
310
312
|
|
311
313
|
# Returns an array of users who can contribute to the specified account
|
@@ -323,7 +325,7 @@ module Twitter
|
|
323
325
|
# @param options [Hash] A customizable set of options.
|
324
326
|
# @option options [Boolean, String, Integer] :skip_status Do not include contributee's Tweets when set to true, 't' or 1.
|
325
327
|
def contributors(*args)
|
326
|
-
|
328
|
+
users_from_response(:get, '/1.1/users/contributors.json', args)
|
327
329
|
end
|
328
330
|
|
329
331
|
# Removes the authenticating user's profile banner image
|
@@ -375,9 +377,71 @@ module Twitter
|
|
375
377
|
# @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object.
|
376
378
|
def profile_banner(*args)
|
377
379
|
arguments = Twitter::Arguments.new(args)
|
378
|
-
merge_user!(arguments.options, arguments.pop ||
|
380
|
+
merge_user!(arguments.options, arguments.pop || user_id) unless arguments.options[:user_id] || arguments.options[:screen_name]
|
379
381
|
perform_with_object(:get, '/1.1/users/profile_banner.json', arguments.options, Twitter::ProfileBanner)
|
380
382
|
end
|
383
|
+
|
384
|
+
# Mutes the users specified by the authenticating user
|
385
|
+
#
|
386
|
+
# @see https://dev.twitter.com/docs/api/1.1/post/mutes/users/create
|
387
|
+
# @rate_limited Yes
|
388
|
+
# @authentication Requires user context
|
389
|
+
# @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid.
|
390
|
+
# @return [Array<Twitter::User>] The muted users.
|
391
|
+
# @overload mute(*users)
|
392
|
+
# @param users [Enumerable<Integer, String, Twitter::User>] A collection of Twitter user IDs, screen names, or objects.
|
393
|
+
# @overload mute(*users, options)
|
394
|
+
# @param users [Enumerable<Integer, String, Twitter::User>] A collection of Twitter user IDs, screen names, or objects.
|
395
|
+
# @param options [Hash] A customizable set of options.
|
396
|
+
def mute(*args)
|
397
|
+
parallel_users_from_response(:post, '/1.1/mutes/users/create.json', args)
|
398
|
+
end
|
399
|
+
|
400
|
+
# Un-mutes the user specified by the authenticating user.
|
401
|
+
#
|
402
|
+
# @see https://dev.twitter.com/docs/api/1.1/post/mutes/users/destroy
|
403
|
+
# @rate_limited Yes
|
404
|
+
# @authentication Requires user context
|
405
|
+
# @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid.
|
406
|
+
# @return [Array<Twitter::User>] The un-muted users.
|
407
|
+
# @overload unmute(*users)
|
408
|
+
# @param users [Enumerable<Integer, String, Twitter::User>] A collection of Twitter user IDs, screen names, or objects.
|
409
|
+
# @overload unmute(*users, options)
|
410
|
+
# @param users [Enumerable<Integer, String, Twitter::User>] A collection of Twitter user IDs, screen names, or objects.
|
411
|
+
# @param options [Hash] A customizable set of options.
|
412
|
+
def unmute(*args)
|
413
|
+
parallel_users_from_response(:post, '/1.1/mutes/users/destroy.json', args)
|
414
|
+
end
|
415
|
+
|
416
|
+
# Returns an array of user objects that the authenticating user is muting
|
417
|
+
#
|
418
|
+
# @see https://dev.twitter.com/docs/api/1.1/get/mutes/users/list
|
419
|
+
# @rate_limited Yes
|
420
|
+
# @authentication Requires user context
|
421
|
+
# @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid.
|
422
|
+
# @return [Array<Twitter::User>] User objects that the authenticating user is muting.
|
423
|
+
# @param options [Hash] A customizable set of options.
|
424
|
+
# @option options [Boolean] :include_entities The tweet entities node will be disincluded when set to false.
|
425
|
+
# @option options [Boolean, String, Integer] :skip_status Do not include user's Tweets when set to true, 't' or 1.
|
426
|
+
def muted(options = {})
|
427
|
+
perform_with_cursor(:get, '/1.1/mutes/users/list.json', options, :users, Twitter::User)
|
428
|
+
end
|
429
|
+
deprecate_alias :muting, :muted
|
430
|
+
|
431
|
+
# Returns an array of numeric user IDs the authenticating user is muting
|
432
|
+
#
|
433
|
+
# @see https://dev.twitter.com/docs/api/1.1/get/mutes/users/ids
|
434
|
+
# @rate_limited Yes
|
435
|
+
# @authentication Requires user context
|
436
|
+
# @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid.
|
437
|
+
# @return [Twitter::Cursor] Numeric user IDs the authenticating user is muting
|
438
|
+
# @overload muted_ids(options = {})
|
439
|
+
# @param options [Hash] A customizable set of options.
|
440
|
+
def muted_ids(*args)
|
441
|
+
arguments = Twitter::Arguments.new(args)
|
442
|
+
merge_user!(arguments.options, arguments.pop)
|
443
|
+
perform_with_cursor(:get, '/1.1/mutes/users/ids.json', arguments.options, :ids)
|
444
|
+
end
|
381
445
|
end
|
382
446
|
end
|
383
447
|
end
|
data/lib/twitter/rest/utils.rb
CHANGED
@@ -62,7 +62,7 @@ module Twitter
|
|
62
62
|
# @param path [String]
|
63
63
|
# @param args [Array]
|
64
64
|
# @return [Array<Twitter::User>]
|
65
|
-
def
|
65
|
+
def parallel_users_from_response(request_method, path, args)
|
66
66
|
arguments = Twitter::Arguments.new(args)
|
67
67
|
pmap(arguments) do |user|
|
68
68
|
perform_with_object(request_method, path, merge_user(arguments.options, user), Twitter::User)
|
@@ -73,9 +73,9 @@ module Twitter
|
|
73
73
|
# @param path [String]
|
74
74
|
# @param args [Array]
|
75
75
|
# @return [Array<Twitter::User>]
|
76
|
-
def
|
76
|
+
def users_from_response(request_method, path, args)
|
77
77
|
arguments = Twitter::Arguments.new(args)
|
78
|
-
merge_user!(arguments.options, arguments.pop ||
|
78
|
+
merge_user!(arguments.options, arguments.pop || user_id) unless arguments.options[:user_id] || arguments.options[:screen_name]
|
79
79
|
perform_with_objects(request_method, path, arguments.options, Twitter::User)
|
80
80
|
end
|
81
81
|
|
@@ -110,12 +110,16 @@ module Twitter
|
|
110
110
|
# @return [Twitter::Cursor]
|
111
111
|
def cursor_from_response_with_user(collection_name, klass, request_method, path, args) # rubocop:disable ParameterLists
|
112
112
|
arguments = Twitter::Arguments.new(args)
|
113
|
-
merge_user!(arguments.options, arguments.pop ||
|
113
|
+
merge_user!(arguments.options, arguments.pop || user_id) unless arguments.options[:user_id] || arguments.options[:screen_name]
|
114
114
|
perform_with_cursor(request_method, path, arguments.options, collection_name, klass)
|
115
115
|
end
|
116
116
|
|
117
|
-
def
|
118
|
-
@
|
117
|
+
def user_id
|
118
|
+
@user_id ||= verify_credentials(:include_entities => false, :skip_status => true).id
|
119
|
+
end
|
120
|
+
|
121
|
+
def user_id?
|
122
|
+
instance_variable_defined?(:@user_id)
|
119
123
|
end
|
120
124
|
|
121
125
|
def merge_default_cursor!(options)
|
data/lib/twitter/settings.rb
CHANGED
@@ -2,9 +2,10 @@ require 'twitter/base'
|
|
2
2
|
|
3
3
|
module Twitter
|
4
4
|
class Settings < Twitter::Base
|
5
|
-
attr_reader :
|
6
|
-
:language, :protected, :screen_name, :show_all_inline_media,
|
7
|
-
:sleep_time, :time_zone
|
5
|
+
attr_reader :language, :screen_name, :sleep_time, :time_zone
|
8
6
|
object_attr_reader :Place, :trend_location
|
7
|
+
predicate_attr_reader :always_use_https, :discoverable_by_email,
|
8
|
+
:geo_enabled, :protected, :show_all_inline_media,
|
9
|
+
:use_cookie_personalization
|
9
10
|
end
|
10
11
|
end
|
data/lib/twitter/source_user.rb
CHANGED
@@ -2,7 +2,8 @@ require 'twitter/basic_user'
|
|
2
2
|
|
3
3
|
module Twitter
|
4
4
|
class SourceUser < Twitter::BasicUser
|
5
|
-
|
6
|
-
|
5
|
+
predicate_attr_reader :all_replies, :blocking, :can_dm, :followed_by,
|
6
|
+
:marked_spam, :muting, :notifications_enabled,
|
7
|
+
:want_retweets
|
7
8
|
end
|
8
9
|
end
|
@@ -9,13 +9,17 @@ module Twitter
|
|
9
9
|
module Streaming
|
10
10
|
class Client < Twitter::Client
|
11
11
|
attr_writer :connection
|
12
|
+
attr_accessor :tcp_socket_class, :ssl_socket_class
|
12
13
|
|
13
14
|
# Initializes a new Client object
|
14
15
|
#
|
16
|
+
# @param options [Hash] A customizable set of options.
|
17
|
+
# @option options [String] :tcp_socket_class A class that Connection will use to create a new TCP socket.
|
18
|
+
# @option options [String] :ssl_socket_class A class that Connection will use to create a new SSL socket.
|
15
19
|
# @return [Twitter::Streaming::Client]
|
16
20
|
def initialize(options = {})
|
17
21
|
super
|
18
|
-
@connection = Streaming::Connection.new
|
22
|
+
@connection = Streaming::Connection.new(options)
|
19
23
|
end
|
20
24
|
|
21
25
|
# Returns public statuses that match one or more filter predicates
|
@@ -77,7 +81,8 @@ module Twitter
|
|
77
81
|
# @see https://dev.twitter.com/docs/streaming-apis/parameters
|
78
82
|
# @param options [Hash] A customizable set of options.
|
79
83
|
# @option options [String] :with Specifies whether to return information for just the users specified in the follow parameter, or include messages from accounts they follow.
|
80
|
-
# @option options [String] :replies Specifies whether
|
84
|
+
# @option options [String] :replies Specifies whether to return additional @replies.
|
85
|
+
# @option options [String] :stall_warnings Specifies whether stall warnings should be delivered.
|
81
86
|
# @option options [String] :track Includes additional Tweets matching the specified keywords. Phrases of keywords are specified by a comma-separated list.
|
82
87
|
# @option options [String] :locations Includes additional Tweets falling within the specified bounding boxes.
|
83
88
|
# @yield [Twitter::Tweet, Twitter::Streaming::Event, Twitter::DirectMessage, Twitter::Streaming::FriendList, Twitter::Streaming::DeletedTweet, Twitter::Streaming::StallWarning] A stream of Twitter objects.
|
@@ -5,10 +5,17 @@ require 'resolv'
|
|
5
5
|
module Twitter
|
6
6
|
module Streaming
|
7
7
|
class Connection
|
8
|
+
def initialize(opts = {})
|
9
|
+
@tcp_socket_class = opts.fetch(:tcp_socket_class) { TCPSocket }
|
10
|
+
@ssl_socket_class = opts.fetch(:ssl_socket_class) { OpenSSL::SSL::SSLSocket }
|
11
|
+
end
|
12
|
+
attr_reader :tcp_socket_class, :ssl_socket_class
|
13
|
+
|
8
14
|
def stream(request, response)
|
9
15
|
client_context = OpenSSL::SSL::SSLContext.new
|
10
|
-
client =
|
11
|
-
ssl_client =
|
16
|
+
client = @tcp_socket_class.new(Resolv.getaddress(request.uri.host), request.uri.port)
|
17
|
+
ssl_client = @ssl_socket_class.new(client, client_context)
|
18
|
+
|
12
19
|
ssl_client.connect
|
13
20
|
request.stream(ssl_client)
|
14
21
|
while body = ssl_client.readpartial(1024) # rubocop:disable AssignmentInCondition, WhileUntilModifier
|
@@ -16,9 +16,9 @@ module Twitter
|
|
16
16
|
@parser << data
|
17
17
|
end
|
18
18
|
|
19
|
-
def on_headers_complete(
|
20
|
-
|
21
|
-
|
19
|
+
def on_headers_complete(_headers)
|
20
|
+
error = Twitter::Error.errors[@parser.status_code]
|
21
|
+
fail error.new if error
|
22
22
|
end
|
23
23
|
|
24
24
|
def on_body(data)
|
data/lib/twitter/suggestion.rb
CHANGED
data/lib/twitter/target_user.rb
CHANGED
data/lib/twitter/trend.rb
CHANGED
@@ -4,7 +4,8 @@ require 'twitter/base'
|
|
4
4
|
module Twitter
|
5
5
|
class Trend < Twitter::Base
|
6
6
|
include Equalizer.new(:name)
|
7
|
-
attr_reader :events, :name, :
|
7
|
+
attr_reader :events, :name, :query
|
8
|
+
predicate_attr_reader :promoted_content
|
8
9
|
uri_attr_reader :uri
|
9
10
|
end
|
10
11
|
end
|