twitter 5.5.1 → 5.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/CHANGELOG.md +12 -0
  5. data/README.md +8 -10
  6. data/lib/twitter/base.rb +4 -2
  7. data/lib/twitter/client.rb +7 -5
  8. data/lib/twitter/configuration.rb +1 -1
  9. data/lib/twitter/cursor.rb +18 -17
  10. data/lib/twitter/entities.rb +27 -1
  11. data/lib/twitter/error.rb +1 -1
  12. data/lib/twitter/error/request_timeout.rb +10 -0
  13. data/lib/twitter/geo_results.rb +5 -3
  14. data/lib/twitter/media/photo.rb +1 -1
  15. data/lib/twitter/null_object.rb +8 -20
  16. data/lib/twitter/profile_banner.rb +1 -1
  17. data/lib/twitter/request.rb +47 -0
  18. data/lib/twitter/rest/api/direct_messages.rb +7 -5
  19. data/lib/twitter/rest/api/favorites.rb +7 -7
  20. data/lib/twitter/rest/api/friends_and_followers.rb +11 -9
  21. data/lib/twitter/rest/api/help.rb +4 -3
  22. data/lib/twitter/rest/api/lists.rb +9 -7
  23. data/lib/twitter/rest/api/oauth.rb +11 -5
  24. data/lib/twitter/rest/api/places_and_geo.rb +6 -5
  25. data/lib/twitter/rest/api/saved_searches.rb +8 -6
  26. data/lib/twitter/rest/api/search.rb +4 -10
  27. data/lib/twitter/rest/api/spam_reporting.rb +1 -0
  28. data/lib/twitter/rest/api/suggested_users.rb +4 -3
  29. data/lib/twitter/rest/api/timelines.rb +5 -4
  30. data/lib/twitter/rest/api/trends.rb +5 -4
  31. data/lib/twitter/rest/api/tweets.rb +19 -24
  32. data/lib/twitter/rest/api/users.rb +17 -16
  33. data/lib/twitter/rest/api/utils.rb +45 -73
  34. data/lib/twitter/rest/client.rb +34 -34
  35. data/lib/twitter/rest/request/multipart_with_file.rb +2 -0
  36. data/lib/twitter/rest/response/parse_json.rb +2 -0
  37. data/lib/twitter/rest/response/raise_error.rb +2 -0
  38. data/lib/twitter/search_results.rb +28 -60
  39. data/lib/twitter/streaming/client.rb +4 -4
  40. data/lib/twitter/suggestion.rb +1 -1
  41. data/lib/twitter/trend_results.rb +6 -4
  42. data/lib/twitter/tweet.rb +3 -3
  43. data/lib/twitter/user.rb +1 -1
  44. data/lib/twitter/utils.rb +18 -3
  45. data/lib/twitter/version.rb +2 -2
  46. data/spec/helper.rb +1 -1
  47. data/spec/twitter/error_spec.rb +1 -1
  48. data/spec/twitter/geo_factory_spec.rb +1 -1
  49. data/spec/twitter/identifiable_spec.rb +1 -1
  50. data/spec/twitter/media_factory_spec.rb +1 -1
  51. data/spec/twitter/rest/api/favorites_spec.rb +2 -2
  52. data/spec/twitter/rest/api/tweets_spec.rb +4 -4
  53. data/spec/twitter/rest/client_spec.rb +13 -25
  54. data/spec/twitter/tweet_spec.rb +69 -0
  55. data/twitter.gemspec +2 -1
  56. metadata +23 -15
  57. metadata.gz.sig +0 -0
  58. data/spec/twitter/null_object_spec.rb +0 -90
@@ -1,5 +1,6 @@
1
1
  require 'twitter/arguments'
2
2
  require 'twitter/direct_message'
3
+ require 'twitter/request'
3
4
  require 'twitter/rest/api/utils'
4
5
  require 'twitter/user'
5
6
  require 'twitter/utils'
@@ -9,6 +10,7 @@ module Twitter
9
10
  module API
10
11
  module DirectMessages
11
12
  include Twitter::REST::API::Utils
13
+ include Twitter::Utils
12
14
 
13
15
  # Returns the 20 most recent direct messages sent to the authenticating user
14
16
  #
