twitter 5.5.1 → 5.6.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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/CHANGELOG.md +12 -0
- data/README.md +8 -10
- data/lib/twitter/base.rb +4 -2
- data/lib/twitter/client.rb +7 -5
- data/lib/twitter/configuration.rb +1 -1
- data/lib/twitter/cursor.rb +18 -17
- data/lib/twitter/entities.rb +27 -1
- data/lib/twitter/error.rb +1 -1
- data/lib/twitter/error/request_timeout.rb +10 -0
- data/lib/twitter/geo_results.rb +5 -3
- data/lib/twitter/media/photo.rb +1 -1
- data/lib/twitter/null_object.rb +8 -20
- data/lib/twitter/profile_banner.rb +1 -1
- data/lib/twitter/request.rb +47 -0
- data/lib/twitter/rest/api/direct_messages.rb +7 -5
- data/lib/twitter/rest/api/favorites.rb +7 -7
- data/lib/twitter/rest/api/friends_and_followers.rb +11 -9
- data/lib/twitter/rest/api/help.rb +4 -3
- data/lib/twitter/rest/api/lists.rb +9 -7
- data/lib/twitter/rest/api/oauth.rb +11 -5
- data/lib/twitter/rest/api/places_and_geo.rb +6 -5
- data/lib/twitter/rest/api/saved_searches.rb +8 -6
- data/lib/twitter/rest/api/search.rb +4 -10
- data/lib/twitter/rest/api/spam_reporting.rb +1 -0
- data/lib/twitter/rest/api/suggested_users.rb +4 -3
- data/lib/twitter/rest/api/timelines.rb +5 -4
- data/lib/twitter/rest/api/trends.rb +5 -4
- data/lib/twitter/rest/api/tweets.rb +19 -24
- data/lib/twitter/rest/api/users.rb +17 -16
- data/lib/twitter/rest/api/utils.rb +45 -73
- data/lib/twitter/rest/client.rb +34 -34
- data/lib/twitter/rest/request/multipart_with_file.rb +2 -0
- data/lib/twitter/rest/response/parse_json.rb +2 -0
- data/lib/twitter/rest/response/raise_error.rb +2 -0
- data/lib/twitter/search_results.rb +28 -60
- data/lib/twitter/streaming/client.rb +4 -4
- data/lib/twitter/suggestion.rb +1 -1
- data/lib/twitter/trend_results.rb +6 -4
- data/lib/twitter/tweet.rb +3 -3
- data/lib/twitter/user.rb +1 -1
- data/lib/twitter/utils.rb +18 -3
- data/lib/twitter/version.rb +2 -2
- data/spec/helper.rb +1 -1
- data/spec/twitter/error_spec.rb +1 -1
- data/spec/twitter/geo_factory_spec.rb +1 -1
- data/spec/twitter/identifiable_spec.rb +1 -1
- data/spec/twitter/media_factory_spec.rb +1 -1
- data/spec/twitter/rest/api/favorites_spec.rb +2 -2
- data/spec/twitter/rest/api/tweets_spec.rb +4 -4
- data/spec/twitter/rest/client_spec.rb +13 -25
- data/spec/twitter/tweet_spec.rb +69 -0
- data/twitter.gemspec +2 -1
- metadata +23 -15
- metadata.gz.sig +0 -0
- data/spec/twitter/null_object_spec.rb +0 -90
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dda8dd395f86366d6a6afb036d588f96fee8d48a
|
4
|
+
data.tar.gz: 2d90bbbeef08919eea3c8274800a9086eb72fab1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1c5cdf8e00944217c80803067e3dc46b547a448943b1ffab6fd7636bfb2e039b18e791e487865fd1d86d97b14abab7537407e9ccffb385c30996748cdf93bc6f
|
7
|
+
data.tar.gz: 0d20f6820ee2d37ae35a28ede0123fb7a27ef090217cbff427e4df86f447323b63c013017a08b55a6c955a36050cbef185bda2df902f45ab778dc3d9bd080cc2
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
5.6.0
|
2
|
+
-----
|
3
|
+
* [Replace custom `Twitter::NullObject` with `Naught`](https://github.com/sferik/twitter/commit/bc3990e3588f889569f1c92e465c329c508ce32e)
|
4
|
+
* [Use `URI` and `CGI` to convert query string into a hash](https://github.com/sferik/twitter/commit/6dd9d97aaef3917868b870e01896ab937cbacfbb)
|
5
|
+
* [Increase default timeout values](https://github.com/sferik/twitter/commit/350536926d1c2c0656fdc79948c5f543e306e14e)
|
6
|
+
* [Add `Twitter::Error::RequestTimeout`](https://github.com/sferik/twitter/commit/3179537af41b2e2f85c0bc74be799faea0817e48)
|
7
|
+
* [Remove unused methods `#put` and `#delete` in `Twitter::REST::Client`](https://github.com/sferik/twitter/commit/eaaf234b84a6e2e1f7695f73befaf11f30664f4a)
|
8
|
+
* [Deprecate `retweeters_count` in favor of `retweet_count`](https://github.com/sferik/twitter/commit/ea39bd013364dc24f02e9a1eb25b4b48b99a5480)
|
9
|
+
* [Deprecate `favorites_count`/`favoriters_count` in favor of `favorite_count`](https://github.com/sferik/twitter/commit/ea39bd013364dc24f02e9a1eb25b4b48b99a5480)
|
10
|
+
* [Deprecate `to_hash`/`to_hsh` in favor of `to_h` or `attrs`](https://github.com/sferik/twitter/commit/63e2cdd693aece2912564988d06786cd23a2cad5)
|
11
|
+
* [Deprecate `oauth_token` and `oauth_token_secret` accessors](https://github.com/sferik/twitter/commit/ac246717557ea02565a1d93b3f9a975e7fd39874)
|
12
|
+
|
1
13
|
5.5.1
|
2
14
|
-----
|
3
15
|
* [Fix bug where `Twitter::Error::AlreadyFavorited` would never be raised](https://github.com/sferik/twitter/issues/512) ([@polestarw](https://twitter.com/polestarw))
|
data/README.md
CHANGED
@@ -5,14 +5,14 @@
|
|
5
5
|
[][gemnasium]
|
6
6
|
[][codeclimate]
|
7
7
|
[][coveralls]
|
8
|
-
[][gittip]
|
9
9
|
|
10
10
|
[gem]: https://rubygems.org/gems/twitter
|
11
11
|
[travis]: http://travis-ci.org/sferik/twitter
|
12
12
|
[gemnasium]: https://gemnasium.com/sferik/twitter
|
13
13
|
[codeclimate]: https://codeclimate.com/github/sferik/twitter
|
14
14
|
[coveralls]: https://coveralls.io/r/sferik/twitter
|
15
|
-
[gittip]: https://www.gittip.com/
|
15
|
+
[gittip]: https://www.gittip.com/gems/
|
16
16
|
|
17
17
|
A Ruby interface to the Twitter API.
|
18
18
|
|
@@ -469,7 +469,7 @@ client.update("I'm tweeting with @gem!")
|
|
469
469
|
|
470
470
|
### Middleware
|
471
471
|
The Faraday middleware stack is fully configurable and is exposed as a
|
472
|
-
`Faraday::
|
472
|
+
`Faraday::RackBuilder` object. You can modify the default middleware in-place:
|
473
473
|
|
474
474
|
```ruby
|
475
475
|
client.middleware.insert_after Twitter::Response::RaiseError, CustomMiddleware
|
@@ -478,12 +478,10 @@ client.middleware.insert_after Twitter::Response::RaiseError, CustomMiddleware
|
|
478
478
|
A custom adapter may be set as part of a custom middleware stack:
|
479
479
|
|
480
480
|
```ruby
|
481
|
-
client.middleware = Faraday::
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
end
|
486
|
-
)
|
481
|
+
client.middleware = Faraday::RackBuilder.new do |faraday|
|
482
|
+
# Specify a middleware stack here
|
483
|
+
faraday.adapter :some_other_adapter
|
484
|
+
end
|
487
485
|
```
|
488
486
|
|
489
487
|
## Usage Examples
|
@@ -552,7 +550,7 @@ client.status(27558893223)
|
|
552
550
|
**Collect the 3 most recent marriage proposals to @justinbieber**
|
553
551
|
|
554
552
|
```ruby
|
555
|
-
client.search("to:justinbieber marry me", :count => 3, :result_type => "recent").collect do |tweet|
|
553
|
+
client.search("to:justinbieber marry me", :count => 3, :result_type => "recent").take(3).collect do |tweet|
|
556
554
|
"#{tweet.user.screen_name}: #{tweet.text}"
|
557
555
|
end
|
558
556
|
```
|
data/lib/twitter/base.rb
CHANGED
@@ -2,15 +2,17 @@ require 'addressable/uri'
|
|
2
2
|
require 'forwardable'
|
3
3
|
require 'memoizable'
|
4
4
|
require 'twitter/null_object'
|
5
|
+
require 'twitter/utils'
|
5
6
|
|
6
7
|
module Twitter
|
7
8
|
class Base
|
8
9
|
extend Forwardable
|
9
10
|
include Memoizable
|
11
|
+
include Twitter::Utils
|
10
12
|
attr_reader :attrs
|
11
13
|
alias_method :to_h, :attrs
|
12
|
-
|
13
|
-
|
14
|
+
deprecate_alias :to_hash, :to_h
|
15
|
+
deprecate_alias :to_hsh, :to_h
|
14
16
|
|
15
17
|
class << self
|
16
18
|
# Construct an object from a response hash
|
data/lib/twitter/client.rb
CHANGED
@@ -1,14 +1,16 @@
|
|
1
1
|
require 'addressable/uri'
|
2
2
|
require 'simple_oauth'
|
3
|
+
require 'twitter/utils'
|
3
4
|
require 'twitter/version'
|
4
5
|
|
5
6
|
module Twitter
|
6
7
|
class Client
|
8
|
+
include Twitter::Utils
|
7
9
|
attr_accessor :access_token, :access_token_secret, :consumer_key, :consumer_secret
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
deprecate_alias :oauth_token, :access_token
|
11
|
+
deprecate_alias :oauth_token=, :access_token=
|
12
|
+
deprecate_alias :oauth_token_secret, :access_token_secret
|
13
|
+
deprecate_alias :oauth_token_secret=, :access_token_secret=
|
12
14
|
|
13
15
|
# Initializes a new Client object
|
14
16
|
#
|
@@ -57,7 +59,7 @@ module Twitter
|
|
57
59
|
def validate_credential_type!
|
58
60
|
credentials.each do |credential, value|
|
59
61
|
next if value.nil?
|
60
|
-
fail(Error::ConfigurationError
|
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)
|
61
63
|
end
|
62
64
|
end
|
63
65
|
|
@@ -12,7 +12,7 @@ module Twitter
|
|
12
12
|
#
|
13
13
|
# @return [Array<Twitter::Size>]
|
14
14
|
def photo_sizes
|
15
|
-
Array(@attrs[:photo_sizes]).
|
15
|
+
Array(@attrs[:photo_sizes]).inject({}) do |object, (key, value)|
|
16
16
|
object[key] = Size.new(value)
|
17
17
|
object
|
18
18
|
end
|
data/lib/twitter/cursor.rb
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
require 'twitter/enumerable'
|
2
|
+
require 'twitter/utils'
|
2
3
|
|
3
4
|
module Twitter
|
4
5
|
class Cursor
|
5
6
|
include Twitter::Enumerable
|
7
|
+
include Twitter::Utils
|
6
8
|
attr_reader :attrs
|
7
9
|
alias_method :to_h, :attrs
|
8
|
-
|
9
|
-
|
10
|
+
deprecate_alias :to_hash, :to_h
|
11
|
+
deprecate_alias :to_hsh, :to_h
|
10
12
|
|
11
13
|
class << self
|
12
14
|
# Construct a new Cursor object from a response hash
|
@@ -14,13 +16,10 @@ module Twitter
|
|
14
16
|
# @param response [Hash]
|
15
17
|
# @param key [String, Symbol] The key to fetch the data from the response
|
16
18
|
# @param klass [Class] The class to instantiate objects in the response
|
17
|
-
# @param
|
18
|
-
# @param request_method [String, Symbol]
|
19
|
-
# @param path [String]
|
20
|
-
# @param options [Hash]
|
19
|
+
# @param request [Twitter::Request]
|
21
20
|
# @return [Twitter::Cursor]
|
22
|
-
def from_response(response, key, klass,
|
23
|
-
new(response[:body], key, klass,
|
21
|
+
def from_response(response, key, klass, request)
|
22
|
+
new(response[:body], key, klass, request)
|
24
23
|
end
|
25
24
|
end
|
26
25
|
|
@@ -29,24 +28,22 @@ module Twitter
|
|
29
28
|
# @param attrs [Hash]
|
30
29
|
# @param key [String, Symbol] The key to fetch the data from the response
|
31
30
|
# @param klass [Class] The class to instantiate objects in the response
|
32
|
-
# @param
|
33
|
-
# @param request_method [String, Symbol]
|
34
|
-
# @param path [String]
|
35
|
-
# @param options [Hash]
|
31
|
+
# @param request [Twitter::Request]
|
36
32
|
# @return [Twitter::Cursor]
|
37
|
-
def initialize(attrs, key, klass,
|
33
|
+
def initialize(attrs, key, klass, request)
|
38
34
|
@key = key.to_sym
|
39
35
|
@klass = klass
|
40
|
-
@client = client
|
41
|
-
@request_method =
|
42
|
-
@path = path
|
43
|
-
@options = options
|
36
|
+
@client = request.client
|
37
|
+
@request_method = request.verb
|
38
|
+
@path = request.path
|
39
|
+
@options = request.options
|
44
40
|
@collection = []
|
45
41
|
self.attrs = attrs
|
46
42
|
end
|
47
43
|
|
48
44
|
private
|
49
45
|
|
46
|
+
# @return [Integer]
|
50
47
|
def next_cursor
|
51
48
|
@attrs[:next_cursor] || -1
|
52
49
|
end
|
@@ -57,16 +54,20 @@ module Twitter
|
|
57
54
|
next_cursor.zero?
|
58
55
|
end
|
59
56
|
|
57
|
+
# @return [Hash]
|
60
58
|
def fetch_next_page
|
61
59
|
response = @client.send(@request_method, @path, @options.merge(:cursor => next_cursor))
|
62
60
|
self.attrs = response[:body]
|
63
61
|
end
|
64
62
|
|
63
|
+
# @param attrs [Hash]
|
64
|
+
# @return [Hash]
|
65
65
|
def attrs=(attrs)
|
66
66
|
@attrs = attrs
|
67
67
|
Array(attrs[@key]).each do |element|
|
68
68
|
@collection << (@klass ? @klass.new(element) : element)
|
69
69
|
end
|
70
|
+
@attrs
|
70
71
|
end
|
71
72
|
end
|
72
73
|
end
|
data/lib/twitter/entities.rb
CHANGED
@@ -22,6 +22,11 @@ module Twitter
|
|
22
22
|
end
|
23
23
|
memoize :hashtags
|
24
24
|
|
25
|
+
# @return [Boolean]
|
26
|
+
def hashtags?
|
27
|
+
hashtags.any?
|
28
|
+
end
|
29
|
+
|
25
30
|
# @note Must include entities in your request for this method to work
|
26
31
|
# @return [Array<Twitter::Media>]
|
27
32
|
def media
|
@@ -29,6 +34,11 @@ module Twitter
|
|
29
34
|
end
|
30
35
|
memoize :media
|
31
36
|
|
37
|
+
# @return [Boolean]
|
38
|
+
def media?
|
39
|
+
media.any?
|
40
|
+
end
|
41
|
+
|
32
42
|
# @note Must include entities in your request for this method to work
|
33
43
|
# @return [Array<Twitter::Entity::Symbol>]
|
34
44
|
def symbols
|
@@ -36,6 +46,11 @@ module Twitter
|
|
36
46
|
end
|
37
47
|
memoize :symbols
|
38
48
|
|
49
|
+
# @return [Boolean]
|
50
|
+
def symbols?
|
51
|
+
symbols.any?
|
52
|
+
end
|
53
|
+
|
39
54
|
# @note Must include entities in your request for this method to work
|
40
55
|
# @return [Array<Twitter::Entity::URI>]
|
41
56
|
def uris
|
@@ -44,6 +59,12 @@ module Twitter
|
|
44
59
|
memoize :uris
|
45
60
|
alias_method :urls, :uris
|
46
61
|
|
62
|
+
# @return [Boolean]
|
63
|
+
def uris?
|
64
|
+
uris.any?
|
65
|
+
end
|
66
|
+
alias_method :urls?, :uris?
|
67
|
+
|
47
68
|
# @note Must include entities in your request for this method to work
|
48
69
|
# @return [Array<Twitter::Entity::UserMention>]
|
49
70
|
def user_mentions
|
@@ -51,13 +72,18 @@ module Twitter
|
|
51
72
|
end
|
52
73
|
memoize :user_mentions
|
53
74
|
|
75
|
+
# @return [Boolean]
|
76
|
+
def user_mentions?
|
77
|
+
user_mentions.any?
|
78
|
+
end
|
79
|
+
|
54
80
|
private
|
55
81
|
|
56
82
|
# @param klass [Class]
|
57
83
|
# @param key [Symbol]
|
58
84
|
def entities(klass, key)
|
59
85
|
if entities?
|
60
|
-
Array(@attrs[:entities][key.to_sym]).
|
86
|
+
Array(@attrs[:entities][key.to_sym]).collect do |entity|
|
61
87
|
klass.new(entity)
|
62
88
|
end
|
63
89
|
else
|
data/lib/twitter/error.rb
CHANGED
data/lib/twitter/geo_results.rb
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
require 'twitter/enumerable'
|
2
|
+
require 'twitter/utils'
|
2
3
|
|
3
4
|
module Twitter
|
4
5
|
class GeoResults
|
5
6
|
include Twitter::Enumerable
|
7
|
+
include Twitter::Utils
|
6
8
|
attr_reader :attrs
|
7
9
|
alias_method :to_h, :attrs
|
8
|
-
|
9
|
-
|
10
|
+
deprecate_alias :to_hash, :to_h
|
11
|
+
deprecate_alias :to_hsh, :to_h
|
10
12
|
|
11
13
|
class << self
|
12
14
|
# Construct a new GeoResults object from a response hash
|
@@ -24,7 +26,7 @@ module Twitter
|
|
24
26
|
# @return [Twitter::GeoResults]
|
25
27
|
def initialize(attrs = {})
|
26
28
|
@attrs = attrs
|
27
|
-
@collection = Array(@attrs[:result][:places]).
|
29
|
+
@collection = Array(@attrs[:result][:places]).collect do |place|
|
28
30
|
Place.new(place)
|
29
31
|
end
|
30
32
|
end
|
data/lib/twitter/media/photo.rb
CHANGED
data/lib/twitter/null_object.rb
CHANGED
@@ -1,26 +1,14 @@
|
|
1
|
-
require '
|
1
|
+
require 'naught'
|
2
2
|
|
3
3
|
module Twitter
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
alias_method :to_str, :to_s
|
4
|
+
NullObject = Naught.build do |config|
|
5
|
+
config.black_hole
|
6
|
+
config.define_explicit_conversions
|
7
|
+
config.define_implicit_conversions
|
8
|
+
config.predicates_return false
|
10
9
|
|
11
|
-
|
12
|
-
def method_missing(*args, &block)
|
13
|
-
self
|
14
|
-
end
|
15
|
-
|
16
|
-
# @return [TrueClass] This method always returns true.
|
17
|
-
def respond_to?(method_name, include_private = false)
|
10
|
+
def nil?
|
18
11
|
true
|
19
|
-
end
|
20
|
-
|
21
|
-
# @return [TrueClass] This method always returns true.
|
22
|
-
def respond_to_missing?(method_name, include_private = false)
|
23
|
-
true
|
24
|
-
end if RUBY_VERSION >= '1.9'
|
12
|
+
end
|
25
13
|
end
|
26
14
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'twitter/cursor'
|
2
|
+
|
3
|
+
module Twitter
|
4
|
+
class Request
|
5
|
+
attr_accessor :client, :request_method, :path, :options
|
6
|
+
alias_method :verb, :request_method
|
7
|
+
|
8
|
+
# @param client [Twitter::Client]
|
9
|
+
# @param request_method [String, Symbol]
|
10
|
+
# @param path [String]
|
11
|
+
# @param options [Hash]
|
12
|
+
# @return [Twitter::Request]
|
13
|
+
def initialize(client, request_method, path, options = {})
|
14
|
+
@client = client
|
15
|
+
@request_method = request_method.to_sym
|
16
|
+
@path = path
|
17
|
+
@options = options
|
18
|
+
end
|
19
|
+
|
20
|
+
# @return [Hash]
|
21
|
+
def perform
|
22
|
+
@client.send(@request_method, @path, @options)
|
23
|
+
end
|
24
|
+
|
25
|
+
# @param klass [Class]
|
26
|
+
# @param request [Twitter::Request]
|
27
|
+
# @return [Object]
|
28
|
+
def perform_with_object(klass)
|
29
|
+
klass.from_response(perform)
|
30
|
+
end
|
31
|
+
|
32
|
+
# @param collection_name [Symbol]
|
33
|
+
# @param klass [Class]
|
34
|
+
# @return [Twitter::Cursor]
|
35
|
+
def perform_with_cursor(collection_name, klass = nil)
|
36
|
+
Twitter::Cursor.from_response(perform, collection_name.to_sym, klass, self)
|
37
|
+
end
|
38
|
+
|
39
|
+
# @param klass [Class]
|
40
|
+
# @return [Array]
|
41
|
+
def perform_with_objects(klass)
|
42
|
+
perform[:body].collect do |element|
|
43
|
+
klass.new(element)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|