twitter 6.1.0 → 6.2.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 (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