twitter 5.6.0 → 5.7.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 (93) hide show
  1. data.tar.gz.sig +0 -0
  2. data/.yardopts +1 -0
  3. data/CHANGELOG.md +8 -0
  4. data/README.md +3 -3
  5. data/Rakefile +1 -1
  6. data/lib/twitter/base.rb +0 -8
  7. data/lib/twitter/client.rb +2 -1
  8. data/lib/twitter/cursor.rb +2 -15
  9. data/lib/twitter/error.rb +90 -18
  10. data/lib/twitter/geo_results.rb +0 -10
  11. data/lib/twitter/request.rb +4 -4
  12. data/lib/twitter/rest/api.rb +43 -0
  13. data/lib/twitter/rest/client.rb +10 -44
  14. data/lib/twitter/rest/direct_messages.rb +138 -0
  15. data/lib/twitter/rest/favorites.rb +108 -0
  16. data/lib/twitter/rest/friends_and_followers.rb +281 -0
  17. data/lib/twitter/rest/help.rb +56 -0
  18. data/lib/twitter/rest/lists.rb +497 -0
  19. data/lib/twitter/rest/oauth.rb +65 -0
  20. data/lib/twitter/rest/places_and_geo.rb +84 -0
  21. data/lib/twitter/rest/request/multipart_with_file.rb +5 -5
  22. data/lib/twitter/rest/response/parse_json.rb +2 -4
  23. data/lib/twitter/rest/response/raise_error.rb +24 -15
  24. data/lib/twitter/rest/saved_searches.rb +93 -0
  25. data/lib/twitter/rest/search.rb +37 -0
  26. data/lib/twitter/rest/spam_reporting.rb +27 -0
  27. data/lib/twitter/rest/suggested_users.rb +49 -0
  28. data/lib/twitter/rest/timelines.rb +200 -0
  29. data/lib/twitter/rest/trends.rb +57 -0
  30. data/lib/twitter/rest/tweets.rb +309 -0
  31. data/lib/twitter/rest/undocumented.rb +49 -0
  32. data/lib/twitter/rest/users.rb +383 -0
  33. data/lib/twitter/rest/utils.rb +205 -0
  34. data/lib/twitter/search_results.rb +2 -13
  35. data/lib/twitter/trend_results.rb +0 -10
  36. data/lib/twitter/version.rb +1 -1
  37. data/spec/helper.rb +1 -1
  38. data/spec/twitter/error_spec.rb +26 -42
  39. data/spec/twitter/rest/{api/direct_messages_spec.rb → direct_messages_spec.rb} +1 -1
  40. data/spec/twitter/rest/{api/favorites_spec.rb → favorites_spec.rb} +1 -1
  41. data/spec/twitter/rest/{api/friends_and_followers_spec.rb → friends_and_followers_spec.rb} +1 -1
  42. data/spec/twitter/rest/{api/geo_spec.rb → geo_spec.rb} +1 -1
  43. data/spec/twitter/rest/{api/help_spec.rb → help_spec.rb} +1 -1
  44. data/spec/twitter/rest/{api/lists_spec.rb → lists_spec.rb} +1 -1
  45. data/spec/twitter/rest/{api/oauth_spec.rb → oauth_spec.rb} +4 -8
  46. data/spec/twitter/rest/{api/saved_searches_spec.rb → saved_searches_spec.rb} +1 -1
  47. data/spec/twitter/rest/{api/search_spec.rb → search_spec.rb} +1 -1
  48. data/spec/twitter/rest/{api/spam_reporting_spec.rb → spam_reporting_spec.rb} +1 -1
  49. data/spec/twitter/rest/{api/suggested_users_spec.rb → suggested_users_spec.rb} +1 -1
  50. data/spec/twitter/rest/{api/timelines_spec.rb → timelines_spec.rb} +1 -1
  51. data/spec/twitter/rest/{api/trends_spec.rb → trends_spec.rb} +1 -1
  52. data/spec/twitter/rest/{api/tweets_spec.rb → tweets_spec.rb} +74 -5
  53. data/spec/twitter/rest/{api/undocumented_spec.rb → undocumented_spec.rb} +1 -1
  54. data/spec/twitter/rest/{api/users_spec.rb → users_spec.rb} +5 -5
  55. data/spec/twitter/tweet_spec.rb +1 -1
  56. data/twitter.gemspec +0 -1
  57. metadata +247 -237
  58. metadata.gz.sig +0 -0
  59. checksums.yaml +0 -7
  60. checksums.yaml.gz.sig +0 -0
  61. data/lib/twitter/error/already_favorited.rb +0 -10
  62. data/lib/twitter/error/already_posted.rb +0 -10
  63. data/lib/twitter/error/already_retweeted.rb +0 -10
  64. data/lib/twitter/error/bad_gateway.rb +0 -10
  65. data/lib/twitter/error/bad_request.rb +0 -10
  66. data/lib/twitter/error/configuration_error.rb +0 -8
  67. data/lib/twitter/error/forbidden.rb +0 -10
  68. data/lib/twitter/error/gateway_timeout.rb +0 -10
  69. data/lib/twitter/error/internal_server_error.rb +0 -10
  70. data/lib/twitter/error/not_acceptable.rb +0 -10
  71. data/lib/twitter/error/not_found.rb +0 -10
  72. data/lib/twitter/error/request_timeout.rb +0 -10
  73. data/lib/twitter/error/service_unavailable.rb +0 -10
  74. data/lib/twitter/error/too_many_requests.rb +0 -12
  75. data/lib/twitter/error/unauthorized.rb +0 -10
  76. data/lib/twitter/error/unprocessable_entity.rb +0 -10
  77. data/lib/twitter/rest/api/direct_messages.rb +0 -140
  78. data/lib/twitter/rest/api/favorites.rb +0 -115
  79. data/lib/twitter/rest/api/friends_and_followers.rb +0 -284
  80. data/lib/twitter/rest/api/help.rb +0 -58
  81. data/lib/twitter/rest/api/lists.rb +0 -500
  82. data/lib/twitter/rest/api/oauth.rb +0 -67
  83. data/lib/twitter/rest/api/places_and_geo.rb +0 -86
  84. data/lib/twitter/rest/api/saved_searches.rb +0 -95
  85. data/lib/twitter/rest/api/search.rb +0 -39
  86. data/lib/twitter/rest/api/spam_reporting.rb +0 -29
  87. data/lib/twitter/rest/api/suggested_users.rb +0 -51
  88. data/lib/twitter/rest/api/timelines.rb +0 -202
  89. data/lib/twitter/rest/api/trends.rb +0 -58
  90. data/lib/twitter/rest/api/tweets.rb +0 -297
  91. data/lib/twitter/rest/api/undocumented.rb +0 -51
  92. data/lib/twitter/rest/api/users.rb +0 -383
  93. data/lib/twitter/rest/api/utils.rb +0 -212