@@ -24,7 +26,7 @@ module Twitter
24
26
  # @option options [Integer] :count Specifies the number of records to retrieve. Must be less than or equal to 200.
25
27
  # @option options [Integer] :page Specifies the page of results to retrieve.
26
28
  def direct_messages_received(options = {})
27
- objects_from_response(Twitter::DirectMessage, :get, '/1.1/direct_messages.json', options)
29
+ perform_with_objects(:get, '/1.1/direct_messages.json', options, Twitter::DirectMessage)
28
30
  end
29
31
 
30
32
  # Returns the 20 most recent direct messages sent by the authenticating user
@@ -41,7 +43,7 @@ module Twitter
41
43
  # @option options [Integer] :count Specifies the number of records to retrieve. Must be less than or equal to 200.
42
44
  # @option options [Integer] :page Specifies the page of results to retrieve.
43
45
  def direct_messages_sent(options = {})
44
- objects_from_response(Twitter::DirectMessage, :get, '/1.1/direct_messages/sent.json', options)
46
+ perform_with_objects(:get, '/1.1/direct_messages/sent.json', options, Twitter::DirectMessage)
45
47
  end
46
48
 
47
49
  # Returns a direct message
@@ -56,7 +58,7 @@ module Twitter
56
58
  # @param options [Hash] A customizable set of options.
57
59
  def direct_message(id, options = {})
58
60
  options[:id] = id
59
- object_from_response(Twitter::DirectMessage, :get, '/1.1/direct_messages/show.json', options)
61
+ perform_with_object(:get, '/1.1/direct_messages/show.json', options, Twitter::DirectMessage)
60
62
  end
61
63
 
62
64
  # @note This method requires an access token with RWD (read, write & direct message) permissions. Consult The Application Permission Model for more information.
@@ -89,7 +91,7 @@ module Twitter
89
91
  if arguments.empty?
90
92
  direct_messages_received(arguments.options)
91
93
  else
92
- Twitter::Utils.parallel_map(arguments) do |id|
94
+ parallel_map(arguments) do |id|
93
95
  direct_message(id, arguments.options)
94
96
  end
95
97
  end
@@ -126,7 +128,7 @@ module Twitter
126
128
  def create_direct_message(user, text, options = {})
127
129
  merge_user!(options, user)
128
130
  options[:text] = text
129
- object_from_response(Twitter::DirectMessage, :post, '/1.1/direct_messages/new.json', options)
131
+ perform_with_object(:post, '/1.1/direct_messages/new.json', options, Twitter::DirectMessage)
130
132
  end
131
133
  alias_method :d, :create_direct_message
132
134
  alias_method :m, :create_direct_message
@@ -1,6 +1,7 @@
1
1
  require 'twitter/arguments'
2
2
  require 'twitter/error/already_favorited'
3
3
  require 'twitter/error/forbidden'
4
+ require 'twitter/request'
4
5
  require 'twitter/rest/api/utils'
5
6
  require 'twitter/tweet'
6
7
  require 'twitter/user'
@@ -11,6 +12,7 @@ module Twitter
11
12
  module API
12
13
  module Favorites
13
14
  include Twitter::REST::API::Utils
15
+ include Twitter::Utils
14
16
 
15
17
  # @see https://dev.twitter.com/docs/api/1.1/get/favorites/list
16
18
  # @rate_limited Yes
@@ -33,7 +35,7 @@ module Twitter
33
35
  def favorites(*args)
34
36
  arguments = Twitter::Arguments.new(args)
35
37
  merge_user!(arguments.options, arguments.pop) if arguments.last
36
- objects_from_response(Twitter::Tweet, :get, '/1.1/favorites/list.json', arguments.options)
38
+ perform_with_objects(:get, '/1.1/favorites/list.json', arguments.options, Twitter::Tweet)
37
39
  end
38
40
 
39
41
  # Un-favorites the specified Tweets as the authenticating user
@@ -68,10 +70,9 @@ module Twitter
68
70
  # @param options [Hash] A customizable set of options.
69
71
  def favorite(*args)
70
72
  arguments = Twitter::Arguments.new(args)
71
- Twitter::Utils.parallel_map(arguments) do |tweet|
72
- id = extract_id(tweet)
73
+ parallel_map(arguments) do |tweet|
73
74
  begin
