twitter 5.8.0 → 5.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +18 -0
  3. data/README.md +10 -36
  4. data/lib/twitter/base.rb +20 -3
  5. data/lib/twitter/basic_user.rb +6 -4
  6. data/lib/twitter/client.rb +2 -1
  7. data/lib/twitter/configuration.rb +1 -1
  8. data/lib/twitter/cursor.rb +1 -1
  9. data/lib/twitter/entities.rb +10 -6
  10. data/lib/twitter/enumerable.rb +2 -2
  11. data/lib/twitter/error.rb +7 -0
  12. data/lib/twitter/geo_results.rb +1 -1
  13. data/lib/twitter/list.rb +3 -2
  14. data/lib/twitter/media/photo.rb +1 -1
  15. data/lib/twitter/place.rb +13 -15
  16. data/lib/twitter/profile.rb +1 -1
  17. data/lib/twitter/profile_banner.rb +1 -1
  18. data/lib/twitter/rest/client.rb +17 -2
  19. data/lib/twitter/rest/friends_and_followers.rb +1 -1
  20. data/lib/twitter/rest/lists.rb +4 -2
  21. data/lib/twitter/rest/spam_reporting.rb +1 -1
  22. data/lib/twitter/rest/tweets.rb +17 -17
  23. data/lib/twitter/rest/users.rb +77 -13
  24. data/lib/twitter/rest/utils.rb +10 -6
  25. data/lib/twitter/search_results.rb +1 -1
  26. data/lib/twitter/settings.rb +4 -3
  27. data/lib/twitter/source_user.rb +3 -2
  28. data/lib/twitter/streaming/client.rb +7 -2
  29. data/lib/twitter/streaming/connection.rb +9 -2
  30. data/lib/twitter/streaming/response.rb +3 -3
  31. data/lib/twitter/suggestion.rb +1 -1
  32. data/lib/twitter/target_user.rb +1 -1
  33. data/lib/twitter/trend.rb +2 -1
  34. data/lib/twitter/trend_results.rb +1 -1
  35. data/lib/twitter/tweet.rb +4 -4
  36. data/lib/twitter/user.rb +60 -19
  37. data/lib/twitter/utils.rb +12 -5
  38. data/lib/twitter/version.rb +1 -1
  39. data/spec/fixtures/following.json +1 -1
  40. data/spec/fixtures/sferik.json +1 -1
  41. data/spec/helper.rb +14 -5
  42. data/spec/twitter/base_spec.rb +16 -4
  43. data/spec/twitter/direct_message_spec.rb +12 -13
  44. data/spec/twitter/entity/uri_spec.rb +2 -2
  45. data/spec/twitter/error_spec.rb +2 -2
  46. data/spec/twitter/media/photo_spec.rb +4 -4
  47. data/spec/twitter/oembed_spec.rb +3 -3
  48. data/spec/twitter/place_spec.rb +1 -1
  49. data/spec/twitter/rest/client_spec.rb +54 -14
  50. data/spec/twitter/rest/friends_and_followers_spec.rb +76 -76
  51. data/spec/twitter/rest/lists_spec.rb +85 -64
  52. data/spec/twitter/rest/timelines_spec.rb +2 -2
  53. data/spec/twitter/rest/tweets_spec.rb +20 -16
  54. data/spec/twitter/rest/undocumented_spec.rb +17 -17
  55. data/spec/twitter/rest/users_spec.rb +101 -17
  56. data/spec/twitter/streaming/client_spec.rb +1 -1
  57. data/spec/twitter/streaming/connection_spec.rb +32 -0
  58. data/spec/twitter/streaming/response_spec.rb +21 -0
  59. data/spec/twitter/trend_spec.rb +1 -1
  60. data/spec/twitter/tweet_spec.rb +14 -23
  61. data/spec/twitter/user_spec.rb +120 -13
  62. data/twitter.gemspec +3 -3
  63. metadata +8 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dc32f77074cfd5de637ffc365e447e495671a4f0
4
- data.tar.gz: 6e0db9a63563738038f8b7d4a01ab31ba8c26638
3
+ metadata.gz: 35ccffc8468f91442ccd9eeebff411dbebf92b0a
4
+ data.tar.gz: cca2da3dc5ddff38608dbd836c3d159e4477bbe2
5
5
  SHA512:
6
- metadata.gz: 6769ad63be7a42623f35a5038c85fccc9a3c9272b0f5466b6ab25fa572ab4c01bccb6c0587206a755287464c648731cd1d06ddba2b6cfb45139adf0821483f99
7
- data.tar.gz: 76fa19aae6030e3f114fe85e549d07bb33874477beea67372597a4305891a26084d08061944cb82096f174feadf6e2d86a815fc34f4447b5501f3259ab690603
6
+ metadata.gz: ef86cf848faf9325291bc7ab2405f925bbb9f187f53765d969b173cc5ec340b3252ced4ca6f5bd3257aec418414b8ebf98dc2c645bf5ae200148ac735f63463c
7
+ data.tar.gz: 81f7b4ae2818191008017355e69d1476413055b4e87f9a1c1953445aeacfc5e2267e3b255e6f403a4f41131b19f4268eaa8a058d5ba0648d735318040b7f5a60
@@ -1,3 +1,21 @@
1
+ 5.9.0
2
+ -----
3
+ * [Use expanded URIs when available](https://github.com/sferik/twitter/commit/f1d5d1f4c0ea75ebeaf9e7eb760b9efd245a5df2)
4
+ * [Deprecate `Twitter::REST::Client#middleware=` and `#connection_options`](https://github.com/sferik/twitter/commit/71b0a38670102841fda9642de586e6cb67d33083)
5
+ * [Ensure predicate methods return `false` for `Twitter::NullObject`](https://github.com/sferik/twitter/commit/f1b42bf82440f2dc0ba61761fc8f12460e20aadf)
6
+ * [Make `Twitter::Place#id` attribute accessible](https://github.com/sferik/twitter/commit/a4fa4739283a325886d44f97b2648e3b00f933b1)
7
+ * [Enable injection of custom TCP/SSL socket classes](https://github.com/sferik/twitter/commit/3629a1edfbc6b35099d4b0fc165b938a67c02d86) ([@neektza](https://twitter.com/neektza))
8
+ * [Deprecate predicate methods without question marks](https://github.com/sferik/twitter/commit/0305a8535357b6114be73e6b94744eed6b6d3bb5)
9
+ * [Deprecate `Twitter::Base#[]`](https://github.com/sferik/twitter/commit/2ab6c0d546b7c1d3635ac9c319fb5c2aa2514da0)
10
+ * [Remove statement that TweetStream is not 2.0.0-compatible](https://github.com/sferik/twitter/pull/553) ([@melaniegilman](https://twitter.com/melaniegilman))
11
+ * [Dont allow unacceptable IO objects in `Twitter::REST::Client#update_with_media`](https://github.com/sferik/twitter/commit/f22f1e2efd29200f157af041a470678cd4ef637a) ([@tim_linquist](https://twitter.com/tim_linquist))
12
+ * [Add support for new REST API endpoint for bulk lookup of Tweets by ID](https://github.com/sferik/twitter/commit/0d23c5ed65a7e7728cd096d611e5edeecdbc6e79)
13
+ * [Make the streaming API raise exceptions for status codes](https://github.com/sferik/twitter/commit/b571e03ed18cd63ec1d1a57c03e5744b284111d6) ([@eroberts](https://twitter.com/eroberts))
14
+ * [Call GET users/show if screen name has already been fetched](https://github.com/sferik/twitter/commit/0691a62ca5b43d33aa2f7b63aeb039d9155a24ed)
15
+ * [Add the ability to set user_agent and proxy](https://github.com/sferik/twitter/commit/e72185e1b0299221448650760b91c74ff1bec3e7)
16
+ * [Use (immutable) user ID instead of (mutable) screen name](https://github.com/sferik/twitter/commit/ceeccb08bbc7cc65c3e6eddaf408b236b8a98677)
17
+ * [Implement mute functionality](https://github.com/sferik/twitter/commit/dfe206cae5f2189ce2b5cd5db6307d5d5e8af4ef)
18
+
1
19
  5.8.0
2
20
  -----
3
21
  * [Alias `Twitter::Tweet#reply?` to `Twitter::Tweet#in_reply_to_user_id?`](https://github.com/sferik/twitter/commit/57147287d25e21a5e740ee69c3e9aeec6abd1b06)
data/README.md CHANGED
@@ -76,13 +76,10 @@ is now `access_token_secret` to conform to the terminology used in Twitter's
76
76
  developer documentation.
77
77
 
78
78
  ### Streaming (Experimental)
79
- This library now offers support for the [Twitter Streaming API][streaming]. We
80
- previously recommended using [TweetStream][] for this, however [TweetStream
81
- does not work on Ruby 2.0.0][bug].
79
+ This library now offers support for the [Twitter Streaming API][streaming].
82
80
 
83
81
  [streaming]: https://dev.twitter.com/docs/streaming-apis
84
82
  [tweetstream]: http://rubygems.org/gems/tweetstream
85
- [bug]: https://github.com/tweetstream/tweetstream/issues/117
86
83
 
87
84
  Site Streams are restricted to whitelisted accounts. To apply for access,
88
85
  [follow the steps in the Site Streams documentation][site-streams]. [User
@@ -92,10 +89,9 @@ Streams][user-streams] do not require prior approval.
92
89
  [user-streams]: https://dev.twitter.com/docs/streaming-apis/streams/user
93
90
 
94
91
  Unlike the rest of this library, this feature is not well tested and not
95
- recommended for production applications. That said, if you need to do Twitter
96
- streaming on Ruby 2.0.0, this is probably your best option. I've decided to
97
- ship it as an experimental feature and make it more robust over time. Patches
98
- in this area are particularly welcome.
92
+ recommended for production applications. I've decided to ship it as an
93
+ experimental feature and make it more robust over time. Patches in this area are
94
+ particularly welcome.
99
95
 
100
96
  Hopefully, by the time version 6 is released, this gem can fully replace
101
97
  [TweetStream][], [em-twitter][], [twitterstream][], and [twitter-stream].
@@ -153,12 +149,12 @@ end
153
149
  ```
154
150
 
155
151
  An `object` may be one of the following:
156
- * Twitter::DirectMessage
157
- * Twitter::Streaming::DeletedTweet
158
- * Twitter::Streaming::Event
159
- * Twitter::Streaming::FriendList
160
- * Twitter::Streaming::StallWarning
161
- * Twitter::Tweet
152
+ * `Twitter::DirectMessage`
153
+ * `Twitter::Streaming::DeletedTweet`
154
+ * `Twitter::Streaming::Event`
155
+ * `Twitter::Streaming::FriendList`
156
+ * `Twitter::Streaming::StallWarning`
157
+ * `Twitter::Tweet`
162
158
 
163
159
  ### Cursors
164
160
  The `Twitter::Cursor` class has been completely redesigned with a focus on
@@ -388,11 +384,6 @@ at the beginning:
388
384
  * `#saved_search_destroy` is now `#destroy_saved_search`
389
385
  * `#status_destroy` is now `#destroy_status`
390
386
 
391
- ### Errors
392
- The `Twitter::Error::ClientError` and `Twitter::Error::ServerError` class
393
- hierarchy has been removed. All errors now inherit directly from
394
- `Twitter::Error`.
395
-
396
387
  ### Null Objects
397
388
  In version 4, methods you would expect to return a `Twitter` object would
398
389
  return `nil` if that object was missing. This may have resulted in a
@@ -469,23 +460,6 @@ After configuration, requests can be made like so:
469
460
  client.update("I'm tweeting with @gem!")
470
461
  ```
471
462
 
472
- ### Middleware
473
- The Faraday middleware stack is fully configurable and is exposed as a
474
- `Faraday::RackBuilder` object. You can modify the default middleware in-place:
475
-
476
- ```ruby
477
- client.middleware.insert_after Twitter::Response::RaiseError, CustomMiddleware
478
- ```
479
-
480
- A custom adapter may be set as part of a custom middleware stack:
481
-
482
- ```ruby
483
- client.middleware = Faraday::RackBuilder.new do |faraday|
484
- # Specify a middleware stack here
485
- faraday.adapter :some_other_adapter
486
- end
487
- ```
488
-
489
463
  ## Usage Examples
490
464
  All examples require an authenticated Twitter client. See the section on <a
491
465
  href="#configuration">configuration</a>.
@@ -25,6 +25,13 @@ module Twitter
25
25
  end
26
26
  end
27
27
 
28
+ def predicate_attr_reader(*attrs)
29
+ attrs.each do |attr|
30
+ define_predicate_method(attr)
31
+ deprecate_attribute_method(attr)
32
+ end
33
+ end
34
+
28
35
  # Define object methods from attributes
29
36
  #
30
37
  # @param klass [Symbol]
@@ -59,8 +66,6 @@ module Twitter
59
66
  alias_method(:display_url?, :display_uri?)
60
67
  end
61
68
 
62
- private
63
-
64
69
  # Dynamically define a method for a URI
65
70
  #
66
71
  # @param key1 [Symbol]
@@ -93,13 +98,24 @@ module Twitter
93
98
  memoize(key1)
94
99
  end
95
100
 
101
+ # Dynamically define a method for an attribute
102
+ #
103
+ # @param key [Symbol]
104
+ def deprecate_attribute_method(key)
105
+ define_method(key) do ||
106
+ warn "#{Kernel.caller.first}: [DEPRECATION] ##{key} is deprecated. Use ##{key}? instead."
107
+ @attrs[key]
108
+ end
109
+ memoize(key)
110
+ end
111
+
96
112
  # Dynamically define a predicate method for an attribute
97
113
  #
98
114
  # @param key1 [Symbol]
99
115
  # @param key2 [Symbol]
100
116
  def define_predicate_method(key1, key2 = key1)
101
117
  define_method(:"#{key1}?") do ||
102
- !!@attrs[key2]
118
+ !@attrs[key2].nil? && @attrs[key2] != false
103
119
  end
104
120
  memoize(:"#{key1}?")
105
121
  end
@@ -117,6 +133,7 @@ module Twitter
117
133
  #
118
134
  # @param method [String, Symbol] Message to send to the object
119
135
  def [](method)
136
+ warn "#{Kernel.caller.first}: [DEPRECATION] #[#{method.inspect}] is deprecated. Use ##{method} to fetch the value."
120
137
  send(method.to_sym)
121
138
  rescue NoMethodError
122
139
  nil
@@ -1,10 +1,12 @@
1
1
  require 'twitter/identity'
2
+ require 'twitter/utils'
2
3
 
3
4
  module Twitter
4
5
  class BasicUser < Twitter::Identity
5
- attr_reader :following, :screen_name
6
- alias_method :handle, :screen_name
7
- alias_method :username, :screen_name
8
- alias_method :user_name, :screen_name
6
+ attr_reader :screen_name
7
+ deprecate_alias :handle, :screen_name
8
+ deprecate_alias :username, :screen_name
9
+ deprecate_alias :user_name, :screen_name
10
+ predicate_attr_reader :following
9
11
  end
10
12
  end
@@ -7,7 +7,8 @@ require 'twitter/version'
7
7
  module Twitter
8
8
  class Client
9
9
  include Twitter::Utils
10
- attr_accessor :access_token, :access_token_secret, :consumer_key, :consumer_secret
10
+ attr_accessor :access_token, :access_token_secret, :consumer_key, :consumer_secret, :proxy
11
+ attr_writer :user_agent
11
12
  deprecate_alias :oauth_token, :access_token
12
13
  deprecate_alias :oauth_token=, :access_token=
13
14
  deprecate_alias :oauth_token_secret, :access_token_secret
@@ -12,7 +12,7 @@ module Twitter
12
12
  #
13
13
  # @return [Array<Twitter::Size>]
14
14
  def photo_sizes
15
- Array(@attrs[:photo_sizes]).inject({}) do |object, (key, value)|
15
+ @attrs.fetch(:photo_sizes, []).inject({}) do |object, (key, value)|
16
16
  object[key] = Size.new(value)
17
17
  object
18
18
  end
@@ -51,7 +51,7 @@ module Twitter
51
51
  # @return [Hash]
52
52
  def attrs=(attrs)
53
53
  @attrs = attrs
54
- Array(attrs[@key]).each do |element|
54
+ @attrs.fetch(@key, []).each do |element|
55
55
  @collection << (@klass ? @klass.new(element) : element)
56
56
  end
57
57
  @attrs
@@ -11,7 +11,7 @@ module Twitter
11
11
 
12
12
  # @return [Boolean]
13
13
  def entities?
14
- !@attrs[:entities].nil? && @attrs[:entities].any? { |_, array| !array.empty? }
14
+ !@attrs[:entities].nil? && @attrs[:entities].any? { |_, array| array.any? }
15
15
  end
16
16
  memoize :entities?
17
17
 
@@ -26,6 +26,7 @@ module Twitter
26
26
  def hashtags?
27
27
  hashtags.any?
28
28
  end
29
+ memoize :hashtags?
29
30
 
30
31
  # @note Must include entities in your request for this method to work
31
32
  # @return [Array<Twitter::Media>]
@@ -38,6 +39,7 @@ module Twitter
38
39
  def media?
39
40
  media.any?
40
41
  end
42
+ memoize :media?
41
43
 
42
44
  # @note Must include entities in your request for this method to work
43
45
  # @return [Array<Twitter::Entity::Symbol>]
@@ -50,6 +52,7 @@ module Twitter
50
52
  def symbols?
51
53
  symbols.any?
52
54
  end
55
+ memoize :symbols?
53
56
 
54
57
  # @note Must include entities in your request for this method to work
55
58
  # @return [Array<Twitter::Entity::URI>]
@@ -76,19 +79,20 @@ module Twitter
76
79
  def user_mentions?
77
80
  user_mentions.any?
78
81
  end
82
+ memoize :user_mentions?
79
83
 
80
84
  private
81
85
 
82
86
  # @param klass [Class]
83
87
  # @param key [Symbol]
84
88
  def entities(klass, key)
85
- if !@attrs[:entities].nil?
86
- Array(@attrs[:entities][key.to_sym]).collect do |entity|
87
- klass.new(entity)
88
- end
89
- else
89
+ if @attrs[:entities].nil?
90
90
  warn "#{Kernel.caller.first}: To get #{key.to_s.tr('_', ' ')}, you must pass `:include_entities => true` when requesting the #{self.class}."
91
91
  []
92
+ else
93
+ @attrs[:entities].fetch(key.to_sym, []).collect do |entity|
94
+ klass.new(entity)
95
+ end
92
96
  end
93
97
  end
94
98
  end
@@ -3,7 +3,7 @@ module Twitter
3
3
  include ::Enumerable
4
4
 
5
5
  # @return [Enumerator]
6
- def each(start = 0, &block)
6
+ def each(start = 0)
7
7
  return to_enum(:each, start) unless block_given?
8
8
  Array(@collection[start..-1]).each do |element|
9
9
  yield(element)
@@ -11,7 +11,7 @@ module Twitter
11
11
  unless last?
12
12
  start = [@collection.size, start].max
13
13
  fetch_next_page
14
- each(start, &block)
14
+ each(start, &Proc.new)
15
15
  end
16
16
  self
17
17
  end
@@ -102,6 +102,13 @@ module Twitter
102
102
 
103
103
  class ConfigurationError < ::ArgumentError; end
104
104
 
105
+ # Raised when a Tweet includes media that doesn't have a to_io method
106
+ class UnacceptableIO < StandardError
107
+ def initialize
108
+ super('The IO object for media must respond to to_io')
109
+ end
110
+ end
111
+
105
112
  # Raised when Twitter returns a 4xx HTTP status code
106
113
  class ClientError < self; end
107
114
 
@@ -16,7 +16,7 @@ module Twitter
16
16
  # @return [Twitter::GeoResults]
17
17
  def initialize(attrs = {})
18
18
  @attrs = attrs
19
- @collection = Array(@attrs[:result][:places]).collect do |place|
19
+ @collection = @attrs[:result].fetch(:places, []).collect do |place|
20
20
  Place.new(place)
21
21
  end
22
22
  end
@@ -4,9 +4,10 @@ require 'twitter/identity'
4
4
  module Twitter
5
5
  class List < Twitter::Identity
6
6
  include Twitter::Creatable
7
- attr_reader :description, :following, :full_name, :member_count,
8
- :mode, :name, :slug, :subscriber_count
7
+ attr_reader :description, :full_name, :member_count, :mode, :name, :slug,
8
+ :subscriber_count
9
9
  object_attr_reader :User, :user
10
+ predicate_attr_reader :following
10
11
 
11
12
  # @return [Addressable::URI] The URI to the list members.
12
13
  def members_uri
@@ -11,7 +11,7 @@ module Twitter
11
11
  #
12
12
  # @return [Array<Twitter::Size>]
13
13
  def sizes
14
- Array(@attrs[:sizes]).inject({}) do |object, (key, value)|
14
+ @attrs.fetch(:sizes, []).inject({}) do |object, (key, value)|
15
15
  object[key] = Size.new(value)
16
16
  object
17
17
  end
@@ -1,26 +1,24 @@
1
1
  require 'equalizer'
2
- require 'twitter/base'
2
+ require 'twitter/identity'
3
3
 
4
4
  module Twitter
5
- class Place < Twitter::Base
6
- attr_reader :attributes, :country, :full_name, :name, :woeid
7
- alias_method :woe_id, :woeid
5
+ class Place < Twitter::Identity
6
+ attr_reader :attributes, :country, :full_name, :name
7
+ alias_method :woe_id, :id
8
+ alias_method :woeid, :id
8
9
  object_attr_reader :GeoFactory, :bounding_box
9
10
  object_attr_reader :Place, :contained_within
10
11
  alias_method :contained?, :contained_within?
11
12
  uri_attr_reader :uri
12
13
 
13
- # @param other [Twitter::Place]
14
- # @return [Boolean]
15
- def eql?(other)
16
- super || instance_of?(other.class) && !woeid.nil? && other.respond_to?(:woeid) && woeid.eql?(other.woeid)
17
- end
18
-
19
- # @param other [Twitter::Place]
20
- # @return [Boolean]
21
- def ==(other)
22
- other = coerce(other) if respond_to?(:coerce, true)
23
- super || kind_of?(self.class) && !woeid.nil? && other.respond_to?(:woeid) && woeid == other.woeid
14
+ # Initializes a new place
15
+ #
16
+ # @param attrs [Hash]
17
+ # @raise [ArgumentError] Error raised when supplied argument is missing an :id key.
18
+ # @return [Twitter::Identity]
19
+ def initialize(attrs = {})
20
+ attrs[:id] ||= attrs[:woeid]
21
+ super
24
22
  end
25
23
 
26
24
  # @return [String]
@@ -11,7 +11,7 @@ module Twitter
11
11
  private
12
12
 
13
13
  def alias_predicate_uri_methods(method)
14
- %w(_url? _uri_https? _url_https?).each do |replacement|
14
+ %w[_url? _uri_https? _url_https?].each do |replacement|
15
15
  alias_method_sub(method, PREDICATE_URI_METHOD_REGEX, replacement)
16
16
  end
17
17
  end
@@ -6,7 +6,7 @@ module Twitter
6
6
  #
7
7
  # @return [Array<Twitter::Size>]
8
8
  def sizes
9
- Array(@attrs[:sizes]).inject({}) do |object, (key, value)|
9
+ @attrs.fetch(:sizes, []).inject({}) do |object, (key, value)|
10
10
  object[key] = Size.new(value)
11
11
  object
12
12
  end
@@ -19,9 +19,16 @@ module Twitter
19
19
  class Client < Twitter::Client
20
20
  include Twitter::REST::API
21
21
  attr_accessor :bearer_token
22
- attr_writer :connection_options, :middleware
23
22
  ENDPOINT = 'https://api.twitter.com'
24
23
 
24
+ # @param connection_options [Hash]
25
+ # @return [Hash]
26
+ def connection_options=(connection_options)
27
+ warn "#{Kernel.caller.first}: [DEPRECATION] Twitter::REST::Client#connection_options= is deprecated and will be removed in version 6.0.0."
28
+ @connection_options = connection_options
29
+ end
30
+
31
+ # @return [Hash]
25
32
  def connection_options
26
33
  @connection_options ||= {
27
34
  :builder => middleware,
@@ -33,9 +40,17 @@ module Twitter
33
40
  :open_timeout => 10,
34
41
  :timeout => 30,
35
42
  },
43
+ :proxy => proxy
36
44
  }
37
45
  end
38
46
 
47
+ # @params middleware [Faraday::RackBuilder]
48
+ # @return [Faraday::RackBuilder]
49
+ def middleware=(middleware)
50
+ warn "#{Kernel.caller.first}: [DEPRECATION] Twitter::REST::Client#middleware= is deprecated and will be removed in version 6.0.0."
51
+ @middleware = middleware
52
+ end
53
+
39
54
  # @note Faraday's middleware stack implementation is comparable to that of Rack middleware. The order of middleware is important: the first middleware on the list wraps all others, while the last middleware is the innermost one.
40
55
  # @see https://github.com/technoweenie/faraday#advanced-middleware-usage
41
56
  # @see http://mislav.uniqpath.com/2011/07/faraday-advanced-http/
@@ -93,7 +108,7 @@ module Twitter
93
108
  rescue Faraday::Error::TimeoutError, Timeout::Error => error
94
109
  raise(Twitter::Error::RequestTimeout.new(error))
95
110
  rescue Faraday::Error::ClientError, JSON::ParserError => error
96
- fail(Twitter::Error.new(error))
111
+ raise(Twitter::Error.new(error))
97
112
  end
98
113
 
99
114
  def request_headers(method, path, params = {}, signature_params = params)