@@ -0,0 +1,205 @@
1
+ require 'addressable/uri'
2
+ require 'twitter/arguments'
3
+ require 'twitter/request'
4
+ require 'twitter/user'
5
+ require 'twitter/utils'
6
+
7
+ module Twitter
8
+ module REST
9
+ module Utils
10
+ include Twitter::Utils
11
+ URI_SUBSTRING = '://'
12
+ DEFAULT_CURSOR = -1
13
+
14
+ private
15
+
16
+ # Take a URI string or Twitter::Identity object and return its ID
17
+ #
18
+ # @param object [Integer, String, URI, Twitter::Identity] An ID, URI, or object.
19
+ # @return [Integer]
20
+ def extract_id(object)
21
+ case object
22
+ when ::Integer
23
+ object
24
+ when ::String
25
+ object.split('/').last.to_i
26
+ when URI
27
+ object.path.split('/').last.to_i
28
+ when Twitter::Identity
29
+ object.id
30
+ end
31
+ end
32
+
33
+ # @param request_method [Symbol]
34
+ # @param path [String]
35
+ # @param options [Hash]
36
+ # @param klass [Class]
37
+ def perform_with_object(request_method, path, options, klass)
38
+ request = Twitter::Request.new(self, request_method, path, options)
39
+ request.perform_with_object(klass)
40
+ end
41
+
42
+ # @param request_method [Symbol]
43
+ # @param path [String]
44
+ # @param options [Hash]
45
+ # @param klass [Class]
46
+ def perform_with_objects(request_method, path, options, klass)
47
+ request = Twitter::Request.new(self, request_method, path, options)
48
+ request.perform_with_objects(klass)
49
+ end
50
+
51
+ # @param request_method [Symbol]
52
+ # @param path [String]
53
+ # @param options [Hash]
54
+ # @param klass [Class]
55
+ def perform_with_cursor(request_method, path, options, collection_name, klass = nil) # rubocop:disable ParameterLists
56
+ merge_default_cursor!(options)
57
+ request = Twitter::Request.new(self, request_method, path, options)
58
+ request.perform_with_cursor(collection_name.to_sym, klass)
59
+ end
60
+
61
+ # @param request_method [Symbol]
62
+ # @param path [String]
63
+ # @param args [Array]
64
+ # @return [Array<Twitter::User>]
65
+ def parallel_user_objects_from_response(request_method, path, args)
66
+ arguments = Twitter::Arguments.new(args)
67
+ parallel_map(arguments) do |user|
68
+ perform_with_object(request_method, path, merge_user(arguments.options, user), Twitter::User)
69
+ end
70
+ end
71
+
72
+ # @param request_method [Symbol]
73
+ # @param path [String]
74
+ # @param args [Array]
75
+ # @return [Array<Twitter::User>]
76
+ def user_objects_from_response(request_method, path, args)
77
+ arguments = Twitter::Arguments.new(args)
78
+ merge_user!(arguments.options, arguments.pop || screen_name) unless arguments.options[:user_id] || arguments.options[:screen_name]
79
+ perform_with_objects(request_method, path, arguments.options, Twitter::User)
80
+ end
81
+
82
+ # @param klass [Class]
83
+ # @param request_method [Symbol]
84
+ # @param path [String]
85
+ # @param args [Array]
86
+ # @return [Array]
87
+ def objects_from_response_with_user(klass, request_method, path, args)
88
+ arguments = Twitter::Arguments.new(args)
89
+ merge_user!(arguments.options, arguments.pop)
90
+ perform_with_objects(request_method, path, arguments.options, klass)
91
+ end
92
+
93
+ # @param klass [Class]
94
+ # @param request_method [Symbol]
95
+ # @param path [String]
96
+ # @param args [Array]
97
+ # @return [Array]
98
+ def parallel_objects_from_response(klass, request_method, path, args)
99
+ arguments = Twitter::Arguments.new(args)
100
+ parallel_map(arguments) do |object|
101
+ perform_with_object(request_method, path, arguments.options.merge(:id => extract_id(object)), klass)
102
+ end
103
+ end
104
+
105
+ # @param collection_name [Symbol]
106
+ # @param klass [Class]
107
+ # @param request_method [Symbol]
108
+ # @param path [String]
109
+ # @param args [Array]
110
+ # @return [Twitter::Cursor]
111
+ def cursor_from_response_with_user(collection_name, klass, request_method, path, args) # rubocop:disable ParameterLists
112
+ arguments = Twitter::Arguments.new(args)
113
+ merge_user!(arguments.options, arguments.pop || screen_name) unless arguments.options[:user_id] || arguments.options[:screen_name]
114
+ perform_with_cursor(request_method, path, arguments.options, collection_name, klass)
115
+ end
116
+
117
+ def screen_name
118
+ @screen_name ||= verify_credentials.screen_name
119
+ end
120
+
121
+ def merge_default_cursor!(options)
122
+ options[:cursor] = DEFAULT_CURSOR unless options[:cursor]
123
+ end
124
+
125
+ # Take a user and merge it into the hash with the correct key
126
+ #
127
+ # @param hash [Hash]
128
+ # @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object.
129
+ # @return [Hash]
130
+ def merge_user(hash, user, prefix = nil)
131
+ merge_user!(hash.dup, user, prefix)
132
+ end
133
+
134
+ # Take a user and merge it into the hash with the correct key
135
+ #
136
+ # @param hash [Hash]
137
+ # @param user [Integer, String, URI, Twitter::User] A Twitter user ID, screen name, URI, or object.
138
+ # @return [Hash]
139
+ def merge_user!(hash, user, prefix = nil)
140
+ case user
141
+ when Integer
142
+ set_compound_key('user_id', user, hash, prefix)
143
+ when String
144
+ if user[URI_SUBSTRING]
145
+ set_compound_key('screen_name', user.split('/').last, hash, prefix)
146
+ else
147
+ set_compound_key('screen_name', user, hash, prefix)
148
+ end
149
+ when URI, Addressable::URI
150
+ set_compound_key('screen_name', user.path.split('/').last, hash, prefix)
151
+ when Twitter::User
152
+ set_compound_key('user_id', user.id, hash, prefix)
153
+ end
154
+ end
155
+
156
+ def set_compound_key(key, value, hash, prefix = nil)
157
+ compound_key = [prefix, key].compact.join('_').to_sym
158
+ hash[compound_key] = value
159
+ hash
160
+ end
161
+
162
+ # Take a multiple users and merge them into the hash with the correct keys
163
+ #
164
+ # @param hash [Hash]
165
+ # @param users [Enumerable<Integer, String, Twitter::User>] A collection of Twitter user IDs, screen_names, or objects.
166
+ # @return [Hash]
167
+ def merge_users(hash, users)
168
+ merge_users!(hash.dup, users)
169
+ end
170
+
171
+ # Take a multiple users and merge them into the hash with the correct keys
172
+ #
173
+ # @param hash [Hash]
174
+ # @param users [Enumerable<Integer, String, URI, Twitter::User>] A collection of Twitter user IDs, screen_names, URIs, or objects.
175
+ # @return [Hash]
176
+ def merge_users!(hash, users)
177
+ user_ids, screen_names = collect_user_ids_and_screen_names(users)
178
+ hash[:user_id] = user_ids.join(',') unless user_ids.empty?
179
+ hash[:screen_name] = screen_names.join(',') unless screen_names.empty?
180
+ hash
181
+ end
182
+
183
+ def collect_user_ids_and_screen_names(users) # rubocop:disable MethodLength
184
+ user_ids, screen_names = [], []
185
+ users.flatten.each do |user|
186
+ case user
187
+ when Integer
188
+ user_ids << user
189
+ when String
190
+ if user[URI_SUBSTRING]
191
+ screen_names << user.split('/').last
192
+ else
193
+ screen_names << user
194
+ end
195
+ when URI
196
+ screen_names << user.path.split('/').last
197
+ when Twitter::User
198
+ user_ids << user.id
199
+ end
200
+ end
201
+ [user_ids, screen_names]
202
+ end
203
+ end
204
+ end
205
+ end
@@ -12,17 +12,6 @@ module Twitter
12
12
  deprecate_alias :to_hash, :to_h