74
- object_from_response(Twitter::Tweet, :post, '/1.1/favorites/create.json', arguments.options.merge(:id => id))
75
+ perform_with_object(:post, '/1.1/favorites/create.json', arguments.options.merge(:id => extract_id(tweet)), Twitter::Tweet)
75
76
  rescue Twitter::Error::Forbidden => error
76
77
  raise unless error.message == Twitter::Error::AlreadyFavorited::MESSAGE
77
78
  end
@@ -96,10 +97,9 @@ module Twitter
96
97
  # @param options [Hash] A customizable set of options.
97
98
  def favorite!(*args)
98
99
  arguments = Twitter::Arguments.new(args)
99
- Twitter::Utils.parallel_map(arguments) do |tweet|
100
- id = extract_id(tweet)
100
+ parallel_map(arguments) do |tweet|
101
101
  begin
102
- object_from_response(Twitter::Tweet, :post, '/1.1/favorites/create.json', arguments.options.merge(:id => id))
102
+ perform_with_object(:post, '/1.1/favorites/create.json', arguments.options.merge(:id => extract_id(tweet)), Twitter::Tweet)
103
103
  rescue Twitter::Error::Forbidden => error
104
104
  handle_forbidden_error(Twitter::Error::AlreadyFavorited, error)
105
105
  end
@@ -2,6 +2,7 @@ require 'twitter/arguments'
2
2
  require 'twitter/cursor'
3
3
  require 'twitter/error/forbidden'
4
4
  require 'twitter/relationship'
5
+ require 'twitter/request'
5
6
  require 'twitter/rest/api/utils'
6
7
  require 'twitter/user'
7
8
  require 'twitter/utils'
@@ -11,6 +12,7 @@ module Twitter
11
12
  module API
12
13
  module FriendsAndFollowers
13
14
  include Twitter::REST::API::Utils
15
+ include Twitter::Utils
14
16
 
15
17
  # @see https://dev.twitter.com/docs/api/1.1/get/friends/ids
16
18
  # @rate_limited Yes
@@ -67,7 +69,7 @@ module Twitter
67
69
  def friendships(*args)
68
70
  arguments = Twitter::Arguments.new(args)
69
71
  merge_users!(arguments.options, arguments)
70
- objects_from_response(Twitter::User, :get, '/1.1/friendships/lookup.json', arguments.options)
72
+ perform_with_objects(:get, '/1.1/friendships/lookup.json', arguments.options, Twitter::User)
71
73
  end
72
74
 
73
75
  # Returns an array of numeric IDs for every user who has a pending request to follow the authenticating user
@@ -80,7 +82,7 @@ module Twitter
80
82
  # @param options [Hash] A customizable set of options.
81
83
  # @option options [Integer] :cursor (-1) Breaks the results into pages. Provide values as returned in the response objects's next_cursor and previous_cursor attributes to page back and forth in the list.
82
84
  def friendships_incoming(options = {})
83
- cursor_from_response(:ids, nil, :get, '/1.1/friendships/incoming.json', options)
85
+ perform_with_cursor(:get, '/1.1/friendships/incoming.json', options, :ids)
84
86
  end
85
87
 
86
88
  # Returns an array of numeric IDs for every protected user for whom the authenticating user has a pending follow request
@@ -93,7 +95,7 @@ module Twitter
93
95
  # @param options [Hash] A customizable set of options.
94
96
  # @option options [Integer] :cursor (-1) Breaks the results into pages. Provide values as returned in the response objects's next_cursor and previous_cursor attributes to page back and forth in the list.
95
97
  def friendships_outgoing(options = {})
96
- cursor_from_response(:ids, nil, :get, '/1.1/friendships/outgoing.json', options)
98
+ perform_with_cursor(:get, '/1.1/friendships/outgoing.json', options, :ids)
97
99
  end
98
100
 
99
101
  # Allows the authenticating user to follow the specified users, unless they are already followed
@@ -115,7 +117,7 @@ module Twitter
115
117
  friend_ids.to_a
116
118
  end
117
119
  new_friends = Thread.new do
118
- users(args).map(&:id)
120
+ users(args).collect(&:id)
119
121
  end
120
122
  follow!(new_friends.value - existing_friends.value, arguments.options)
