twitter 4.2.0 → 4.3.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/CHANGELOG.md +4 -0
- data/lib/twitter/api/direct_messages.rb +150 -0
- data/lib/twitter/api/favorites.rb +132 -0
- data/lib/twitter/api/friends_and_followers.rb +259 -0
- data/lib/twitter/api/help.rb +64 -0
- data/lib/twitter/api/lists.rb +570 -0
- data/lib/twitter/api/places_and_geo.rb +121 -0
- data/lib/twitter/api/saved_searches.rb +98 -0
- data/lib/twitter/api/search.rb +37 -0
- data/lib/twitter/api/spam_reporting.rb +30 -0
- data/lib/twitter/api/suggested_users.rb +54 -0
- data/lib/twitter/api/timelines.rb +213 -0
- data/lib/twitter/api/trends.rb +63 -0
- data/lib/twitter/api/tweets.rb +284 -0
- data/lib/twitter/api/undocumented.rb +116 -0
- data/lib/twitter/api/users.rb +427 -0
- data/lib/twitter/api/utils.rb +111 -0
- data/lib/twitter/client.rb +41 -13
- data/lib/twitter/core_ext/enumerable.rb +1 -1
- data/lib/twitter/default.rb +16 -18
- data/lib/twitter/error/already_favorited.rb +1 -1
- data/lib/twitter/error/already_retweeted.rb +1 -1
- data/lib/twitter/profile_banner.rb +18 -0
- data/lib/twitter/version.rb +1 -1
- data/spec/fixtures/profile_banner.json +1 -0
- data/spec/twitter/api/direct_messages_spec.rb +32 -32
- data/spec/twitter/api/favorites_spec.rb +114 -0
- data/spec/twitter/api/{friendships_spec.rb → friends_and_followers_spec.rb} +146 -146
- data/spec/twitter/api/geo_spec.rb +28 -28
- data/spec/twitter/api/help_spec.rb +1 -1
- data/spec/twitter/api/lists_spec.rb +82 -82
- data/spec/twitter/api/saved_searches_spec.rb +1 -1
- data/spec/twitter/api/search_spec.rb +1 -17
- data/spec/twitter/api/{report_spam_spec.rb → spam_reporting_spec.rb} +1 -1
- data/spec/twitter/api/suggested_users_spec.rb +94 -0
- data/spec/twitter/api/timelines_spec.rb +138 -0
- data/spec/twitter/api/trends_spec.rb +1 -1
- data/spec/twitter/api/tweets_spec.rb +249 -0
- data/spec/twitter/api/undocumented_spec.rb +103 -0
- data/spec/twitter/api/users_spec.rb +308 -17
- data/spec/twitter/client_spec.rb +1 -1
- data/spec/twitter/profile_banner_spec.rb +13 -0
- data/twitter.gemspec +3 -2
- metadata +44 -21
- data/lib/twitter/api.rb +0 -2558
- data/spec/twitter/api/account_spec.rb +0 -152
- data/spec/twitter/api/activity_spec.rb +0 -37
- data/spec/twitter/api/blocks_spec.rb +0 -122
- data/spec/twitter/api/statuses_spec.rb +0 -541
data/lib/twitter/client.rb
CHANGED
@@ -1,6 +1,20 @@
|
|
1
1
|
require 'faraday'
|
2
2
|
require 'multi_json'
|
3
|
-
require 'twitter/api'
|
3
|
+
require 'twitter/api/direct_messages'
|
4
|
+
require 'twitter/api/favorites'
|
5
|
+
require 'twitter/api/friends_and_followers'
|
6
|
+
require 'twitter/api/help'
|
7
|
+
require 'twitter/api/lists'
|
8
|
+
require 'twitter/api/places_and_geo'
|
9
|
+
require 'twitter/api/saved_searches'
|
10
|
+
require 'twitter/api/search'
|
11
|
+
require 'twitter/api/spam_reporting'
|
12
|
+
require 'twitter/api/suggested_users'
|
13
|
+
require 'twitter/api/timelines'
|
14
|
+
require 'twitter/api/trends'
|
15
|
+
require 'twitter/api/tweets'
|
16
|
+
require 'twitter/api/undocumented'
|
17
|
+
require 'twitter/api/users'
|
4
18
|
require 'twitter/configurable'
|
5
19
|
require 'twitter/error/client_error'
|
6
20
|
require 'twitter/error/decode_error'
|
@@ -14,6 +28,21 @@ module Twitter
|
|
14
28
|
# @see http://dev.twitter.com/pages/every_developer
|
15
29
|
class Client
|
16
30
|
include Twitter::API
|
31
|
+
include Twitter::API::DirectMessages
|
32
|
+
include Twitter::API::Favorites
|
33
|
+
include Twitter::API::FriendsAndFollowers
|
34
|
+
include Twitter::API::Help
|
35
|
+
include Twitter::API::Lists
|
36
|
+
include Twitter::API::PlacesAndGeo
|
37
|
+
include Twitter::API::SavedSearches
|
38
|
+
include Twitter::API::Search
|
39
|
+
include Twitter::API::SpamReporting
|
40
|
+
include Twitter::API::SuggestedUsers
|
41
|
+
include Twitter::API::Timelines
|
42
|
+
include Twitter::API::Trends
|
43
|
+
include Twitter::API::Tweets
|
44
|
+
include Twitter::API::Undocumented
|
45
|
+
include Twitter::API::Users
|
17
46
|
include Twitter::Configurable
|
18
47
|
|
19
48
|
# Initializes a new Client object
|
@@ -27,23 +56,23 @@ module Twitter
|
|
27
56
|
end
|
28
57
|
|
29
58
|
# Perform an HTTP DELETE request
|
30
|
-
def delete(path, params={}
|
31
|
-
request(:delete, path, params
|
59
|
+
def delete(path, params={})
|
60
|
+
request(:delete, path, params)
|
32
61
|
end
|
33
62
|
|
34
63
|
# Perform an HTTP GET request
|
35
|
-
def get(path, params={}
|
36
|
-
request(:get, path, params
|
64
|
+
def get(path, params={})
|
65
|
+
request(:get, path, params)
|
37
66
|
end
|
38
67
|
|
39
68
|
# Perform an HTTP POST request
|
40
|
-
def post(path, params={}
|
41
|
-
request(:post, path, params
|
69
|
+
def post(path, params={})
|
70
|
+
request(:post, path, params)
|
42
71
|
end
|
43
72
|
|
44
73
|
# Perform an HTTP UPDATE request
|
45
|
-
def put(path, params={}
|
46
|
-
request(:put, path, params
|
74
|
+
def put(path, params={})
|
75
|
+
request(:put, path, params)
|
47
76
|
end
|
48
77
|
|
49
78
|
private
|
@@ -58,16 +87,15 @@ module Twitter
|
|
58
87
|
# Perform an HTTP request
|
59
88
|
#
|
60
89
|
# @raise [Twitter::Error::ClientError, Twitter::Error::DecodeError]
|
61
|
-
def request(method, path, params={}
|
62
|
-
uri =
|
63
|
-
uri = URI(uri) unless uri.respond_to?(:host)
|
90
|
+
def request(method, path, params={})
|
91
|
+
uri = URI(@endpoint) unless uri.respond_to?(:host)
|
64
92
|
uri += path
|
65
93
|
request_headers = {}
|
66
94
|
if credentials?
|
67
95
|
authorization = auth_header(method, uri, params)
|
68
96
|
request_headers[:authorization] = authorization.to_s
|
69
97
|
end
|
70
|
-
connection.url_prefix =
|
98
|
+
connection.url_prefix = @endpoint
|
71
99
|
response = connection.run_request(method.to_sym, path, nil, request_headers) do |request|
|
72
100
|
unless params.empty?
|
73
101
|
case request.method
|
data/lib/twitter/default.rb
CHANGED
@@ -22,24 +22,22 @@ module Twitter
|
|
22
22
|
:timeout => 10,
|
23
23
|
} unless defined? CONNECTION_OPTIONS
|
24
24
|
IDENTITY_MAP = false unless defined? IDENTITY_MAP
|
25
|
-
MIDDLEWARE = Faraday::Builder.new
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
end
|
42
|
-
)
|
25
|
+
MIDDLEWARE = Faraday::Builder.new do |builder|
|
26
|
+
# Convert file uploads to Faraday::UploadIO objects
|
27
|
+
builder.use Twitter::Request::MultipartWithFile
|
28
|
+
# Checks for files in the payload
|
29
|
+
builder.use Faraday::Request::Multipart
|
30
|
+
# Convert request params to "www-form-urlencoded"
|
31
|
+
builder.use Faraday::Request::UrlEncoded
|
32
|
+
# Handle 4xx server responses
|
33
|
+
builder.use Twitter::Response::RaiseError, Twitter::Error::ClientError
|
34
|
+
# Parse JSON response bodies using MultiJson
|
35
|
+
builder.use Twitter::Response::ParseJson
|
36
|
+
# Handle 5xx server responses
|
37
|
+
builder.use Twitter::Response::RaiseError, Twitter::Error::ServerError
|
38
|
+
# Set Faraday's HTTP adapter
|
39
|
+
builder.adapter Faraday.default_adapter
|
40
|
+
end
|
43
41
|
|
44
42
|
class << self
|
45
43
|
|
@@ -3,7 +3,7 @@ require 'twitter/error/forbidden'
|
|
3
3
|
module Twitter
|
4
4
|
class Error
|
5
5
|
# Raised when a Tweet has already been favorited
|
6
|
-
class AlreadyFavorited < Twitter::Error
|
6
|
+
class AlreadyFavorited < Twitter::Error
|
7
7
|
MESSAGE = "You have already favorited this status"
|
8
8
|
end
|
9
9
|
end
|
@@ -3,7 +3,7 @@ require 'twitter/error/forbidden'
|
|
3
3
|
module Twitter
|
4
4
|
class Error
|
5
5
|
# Raised when a Tweet has already been retweeted
|
6
|
-
class AlreadyRetweeted < Twitter::Error
|
6
|
+
class AlreadyRetweeted < Twitter::Error
|
7
7
|
MESSAGE = "sharing is not permissible for this status (Share validations failed)"
|
8
8
|
end
|
9
9
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'twitter/base'
|
2
|
+
require 'twitter/size'
|
3
|
+
|
4
|
+
module Twitter
|
5
|
+
class ProfileBanner < Twitter::Base
|
6
|
+
|
7
|
+
# Returns an array of photo sizes
|
8
|
+
#
|
9
|
+
# @return [Array<Twitter::Size>]
|
10
|
+
def sizes
|
11
|
+
@sizes ||= Array(@attrs[:sizes]).inject({}) do |object, (key, value)|
|
12
|
+
object[key] = Twitter::Size.fetch_or_new(value)
|
13
|
+
object
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
data/lib/twitter/version.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
{"sizes":{"mobile_retina":{"h":320,"w":640,"url":"https:\/\/si0.twimg.com\/profile_banners\/7505382\/1349499693\/mobile_retina"},"ipad":{"h":313,"w":626,"url":"https:\/\/si0.twimg.com\/profile_banners\/7505382\/1349499693\/ipad"},"mobile":{"h":160,"w":320,"url":"https:\/\/si0.twimg.com\/profile_banners\/7505382\/1349499693\/mobile"},"ipad_retina":{"h":626,"w":1252,"url":"https:\/\/si0.twimg.com\/profile_banners\/7505382\/1349499693\/ipad_retina"},"web_retina":{"h":520,"w":1040,"url":"https:\/\/si0.twimg.com\/profile_banners\/7505382\/1349499693\/web_retina"},"web":{"h":260,"w":520,"url":"https:\/\/si0.twimg.com\/profile_banners\/7505382\/1349499693\/web"}}}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
|
-
describe Twitter::API do
|
3
|
+
describe Twitter::API::DirectMessages do
|
4
4
|
|
5
5
|
before do
|
6
6
|
@client = Twitter::Client.new
|
@@ -38,37 +38,6 @@ describe Twitter::API do
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
-
describe "#direct_message_destroy" do
|
42
|
-
before do
|
43
|
-
stub_post("/1.1/direct_messages/destroy.json").with(:body => {:id => "1825785544"}).to_return(:body => fixture("direct_message.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
44
|
-
end
|
45
|
-
it "requests the correct resource" do
|
46
|
-
@client.direct_message_destroy(1825785544)
|
47
|
-
expect(a_post("/1.1/direct_messages/destroy.json").with(:body => {:id => "1825785544"})).to have_been_made
|
48
|
-
end
|
49
|
-
it "returns an array of deleted messages" do
|
50
|
-
direct_messages = @client.direct_message_destroy(1825785544)
|
51
|
-
expect(direct_messages).to be_an Array
|
52
|
-
expect(direct_messages.first).to be_a Twitter::DirectMessage
|
53
|
-
expect(direct_messages.first.sender.id).to eq 7505382
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
describe "#direct_message_create" do
|
58
|
-
before do
|
59
|
-
stub_post("/1.1/direct_messages/new.json").with(:body => {:screen_name => "pengwynn", :text => "Creating a fixture for the Twitter gem"}).to_return(:body => fixture("direct_message.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
60
|
-
end
|
61
|
-
it "requests the correct resource" do
|
62
|
-
@client.direct_message_create("pengwynn", "Creating a fixture for the Twitter gem")
|
63
|
-
expect(a_post("/1.1/direct_messages/new.json").with(:body => {:screen_name => "pengwynn", :text => "Creating a fixture for the Twitter gem"})).to have_been_made
|
64
|
-
end
|
65
|
-
it "returns the sent message" do
|
66
|
-
direct_message = @client.direct_message_create("pengwynn", "Creating a fixture for the Twitter gem")
|
67
|
-
expect(direct_message).to be_a Twitter::DirectMessage
|
68
|
-
expect(direct_message.text).to eq "Creating a fixture for the Twitter gem"
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
41
|
describe "#direct_message" do
|
73
42
|
before do
|
74
43
|
stub_get("/1.1/direct_messages/show.json").with(:query => {:id => "1825786345"}).to_return(:body => fixture("direct_message.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
@@ -117,4 +86,35 @@ describe Twitter::API do
|
|
117
86
|
end
|
118
87
|
end
|
119
88
|
|
89
|
+
describe "#direct_message_destroy" do
|
90
|
+
before do
|
91
|
+
stub_post("/1.1/direct_messages/destroy.json").with(:body => {:id => "1825785544"}).to_return(:body => fixture("direct_message.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
92
|
+
end
|
93
|
+
it "requests the correct resource" do
|
94
|
+
@client.direct_message_destroy(1825785544)
|
95
|
+
expect(a_post("/1.1/direct_messages/destroy.json").with(:body => {:id => "1825785544"})).to have_been_made
|
96
|
+
end
|
97
|
+
it "returns an array of deleted messages" do
|
98
|
+
direct_messages = @client.direct_message_destroy(1825785544)
|
99
|
+
expect(direct_messages).to be_an Array
|
100
|
+
expect(direct_messages.first).to be_a Twitter::DirectMessage
|
101
|
+
expect(direct_messages.first.sender.id).to eq 7505382
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
describe "#direct_message_create" do
|
106
|
+
before do
|
107
|
+
stub_post("/1.1/direct_messages/new.json").with(:body => {:screen_name => "pengwynn", :text => "Creating a fixture for the Twitter gem"}).to_return(:body => fixture("direct_message.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
108
|
+
end
|
109
|
+
it "requests the correct resource" do
|
110
|
+
@client.direct_message_create("pengwynn", "Creating a fixture for the Twitter gem")
|
111
|
+
expect(a_post("/1.1/direct_messages/new.json").with(:body => {:screen_name => "pengwynn", :text => "Creating a fixture for the Twitter gem"})).to have_been_made
|
112
|
+
end
|
113
|
+
it "returns the sent message" do
|
114
|
+
direct_message = @client.direct_message_create("pengwynn", "Creating a fixture for the Twitter gem")
|
115
|
+
expect(direct_message).to be_a Twitter::DirectMessage
|
116
|
+
expect(direct_message.text).to eq "Creating a fixture for the Twitter gem"
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
120
|
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Twitter::API::Favorites do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@client = Twitter::Client.new
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "#favorites" do
|
10
|
+
context "with a screen name passed" do
|
11
|
+
before do
|
12
|
+
stub_get("/1.1/favorites/list.json").with(:query => {:screen_name => "sferik"}).to_return(:body => fixture("favorites.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
13
|
+
end
|
14
|
+
it "requests the correct resource" do
|
15
|
+
@client.favorites("sferik")
|
16
|
+
expect(a_get("/1.1/favorites/list.json").with(:query => {:screen_name => "sferik"})).to have_been_made
|
17
|
+
end
|
18
|
+
it "returns the 20 most recent favorite Tweets for the authenticating user or user specified by the ID parameter" do
|
19
|
+
favorites = @client.favorites("sferik")
|
20
|
+
expect(favorites).to be_an Array
|
21
|
+
expect(favorites.first).to be_a Twitter::Tweet
|
22
|
+
expect(favorites.first.user.id).to eq 2404341
|
23
|
+
end
|
24
|
+
end
|
25
|
+
context "without arguments passed" do
|
26
|
+
before do
|
27
|
+
stub_get("/1.1/favorites/list.json").to_return(:body => fixture("favorites.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
28
|
+
end
|
29
|
+
it "requests the correct resource" do
|
30
|
+
@client.favorites
|
31
|
+
expect(a_get("/1.1/favorites/list.json")).to have_been_made
|
32
|
+
end
|
33
|
+
it "returns the 20 most recent favorite Tweets for the authenticating user or user specified by the ID parameter" do
|
34
|
+
favorites = @client.favorites
|
35
|
+
expect(favorites).to be_an Array
|
36
|
+
expect(favorites.first).to be_a Twitter::Tweet
|
37
|
+
expect(favorites.first.user.id).to eq 2404341
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "#unfavorite" do
|
43
|
+
before do
|
44
|
+
stub_post("/1.1/favorites/destroy.json").with(:body => {:id => "25938088801"}).to_return(:body => fixture("status.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
45
|
+
end
|
46
|
+
it "requests the correct resource" do
|
47
|
+
@client.unfavorite(25938088801)
|
48
|
+
expect(a_post("/1.1/favorites/destroy.json").with(:body => {:id => "25938088801"})).to have_been_made
|
49
|
+
end
|
50
|
+
it "returns an array of un-favorited Tweets" do
|
51
|
+
tweets = @client.unfavorite(25938088801)
|
52
|
+
expect(tweets).to be_an Array
|
53
|
+
expect(tweets.first).to be_a Twitter::Tweet
|
54
|
+
expect(tweets.first.text).to eq "The problem with your code is that it's doing exactly what you told it to do."
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe "#favorite" do
|
59
|
+
before do
|
60
|
+
stub_post("/1.1/favorites/create.json").with(:body => {:id => "25938088801"}).to_return(:body => fixture("status.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
61
|
+
end
|
62
|
+
it "requests the correct resource" do
|
63
|
+
@client.favorite(25938088801)
|
64
|
+
expect(a_post("/1.1/favorites/create.json").with(:body => {:id => "25938088801"})).to have_been_made
|
65
|
+
end
|
66
|
+
it "returns an array of favorited Tweets" do
|
67
|
+
tweets = @client.favorite(25938088801)
|
68
|
+
expect(tweets).to be_an Array
|
69
|
+
expect(tweets.first).to be_a Twitter::Tweet
|
70
|
+
expect(tweets.first.text).to eq "The problem with your code is that it's doing exactly what you told it to do."
|
71
|
+
end
|
72
|
+
context "already favorited" do
|
73
|
+
before do
|
74
|
+
stub_post("/1.1/favorites/create.json").with(:body => {:id => "25938088801"}).to_return(:status => 403, :body => fixture("already_favorited.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
75
|
+
end
|
76
|
+
it "does not raises an error" do
|
77
|
+
expect{@client.favorite(25938088801)}.not_to raise_error
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
describe "#favorite!" do
|
83
|
+
before do
|
84
|
+
stub_post("/1.1/favorites/create.json").with(:body => {:id => "25938088801"}).to_return(:body => fixture("status.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
85
|
+
end
|
86
|
+
it "requests the correct resource" do
|
87
|
+
@client.favorite!(25938088801)
|
88
|
+
expect(a_post("/1.1/favorites/create.json").with(:body => {:id => "25938088801"})).to have_been_made
|
89
|
+
end
|
90
|
+
it "returns an array of favorited Tweets" do
|
91
|
+
tweets = @client.favorite!(25938088801)
|
92
|
+
expect(tweets).to be_an Array
|
93
|
+
expect(tweets.first).to be_a Twitter::Tweet
|
94
|
+
expect(tweets.first.text).to eq "The problem with your code is that it's doing exactly what you told it to do."
|
95
|
+
end
|
96
|
+
context "forbidden" do
|
97
|
+
before do
|
98
|
+
stub_post("/1.1/favorites/create.json").with(:body => {:id => "25938088801"}).to_return(:status => 403, :headers => {:content_type => "application/json; charset=utf-8"})
|
99
|
+
end
|
100
|
+
it "raises a Forbidden error" do
|
101
|
+
expect{@client.favorite!(25938088801)}.to raise_error(Twitter::Error::Forbidden)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
context "already favorited" do
|
105
|
+
before do
|
106
|
+
stub_post("/1.1/favorites/create.json").with(:body => {:id => "25938088801"}).to_return(:status => 403, :body => fixture("already_favorited.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
107
|
+
end
|
108
|
+
it "raises an AlreadyFavorited error" do
|
109
|
+
expect{@client.favorite!(25938088801)}.to raise_error(Twitter::Error::AlreadyFavorited, "Tweet with the ID 25938088801 has already been favorited by the authenticated user.")
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
@@ -1,11 +1,44 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
|
-
describe Twitter::API do
|
3
|
+
describe Twitter::API::FriendsAndFollowers do
|
4
4
|
|
5
5
|
before do
|
6
6
|
@client = Twitter::Client.new
|
7
7
|
end
|
8
8
|
|
9
|
+
describe "#friend_ids" do
|
10
|
+
context "with a screen_name passed" do
|
11
|
+
before do
|
12
|
+
stub_get("/1.1/friends/ids.json").with(:query => {:cursor => "-1", :screen_name => "sferik"}).to_return(:body => fixture("ids_list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
13
|
+
end
|
14
|
+
it "requests the correct resource" do
|
15
|
+
@client.friend_ids("sferik")
|
16
|
+
expect(a_get("/1.1/friends/ids.json").with(:query => {:cursor => "-1", :screen_name => "sferik"})).to have_been_made
|
17
|
+
end
|
18
|
+
it "returns an array of numeric IDs for every user the specified user is following" do
|
19
|
+
friend_ids = @client.friend_ids("sferik")
|
20
|
+
expect(friend_ids).to be_a Twitter::Cursor
|
21
|
+
expect(friend_ids.ids).to be_an Array
|
22
|
+
expect(friend_ids.ids.first).to eq 14100886
|
23
|
+
end
|
24
|
+
end
|
25
|
+
context "without arguments passed" do
|
26
|
+
before do
|
27
|
+
stub_get("/1.1/friends/ids.json").with(:query => {:cursor => "-1"}).to_return(:body => fixture("ids_list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
28
|
+
end
|
29
|
+
it "requests the correct resource" do
|
30
|
+
@client.friend_ids
|
31
|
+
expect(a_get("/1.1/friends/ids.json").with(:query => {:cursor => "-1"})).to have_been_made
|
32
|
+
end
|
33
|
+
it "returns an array of numeric IDs for every user the specified user is following" do
|
34
|
+
friend_ids = @client.friend_ids
|
35
|
+
expect(friend_ids).to be_a Twitter::Cursor
|
36
|
+
expect(friend_ids.ids).to be_an Array
|
37
|
+
expect(friend_ids.ids.first).to eq 14100886
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
9
42
|
describe "#follower_ids" do
|
10
43
|
context "with a screen_name passed" do
|
11
44
|
before do
|
@@ -39,76 +72,94 @@ describe Twitter::API do
|
|
39
72
|
end
|
40
73
|
end
|
41
74
|
|
42
|
-
describe "#
|
43
|
-
context "with
|
75
|
+
describe "#friendships" do
|
76
|
+
context "with screen names passed" do
|
44
77
|
before do
|
45
|
-
stub_get("/1.1/
|
78
|
+
stub_get("/1.1/friendships/lookup.json").with(:query => {:screen_name => "sferik,pengwynn"}).to_return(:body => fixture("friendships.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
46
79
|
end
|
47
80
|
it "requests the correct resource" do
|
48
|
-
@client.
|
49
|
-
expect(a_get("/1.1/
|
81
|
+
@client.friendships("sferik", "pengwynn")
|
82
|
+
expect(a_get("/1.1/friendships/lookup.json").with(:query => {:screen_name => "sferik,pengwynn"})).to have_been_made
|
50
83
|
end
|
51
|
-
it "returns
|
52
|
-
|
53
|
-
expect(
|
54
|
-
expect(
|
55
|
-
expect(
|
84
|
+
it "returns up to 100 users worth of extended information" do
|
85
|
+
friendships = @client.friendships("sferik", "pengwynn")
|
86
|
+
expect(friendships).to be_an Array
|
87
|
+
expect(friendships.first).to be_a Twitter::User
|
88
|
+
expect(friendships.first.id).to eq 7505382
|
89
|
+
expect(friendships.first.connections).to eq ["none"]
|
56
90
|
end
|
57
91
|
end
|
58
|
-
context "
|
92
|
+
context "with numeric screen names passed" do
|
59
93
|
before do
|
60
|
-
stub_get("/1.1/
|
94
|
+
stub_get("/1.1/friendships/lookup.json").with(:query => {:screen_name => "0,311"}).to_return(:body => fixture("friendships.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
61
95
|
end
|
62
96
|
it "requests the correct resource" do
|
63
|
-
@client.
|
64
|
-
expect(a_get("/1.1/
|
97
|
+
@client.friendships("0", "311")
|
98
|
+
expect(a_get("/1.1/friendships/lookup.json").with(:query => {:screen_name => "0,311"})).to have_been_made
|
65
99
|
end
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
100
|
+
end
|
101
|
+
context "with user IDs passed" do
|
102
|
+
before do
|
103
|
+
stub_get("/1.1/friendships/lookup.json").with(:query => {:user_id => "7505382,14100886"}).to_return(:body => fixture("friendships.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
104
|
+
end
|
105
|
+
it "requests the correct resource" do
|
106
|
+
@client.friendships(7505382, 14100886)
|
107
|
+
expect(a_get("/1.1/friendships/lookup.json").with(:query => {:user_id => "7505382,14100886"})).to have_been_made
|
108
|
+
end
|
109
|
+
end
|
110
|
+
context "with both screen names and user IDs passed" do
|
111
|
+
before do
|
112
|
+
stub_get("/1.1/friendships/lookup.json").with(:query => {:screen_name => "sferik", :user_id => "14100886"}).to_return(:body => fixture("friendships.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
113
|
+
end
|
114
|
+
it "requests the correct resource" do
|
115
|
+
@client.friendships("sferik", 14100886)
|
116
|
+
expect(a_get("/1.1/friendships/lookup.json").with(:query => {:screen_name => "sferik", :user_id => "14100886"})).to have_been_made
|
71
117
|
end
|
72
118
|
end
|
73
119
|
end
|
74
120
|
|
75
|
-
describe "#
|
121
|
+
describe "#friendships" do
|
76
122
|
context "with screen names passed" do
|
77
123
|
before do
|
78
|
-
stub_get("/1.1/friendships/
|
79
|
-
stub_get("/1.1/friendships/show.json").with(:query => {:source_screen_name => "pengwynn", :target_screen_name => "sferik"}).to_return(:body => fixture("not_following.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
124
|
+
stub_get("/1.1/friendships/lookup.json").with(:query => {:screen_name => "sferik,pengwynn"}).to_return(:body => fixture("friendships.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
80
125
|
end
|
81
126
|
it "requests the correct resource" do
|
82
|
-
@client.
|
83
|
-
expect(a_get("/1.1/friendships/
|
127
|
+
@client.friendships("sferik", "pengwynn")
|
128
|
+
expect(a_get("/1.1/friendships/lookup.json").with(:query => {:screen_name => "sferik,pengwynn"})).to have_been_made
|
84
129
|
end
|
85
|
-
it "returns
|
86
|
-
|
87
|
-
expect(
|
130
|
+
it "returns up to 100 users worth of extended information" do
|
131
|
+
friendships = @client.friendships("sferik", "pengwynn")
|
132
|
+
expect(friendships).to be_an Array
|
133
|
+
expect(friendships.first).to be_a Twitter::User
|
134
|
+
expect(friendships.first.id).to eq 7505382
|
135
|
+
expect(friendships.first.connections).to eq ["none"]
|
88
136
|
end
|
89
|
-
|
90
|
-
|
91
|
-
|
137
|
+
end
|
138
|
+
context "with numeric screen names passed" do
|
139
|
+
before do
|
140
|
+
stub_get("/1.1/friendships/lookup.json").with(:query => {:screen_name => "0,311"}).to_return(:body => fixture("friendships.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
141
|
+
end
|
142
|
+
it "requests the correct resource" do
|
143
|
+
@client.friendships("0", "311")
|
144
|
+
expect(a_get("/1.1/friendships/lookup.json").with(:query => {:screen_name => "0,311"})).to have_been_made
|
92
145
|
end
|
93
146
|
end
|
94
147
|
context "with user IDs passed" do
|
95
148
|
before do
|
96
|
-
stub_get("/1.1/friendships/
|
149
|
+
stub_get("/1.1/friendships/lookup.json").with(:query => {:user_id => "7505382,14100886"}).to_return(:body => fixture("friendships.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
97
150
|
end
|
98
151
|
it "requests the correct resource" do
|
99
|
-
@client.
|
100
|
-
expect(a_get("/1.1/friendships/
|
152
|
+
@client.friendships(7505382, 14100886)
|
153
|
+
expect(a_get("/1.1/friendships/lookup.json").with(:query => {:user_id => "7505382,14100886"})).to have_been_made
|
101
154
|
end
|
102
155
|
end
|
103
|
-
context "with user
|
156
|
+
context "with both screen names and user IDs passed" do
|
104
157
|
before do
|
105
|
-
stub_get("/1.1/friendships/
|
158
|
+
stub_get("/1.1/friendships/lookup.json").with(:query => {:screen_name => "sferik", :user_id => "14100886"}).to_return(:body => fixture("friendships.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
106
159
|
end
|
107
160
|
it "requests the correct resource" do
|
108
|
-
|
109
|
-
|
110
|
-
@client.friendship?(user1, user2)
|
111
|
-
expect(a_get("/1.1/friendships/show.json").with(:query => {:source_id => "7505382", :target_id => "14100886"})).to have_been_made
|
161
|
+
@client.friendships("sferik", 14100886)
|
162
|
+
expect(a_get("/1.1/friendships/lookup.json").with(:query => {:screen_name => "sferik", :user_id => "14100886"})).to have_been_made
|
112
163
|
end
|
113
164
|
end
|
114
165
|
end
|
@@ -145,52 +196,6 @@ describe Twitter::API do
|
|
145
196
|
end
|
146
197
|
end
|
147
198
|
|
148
|
-
describe "#friendship" do
|
149
|
-
context "with screen names passed" do
|
150
|
-
before do
|
151
|
-
stub_get("/1.1/friendships/show.json").with(:query => {:source_screen_name => "sferik", :target_screen_name => "pengwynn"}).to_return(:body => fixture("following.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
152
|
-
end
|
153
|
-
it "requests the correct resource" do
|
154
|
-
@client.friendship("sferik", "pengwynn")
|
155
|
-
expect(a_get("/1.1/friendships/show.json").with(:query => {:source_screen_name => "sferik", :target_screen_name => "pengwynn"})).to have_been_made
|
156
|
-
end
|
157
|
-
it "returns detailed information about the relationship between two users" do
|
158
|
-
relationship = @client.friendship("sferik", "pengwynn")
|
159
|
-
expect(relationship).to be_a Twitter::Relationship
|
160
|
-
expect(relationship.source.id).to eq 7505382
|
161
|
-
end
|
162
|
-
end
|
163
|
-
context "with numeric screen names passed" do
|
164
|
-
before do
|
165
|
-
stub_get("/1.1/friendships/show.json").with(:query => {:source_screen_name => "0", :target_screen_name => "311"}).to_return(:body => fixture("following.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
166
|
-
end
|
167
|
-
it "requests the correct resource" do
|
168
|
-
@client.friendship("0", "311")
|
169
|
-
expect(a_get("/1.1/friendships/show.json").with(:query => {:source_screen_name => "0", :target_screen_name => "311"})).to have_been_made
|
170
|
-
end
|
171
|
-
end
|
172
|
-
context "with user IDs passed" do
|
173
|
-
before do
|
174
|
-
stub_get("/1.1/friendships/show.json").with(:query => {:source_id => "7505382", :target_id => "14100886"}).to_return(:body => fixture("following.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
175
|
-
end
|
176
|
-
it "requests the correct resource" do
|
177
|
-
@client.friendship(7505382, 14100886)
|
178
|
-
expect(a_get("/1.1/friendships/show.json").with(:query => {:source_id => "7505382", :target_id => "14100886"})).to have_been_made
|
179
|
-
end
|
180
|
-
end
|
181
|
-
context "with user objects passed" do
|
182
|
-
before do
|
183
|
-
stub_get("/1.1/friendships/show.json").with(:query => {:source_id => "7505382", :target_id => "14100886"}).to_return(:body => fixture("following.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
184
|
-
end
|
185
|
-
it "requests the correct resource" do
|
186
|
-
user1 = Twitter::User.new(:id => '7505382')
|
187
|
-
user2 = Twitter::User.new(:id => '14100886')
|
188
|
-
@client.friendship(user1, user2)
|
189
|
-
expect(a_get("/1.1/friendships/show.json").with(:query => {:source_id => "7505382", :target_id => "14100886"})).to have_been_made
|
190
|
-
end
|
191
|
-
end
|
192
|
-
end
|
193
|
-
|
194
199
|
describe "#follow" do
|
195
200
|
context "with :follow => true passed" do
|
196
201
|
before do
|
@@ -315,111 +320,106 @@ describe Twitter::API do
|
|
315
320
|
end
|
316
321
|
end
|
317
322
|
|
318
|
-
describe "#
|
323
|
+
describe "#friendship_update" do
|
324
|
+
before do
|
325
|
+
stub_post("/1.1/friendships/update.json").with(:body => {:screen_name => "sferik", :retweets => "true"}).to_return(:body => fixture("following.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
326
|
+
end
|
327
|
+
it "requests the correct resource" do
|
328
|
+
@client.friendship_update("sferik", :retweets => true)
|
329
|
+
expect(a_post("/1.1/friendships/update.json").with(:body => {:screen_name => "sferik", :retweets => "true"})).to have_been_made
|
330
|
+
end
|
331
|
+
it "returns detailed information about the relationship between two users" do
|
332
|
+
relationship = @client.friendship_update("sferik", :retweets => true)
|
333
|
+
expect(relationship).to be_a Twitter::Relationship
|
334
|
+
expect(relationship.source.id).to eq 7505382
|
335
|
+
end
|
336
|
+
end
|
337
|
+
|
338
|
+
describe "#friendship" do
|
319
339
|
context "with screen names passed" do
|
320
340
|
before do
|
321
|
-
stub_get("/1.1/friendships/
|
341
|
+
stub_get("/1.1/friendships/show.json").with(:query => {:source_screen_name => "sferik", :target_screen_name => "pengwynn"}).to_return(:body => fixture("following.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
322
342
|
end
|
323
343
|
it "requests the correct resource" do
|
324
|
-
@client.
|
325
|
-
expect(a_get("/1.1/friendships/
|
344
|
+
@client.friendship("sferik", "pengwynn")
|
345
|
+
expect(a_get("/1.1/friendships/show.json").with(:query => {:source_screen_name => "sferik", :target_screen_name => "pengwynn"})).to have_been_made
|
326
346
|
end
|
327
|
-
it "returns
|
328
|
-
|
329
|
-
expect(
|
330
|
-
expect(
|
331
|
-
expect(friendships.first.id).to eq 7505382
|
332
|
-
expect(friendships.first.connections).to eq ["none"]
|
347
|
+
it "returns detailed information about the relationship between two users" do
|
348
|
+
relationship = @client.friendship("sferik", "pengwynn")
|
349
|
+
expect(relationship).to be_a Twitter::Relationship
|
350
|
+
expect(relationship.source.id).to eq 7505382
|
333
351
|
end
|
334
352
|
end
|
335
353
|
context "with numeric screen names passed" do
|
336
354
|
before do
|
337
|
-
stub_get("/1.1/friendships/
|
355
|
+
stub_get("/1.1/friendships/show.json").with(:query => {:source_screen_name => "0", :target_screen_name => "311"}).to_return(:body => fixture("following.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
338
356
|
end
|
339
357
|
it "requests the correct resource" do
|
340
|
-
@client.
|
341
|
-
expect(a_get("/1.1/friendships/
|
358
|
+
@client.friendship("0", "311")
|
359
|
+
expect(a_get("/1.1/friendships/show.json").with(:query => {:source_screen_name => "0", :target_screen_name => "311"})).to have_been_made
|
342
360
|
end
|
343
361
|
end
|
344
362
|
context "with user IDs passed" do
|
345
363
|
before do
|
346
|
-
stub_get("/1.1/friendships/
|
364
|
+
stub_get("/1.1/friendships/show.json").with(:query => {:source_id => "7505382", :target_id => "14100886"}).to_return(:body => fixture("following.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
347
365
|
end
|
348
366
|
it "requests the correct resource" do
|
349
|
-
@client.
|
350
|
-
expect(a_get("/1.1/friendships/
|
367
|
+
@client.friendship(7505382, 14100886)
|
368
|
+
expect(a_get("/1.1/friendships/show.json").with(:query => {:source_id => "7505382", :target_id => "14100886"})).to have_been_made
|
351
369
|
end
|
352
370
|
end
|
353
|
-
context "with
|
371
|
+
context "with user objects passed" do
|
354
372
|
before do
|
355
|
-
stub_get("/1.1/friendships/
|
373
|
+
stub_get("/1.1/friendships/show.json").with(:query => {:source_id => "7505382", :target_id => "14100886"}).to_return(:body => fixture("following.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
356
374
|
end
|
357
375
|
it "requests the correct resource" do
|
358
|
-
|
359
|
-
|
376
|
+
user1 = Twitter::User.new(:id => '7505382')
|
377
|
+
user2 = Twitter::User.new(:id => '14100886')
|
378
|
+
@client.friendship(user1, user2)
|
379
|
+
expect(a_get("/1.1/friendships/show.json").with(:query => {:source_id => "7505382", :target_id => "14100886"})).to have_been_made
|
360
380
|
end
|
361
381
|
end
|
362
382
|
end
|
363
383
|
|
364
|
-
describe "#
|
384
|
+
describe "#friendship?" do
|
365
385
|
context "with screen names passed" do
|
366
386
|
before do
|
367
|
-
stub_get("/1.1/friendships/
|
387
|
+
stub_get("/1.1/friendships/show.json").with(:query => {:source_screen_name => "sferik", :target_screen_name => "pengwynn"}).to_return(:body => fixture("following.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
388
|
+
stub_get("/1.1/friendships/show.json").with(:query => {:source_screen_name => "pengwynn", :target_screen_name => "sferik"}).to_return(:body => fixture("not_following.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
368
389
|
end
|
369
390
|
it "requests the correct resource" do
|
370
|
-
@client.
|
371
|
-
expect(a_get("/1.1/friendships/
|
372
|
-
end
|
373
|
-
it "returns up to 100 users worth of extended information" do
|
374
|
-
friendships = @client.friendships("sferik", "pengwynn")
|
375
|
-
expect(friendships).to be_an Array
|
376
|
-
expect(friendships.first).to be_a Twitter::User
|
377
|
-
expect(friendships.first.id).to eq 7505382
|
378
|
-
expect(friendships.first.connections).to eq ["none"]
|
391
|
+
@client.friendship?("sferik", "pengwynn")
|
392
|
+
expect(a_get("/1.1/friendships/show.json").with(:query => {:source_screen_name => "sferik", :target_screen_name => "pengwynn"})).to have_been_made
|
379
393
|
end
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
stub_get("/1.1/friendships/lookup.json").with(:query => {:screen_name => "0,311"}).to_return(:body => fixture("friendships.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
394
|
+
it "returns true if user A follows user B" do
|
395
|
+
friendship = @client.friendship?("sferik", "pengwynn")
|
396
|
+
expect(friendship).to be_true
|
384
397
|
end
|
385
|
-
it "
|
386
|
-
@client.
|
387
|
-
expect(
|
398
|
+
it "returns false if user A does not follow user B" do
|
399
|
+
friendship = @client.friendship?("pengwynn", "sferik")
|
400
|
+
expect(friendship).to be_false
|
388
401
|
end
|
389
402
|
end
|
390
403
|
context "with user IDs passed" do
|
391
404
|
before do
|
392
|
-
stub_get("/1.1/friendships/
|
405
|
+
stub_get("/1.1/friendships/show.json").with(:query => {:source_id => "7505382", :target_id => "14100886"}).to_return(:body => fixture("following.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
393
406
|
end
|
394
407
|
it "requests the correct resource" do
|
395
|
-
@client.
|
396
|
-
expect(a_get("/1.1/friendships/
|
408
|
+
@client.friendship?(7505382, 14100886)
|
409
|
+
expect(a_get("/1.1/friendships/show.json").with(:query => {:source_id => "7505382", :target_id => "14100886"})).to have_been_made
|
397
410
|
end
|
398
411
|
end
|
399
|
-
context "with
|
412
|
+
context "with user objects passed" do
|
400
413
|
before do
|
401
|
-
stub_get("/1.1/friendships/
|
414
|
+
stub_get("/1.1/friendships/show.json").with(:query => {:source_id => "7505382", :target_id => "14100886"}).to_return(:body => fixture("following.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
402
415
|
end
|
403
416
|
it "requests the correct resource" do
|
404
|
-
|
405
|
-
|
417
|
+
user1 = Twitter::User.new(:id => '7505382')
|
418
|
+
user2 = Twitter::User.new(:id => '14100886')
|
419
|
+
@client.friendship?(user1, user2)
|
420
|
+
expect(a_get("/1.1/friendships/show.json").with(:query => {:source_id => "7505382", :target_id => "14100886"})).to have_been_made
|
406
421
|
end
|
407
422
|
end
|
408
423
|
end
|
409
424
|
|
410
|
-
describe "#friendship_update" do
|
411
|
-
before do
|
412
|
-
stub_post("/1.1/friendships/update.json").with(:body => {:screen_name => "sferik", :retweets => "true"}).to_return(:body => fixture("following.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
413
|
-
end
|
414
|
-
it "requests the correct resource" do
|
415
|
-
@client.friendship_update("sferik", :retweets => true)
|
416
|
-
expect(a_post("/1.1/friendships/update.json").with(:body => {:screen_name => "sferik", :retweets => "true"})).to have_been_made
|
417
|
-
end
|
418
|
-
it "returns detailed information about the relationship between two users" do
|
419
|
-
relationship = @client.friendship_update("sferik", :retweets => true)
|
420
|
-
expect(relationship).to be_a Twitter::Relationship
|
421
|
-
expect(relationship.source.id).to eq 7505382
|
422
|
-
end
|
423
|
-
end
|
424
|
-
|
425
425
|
end
|