twitter 6.1.0 → 6.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +22 -15
  3. data/README.md +69 -394
  4. data/lib/twitter/base.rb +2 -16
  5. data/lib/twitter/basic_user.rb +0 -3
  6. data/lib/twitter/client.rb +5 -19
  7. data/lib/twitter/configuration.rb +3 -2
  8. data/lib/twitter/creatable.rb +1 -1
  9. data/lib/twitter/cursor.rb +0 -1
  10. data/lib/twitter/entity/uri.rb +0 -4
  11. data/lib/twitter/error.rb +81 -96
  12. data/lib/twitter/geo_results.rb +0 -1
  13. data/lib/twitter/headers.rb +11 -10
  14. data/lib/twitter/media/photo.rb +4 -0
  15. data/lib/twitter/media/video.rb +4 -1
  16. data/lib/twitter/media/video_info.rb +1 -1
  17. data/lib/twitter/null_object.rb +2 -2
  18. data/lib/twitter/profile.rb +3 -2
  19. data/lib/twitter/rate_limit.rb +1 -1
  20. data/lib/twitter/rest/api.rb +0 -2
  21. data/lib/twitter/rest/client.rb +0 -78
  22. data/lib/twitter/rest/direct_messages.rb +3 -3
  23. data/lib/twitter/rest/favorites.rb +25 -4
  24. data/lib/twitter/rest/friends_and_followers.rb +1 -3
  25. data/lib/twitter/rest/lists.rb +18 -29
  26. data/lib/twitter/rest/oauth.rb +15 -15
  27. data/lib/twitter/rest/request.rb +105 -16
  28. data/lib/twitter/rest/saved_searches.rb +0 -2
  29. data/lib/twitter/rest/search.rb +2 -0
  30. data/lib/twitter/rest/trends.rb +1 -0
  31. data/lib/twitter/rest/tweets.rb +80 -15
  32. data/lib/twitter/rest/undocumented.rb +3 -4
  33. data/lib/twitter/rest/users.rb +20 -34
  34. data/lib/twitter/rest/utils.rb +13 -20
  35. data/lib/twitter/search_results.rb +1 -2
  36. data/lib/twitter/streaming/client.rb +17 -23
  37. data/lib/twitter/streaming/connection.rb +23 -10
  38. data/lib/twitter/streaming/deleted_tweet.rb +0 -1
  39. data/lib/twitter/streaming/event.rb +6 -6
  40. data/lib/twitter/streaming/message_parser.rb +1 -1
  41. data/lib/twitter/streaming/response.rb +2 -2
  42. data/lib/twitter/trend_results.rb +1 -2
  43. data/lib/twitter/tweet.rb +1 -5
  44. data/lib/twitter/user.rb +0 -2
  45. data/lib/twitter/utils.rb +1 -16
  46. data/lib/twitter/version.rb +1 -1
  47. data/twitter.gemspec +13 -13
  48. metadata +35 -27
  49. data/lib/twitter/rest/media.rb +0 -30
  50. data/lib/twitter/rest/request/multipart_with_file.rb +0 -47
  51. data/lib/twitter/rest/response/parse_error_json.rb +0 -13
  52. data/lib/twitter/rest/response/parse_json.rb +0 -31
  53. data/lib/twitter/rest/response/raise_error.rb +0 -32
  54. data/lib/twitter/token.rb +0 -20