121
123
  end
@@ -137,8 +139,8 @@ module Twitter
137
139
  # @option options [Boolean] :follow (false) Enable notifications for the target user.
138
140
  def follow!(*args)
139
141
  arguments = Twitter::Arguments.new(args)
140
- Twitter::Utils.parallel_map(arguments) do |user|
141
- object_from_response(Twitter::User, :post, '/1.1/friendships/create.json', merge_user(arguments.options, user))
142
+ parallel_map(arguments) do |user|
143
+ perform_with_object(:post, '/1.1/friendships/create.json', merge_user(arguments.options, user), Twitter::User)
142
144
  end.compact
143
145
  end
144
146
  alias_method :create_friendship!, :follow!
@@ -175,7 +177,7 @@ module Twitter
175
177
  # @option options [Boolean] :retweets Enable/disable retweets from the target user.
176
178
  def friendship_update(user, options = {})
177
179
  merge_user!(options, user)
178
- object_from_response(Twitter::Relationship, :post, '/1.1/friendships/update.json', options)
180
+ perform_with_object(:post, '/1.1/friendships/update.json', options, Twitter::Relationship)
179
181
  end
180
182
 
181
183
  # Returns detailed information about the relationship between two users
@@ -193,7 +195,7 @@ module Twitter
193
195
  options[:source_id] = options.delete(:source_user_id) unless options[:source_user_id].nil?
194
196
  merge_user!(options, target, 'target')
195
197
  options[:target_id] = options.delete(:target_user_id) unless options[:target_user_id].nil?
196
- object_from_response(Twitter::Relationship, :get, '/1.1/friendships/show.json', options)
198
+ perform_with_object(:get, '/1.1/friendships/show.json', options, Twitter::Relationship)
197
199
  end
198
200
  alias_method :friendship_show, :friendship
199
201
  alias_method :relationship, :friendship
@@ -273,7 +275,7 @@ module Twitter
273
275
  # @return [Array<Integer>]
274
276
  # @param options [Hash] A customizable set of options.
275
277
  def no_retweet_ids(options = {})
276
- get('/1.1/friendships/no_retweets/ids.json', options)[:body].map(&:to_i)
278
+ get('/1.1/friendships/no_retweets/ids.json', options)[:body].collect(&:to_i)
277
279
  end
278
280
  alias_method :no_retweets_ids, :no_retweet_ids
279
281
  end
@@ -1,6 +1,7 @@
1
- require 'twitter/rest/api/utils'
2
1
  require 'twitter/configuration'
3
2
  require 'twitter/language'
3
+ require 'twitter/request'
4
+ require 'twitter/rest/api/utils'
4
5
 
5
6
  module Twitter
6
7
  module REST
@@ -16,7 +17,7 @@ module Twitter
16
17
  # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid.
17
18
  # @return [Twitter::Configuration] Twitter's configuration.
18
19
  def configuration(options = {})
19
- object_from_response(Twitter::Configuration, :get, '/1.1/help/configuration.json', options)
20
+ perform_with_object(:get, '/1.1/help/configuration.json', options, Twitter::Configuration)
20
21
  end
21
22
 
22
23
  # Returns the list of languages supported by Twitter
@@ -27,7 +28,7 @@ module Twitter
27
28
  # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid.
28
29
  # @return [Array<Twitter::Language>]
29
30
  def languages(options = {})
30
- objects_from_response(Twitter::Language, :get, '/1.1/help/languages.json', options)
31
+ perform_with_objects(:get, '/1.1/help/languages.json', options, Twitter::Language)
31
32
  end
32
33
 
33
34
  # Returns {https://twitter.com/privacy Twitter's Privacy Policy}
@@ -3,6 +3,7 @@ require 'twitter/cursor'
3
3
  require 'twitter/error/forbidden'
4
4
  require 'twitter/error/not_found'
5
5
  require 'twitter/list'
6
+ require 'twitter/request'
6
7
  require 'twitter/rest/api/utils'
7
8
  require 'twitter/tweet'
8
9
  require 'twitter/user'
@@ -13,6 +14,7 @@ module Twitter
13
14
  module API
14
15
  module Lists
15
16
  include Twitter::REST::API::Utils
17
+ include Twitter::Utils
16
18
  MAX_USERS_PER_REQUEST = 100