13
13
  deprecate_alias :to_hsh, :to_h
14
14
 
15
- class << self
16
- # Construct a new SearchResults object from a response hash
17
- #
18
- # @param response [Hash]
19
- # @param request [Twitter::Request]
20
- # @return [Twitter::SearchResults]
21
- def from_response(response, request)
22
- new(response[:body], request)
23
- end
24
- end
25
-
26
15
  # Initializes a new SearchResults object
27
16
  #
28
17
  # @param attrs [Hash]
@@ -61,8 +50,8 @@ module Twitter
61
50
 
62
51
  # @return [Hash]
63
52
  def fetch_next_page
64
- response = @client.send(@request_method, @path, next_page)
65
- self.attrs = response[:body]
53
+ response = @client.send(@request_method, @path, next_page).body
54
+ self.attrs = response
66
55
  end
67
56
 
68
57
  # @param attrs [Hash]
@@ -15,16 +15,6 @@ module Twitter
15
15
  deprecate_alias :to_hash, :to_h
16
16
  deprecate_alias :to_hsh, :to_h
17
17
 
18
- class << self
19
- # Construct a new TrendResults object from a response hash
20
- #
21
- # @param response [Hash]
22
- # @return [Twitter::Base]
23
- def from_response(response = {})
24
- new(response[:body].first)
25
- end
26
- end
27
-
28
18
  # Initializes a new TrendResults object
