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.
- data.tar.gz.sig +0 -0
- data/.yardopts +1 -0
- data/CHANGELOG.md +8 -0
- data/README.md +3 -3
- data/Rakefile +1 -1
- data/lib/twitter/base.rb +0 -8
- data/lib/twitter/client.rb +2 -1
- data/lib/twitter/cursor.rb +2 -15
- data/lib/twitter/error.rb +90 -18
- data/lib/twitter/geo_results.rb +0 -10
- data/lib/twitter/request.rb +4 -4
- data/lib/twitter/rest/api.rb +43 -0
- data/lib/twitter/rest/client.rb +10 -44
- data/lib/twitter/rest/direct_messages.rb +138 -0
- data/lib/twitter/rest/favorites.rb +108 -0
- data/lib/twitter/rest/friends_and_followers.rb +281 -0
- data/lib/twitter/rest/help.rb +56 -0
- data/lib/twitter/rest/lists.rb +497 -0
- data/lib/twitter/rest/oauth.rb +65 -0
- data/lib/twitter/rest/places_and_geo.rb +84 -0
- data/lib/twitter/rest/request/multipart_with_file.rb +5 -5
- data/lib/twitter/rest/response/parse_json.rb +2 -4
- data/lib/twitter/rest/response/raise_error.rb +24 -15
- data/lib/twitter/rest/saved_searches.rb +93 -0
- data/lib/twitter/rest/search.rb +37 -0
- data/lib/twitter/rest/spam_reporting.rb +27 -0
- data/lib/twitter/rest/suggested_users.rb +49 -0
- data/lib/twitter/rest/timelines.rb +200 -0
- data/lib/twitter/rest/trends.rb +57 -0
- data/lib/twitter/rest/tweets.rb +309 -0
- data/lib/twitter/rest/undocumented.rb +49 -0
- data/lib/twitter/rest/users.rb +383 -0
- data/lib/twitter/rest/utils.rb +205 -0
- data/lib/twitter/search_results.rb +2 -13
- data/lib/twitter/trend_results.rb +0 -10
- data/lib/twitter/version.rb +1 -1
- data/spec/helper.rb +1 -1
- data/spec/twitter/error_spec.rb +26 -42
- data/spec/twitter/rest/{api/direct_messages_spec.rb → direct_messages_spec.rb} +1 -1
- data/spec/twitter/rest/{api/favorites_spec.rb → favorites_spec.rb} +1 -1
- data/spec/twitter/rest/{api/friends_and_followers_spec.rb → friends_and_followers_spec.rb} +1 -1
- data/spec/twitter/rest/{api/geo_spec.rb → geo_spec.rb} +1 -1
- data/spec/twitter/rest/{api/help_spec.rb → help_spec.rb} +1 -1
- data/spec/twitter/rest/{api/lists_spec.rb → lists_spec.rb} +1 -1
- data/spec/twitter/rest/{api/oauth_spec.rb → oauth_spec.rb} +4 -8
- data/spec/twitter/rest/{api/saved_searches_spec.rb → saved_searches_spec.rb} +1 -1
- data/spec/twitter/rest/{api/search_spec.rb → search_spec.rb} +1 -1
- data/spec/twitter/rest/{api/spam_reporting_spec.rb → spam_reporting_spec.rb} +1 -1
- data/spec/twitter/rest/{api/suggested_users_spec.rb → suggested_users_spec.rb} +1 -1
- data/spec/twitter/rest/{api/timelines_spec.rb → timelines_spec.rb} +1 -1
- data/spec/twitter/rest/{api/trends_spec.rb → trends_spec.rb} +1 -1
- data/spec/twitter/rest/{api/tweets_spec.rb → tweets_spec.rb} +74 -5
- data/spec/twitter/rest/{api/undocumented_spec.rb → undocumented_spec.rb} +1 -1
- data/spec/twitter/rest/{api/users_spec.rb → users_spec.rb} +5 -5
- data/spec/twitter/tweet_spec.rb +1 -1
- data/twitter.gemspec +0 -1
- metadata +247 -237
- metadata.gz.sig +0 -0
- checksums.yaml +0 -7
- checksums.yaml.gz.sig +0 -0
- data/lib/twitter/error/already_favorited.rb +0 -10
- data/lib/twitter/error/already_posted.rb +0 -10
- data/lib/twitter/error/already_retweeted.rb +0 -10
- data/lib/twitter/error/bad_gateway.rb +0 -10
- data/lib/twitter/error/bad_request.rb +0 -10
- data/lib/twitter/error/configuration_error.rb +0 -8
- data/lib/twitter/error/forbidden.rb +0 -10
- data/lib/twitter/error/gateway_timeout.rb +0 -10
- data/lib/twitter/error/internal_server_error.rb +0 -10
- data/lib/twitter/error/not_acceptable.rb +0 -10
- data/lib/twitter/error/not_found.rb +0 -10
- data/lib/twitter/error/request_timeout.rb +0 -10
- data/lib/twitter/error/service_unavailable.rb +0 -10
- data/lib/twitter/error/too_many_requests.rb +0 -12
- data/lib/twitter/error/unauthorized.rb +0 -10
- data/lib/twitter/error/unprocessable_entity.rb +0 -10
- data/lib/twitter/rest/api/direct_messages.rb +0 -140
- data/lib/twitter/rest/api/favorites.rb +0 -115
- data/lib/twitter/rest/api/friends_and_followers.rb +0 -284
- data/lib/twitter/rest/api/help.rb +0 -58
- data/lib/twitter/rest/api/lists.rb +0 -500
- data/lib/twitter/rest/api/oauth.rb +0 -67
- data/lib/twitter/rest/api/places_and_geo.rb +0 -86
- data/lib/twitter/rest/api/saved_searches.rb +0 -95
- data/lib/twitter/rest/api/search.rb +0 -39
- data/lib/twitter/rest/api/spam_reporting.rb +0 -29
- data/lib/twitter/rest/api/suggested_users.rb +0 -51
- data/lib/twitter/rest/api/timelines.rb +0 -202
- data/lib/twitter/rest/api/trends.rb +0 -58
- data/lib/twitter/rest/api/tweets.rb +0 -297
- data/lib/twitter/rest/api/undocumented.rb +0 -51
- data/lib/twitter/rest/api/users.rb +0 -383
- data/lib/twitter/rest/api/utils.rb +0 -212
data.tar.gz.sig
CHANGED
|
Binary file
|
data/.yardopts
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
5.7.0
|
|
2
|
+
-----
|
|
3
|
+
* [Remove `Twitter::Base.from_response` method](https://github.com/sferik/twitter/commit/6f9a352adaa5eee0611fa8d2e45fc7349b5cecae)
|
|
4
|
+
* [Remove `Twitter::REST::API` namespace](https://github.com/sferik/twitter/commit/f9c4e8214bfe0e4cbd13681a6454956f2c6ac21b)
|
|
5
|
+
* [Remove `descendants_tracker`](https://github.com/sferik/twitter/commit/4cbcb0fc58c55b84b642bc7c66085bb581e9b20a)
|
|
6
|
+
* [Remove unused `HTTP_STATUS_CODE` constants](https://github.com/sferik/twitter/commit/b45d89bc96f11079b31976f14ade4f89d50b4dc9)
|
|
7
|
+
* [Remove `Twitter::Error#cause`](https://github.com/sferik/twitter/commit/a5748b925aa3220e7388311bd0228a62d45d09a4)
|
|
8
|
+
|
|
1
9
|
5.6.0
|
|
2
10
|
-----
|
|
3
11
|
* [Replace custom `Twitter::NullObject` with `Naught`](https://github.com/sferik/twitter/commit/bc3990e3588f889569f1c92e465c329c508ce32e)
|
data/README.md
CHANGED
|
@@ -381,7 +381,7 @@ at the beginning:
|
|
|
381
381
|
* `#list_remove_members` is now `#remove_list_members`
|
|
382
382
|
* `#list_add_member` is now `#add_list_member`
|
|
383
383
|
* `#list_add_members` is now `#add_list_members`
|
|
384
|
-
* `#lists_owned` is now `#
|
|
384
|
+
* `#lists_owned` is now `#owned_lists`
|
|
385
385
|
* `#saved_search_create` is now `#create_saved_search`
|
|
386
386
|
* `#saved_search_destroy` is now `#destroy_saved_search`
|
|
387
387
|
* `#status_destroy` is now `#destroy_status`
|
|
@@ -547,10 +547,10 @@ client.mentions_timeline
|
|
|
547
547
|
```ruby
|
|
548
548
|
client.status(27558893223)
|
|
549
549
|
```
|
|
550
|
-
**Collect the
|
|
550
|
+
**Collect the three most recent marriage proposals to @justinbieber**
|
|
551
551
|
|
|
552
552
|
```ruby
|
|
553
|
-
client.search("to:justinbieber marry me", :
|
|
553
|
+
client.search("to:justinbieber marry me", :result_type => "recent").take(3).collect do |tweet|
|
|
554
554
|
"#{tweet.user.screen_name}: #{tweet.text}"
|
|
555
555
|
end
|
|
556
556
|
```
|
data/Rakefile
CHANGED
data/lib/twitter/base.rb
CHANGED
|
@@ -15,14 +15,6 @@ module Twitter
|
|
|
15
15
|
deprecate_alias :to_hsh, :to_h
|
|
16
16
|
|
|
17
17
|
class << self
|
|
18
|
-
# Construct an object from a response hash
|
|
19
|
-
#
|
|
20
|
-
# @param response [Hash]
|
|
21
|
-
# @return [Twitter::Base]
|
|
22
|
-
def from_response(response = {})
|
|
23
|
-
new(response[:body])
|
|
24
|
-
end
|
|
25
|
-
|
|
26
18
|
# Define methods that retrieve the value from attributes
|
|
27
19
|
#
|
|
28
20
|
# @param attrs [Array, Symbol]
|
data/lib/twitter/client.rb
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require 'addressable/uri'
|
|
2
2
|
require 'simple_oauth'
|
|
3
|
+
require 'twitter/error'
|
|
3
4
|
require 'twitter/utils'
|
|
4
5
|
require 'twitter/version'
|
|
5
6
|
|
|
@@ -59,7 +60,7 @@ module Twitter
|
|
|
59
60
|
def validate_credential_type!
|
|
60
61
|
credentials.each do |credential, value|
|
|
61
62
|
next if value.nil?
|
|
62
|
-
fail(Error::ConfigurationError.new("Invalid #{credential} specified: #{value.inspect} must be a string or symbol.")) unless value.is_a?(String) || value.is_a?(Symbol)
|
|
63
|
+
fail(Twitter::Error::ConfigurationError.new("Invalid #{credential} specified: #{value.inspect} must be a string or symbol.")) unless value.is_a?(String) || value.is_a?(Symbol)
|
|
63
64
|
end
|
|
64
65
|
end
|
|
65
66
|
|
data/lib/twitter/cursor.rb
CHANGED
|
@@ -10,19 +10,6 @@ module Twitter
|
|
|
10
10
|
deprecate_alias :to_hash, :to_h
|
|
11
11
|
deprecate_alias :to_hsh, :to_h
|
|
12
12
|
|
|
13
|
-
class << self
|
|
14
|
-
# Construct a new Cursor object from a response hash
|
|
15
|
-
#
|
|
16
|
-
# @param response [Hash]
|
|
17
|
-
# @param key [String, Symbol] The key to fetch the data from the response
|
|
18
|
-
# @param klass [Class] The class to instantiate objects in the response
|
|
19
|
-
# @param request [Twitter::Request]
|
|
20
|
-
# @return [Twitter::Cursor]
|
|
21
|
-
def from_response(response, key, klass, request)
|
|
22
|
-
new(response[:body], key, klass, request)
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
|
|
26
13
|
# Initializes a new Cursor
|
|
27
14
|
#
|
|
28
15
|
# @param attrs [Hash]
|
|
@@ -56,8 +43,8 @@ module Twitter
|
|
|
56
43
|
|
|
57
44
|
# @return [Hash]
|
|
58
45
|
def fetch_next_page
|
|
59
|
-
response = @client.send(@request_method, @path, @options.merge(:cursor => next_cursor))
|
|
60
|
-
self.attrs = response
|
|
46
|
+
response = @client.send(@request_method, @path, @options.merge(:cursor => next_cursor)).body
|
|
47
|
+
self.attrs = response
|
|
61
48
|
end
|
|
62
49
|
|
|
63
50
|
# @param attrs [Hash]
|
data/lib/twitter/error.rb
CHANGED
|
@@ -1,15 +1,12 @@
|
|
|
1
|
-
require 'descendants_tracker'
|
|
2
1
|
require 'twitter/rate_limit'
|
|
3
2
|
|
|
4
3
|
module Twitter
|
|
5
4
|
# Custom error class for rescuing from all Twitter errors
|
|
6
5
|
class Error < StandardError
|
|
7
|
-
|
|
8
|
-
attr_reader :cause, :code, :rate_limit
|
|
9
|
-
alias_method :wrapped_exception, :cause
|
|
6
|
+
attr_reader :code, :rate_limit
|
|
10
7
|
|
|
11
8
|
# If error code is missing see https://dev.twitter.com/docs/error-codes-responses
|
|
12
|
-
module
|
|
9
|
+
module Code
|
|
13
10
|
AUTHENTICATION_PROBLEM = 32
|
|
14
11
|
RESOURCE_NOT_FOUND = 34
|
|
15
12
|
SUSPENDED_ACCOUNT = 64
|
|
@@ -20,6 +17,7 @@ module Twitter
|
|
|
20
17
|
OVER_CAPACITY = 130
|
|
21
18
|
INTERNAL_ERROR = 131
|
|
22
19
|
OAUTH_TIMESTAMP_OUT_OF_RANGE = 135
|
|
20
|
+
ALREADY_FAVORITED = 139
|
|
23
21
|
FOLLOW_ALREADY_REQUESTED = 160
|
|
24
22
|
FOLLOW_LIMIT_EXCEEDED = 161
|
|
25
23
|
PROTECTED_STATUS = 179
|
|
@@ -29,23 +27,42 @@ module Twitter
|
|
|
29
27
|
LOGIN_VERIFICATION_NEEDED = 231
|
|
30
28
|
ENDPOINT_RETIRED = 251
|
|
31
29
|
end
|
|
30
|
+
Codes = Code # rubocop:disable ConstantName
|
|
32
31
|
|
|
33
32
|
class << self
|
|
34
33
|
# Create a new error from an HTTP response
|
|
35
34
|
#
|
|
36
|
-
# @param response [
|
|
35
|
+
# @param response [Faraday::Response]
|
|
37
36
|
# @return [Twitter::Error]
|
|
38
|
-
def from_response(response
|
|
39
|
-
|
|
40
|
-
new(
|
|
37
|
+
def from_response(response)
|
|
38
|
+
message, code = parse_error(response.body)
|
|
39
|
+
new(message, response.response_headers, code)
|
|
41
40
|
end
|
|
42
41
|
|
|
43
42
|
# @return [Hash]
|
|
44
43
|
def errors
|
|
45
|
-
@errors ||=
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
44
|
+
@errors ||= {
|
|
45
|
+
400 => Twitter::Error::BadRequest,
|
|
46
|
+
401 => Twitter::Error::Unauthorized,
|
|
47
|
+
403 => Twitter::Error::Forbidden,
|
|
48
|
+
404 => Twitter::Error::NotFound,
|
|
49
|
+
406 => Twitter::Error::NotAcceptable,
|
|
50
|
+
408 => Twitter::Error::RequestTimeout,
|
|
51
|
+
422 => Twitter::Error::UnprocessableEntity,
|
|
52
|
+
429 => Twitter::Error::TooManyRequests,
|
|
53
|
+
500 => Twitter::Error::InternalServerError,
|
|
54
|
+
502 => Twitter::Error::BadGateway,
|
|
55
|
+
503 => Twitter::Error::ServiceUnavailable,
|
|
56
|
+
504 => Twitter::Error::GatewayTimeout,
|
|
57
|
+
}
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def forbidden_messages
|
|
61
|
+
@forbidden_messages ||= {
|
|
62
|
+
'Status is a duplicate.' => Twitter::Error::DuplicateStatus,
|
|
63
|
+
'You have already favorited this status.' => Twitter::Error::AlreadyFavorited,
|
|
64
|
+
'sharing is not permissible for this status (Share validations failed)' => Twitter::Error::AlreadyRetweeted,
|
|
65
|
+
}
|
|
49
66
|
end
|
|
50
67
|
|
|
51
68
|
private
|
|
@@ -73,14 +90,69 @@ module Twitter
|
|
|
73
90
|
# Initializes a new Error object
|
|
74
91
|
#
|
|
75
92
|
# @param exception [Exception, String]
|
|
76
|
-
# @param
|
|
93
|
+
# @param rate_limit [Hash]
|
|
77
94
|
# @param code [Integer]
|
|
78
95
|
# @return [Twitter::Error]
|
|
79
|
-
def initialize(
|
|
80
|
-
|
|
81
|
-
@
|
|
96
|
+
def initialize(message = '', rate_limit = {}, code = nil)
|
|
97
|
+
super(message)
|
|
98
|
+
@rate_limit = Twitter::RateLimit.new(rate_limit)
|
|
82
99
|
@code = code
|
|
83
|
-
exception.respond_to?(:message) ? super(exception.message) : super(exception.to_s)
|
|
84
100
|
end
|
|
101
|
+
|
|
102
|
+
class ConfigurationError < ::ArgumentError; end
|
|
103
|
+
|
|
104
|
+
# Raised when Twitter returns a 4xx HTTP status code
|
|
105
|
+
class ClientError < self; end
|
|
106
|
+
|
|
107
|
+
# Raised when Twitter returns the HTTP status code 400
|
|
108
|
+
class BadRequest < ClientError; end
|
|
109
|
+
|
|
110
|
+
# Raised when Twitter returns the HTTP status code 401
|
|
111
|
+
class Unauthorized < ClientError; end
|
|
112
|
+
|
|
113
|
+
# Raised when Twitter returns the HTTP status code 403
|
|
114
|
+
class Forbidden < ClientError; end
|
|
115
|
+
|
|
116
|
+
# Raised when a Tweet has already been favorited
|
|
117
|
+
class AlreadyFavorited < Forbidden; end
|
|
118
|
+
|
|
119
|
+
# Raised when a Tweet has already been retweeted
|
|
120
|
+
class AlreadyRetweeted < Forbidden; end
|
|
121
|
+
|
|
122
|
+
# Raised when a Tweet has already been posted
|
|
123
|
+
class DuplicateStatus < Forbidden; end
|
|
124
|
+
AlreadyPosted = DuplicateStatus # rubocop:disable ConstantName
|
|
125
|
+
|
|
126
|
+
# Raised when Twitter returns the HTTP status code 404
|
|
127
|
+
class NotFound < ClientError; end
|
|
128
|
+
|
|
129
|
+
# Raised when Twitter returns the HTTP status code 406
|
|
130
|
+
class NotAcceptable < ClientError; end
|
|
131
|
+
|
|
132
|
+
# Raised when Twitter returns the HTTP status code 408
|
|
133
|
+
class RequestTimeout < ClientError; end
|
|
134
|
+
|
|
135
|
+
# Raised when Twitter returns the HTTP status code 422
|
|
136
|
+
class UnprocessableEntity < ClientError; end
|
|
137
|
+
|
|
138
|
+
# Raised when Twitter returns the HTTP status code 429
|
|
139
|
+
class TooManyRequests < ClientError; end
|
|
140
|
+
EnhanceYourCalm = TooManyRequests # rubocop:disable ConstantName
|
|
141
|
+
RateLimited = TooManyRequests # rubocop:disable ConstantName
|
|
142
|
+
|
|
143
|
+
# Raised when Twitter returns a 5xx HTTP status code
|
|
144
|
+
class ServerError < self; end
|
|
145
|
+
|
|
146
|
+
# Raised when Twitter returns the HTTP status code 500
|
|
147
|
+
class InternalServerError < ServerError; end
|
|
148
|
+
|
|
149
|
+
# Raised when Twitter returns the HTTP status code 502
|
|
150
|
+
class BadGateway < ServerError; end
|
|
151
|
+
|
|
152
|
+
# Raised when Twitter returns the HTTP status code 503
|
|
153
|
+
class ServiceUnavailable < ServerError; end
|
|
154
|
+
|
|
155
|
+
# Raised when Twitter returns the HTTP status code 504
|
|
156
|
+
class GatewayTimeout < ServerError; end
|
|
85
157
|
end
|
|
86
158
|
end
|
data/lib/twitter/geo_results.rb
CHANGED
|
@@ -10,16 +10,6 @@ module Twitter
|
|
|
10
10
|
deprecate_alias :to_hash, :to_h
|
|
11
11
|
deprecate_alias :to_hsh, :to_h
|
|
12
12
|
|
|
13
|
-
class << self
|
|
14
|
-
# Construct a new GeoResults object from a response hash
|
|
15
|
-
#
|
|
16
|
-
# @param response [Hash]
|
|
17
|
-
# @return [Twitter::Base]
|
|
18
|
-
def from_response(response = {})
|
|
19
|
-
new(response[:body])
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
13
|
# Initializes a new GeoResults object
|
|
24
14
|
#
|
|
25
15
|
# @param attrs [Hash]
|
data/lib/twitter/request.rb
CHANGED
|
@@ -19,27 +19,27 @@ module Twitter
|
|
|
19
19
|
|
|
20
20
|
# @return [Hash]
|
|
21
21
|
def perform
|
|
22
|
-
@client.send(@request_method, @path, @options)
|
|
22
|
+
@client.send(@request_method, @path, @options).body
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
# @param klass [Class]
|
|
26
26
|
# @param request [Twitter::Request]
|
|
27
27
|
# @return [Object]
|
|
28
28
|
def perform_with_object(klass)
|
|
29
|
-
klass.
|
|
29
|
+
klass.new(perform)
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
# @param collection_name [Symbol]
|
|
33
33
|
# @param klass [Class]
|
|
34
34
|
# @return [Twitter::Cursor]
|
|
35
35
|
def perform_with_cursor(collection_name, klass = nil)
|
|
36
|
-
Twitter::Cursor.
|
|
36
|
+
Twitter::Cursor.new(perform, collection_name.to_sym, klass, self)
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
# @param klass [Class]
|
|
40
40
|
# @return [Array]
|
|
41
41
|
def perform_with_objects(klass)
|
|
42
|
-
perform
|
|
42
|
+
perform.collect do |element|
|
|
43
43
|
klass.new(element)
|
|
44
44
|
end
|
|
45
45
|
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require 'twitter/rest/direct_messages'
|
|
2
|
+
require 'twitter/rest/favorites'
|
|
3
|
+
require 'twitter/rest/friends_and_followers'
|
|
4
|
+
require 'twitter/rest/help'
|
|
5
|
+
require 'twitter/rest/lists'
|
|
6
|
+
require 'twitter/rest/oauth'
|
|
7
|
+
require 'twitter/rest/places_and_geo'
|
|
8
|
+
require 'twitter/rest/saved_searches'
|
|
9
|
+
require 'twitter/rest/search'
|
|
10
|
+
require 'twitter/rest/spam_reporting'
|
|
11
|
+
require 'twitter/rest/suggested_users'
|
|
12
|
+
require 'twitter/rest/timelines'
|
|
13
|
+
require 'twitter/rest/trends'
|
|
14
|
+
require 'twitter/rest/tweets'
|
|
15
|
+
require 'twitter/rest/undocumented'
|
|
16
|
+
require 'twitter/rest/users'
|
|
17
|
+
|
|
18
|
+
module Twitter
|
|
19
|
+
module REST
|
|
20
|
+
module API
|
|
21
|
+
[
|
|
22
|
+
Twitter::REST::DirectMessages,
|
|
23
|
+
Twitter::REST::Favorites,
|
|
24
|
+
Twitter::REST::FriendsAndFollowers,
|
|
25
|
+
Twitter::REST::Help,
|
|
26
|
+
Twitter::REST::Lists,
|
|
27
|
+
Twitter::REST::OAuth,
|
|
28
|
+
Twitter::REST::PlacesAndGeo,
|
|
29
|
+
Twitter::REST::SavedSearches,
|
|
30
|
+
Twitter::REST::Search,
|
|
31
|
+
Twitter::REST::SpamReporting,
|
|
32
|
+
Twitter::REST::SuggestedUsers,
|
|
33
|
+
Twitter::REST::Timelines,
|
|
34
|
+
Twitter::REST::Trends,
|
|
35
|
+
Twitter::REST::Tweets,
|
|
36
|
+
Twitter::REST::Undocumented,
|
|
37
|
+
Twitter::REST::Users,
|
|
38
|
+
].each do |klass|
|
|
39
|
+
include klass
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
data/lib/twitter/rest/client.rb
CHANGED
|
@@ -5,24 +5,7 @@ require 'json'
|
|
|
5
5
|
require 'timeout'
|
|
6
6
|
require 'twitter/client'
|
|
7
7
|
require 'twitter/error'
|
|
8
|
-
require 'twitter/
|
|
9
|
-
require 'twitter/error/request_timeout'
|
|
10
|
-
require 'twitter/rest/api/direct_messages'
|
|
11
|
-
require 'twitter/rest/api/favorites'
|
|
12
|
-
require 'twitter/rest/api/friends_and_followers'
|
|
13
|
-
require 'twitter/rest/api/help'
|
|
14
|
-
require 'twitter/rest/api/lists'
|
|
15
|
-
require 'twitter/rest/api/oauth'
|
|
16
|
-
require 'twitter/rest/api/places_and_geo'
|
|
17
|
-
require 'twitter/rest/api/saved_searches'
|
|
18
|
-
require 'twitter/rest/api/search'
|
|
19
|
-
require 'twitter/rest/api/spam_reporting'
|
|
20
|
-
require 'twitter/rest/api/suggested_users'
|
|
21
|
-
require 'twitter/rest/api/timelines'
|
|
22
|
-
require 'twitter/rest/api/trends'
|
|
23
|
-
require 'twitter/rest/api/tweets'
|
|
24
|
-
require 'twitter/rest/api/undocumented'
|
|
25
|
-
require 'twitter/rest/api/users'
|
|
8
|
+
require 'twitter/rest/api'
|
|
26
9
|
require 'twitter/rest/request/multipart_with_file'
|
|
27
10
|
require 'twitter/rest/response/parse_json'
|
|
28
11
|
require 'twitter/rest/response/raise_error'
|
|
@@ -34,22 +17,7 @@ module Twitter
|
|
|
34
17
|
# @note All methods have been separated into modules and follow the same grouping used in {http://dev.twitter.com/doc the Twitter API Documentation}.
|
|
35
18
|
# @see http://dev.twitter.com/pages/every_developer
|
|
36
19
|
class Client < Twitter::Client
|
|
37
|
-
include Twitter::REST::API
|
|
38
|
-
include Twitter::REST::API::Favorites
|
|
39
|
-
include Twitter::REST::API::FriendsAndFollowers
|
|
40
|
-
include Twitter::REST::API::Help
|
|
41
|
-
include Twitter::REST::API::Lists
|
|
42
|
-
include Twitter::REST::API::OAuth
|
|
43
|
-
include Twitter::REST::API::PlacesAndGeo
|
|
44
|
-
include Twitter::REST::API::SavedSearches
|
|
45
|
-
include Twitter::REST::API::Search
|
|
46
|
-
include Twitter::REST::API::SpamReporting
|
|
47
|
-
include Twitter::REST::API::SuggestedUsers
|
|
48
|
-
include Twitter::REST::API::Timelines
|
|
49
|
-
include Twitter::REST::API::Trends
|
|
50
|
-
include Twitter::REST::API::Tweets
|
|
51
|
-
include Twitter::REST::API::Undocumented
|
|
52
|
-
include Twitter::REST::API::Users
|
|
20
|
+
include Twitter::REST::API
|
|
53
21
|
attr_accessor :bearer_token
|
|
54
22
|
attr_writer :connection_options, :middleware
|
|
55
23
|
ENDPOINT = 'https://api.twitter.com'
|
|
@@ -91,13 +59,14 @@ module Twitter
|
|
|
91
59
|
|
|
92
60
|
# Perform an HTTP GET request
|
|
93
61
|
def get(path, params = {})
|
|
94
|
-
|
|
62
|
+
headers = request_headers(:get, path, params)
|
|
63
|
+
request(:get, path, params, headers)
|
|
95
64
|
end
|
|
96
65
|
|
|
97
66
|
# Perform an HTTP POST request
|
|
98
67
|
def post(path, params = {})
|
|
99
|
-
|
|
100
|
-
request(:post, path, params,
|
|
68
|
+
headers = params.values.any? { |value| value.respond_to?(:to_io) } ? request_headers(:post, path, params, {}) : request_headers(:post, path, params)
|
|
69
|
+
request(:post, path, params, headers)
|
|
101
70
|
end
|
|
102
71
|
|
|
103
72
|
# @return [Boolean]
|
|
@@ -119,11 +88,8 @@ module Twitter
|
|
|
119
88
|
@connection ||= Faraday.new(ENDPOINT, connection_options)
|
|
120
89
|
end
|
|
121
90
|
|
|
122
|
-
def request(method, path, params = {},
|
|
123
|
-
|
|
124
|
-
request.headers.update(request_headers(method, path, params, signature_params))
|
|
125
|
-
end
|
|
126
|
-
response.env
|
|
91
|
+
def request(method, path, params = {}, headers = {})
|
|
92
|
+
connection.send(method.to_sym, path, params) { |request| request.headers.update(headers) }.env
|
|
127
93
|
rescue Faraday::Error::TimeoutError, Timeout::Error => error
|
|
128
94
|
raise(Twitter::Error::RequestTimeout.new(error))
|
|
129
95
|
rescue Faraday::Error::ClientError, JSON::ParserError => error
|
|
@@ -138,12 +104,12 @@ module Twitter
|
|
|
138
104
|
headers[:authorization] = bearer_token_credentials_auth_header
|
|
139
105
|
headers[:content_type] = 'application/x-www-form-urlencoded; charset=UTF-8'
|
|
140
106
|
else
|
|
141
|
-
headers[:authorization] =
|
|
107
|
+
headers[:authorization] = auth_header(method, path, params, signature_params)
|
|
142
108
|
end
|
|
143
109
|
headers
|
|
144
110
|
end
|
|
145
111
|
|
|
146
|
-
def
|
|
112
|
+
def auth_header(method, path, params = {}, signature_params = params)
|
|
147
113
|
if !user_token?
|
|
148
114
|
@bearer_token = token unless bearer_token?
|
|
149
115
|
bearer_auth_header
|