17
19
  URI_SUBSTRING = '://'
18
20
 
@@ -59,7 +61,7 @@ module Twitter
59
61
  arguments = Twitter::Arguments.new(args)
60
62
  merge_list!(arguments.options, arguments.pop)
61
63
  merge_owner!(arguments.options, arguments.pop)
62
- objects_from_response(Twitter::Tweet, :get, '/1.1/lists/statuses.json', arguments.options)
64
+ perform_with_objects(:get, '/1.1/lists/statuses.json', arguments.options, Twitter::Tweet)
63
65
  end
64
66
 
65
67
  # Removes the specified member from the list
@@ -319,7 +321,7 @@ module Twitter
319
321
  # @option options [String] :mode ('public') Whether your list is public or private. Values can be 'public' or 'private'.
320
322
  # @option options [String] :description The description to give the list.
321
323
  def create_list(name, options = {})
322
- object_from_response(Twitter::List, :post, '/1.1/lists/create.json', options.merge(:name => name))
324
+ perform_with_object(:post, '/1.1/lists/create.json', options.merge(:name => name), Twitter::List)
323
325
  end
324
326
  deprecate_alias :list_create, :create_list
325
327
 
@@ -411,14 +413,14 @@ module Twitter
411
413
  arguments = Twitter::Arguments.new(args)
412
414
  merge_list!(arguments.options, arguments.pop)
413
415
  merge_owner!(arguments.options, arguments.pop)
414
- object_from_response(Twitter::List, request_method, path, arguments.options)
416
+ perform_with_object(request_method, path, arguments.options, Twitter::List)
415
417
  end
416
418
 
417
419
  def cursor_from_response_with_list(request_method, path, args)
418
420
  arguments = Twitter::Arguments.new(args)
419
421
  merge_list!(arguments.options, arguments.pop)
420
422
  merge_owner!(arguments.options, arguments.pop)
421
- cursor_from_response(:users, Twitter::User, request_method, path, arguments.options)
423
+ perform_with_cursor(request_method, path, arguments.options, :users, Twitter::User)
422
424
  end
423
425
 
424
426
  def list_user?(request_method, path, args)
@@ -437,7 +439,7 @@ module Twitter
437
439
  merge_user!(arguments.options, arguments.pop)
438
440
  merge_list!(arguments.options, arguments.pop)
439
441
  merge_owner!(arguments.options, arguments.pop)
440
- object_from_response(Twitter::List, request_method, path, arguments.options)
442
+ perform_with_object(request_method, path, arguments.options, Twitter::List)
441
443
  end
442
444
 
443
445
  def list_from_response_with_users(request_method, path, args)
@@ -446,8 +448,8 @@ module Twitter
446
448
  members = arguments.pop
447
449
  merge_list!(options, arguments.pop)
448
450
  merge_owner!(options, arguments.pop)
449
- Twitter::Utils.parallel_map(members.flatten.each_slice(MAX_USERS_PER_REQUEST)) do |users|
450
- object_from_response(Twitter::List, request_method, path, merge_users(options, users))
451
+ parallel_map(members.flatten.each_slice(MAX_USERS_PER_REQUEST)) do |users|
452
+ perform_with_object(request_method, path, merge_users(options, users), Twitter::List)
451
453
  end.last
452
454
  end
453
455
 
@@ -1,6 +1,7 @@
1
+ require 'twitter/request'
1
2
  require 'twitter/rest/api/utils'
2
- require 'twitter/token'
3
3
  require 'twitter/rest/response/parse_error_json'
4
+ require 'twitter/token'
4
5
 
5
6
  module Twitter
6
7
  module REST
@@ -19,11 +20,14 @@ module Twitter
19
20
  # @authentication Required
20
21
  # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid.
21
22
  # @return [Twitter::Token] The Bearer Token. token_type should be 'bearer'.
23
+ # @param options [Hash] A customizable set of options.
22
24
  # @example Generate a Bearer Token
23
25
  # client = Twitter::REST::Client.new(:consumer_key => "abc", :consumer_secret => 'def')
24
26
  # bearer_token = client.token
