twitter 5.5.1 → 5.6.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
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/CHANGELOG.md +12 -0
- data/README.md +8 -10
- data/lib/twitter/base.rb +4 -2
- data/lib/twitter/client.rb +7 -5
- data/lib/twitter/configuration.rb +1 -1
- data/lib/twitter/cursor.rb +18 -17
- data/lib/twitter/entities.rb +27 -1
- data/lib/twitter/error.rb +1 -1
- data/lib/twitter/error/request_timeout.rb +10 -0
- data/lib/twitter/geo_results.rb +5 -3
- data/lib/twitter/media/photo.rb +1 -1
- data/lib/twitter/null_object.rb +8 -20
- data/lib/twitter/profile_banner.rb +1 -1
- data/lib/twitter/request.rb +47 -0
- data/lib/twitter/rest/api/direct_messages.rb +7 -5
- data/lib/twitter/rest/api/favorites.rb +7 -7
- data/lib/twitter/rest/api/friends_and_followers.rb +11 -9
- data/lib/twitter/rest/api/help.rb +4 -3
- data/lib/twitter/rest/api/lists.rb +9 -7
- data/lib/twitter/rest/api/oauth.rb +11 -5
- data/lib/twitter/rest/api/places_and_geo.rb +6 -5
- data/lib/twitter/rest/api/saved_searches.rb +8 -6
- data/lib/twitter/rest/api/search.rb +4 -10
- data/lib/twitter/rest/api/spam_reporting.rb +1 -0
- data/lib/twitter/rest/api/suggested_users.rb +4 -3
- data/lib/twitter/rest/api/timelines.rb +5 -4
- data/lib/twitter/rest/api/trends.rb +5 -4
- data/lib/twitter/rest/api/tweets.rb +19 -24
- data/lib/twitter/rest/api/users.rb +17 -16
- data/lib/twitter/rest/api/utils.rb +45 -73
- data/lib/twitter/rest/client.rb +34 -34
- data/lib/twitter/rest/request/multipart_with_file.rb +2 -0
- data/lib/twitter/rest/response/parse_json.rb +2 -0
- data/lib/twitter/rest/response/raise_error.rb +2 -0
- data/lib/twitter/search_results.rb +28 -60
- data/lib/twitter/streaming/client.rb +4 -4
- data/lib/twitter/suggestion.rb +1 -1
- data/lib/twitter/trend_results.rb +6 -4
- data/lib/twitter/tweet.rb +3 -3
- data/lib/twitter/user.rb +1 -1
- data/lib/twitter/utils.rb +18 -3
- data/lib/twitter/version.rb +2 -2
- data/spec/helper.rb +1 -1
- data/spec/twitter/error_spec.rb +1 -1
- data/spec/twitter/geo_factory_spec.rb +1 -1
- data/spec/twitter/identifiable_spec.rb +1 -1
- data/spec/twitter/media_factory_spec.rb +1 -1
- data/spec/twitter/rest/api/favorites_spec.rb +2 -2
- data/spec/twitter/rest/api/tweets_spec.rb +4 -4
- data/spec/twitter/rest/client_spec.rb +13 -25
- data/spec/twitter/tweet_spec.rb +69 -0
- data/twitter.gemspec +2 -1
- metadata +23 -15
- metadata.gz.sig +0 -0
- data/spec/twitter/null_object_spec.rb +0 -90
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'twitter/arguments'
|
2
|
+
require 'twitter/request'
|
2
3
|
require 'twitter/rest/api/utils'
|
3
4
|
require 'twitter/suggestion'
|
4
5
|
require 'twitter/user'
|
@@ -27,9 +28,9 @@ module Twitter
|
|
27
28
|
def suggestions(*args)
|
28
29
|
arguments = Twitter::Arguments.new(args)
|
29
30
|
if arguments.last
|
30
|
-
|
31
|
+
perform_with_object(:get, "/1.1/users/suggestions/#{arguments.pop}.json", arguments.options, Twitter::Suggestion)
|
31
32
|
else
|
32
|
-
|
33
|
+
perform_with_objects(:get, '/1.1/users/suggestions.json', arguments.options, Twitter::Suggestion)
|
33
34
|
end
|
34
35
|
end
|
35
36
|
|
@@ -42,7 +43,7 @@ module Twitter
|
|
42
43
|
# @param options [Hash] A customizable set of options.
|
43
44
|
# @return [Array<Twitter::User>]
|
44
45
|
def suggest_users(slug, options = {})
|
45
|
-
|
46
|
+
perform_with_objects(:get, "/1.1/users/suggestions/#{slug}/members.json", options, Twitter::User)
|
46
47
|
end
|
47
48
|
end
|
48
49
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'twitter/request'
|
1
2
|
require 'twitter/rest/api/utils'
|
2
3
|
require 'twitter/tweet'
|
3
4
|
require 'twitter/user'
|
@@ -24,7 +25,7 @@ module Twitter
|
|
24
25
|
# @option options [Integer] :count Specifies the number of records to retrieve. Must be less than or equal to 200.
|
25
26
|
# @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.
|
26
27
|
def mentions_timeline(options = {})
|
27
|
-
|
28
|
+
perform_with_objects(:get, '/1.1/statuses/mentions_timeline.json', options, Twitter::Tweet)
|
28
29
|
end
|
29
30
|
alias_method :mentions, :mentions_timeline
|
30
31
|
|
@@ -112,7 +113,7 @@ module Twitter
|
|
112
113
|
# @option options [Boolean, String, Integer] :contributor_details Specifies that the contributors element should be enhanced to include the screen_name of the contributor.
|
113
114
|
# @option options [Boolean, String, Integer] :include_entities The tweet entities node will be disincluded when set to false.
|
114
115
|
def home_timeline(options = {})
|
115
|
-
|
116
|
+
perform_with_objects(:get, '/1.1/statuses/home_timeline.json', options, Twitter::Tweet)
|
116
117
|
end
|
117
118
|
|
118
119
|
# Returns the 20 most recent retweets posted by users the authenticating user follow.
|
@@ -152,7 +153,7 @@ module Twitter
|
|
152
153
|
# @option options [Boolean, String, Integer] :include_entities The tweet entities node will be disincluded when set to false.
|
153
154
|
# @option options [Boolean, String, Integer] :include_user_entities The user entities node will be disincluded when set to false.
|
154
155
|
def retweets_of_me(options = {})
|
155
|
-
|
156
|
+
perform_with_objects(:get, '/1.1/statuses/retweets_of_me.json', options, Twitter::Tweet)
|
156
157
|
end
|
157
158
|
|
158
159
|
private
|
@@ -173,7 +174,7 @@ module Twitter
|
|
173
174
|
|
174
175
|
# @param count [Integer]
|
175
176
|
# @return [Array<Twitter::Tweet>]
|
176
|
-
def collect_with_count(count
|
177
|
+
def collect_with_count(count)
|
177
178
|
options = {}
|
178
179
|
options[:count] = MAX_TWEETS_PER_REQUEST
|
179
180
|
collect_with_max_id do |max_id|
|
@@ -1,5 +1,6 @@
|
|
1
|
-
require 'twitter/rest/api/utils'
|
2
1
|
require 'twitter/place'
|
2
|
+
require 'twitter/request'
|
3
|
+
require 'twitter/rest/api/utils'
|
3
4
|
require 'twitter/trend_results'
|
4
5
|
|
5
6
|
module Twitter
|
@@ -20,7 +21,7 @@ module Twitter
|
|
20
21
|
# @return [Array<Twitter::Trend>]
|
21
22
|
def trends(id = 1, options = {})
|
22
23
|
options[:id] = id
|
23
|
-
|
24
|
+
perform_with_object(:get, '/1.1/trends/place.json', options, Twitter::TrendResults)
|
24
25
|
end
|
25
26
|
alias_method :local_trends, :trends
|
26
27
|
alias_method :trends_place, :trends
|
@@ -34,7 +35,7 @@ module Twitter
|
|
34
35
|
# @param options [Hash] A customizable set of options.
|
35
36
|
# @return [Array<Twitter::Place>]
|
36
37
|
def trends_available(options = {})
|
37
|
-
|
38
|
+
perform_with_objects(:get, '/1.1/trends/available.json', options, Twitter::Place)
|
38
39
|
end
|
39
40
|
alias_method :trend_locations, :trends_available
|
40
41
|
|
@@ -49,7 +50,7 @@ module Twitter
|
|
49
50
|
# @option options [Float] :long If provided with a :lat option the available trend locations will be sorted by distance, nearest to furthest, to the co-ordinate pair. The valid ranges for longitude are -180.0 to +180.0 (East is positive) inclusive.
|
50
51
|
# @return [Array<Twitter::Place>]
|
51
52
|
def trends_closest(options = {})
|
52
|
-
|
53
|
+
perform_with_objects(:get, '/1.1/trends/closest.json', options, Twitter::Place)
|
53
54
|
end
|
54
55
|
end
|
55
56
|
end
|
@@ -3,6 +3,7 @@ require 'twitter/error/already_posted'
|
|
3
3
|
require 'twitter/error/already_retweeted'
|
4
4
|
require 'twitter/error/forbidden'
|
5
5
|
require 'twitter/oembed'
|
6
|
+
require 'twitter/request'
|
6
7
|
require 'twitter/rest/api/utils'
|
7
8
|
require 'twitter/tweet'
|
8
9
|
require 'twitter/utils'
|
@@ -12,6 +13,7 @@ module Twitter
|
|
12
13
|
module API
|
13
14
|
module Tweets
|
14
15
|
include Twitter::REST::API::Utils
|
16
|
+
include Twitter::Utils
|
15
17
|
|
16
18
|
# Returns up to 100 of the first retweets of a given tweet
|
17
19
|
#
|
@@ -25,8 +27,7 @@ module Twitter
|
|
25
27
|
# @option options [Integer] :count Specifies the number of records to retrieve. Must be less than or equal to 100.
|
26
28
|
# @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.
|
27
29
|
def retweets(tweet, options = {})
|
28
|
-
|
29
|
-
objects_from_response(Twitter::Tweet, :get, "/1.1/statuses/retweets/#{id}.json", options)
|
30
|
+
perform_with_objects(:get, "/1.1/statuses/retweets/#{extract_id(tweet)}.json", options, Twitter::Tweet)
|
30
31
|
end
|
31
32
|
|
32
33
|
# Show up to 100 users who retweeted the Tweet
|
@@ -43,8 +44,8 @@ module Twitter
|
|
43
44
|
# @option options [Boolean] :ids_only ('false') Only return user ids instead of full user objects.
|
44
45
|
def retweeters_of(tweet, options = {})
|
45
46
|
ids_only = !!options.delete(:ids_only)
|
46
|
-
retweeters = retweets(tweet, options).
|
47
|
-
ids_only ? retweeters.
|
47
|
+
retweeters = retweets(tweet, options).collect(&:user)
|
48
|
+
ids_only ? retweeters.collect(&:id) : retweeters
|
48
49
|
end
|
49
50
|
|
50
51
|
# Returns a Tweet
|
@@ -59,8 +60,7 @@ module Twitter
|
|
59
60
|
# @param options [Hash] A customizable set of options.
|
60
61
|
# @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.
|
61
62
|
def status(tweet, options = {})
|
62
|
-
|
63
|
-
object_from_response(Twitter::Tweet, :get, "/1.1/statuses/show/#{id}.json", options)
|
63
|
+
perform_with_object(:get, "/1.1/statuses/show/#{extract_id(tweet)}.json", options, Twitter::Tweet)
|
64
64
|
end
|
65
65
|
|
66
66
|
# Returns Tweets
|
@@ -123,7 +123,7 @@ module Twitter
|
|
123
123
|
hash = options.dup
|
124
124
|
hash[:in_reply_to_status_id] = hash.delete(:in_reply_to_status).id unless hash[:in_reply_to_status].nil?
|
125
125
|
hash[:place_id] = hash.delete(:place).woeid unless hash[:place].nil?
|
126
|
-
|
126
|
+
perform_with_object(:post, '/1.1/statuses/update.json', hash.merge(:status => status), Twitter::Tweet)
|
127
127
|
rescue Twitter::Error::Forbidden => error
|
128
128
|
handle_forbidden_error(Twitter::Error::AlreadyPosted, error)
|
129
129
|
end
|
@@ -143,10 +143,9 @@ module Twitter
|
|
143
143
|
# @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.
|
144
144
|
def retweet(*args)
|
145
145
|
arguments = Twitter::Arguments.new(args)
|
146
|
-
|
147
|
-
id = extract_id(tweet)
|
146
|
+
parallel_map(arguments) do |tweet|
|
148
147
|
begin
|
149
|
-
post_retweet(
|
148
|
+
post_retweet(extract_id(tweet), arguments.options)
|
150
149
|
rescue Twitter::Error::Forbidden => error
|
151
150
|
raise unless error.message == Twitter::Error::AlreadyRetweeted::MESSAGE
|
152
151
|
end
|
@@ -169,10 +168,9 @@ module Twitter
|
|
169
168
|
# @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.
|
170
169
|
def retweet!(*args)
|
171
170
|
arguments = Twitter::Arguments.new(args)
|
172
|
-
|
173
|
-
id = extract_id(tweet)
|
171
|
+
parallel_map(arguments) do |tweet|
|
174
172
|
begin
|
175
|
-
post_retweet(
|
173
|
+
post_retweet(extract_id(tweet), arguments.options)
|
176
174
|
rescue Twitter::Error::Forbidden => error
|
177
175
|
handle_forbidden_error(Twitter::Error::AlreadyRetweeted, error)
|
178
176
|
end
|
@@ -203,7 +201,7 @@ module Twitter
|
|
203
201
|
hash = options.dup
|
204
202
|
hash[:in_reply_to_status_id] = hash.delete(:in_reply_to_status).id unless hash[:in_reply_to_status].nil?
|
205
203
|
hash[:place_id] = hash.delete(:place).woeid unless hash[:place].nil?
|
206
|
-
|
204
|
+
perform_with_object(:post, '/1.1/statuses/update_with_media.json', hash.merge('media[]' => media, 'status' => status), Twitter::Tweet)
|
207
205
|
rescue Twitter::Error::Forbidden => error
|
208
206
|
handle_forbidden_error(Twitter::Error::AlreadyPosted, error)
|
209
207
|
end
|
@@ -226,7 +224,7 @@ module Twitter
|
|
226
224
|
# @option options [String] :lang Language code for the rendered embed. This will affect the text and localization of the rendered HTML.
|
227
225
|
def oembed(tweet, options = {})
|
228
226
|
options[:id] = extract_id(tweet)
|
229
|
-
|
227
|
+
perform_with_object(:get, '/1.1/statuses/oembed.json', options, Twitter::OEmbed)
|
230
228
|
end
|
231
229
|
|
232
230
|
# Returns oEmbeds for Tweets
|
@@ -250,9 +248,8 @@ module Twitter
|
|
250
248
|
# @option options [String] :lang Language code for the rendered embed. This will affect the text and localization of the rendered HTML.
|
251
249
|
def oembeds(*args)
|
252
250
|
arguments = Twitter::Arguments.new(args)
|
253
|
-
|
254
|
-
|
255
|
-
oembed(id, arguments.options)
|
251
|
+
parallel_map(arguments) do |tweet|
|
252
|
+
oembed(extract_id(tweet), arguments.options)
|
256
253
|
end
|
257
254
|
end
|
258
255
|
|
@@ -271,7 +268,7 @@ module Twitter
|
|
271
268
|
def retweeters_ids(*args)
|
272
269
|
arguments = Twitter::Arguments.new(args)
|
273
270
|
arguments.options[:id] ||= extract_id(arguments.first)
|
274
|
-
|
271
|
+
perform_with_cursor(:get, '/1.1/statuses/retweeters/ids.json', arguments.options, :ids)
|
275
272
|
end
|
276
273
|
|
277
274
|
private
|
@@ -282,15 +279,13 @@ module Twitter
|
|
282
279
|
# @return [Array<Twitter::Tweet>]
|
283
280
|
def parallel_tweets_from_response(request_method, path, args)
|
284
281
|
arguments = Twitter::Arguments.new(args)
|
285
|
-
|
286
|
-
|
287
|
-
object_from_response(Twitter::Tweet, request_method, path + "/#{id}.json", arguments.options)
|
282
|
+
parallel_map(arguments) do |tweet|
|
283
|
+
perform_with_object(request_method, path + "/#{extract_id(tweet)}.json", arguments.options, Twitter::Tweet)
|
288
284
|
end
|
289
285
|
end
|
290
286
|
|
291
287
|
def post_retweet(tweet, options)
|
292
|
-
|
293
|
-
response = post("/1.1/statuses/retweet/#{id}.json", options)
|
288
|
+
response = post("/1.1/statuses/retweet/#{extract_id(tweet)}.json", options)
|
294
289
|
retweeted_status = response.dup
|
295
290
|
retweeted_status[:body] = response[:body].delete(:retweeted_status)
|
296
291
|
retweeted_status[:body][:retweeted_status] = response[:body]
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'twitter/arguments'
|
2
2
|
require 'twitter/error/not_found'
|
3
3
|
require 'twitter/profile_banner'
|
4
|
+
require 'twitter/request'
|
4
5
|
require 'twitter/rest/api/utils'
|
5
6
|
require 'twitter/settings'
|
6
7
|
require 'twitter/user'
|
@@ -11,6 +12,7 @@ module Twitter
|
|
11
12
|
module API
|
12
13
|
module Users
|
13
14
|
include Twitter::REST::API::Utils
|
15
|
+
include Twitter::Utils
|
14
16
|
MAX_USERS_PER_REQUEST = 100
|
15
17
|
|
16
18
|
# Updates the authenticating user's settings.
|
@@ -47,7 +49,7 @@ module Twitter
|
|
47
49
|
# @param options [Hash] A customizable set of options.
|
48
50
|
# @option options [Boolean, String, Integer] :skip_status Do not include user's Tweets when set to true, 't' or 1.
|
49
51
|
def verify_credentials(options = {})
|
50
|
-
|
52
|
+
perform_with_object(:get, '/1.1/account/verify_credentials.json', options, Twitter::User)
|
51
53
|
end
|
52
54
|
alias_method :current_user, :verify_credentials
|
53
55
|
|
@@ -61,7 +63,7 @@ module Twitter
|
|
61
63
|
# @param device [String] Must be one of: 'sms', 'none'.
|
62
64
|
# @param options [Hash] A customizable set of options.
|
63
65
|
def update_delivery_device(device, options = {})
|
64
|
-
|
66
|
+
perform_with_object(:post, '/1.1/account/update_delivery_device.json', options.merge(:device => device), Twitter::User)
|
65
67
|
end
|
66
68
|
|
67
69
|
# Sets values that users are able to set under the "Account" tab of their settings page
|
@@ -78,7 +80,7 @@ module Twitter
|
|
78
80
|
# @option options [String] :location The city or country describing where the user of the account is located. The contents are not normalized or geocoded in any way. Maximum of 30 characters.
|
79
81
|
# @option options [String] :description A description of the user owning the account. Maximum of 160 characters.
|
80
82
|
def update_profile(options = {})
|
81
|
-
|
83
|
+
perform_with_object(:post, '/1.1/account/update_profile.json', options, Twitter::User)
|
82
84
|
end
|
83
85
|
|
84
86
|
# Updates the authenticating user's profile background image
|
@@ -92,7 +94,7 @@ module Twitter
|
|
92
94
|
# @param options [Hash] A customizable set of options.
|
93
95
|
# @option options [Boolean] :tile Whether or not to tile the background image. If set to true the background image will be displayed tiled. The image will not be tiled otherwise.
|
94
96
|
def update_profile_background_image(image, options = {})
|
95
|
-
|
97
|
+
perform_with_object(:post, '/1.1/account/update_profile_background_image.json', options.merge(:image => image), Twitter::User)
|
96
98
|
end
|
97
99
|
|
98
100
|
# Sets one or more hex values that control the color scheme of the authenticating user's profile
|
@@ -109,7 +111,7 @@ module Twitter
|
|
109
111
|
# @option options [String] :profile_sidebar_fill_color Profile sidebar's background color.
|
110
112
|
# @option options [String] :profile_sidebar_border_color Profile sidebar's border color.
|
111
113
|
def update_profile_colors(options = {})
|
112
|
-
|
114
|
+
perform_with_object(:post, '/1.1/account/update_profile_colors.json', options, Twitter::User)
|
113
115
|
end
|
114
116
|
|
115
117
|
# Updates the authenticating user's profile image
|
@@ -124,7 +126,7 @@ module Twitter
|
|
124
126
|
# @param image [File] The avatar image for the profile, base64-encoded. Must be a valid GIF, JPG, or PNG image of less than 700 kilobytes in size. Images with width larger than 500 pixels will be scaled down. Animated GIFs will be converted to a static GIF of the first frame, removing the animation.
|
125
127
|
# @param options [Hash] A customizable set of options.
|
126
128
|
def update_profile_image(image, options = {})
|
127
|
-
|
129
|
+
perform_with_object(:post, '/1.1/account/update_profile_image.json', options.merge(:image => image), Twitter::User)
|
128
130
|
end
|
129
131
|
|
130
132
|
# Returns an array of user objects that the authenticating user is blocking
|
@@ -137,7 +139,7 @@ module Twitter
|
|
137
139
|
# @param options [Hash] A customizable set of options.
|
138
140
|
# @option options [Integer] :page Specifies the page of results to retrieve.
|
139
141
|
def blocking(options = {})
|
140
|
-
|
142
|
+
perform_with_cursor(:get, '/1.1/blocks/list.json', options, :users, Twitter::User)
|
141
143
|
end
|
142
144
|
|
143
145
|
# Returns an array of numeric user ids the authenticating user is blocking
|
@@ -152,7 +154,7 @@ module Twitter
|
|
152
154
|
def blocked_ids(*args)
|
153
155
|
arguments = Twitter::Arguments.new(args)
|
154
156
|
merge_user!(arguments.options, arguments.pop)
|
155
|
-
|
157
|
+
perform_with_cursor(:get, '/1.1/blocks/ids.json', arguments.options, :ids)
|
156
158
|
end
|
157
159
|
|
158
160
|
# Returns true if the authenticating user is blocking a target user
|
@@ -165,7 +167,6 @@ module Twitter
|
|
165
167
|
# @param user [Integer, String, URI, Twitter::User] A Twitter user ID, screen name, URI, or object.
|
166
168
|
# @param options [Hash] A customizable set of options.
|
167
169
|
def block?(user, options = {})
|
168
|
-
merge_default_cursor!(options)
|
169
170
|
user_id = case user
|
170
171
|
when Integer
|
171
172
|
user
|
@@ -174,7 +175,7 @@ module Twitter
|
|
174
175
|
when Twitter::User
|
175
176
|
user.id
|
176
177
|
end
|
177
|
-
blocked_ids(options).
|
178
|
+
blocked_ids(options).collect(&:to_i).include?(user_id)
|
178
179
|
end
|
179
180
|
|
180
181
|
# Blocks the users specified by the authenticating user
|
@@ -226,9 +227,9 @@ module Twitter
|
|
226
227
|
# @option options [Boolean] :include_entities The tweet entities node will be disincluded when set to false.
|
227
228
|
def users(*args)
|
228
229
|
arguments = Twitter::Arguments.new(args)
|
229
|
-
|
230
|
-
|
231
|
-
|
230
|
+
request_method = arguments.options.delete(:method) || :post
|
231
|
+
parallel_map(arguments.each_slice(MAX_USERS_PER_REQUEST)) do |users|
|
232
|
+
perform_with_objects(request_method, '/1.1/users/lookup.json', merge_users(arguments.options, users), Twitter::User)
|
232
233
|
end.flatten
|
233
234
|
end
|
234
235
|
|
@@ -254,7 +255,7 @@ module Twitter
|
|
254
255
|
arguments = Twitter::Arguments.new(args)
|
255
256
|
if arguments.last
|
256
257
|
merge_user!(arguments.options, arguments.pop)
|
257
|
-
|
258
|
+
perform_with_object(:get, '/1.1/users/show.json', arguments.options, Twitter::User)
|
258
259
|
else
|
259
260
|
verify_credentials(arguments.options)
|
260
261
|
end
|
@@ -287,7 +288,7 @@ module Twitter
|
|
287
288
|
# @option options [Integer] :count The number of people to retrieve. Maxiumum of 20 allowed per page.
|
288
289
|
# @option options [Integer] :page Specifies the page of results to retrieve.
|
289
290
|
def user_search(query, options = {})
|
290
|
-
|
291
|
+
perform_with_objects(:get, '/1.1/users/search.json', options.merge(:q => query), Twitter::User)
|
291
292
|
end
|
292
293
|
|
293
294
|
# Returns an array of users that the specified user can contribute to
|
@@ -374,7 +375,7 @@ module Twitter
|
|
374
375
|
def profile_banner(*args)
|
375
376
|
arguments = Twitter::Arguments.new(args)
|
376
377
|
merge_user!(arguments.options, arguments.pop || screen_name) unless arguments.options[:user_id] || arguments.options[:screen_name]
|
377
|
-
|
378
|
+
perform_with_object(:get, '/1.1/users/profile_banner.json', arguments.options, Twitter::ProfileBanner)
|
378
379
|
end
|
379
380
|
end
|
380
381
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'addressable/uri'
|
2
2
|
require 'twitter/arguments'
|
3
|
-
require 'twitter/
|
3
|
+
require 'twitter/request'
|
4
4
|
require 'twitter/user'
|
5
5
|
require 'twitter/utils'
|
6
6
|
|
@@ -8,23 +8,9 @@ module Twitter
|
|
8
8
|
module REST
|
9
9
|
module API
|
10
10
|
module Utils
|
11
|
-
|
11
|
+
include Twitter::Utils
|
12
12
|
URI_SUBSTRING = '://'
|
13
|
-
|
14
|
-
class << self
|
15
|
-
def included(base)
|
16
|
-
base.extend(ClassMethods)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
module ClassMethods
|
21
|
-
def deprecate_alias(new_name, old_name)
|
22
|
-
define_method(new_name) do |*args, &block|
|
23
|
-
warn "#{Kernel.caller.first}: [DEPRECATION] ##{new_name} is deprecated. Use ##{old_name} instead."
|
24
|
-
send(old_name, *args, &block)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
13
|
+
DEFAULT_CURSOR = -1
|
28
14
|
|
29
15
|
private
|
30
16
|
|
@@ -45,14 +31,42 @@ module Twitter
|
|
45
31
|
end
|
46
32
|
end
|
47
33
|
|
34
|
+
# @param request_method [Symbol]
|
35
|
+
# @param path [String]
|
36
|
+
# @param options [Hash]
|
37
|
+
# @param klass [Class]
|
38
|
+
def perform_with_object(request_method, path, options, klass)
|
39
|
+
request = Twitter::Request.new(self, request_method, path, options)
|
40
|
+
request.perform_with_object(klass)
|
41
|
+
end
|
42
|
+
|
43
|
+
# @param request_method [Symbol]
|
44
|
+
# @param path [String]
|
45
|
+
# @param options [Hash]
|
46
|
+
# @param klass [Class]
|
47
|
+
def perform_with_objects(request_method, path, options, klass)
|
48
|
+
request = Twitter::Request.new(self, request_method, path, options)
|
49
|
+
request.perform_with_objects(klass)
|
50
|
+
end
|
51
|
+
|
52
|
+
# @param request_method [Symbol]
|
53
|
+
# @param path [String]
|
54
|
+
# @param options [Hash]
|
55
|
+
# @param klass [Class]
|
56
|
+
def perform_with_cursor(request_method, path, options, collection_name, klass = nil) # rubocop:disable ParameterLists
|
57
|
+
merge_default_cursor!(options)
|
58
|
+
request = Twitter::Request.new(self, request_method, path, options)
|
59
|
+
request.perform_with_cursor(collection_name.to_sym, klass)
|
60
|
+
end
|
61
|
+
|
48
62
|
# @param request_method [Symbol]
|
49
63
|
# @param path [String]
|
50
64
|
# @param args [Array]
|
51
65
|
# @return [Array<Twitter::User>]
|
52
66
|
def parallel_user_objects_from_response(request_method, path, args)
|
53
67
|
arguments = Twitter::Arguments.new(args)
|
54
|
-
|
55
|
-
|
68
|
+
parallel_map(arguments) do |user|
|
69
|
+
perform_with_object(request_method, path, merge_user(arguments.options, user), Twitter::User)
|
56
70
|
end
|
57
71
|
end
|
58
72
|
|
@@ -63,7 +77,7 @@ module Twitter
|
|
63
77
|
def user_objects_from_response(request_method, path, args)
|
64
78
|
arguments = Twitter::Arguments.new(args)
|
65
79
|
merge_user!(arguments.options, arguments.pop || screen_name) unless arguments.options[:user_id] || arguments.options[:screen_name]
|
66
|
-
|
80
|
+
perform_with_objects(request_method, path, arguments.options, Twitter::User)
|
67
81
|
end
|
68
82
|
|
69
83
|
# @param klass [Class]
|
@@ -71,29 +85,10 @@ module Twitter
|
|
71
85
|
# @param path [String]
|
72
86
|
# @param args [Array]
|
73
87
|
# @return [Array]
|
74
|
-
def objects_from_response_with_user(klass, request_method, path, args)
|
88
|
+
def objects_from_response_with_user(klass, request_method, path, args)
|
75
89
|
arguments = Twitter::Arguments.new(args)
|
76
90
|
merge_user!(arguments.options, arguments.pop)
|
77
|
-
|
78
|
-
end
|
79
|
-
|
80
|
-
# @param klass [Class]
|
81
|
-
# @param request_method [Symbol]
|
82
|
-
# @param path [String]
|
83
|
-
# @param options [Hash]
|
84
|
-
# @return [Array]
|
85
|
-
def objects_from_response(klass, request_method, path, options = {}) # rubocop:disable ParameterLists
|
86
|
-
response = send(request_method.to_sym, path, options)[:body]
|
87
|
-
objects_from_array(klass, response)
|
88
|
-
end
|
89
|
-
|
90
|
-
# @param klass [Class]
|
91
|
-
# @param array [Array]
|
92
|
-
# @return [Array]
|
93
|
-
def objects_from_array(klass, array)
|
94
|
-
array.map do |element|
|
95
|
-
klass.new(element)
|
96
|
-
end
|
91
|
+
perform_with_objects(request_method, path, arguments.options, klass)
|
97
92
|
end
|
98
93
|
|
99
94
|
# @param klass [Class]
|
@@ -101,24 +96,13 @@ module Twitter
|
|
101
96
|
# @param path [String]
|
102
97
|
# @param args [Array]
|
103
98
|
# @return [Array]
|
104
|
-
def parallel_objects_from_response(klass, request_method, path, args)
|
99
|
+
def parallel_objects_from_response(klass, request_method, path, args)
|
105
100
|
arguments = Twitter::Arguments.new(args)
|
106
|
-
|
107
|
-
id
|
108
|
-
object_from_response(klass, request_method, path, arguments.options.merge(:id => id))
|
101
|
+
parallel_map(arguments) do |object|
|
102
|
+
perform_with_object(request_method, path, arguments.options.merge(:id => extract_id(object)), klass)
|
109
103
|
end
|
110
104
|
end
|
111
105
|
|
112
|
-
# @param klass [Class]
|
113
|
-
# @param request_method [Symbol]
|
114
|
-
# @param path [String]
|
115
|
-
# @param options [Hash]
|
116
|
-
# @return [Object]
|
117
|
-
def object_from_response(klass, request_method, path, options = {}) # rubocop:disable ParameterLists
|
118
|
-
response = send(request_method.to_sym, path, options)
|
119
|
-
klass.from_response(response)
|
120
|
-
end
|
121
|
-
|
122
106
|
# @param collection_name [Symbol]
|
123
107
|
# @param klass [Class]
|
124
108
|
# @param request_method [Symbol]
|
@@ -128,19 +112,7 @@ module Twitter
|
|
128
112
|
def cursor_from_response_with_user(collection_name, klass, request_method, path, args) # rubocop:disable ParameterLists
|
129
113
|
arguments = Twitter::Arguments.new(args)
|
130
114
|
merge_user!(arguments.options, arguments.pop || screen_name) unless arguments.options[:user_id] || arguments.options[:screen_name]
|
131
|
-
|
132
|
-
end
|
133
|
-
|
134
|
-
# @param collection_name [Symbol]
|
135
|
-
# @param klass [Class]
|
136
|
-
# @param request_method [Symbol]
|
137
|
-
# @param path [String]
|
138
|
-
# @param options [Hash]
|
139
|
-
# @return [Twitter::Cursor]
|
140
|
-
def cursor_from_response(collection_name, klass, request_method, path, options) # rubocop:disable ParameterLists
|
141
|
-
merge_default_cursor!(options)
|
142
|
-
response = send(request_method.to_sym, path, options)
|
143
|
-
Twitter::Cursor.from_response(response, collection_name.to_sym, klass, self, request_method, path, options)
|
115
|
+
perform_with_cursor(request_method, path, arguments.options, collection_name, klass)
|
144
116
|
end
|
145
117
|
|
146
118
|
def handle_forbidden_error(klass, error)
|
@@ -148,14 +120,14 @@ module Twitter
|
|
148
120
|
fail(error)
|
149
121
|
end
|
150
122
|
|
151
|
-
def merge_default_cursor!(options)
|
152
|
-
options[:cursor] = DEFAULT_CURSOR unless options[:cursor]
|
153
|
-
end
|
154
|
-
|
155
123
|
def screen_name
|
156
124
|
@screen_name ||= verify_credentials.screen_name
|
157
125
|
end
|
158
126
|
|
127
|
+
def merge_default_cursor!(options)
|
128
|
+
options[:cursor] = DEFAULT_CURSOR unless options[:cursor]
|
129
|
+
end
|
130
|
+
|
159
131
|
# Take a user and merge it into the hash with the correct key
|
160
132
|
#
|
161
133
|
# @param hash [Hash]
|
@@ -187,7 +159,7 @@ module Twitter
|
|
187
159
|
end
|
188
160
|
end
|
189
161
|
|
190
|
-
def set_compound_key(key, value, hash, prefix = nil)
|
162
|
+
def set_compound_key(key, value, hash, prefix = nil)
|
191
163
|
compound_key = [prefix, key].compact.join('_').to_sym
|
192
164
|
hash[compound_key] = value
|
193
165
|
hash
|