29
19
  #
30
20
  # @param attrs [Hash]
@@ -1,7 +1,7 @@
1
1
  module Twitter
2
2
  class Version
3
3
  MAJOR = 5
4
- MINOR = 6
4
+ MINOR = 7
5
5
  PATCH = 0
6
6
  PRE = nil
7
7
 
@@ -8,7 +8,7 @@ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
8
8
 
9
9
  SimpleCov.start do
10
10
  add_filter '/spec/'
11
- minimum_coverage(99.42)
11
+ minimum_coverage(99.39)
12
12
  end
13
13
 
14
14
  require 'twitter'
@@ -6,63 +6,47 @@ describe Twitter::Error do
6
6
  @client = Twitter::REST::Client.new(:consumer_key => 'CK', :consumer_secret => 'CS', :access_token => 'AT', :access_token_secret => 'AS')
7
7
  end
8
8
 
9
+ describe '#code' do
10
+ it 'returns the error code' do
11
+ error = Twitter::Error.new('execution expired', {}, 123)
12
+ expect(error.code).to eq(123)
13
+ end
14
+ end
15
+
9
16
  describe '#message' do
10
- it 'returns the message of the cause' do
11
- error = Twitter::Error.new(Faraday::Error::ClientError.new('Oops'))
12
- expect(error.message).to eq('Oops')
17
+ it 'returns the error message' do
18
+ error = Twitter::Error.new('execution expired')
19
+ expect(error.message).to eq('execution expired')
13
20
  end