25
- def token
26
- object_from_response(Twitter::Token, :post, '/oauth2/token', :grant_type => 'client_credentials', :bearer_token_request => true)
27
+ def token(options = {})
28
+ options[:bearer_token_request] = true
29
+ options[:grant_type] ||= 'client_credentials'
30
+ perform_with_object(:post, '/oauth2/token', options, Twitter::Token)
27
31
  end
28
32
  alias_method :bearer_token, :token
29
33
 
@@ -34,10 +38,12 @@ module Twitter
34
38
  # @authentication Required
35
39
  # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid.
36
40
  # @param access_token [String, Twitter::Token] The bearer token to revoke.
41
+ # @param options [Hash] A customizable set of options.
37
42
  # @return [Twitter::Token] The invalidated token. token_type should be nil.
38
- def invalidate_token(access_token)
43
+ def invalidate_token(access_token, options = {})
39
44
  access_token = access_token.access_token if access_token.is_a?(Twitter::Token)
40
- object_from_response(Twitter::Token, :post, '/oauth2/invalidate_token', :access_token => access_token)
45
+ options[:access_token] = access_token
46
+ perform_with_object(:post, '/oauth2/invalidate_token', options, Twitter::Token)
41
47
  end
42
48
 
43
49
  # Allows a registered application to revoke an issued OAuth 2 Bearer Token by presenting its client credentials.
@@ -1,6 +1,7 @@
1
- require 'twitter/rest/api/utils'
2
1
  require 'twitter/geo_results'
3
2
  require 'twitter/place'
3
+ require 'twitter/request'
4
+ require 'twitter/rest/api/utils'
4
5
 
5
6
  module Twitter
6
7
  module REST
@@ -18,7 +19,7 @@ module Twitter
18
19
  # @param options [Hash] A customizable set of options.
19
20
  # @return [Twitter::Place] The requested place.
20
21
  def place(place_id, options = {})
21
- object_from_response(Twitter::Place, :get, "/1.1/geo/id/#{place_id}.json", options)
22
+ perform_with_object(:get, "/1.1/geo/id/#{place_id}.json", options, Twitter::Place)
22
23
  end
23
24
 
24
25
  # Searches for up to 20 places that can be used as a place_id
@@ -36,7 +37,7 @@ module Twitter
36
37
  # @option options [Integer] :max_results A hint as to the number of results to return. This does not guarantee that the number of results returned will equal max_results, but instead informs how many "nearby" results to return. Ideally, only pass in the number of places you intend to display to the user here.
37
38
  # @return [Array<Twitter::Place>]
38
39
  def reverse_geocode(options = {})
39
- object_from_response(Twitter::GeoResults, :get, '/1.1/geo/reverse_geocode.json', options)
40
+ perform_with_object(:get, '/1.1/geo/reverse_geocode.json', options, Twitter::GeoResults)
40
41
  end
41
42
 
42
43
  # Search for places that can be attached to a {Twitter::REST::API::Tweets#update}
@@ -57,7 +58,7 @@ module Twitter
57
58
  # @option options [String] :"attribute:street_address" This option searches for places which have this given street address. There are other well-known and application-specific attributes available. Custom attributes are also permitted.
58
59
  # @return [Array<Twitter::Place>]
59
60
  def geo_search(options = {})
60
- object_from_response(Twitter::GeoResults, :get, '/1.1/geo/search.json', options)
61
+ perform_with_object(:get, '/1.1/geo/search.json', options, Twitter::GeoResults)
61
62
  end
62
63
  alias_method :places_nearby, :geo_search
63
64
 
@@ -76,7 +77,7 @@ module Twitter
76
77
  # @option options [String] :"attribute:street_address" This option searches for places which have this given street address. There are other well-known and application-specific attributes available. Custom attributes are also permitted.
77
78
  # @return [Array<Twitter::Place>]
78
79
  def similar_places(options = {})
79
- object_from_response(Twitter::GeoResults, :get, '/1.1/geo/similar_places.json', options)
80
+ perform_with_object(:get, '/1.1/geo/similar_places.json', options, Twitter::GeoResults)
80
81
  end
81
82
  alias_method :places_similar, :similar_places
82
83
  end
@@ -1,4 +1,5 @@
1
1
  require 'twitter/arguments'
2
+ require 'twitter/request'
2
3
  require 'twitter/rest/api/utils'