@@ -1,30 +0,0 @@
1
- require 'twitter/error'
2
- require 'twitter/headers'
3
- require 'twitter/rest/utils'
4
-
5
- module Twitter
6
- module REST
7
- module Media
8
- # Uploads media to attach to a tweet
9
- #
10
- # @see https://dev.twitter.com/rest/public/uploading-media-multiple-photos
11
- # @rate_limited No
12
- # @authentication Requires user context
13
- # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid.
14
- # @raise [Twitter::Error::UnacceptableIO] Error when the IO object for the media argument does not have a to_io method.
15
- # @return [Integer] The uploaded media ID.
16
- # @param media [File, Hash] A File object with your picture (PNG, JPEG or GIF)
17
- # @param options [Hash] A customizable set of options.
18
- def upload(media, options = {})
19
- raise(Twitter::Error::UnacceptableIO.new) unless media.respond_to?(:to_io)
20
- base_url = 'https://upload.twitter.com'
21
- path = '/1.1/media/upload.json'
22
- conn = connection.dup
23
- conn.url_prefix = base_url
24
- headers = Twitter::Headers.new(self, :post, base_url + path, options).request_headers
25
- options[:media] = media
26
- conn.post(path, options) { |request| request.headers.update(headers) }.env.body[:media_id]
27
- end
28
- end
29
- end
30
- end
@@ -1,47 +0,0 @@
1
- require 'faraday'
2
-
3
- module Twitter
4
- module REST
5
- class Request
6
- class MultipartWithFile < Faraday::Middleware
7
- CONTENT_TYPE = 'Content-Type'.freeze
8
- BMP_REGEX = /\.bmp/i
9
- GIF_REGEX = /\.gif$/i
10
- JPEG_REGEX = /\.jpe?g/i
11
- PNG_REGEX = /\.png$/i
12
- WEBP_REGEX = /\.webp/i
13
-
14
- def call(request)
15
- if request.body.is_a?(::Hash)
16
- request.body.each do |key, value|
17
- next unless value.respond_to?(:to_io)
18
- request.body[key] = Faraday::UploadIO.new(value, mime_type(value.path), value.path)
19
- end
20
- end
21
- @app.call(request)
22
- end
23
-
24
- private
25
-
26
- def mime_type(path)
27
- case path
28
- when BMP_REGEX
29
- 'image/bmp'
30
- when GIF_REGEX
31
- 'image/gif'
32
- when JPEG_REGEX
33
- 'image/jpeg'
34
- when PNG_REGEX
35
- 'image/png'
36
- when WEBP_REGEX
37
- 'image/webp'
38
- else
39
- 'application/octet-stream'
40
- end
41
- end
42
- end
43
- end
44
- end
45
- end
46
-
47
- Faraday::Request.register_middleware twitter_multipart_with_file: Twitter::REST::Request::MultipartWithFile
@@ -1,13 +0,0 @@
1
- require 'twitter/rest/response/parse_json'
2
-
3
- module Twitter
4
- module REST
5
- module Response
6
- class ParseErrorJson < Twitter::REST::Response::ParseJson
7
- def unparsable_status_codes
8
- super + [200]
9
- end
10
- end
11
- end
12
- end
13
- end
@@ -1,31 +0,0 @@
1
- require 'faraday'
2
- require 'json'
3
-
4
- module Twitter
5
- module REST
6
- module Response
7
- class ParseJson < Faraday::Response::Middleware
8
- WHITESPACE_REGEX = /\A^\s*$\z/
9
-
10
- def parse(body)
11
- case body
12
- when WHITESPACE_REGEX, nil
13
- nil
14
- else
15
- JSON.parse(body, symbolize_names: true)
16
- end
17
- end
18
-
19
- def on_complete(response)
20
- response.body = parse(response.body) if respond_to?(:parse) && !unparsable_status_codes.include?(response.status)
21
- end
22
-
23
- def unparsable_status_codes
24
- [204, 301, 302, 304]
25
- end
26
- end
27
- end
28
- end
29
- end
30
-
31
- Faraday::Response.register_middleware twitter_parse_json: Twitter::REST::Response::ParseJson
@@ -1,32 +0,0 @@
1
- require 'faraday'
2
- require 'twitter/error'
3
-
4
- module Twitter
5
- module REST
6
- module Response
7
- class RaiseError < Faraday::Response::Middleware
8
- def on_complete(response)
9
- status_code = response.status.to_i
10
- klass = Twitter::Error.errors[status_code]
11
- return unless klass
12
- raise(handle_forbidden_errors(response)) if klass == Twitter::Error::Forbidden
13
- raise(klass.from_response(response))
14
- end
15
-
16
- private
17
-
18
- def handle_forbidden_errors(response)
19
- error = Twitter::Error::Forbidden.from_response(response)
20
- klass = Twitter::Error.forbidden_messages[error.message]
21
- if klass
22
- klass.from_response(response)
23
- else
24
- error
25
- end
26
- end
27
- end
28
- end
29
- end
30
- end
31
-
32
- Faraday::Response.register_middleware twitter_raise_error: Twitter::REST::Response::RaiseError
@@ -1,20 +0,0 @@
1
- require 'memoizable'
2
- require 'twitter/base'
3
-
4
- module Twitter
5
- class Token < Twitter::Base
6
- include Memoizable
7
-
8
- # @return [String]
9
- attr_reader :access_token, :token_type
10
- alias to_s access_token
11
-
12
- BEARER_TYPE = 'bearer'.freeze
13
-
14
- # @return [Boolean]
15
- def bearer?
16
- @attrs[:token_type] == BEARER_TYPE
17
- end
18
- memoize :bearer?
19
- end
20
- end