14
21
  end
15
22
 
16
23
  describe '#rate_limit' do
17
- it 'returns the cause' do
18
- error = Twitter::Error.new(Faraday::Error::ClientError.new('Oops'))
24
+ it 'returns a rate limit object' do
25
+ error = Twitter::Error.new('execution expired')
19
26
  expect(error.rate_limit).to be_a Twitter::RateLimit
20
27
  end
21
28
  end
22
29
 
23
- describe '#cause' do
24
- it 'returns the cause' do
25
- error = Twitter::Error.new(Faraday::Error::ClientError.new('Oops'))
26
- expect(error.cause.class).to eq(Faraday::Error::ClientError)
30
+ [nil, 'error', 'errors'].each do |key|
31
+ context "when JSON body contains #{key.inspect}" do
32
+ before do
33
+ body = "{\"#{key}\":\"Internal Server Error\"}" unless body.nil?
34
+ stub_get('/1.1/statuses/user_timeline.json').with(:query => {:screen_name => 'sferik'}).to_return(:status => 500, :body => body)
35
+ end
36
+ it 'raises an exception with the proper message' do
37
+ expect { @client.user_timeline('sferik') }.to raise_error(Twitter::Error::InternalServerError)
38
+ end
27
39
  end
28
40
  end
29
41
 
30
42
  Twitter::Error.errors.each do |status, exception|
31
-
32
- [nil, 'error', 'errors'].each do |body|
33
- context "when HTTP status is #{status} and body is #{body.inspect}" do
34
- before do
35
- body_message = '{"' + body + '":"Client Error"}' unless body.nil?
36
- stub_get('/1.1/statuses/user_timeline.json').with(:query => {:screen_name => 'sferik'}).to_return(:status => status, :body => body_message)
37
- end
38
- it "raises #{exception.name}" do
39
- expect { @client.user_timeline('sferik') }.to raise_error(exception)
40
- end
43
+ context "when HTTP status is #{status}" do
44
+ before do
45
+ stub_get('/1.1/statuses/user_timeline.json').with(:query => {:screen_name => 'sferik'}).to_return(:status => status, :body => '{}')
41
46
  end
42
- end
43
-
44
- context "when HTTP status is #{status} and body is errors" do
45
- context 'when errors is an array of hashes' do
46
- context 'when error code is nil' do
47
- before do
48
- body_message = '{"errors":[{"message":"Client Error"}]}'
49
- stub_get('/1.1/statuses/user_timeline.json').with(:query => {:screen_name => 'sferik'}).to_return(:status => status, :body => body_message)
50
- end
51
- it "raises #{exception.name}" do
52
- expect { @client.user_timeline('sferik') }.to raise_error { |error| expect(error.code).to be_nil }
53
- end
54
- context 'when error code is 187' do
55
- before do
56
- body_message = '{"errors":[{"message":"Client Error","code":187}]}'
57
- stub_get('/1.1/statuses/user_timeline.json').with(:query => {:screen_name => 'sferik'}).to_return(:status => status, :body => body_message)
58
- end
59
- it "raises #{exception.name}" do
60
- expect { @client.user_timeline('sferik') }.to raise_error { |error| expect(error.code).to eq(187) }
61
- end
62
- end
63
- end
47
+ it "raises #{exception}" do
48
+ expect { @client.user_timeline('sferik') }.to raise_error(exception)
64
49
  end
65
50
  end
66
-
67
51
  end
68
52
  end
@@ -1,6 +1,6 @@
1
1
  require 'helper'
2
2
 
3
- describe Twitter::REST::API::DirectMessages do
3
+ describe Twitter::REST::DirectMessages do
4
4
 
5
5
  before do
6
6
  @client = Twitter::REST::Client.new(:consumer_key => 'CK', :consumer_secret => 'CS', :access_token => 'AT', :access_token_secret => 'AS')