3
4
  require 'twitter/saved_search'
4
5
  require 'twitter/utils'
@@ -8,6 +9,7 @@ module Twitter
8
9
  module API
9
10
  module SavedSearches
10
11
  include Twitter::REST::API::Utils
12
+ include Twitter::Utils
11
13
 
12
14
  # @rate_limited Yes
13
15
  # @authentication Requires user context
@@ -32,9 +34,9 @@ module Twitter
32
34
  def saved_searches(*args)
33
35
  arguments = Twitter::Arguments.new(args)
34
36
  if arguments.empty?
35
- objects_from_response(Twitter::SavedSearch, :get, '/1.1/saved_searches/list.json', arguments.options)
37
+ perform_with_objects(:get, '/1.1/saved_searches/list.json', arguments.options, Twitter::SavedSearch)
36
38
  else
37
- Twitter::Utils.parallel_map(arguments) do |id|
39
+ parallel_map(arguments) do |id|
38
40
  saved_search(id, arguments.options)
39
41
  end
40
42
  end
@@ -50,7 +52,7 @@ module Twitter
50
52
  # @param id [Integer] The ID of the saved search.
51
53
  # @param options [Hash] A customizable set of options.
52
54
  def saved_search(id, options = {})
53
- object_from_response(Twitter::SavedSearch, :get, "/1.1/saved_searches/show/#{id}.json", options)
55
+ perform_with_object(:get, "/1.1/saved_searches/show/#{id}.json", options, Twitter::SavedSearch)
54
56
  end
55
57
 
56
58
  # Creates a saved search for the authenticated user
@@ -63,7 +65,7 @@ module Twitter
63
65
  # @param query [String] The query of the search the user would like to save.
64
66
  # @param options [Hash] A customizable set of options.
65
67
  def create_saved_search(query, options = {})
66
- object_from_response(Twitter::SavedSearch, :post, '/1.1/saved_searches/create.json', options.merge(:query => query))
68
+ perform_with_object(:post, '/1.1/saved_searches/create.json', options.merge(:query => query), Twitter::SavedSearch)
67
69
  end
68
70
  deprecate_alias :saved_search_create, :create_saved_search
69
71
 
@@ -82,8 +84,8 @@ module Twitter
82
84
  # @param options [Hash] A customizable set of options.
83
85
  def destroy_saved_search(*args)
84
86
  arguments = Twitter::Arguments.new(args)
85
- Twitter::Utils.parallel_map(arguments) do |id|
86
- object_from_response(Twitter::SavedSearch, :post, "/1.1/saved_searches/destroy/#{id}.json", arguments.options)
87
+ parallel_map(arguments) do |id|
88
+ perform_with_object(:post, "/1.1/saved_searches/destroy/#{id}.json", arguments.options, Twitter::SavedSearch)
87
89
  end
88
90
  end
89
91
  deprecate_alias :saved_search_destroy, :destroy_saved_search
@@ -1,11 +1,10 @@
1
- require 'twitter/rest/api/utils'
1
+ require 'twitter/request'
2
2
  require 'twitter/search_results'
3
3
 
4
4
  module Twitter
5
5
  module REST
6
6
  module API
7
7
  module Search
8
- include Twitter::REST::API::Utils
9
8
  MAX_TWEETS_PER_REQUEST = 100
10
9
 
11
10
  # Returns tweets that match a specified query.
@@ -30,14 +29,9 @@ module Twitter
30
29
  # @return [Twitter::SearchResults] Return tweets that match a specified query with search metadata
31
30
  def search(q, options = {})
32
31
  options[:count] ||= MAX_TWEETS_PER_REQUEST
33
- search_results_from_response(:get, '/1.1/search/tweets.json', options.merge(:q => q))
34
- end
35
-
36
- private
37
-
38
- def search_results_from_response(request_method, path, options = {}) # rubocop:disable ParameterLists
39
- response = send(request_method.to_sym, path, options)
40
- Twitter::SearchResults.from_response(response, self, request_method, path, options)
32
+ request = Twitter::Request.new(self, :get, '/1.1/search/tweets.json', options.merge(:q => q))
33
+ response = get(request.path, request.options)
34
+ Twitter::SearchResults.from_response(response, request)
41
35
  end
42
36
  end
43
37
  end