@@ -1,6 +1,6 @@
1
1
  require 'helper'
2
2
 
3
- describe Twitter::REST::API::Favorites do
3
+ describe Twitter::REST::Favorites do
4
4
 
5
5
  before do
6
6
  @client = Twitter::REST::Client.new(:consumer_key => 'CK', :consumer_secret => 'CS', :access_token => 'AT', :access_token_secret => 'AS')
@@ -1,6 +1,6 @@
1
1
  require 'helper'
2
2
 
3
- describe Twitter::REST::API::FriendsAndFollowers do
3
+ describe Twitter::REST::FriendsAndFollowers do
4
4
 
5
5
  before do
6
6
  @client = Twitter::REST::Client.new(:consumer_key => 'CK', :consumer_secret => 'CS', :access_token => 'AT', :access_token_secret => 'AS')
@@ -1,6 +1,6 @@
1
1
  require 'helper'
2
2
 
3
- describe Twitter::REST::API::PlacesAndGeo do
3
+ describe Twitter::REST::PlacesAndGeo do
4
4
 
5
5
  before do
6
6
  @client = Twitter::REST::Client.new(:consumer_key => 'CK', :consumer_secret => 'CS', :access_token => 'AT', :access_token_secret => 'AS')
@@ -1,6 +1,6 @@
1
1
  require 'helper'
2
2
 
3
- describe Twitter::REST::API::Help do
3
+ describe Twitter::REST::Help do
4
4
 
5
5
  before do
6
6
  @client = Twitter::REST::Client.new(:consumer_key => 'CK', :consumer_secret => 'CS', :access_token => 'AT', :access_token_secret => 'AS')
@@ -1,6 +1,6 @@
1
1
  require 'helper'
2
2
 
3
- describe Twitter::REST::API::Lists do
3
+ describe Twitter::REST::Lists do
4
4
 
5
5
  before do
6
6
  @client = Twitter::REST::Client.new(:consumer_key => 'CK', :consumer_secret => 'CS', :access_token => 'AT', :access_token_secret => 'AS')
@@ -1,6 +1,6 @@
1
1
  require 'helper'
2
2
 
3
- describe Twitter::REST::API::OAuth do
3
+ describe Twitter::REST::OAuth do
4
4
 
5
5
  before do
6
6
  @client = Twitter::REST::Client.new(:consumer_key => 'CK', :consumer_secret => 'CS')
@@ -8,17 +8,13 @@ describe Twitter::REST::API::OAuth do
8
8
 
9
9
  describe '#token' do
10
10
  before do
11
- # WebMock treats Basic Auth differently so we have to chack against the full URL with credentials.
11
+ # Faraday treats Basic Auth differently so we have to use the full URL with credentials
12
12
  @oauth2_token_url = 'https://CK:CS@api.twitter.com/oauth2/token'
13
- stub_request(:post, @oauth2_token_url).with(:body => 'grant_type=client_credentials').to_return(:body => fixture('bearer_token.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
13
+ stub_request(:post, @oauth2_token_url).with(:body => {'grant_type' => 'client_credentials'}).to_return(:body => fixture('bearer_token.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
14
14
  end
15
15
  it 'requests the correct resource' do
16
16
  @client.token
17
- expect(a_request(:post, @oauth2_token_url).with(:body => {:grant_type => 'client_credentials'})).to have_been_made
18
- end
19
- it 'requests with the correct headers' do
20
- @client.token
21
- expect(a_request(:post, @oauth2_token_url).with(:headers => {:content_type => 'application/x-www-form-urlencoded; charset=UTF-8', :accept => '*/*'})).to have_been_made
17
+ expect(a_request(:post, @oauth2_token_url).with(:body => {:grant_type => 'client_credentials'}, :headers => {:content_type => 'application/x-www-form-urlencoded; charset=UTF-8', :accept => '*/*'})).to have_been_made
22
18
  end
23
19
  it 'returns the bearer token' do
24
20
  bearer_token = @client.token
@@ -1,6 +1,6 @@
1
1
  require 'helper'
2
2
 
3
- describe Twitter::REST::API::SavedSearches do
3
+ describe Twitter::REST::SavedSearches do
4
4
 
5
5
  before do
6
6
  @client = Twitter::REST::Client.new(:consumer_key => 'CK', :consumer_secret => 'CS', :access_token => 'AT', :access_token_secret => 'AS')