twitter4r 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +129 -0
- data/MIT-LICENSE +20 -0
- data/README +37 -0
- data/TODO +7 -0
- data/lib/twitter/client/account.rb +24 -0
- data/lib/twitter/client/base.rb +16 -5
- data/lib/twitter/client/blocks.rb +35 -0
- data/lib/twitter/client/favorites.rb +37 -37
- data/lib/twitter/client/friendship.rb +32 -32
- data/lib/twitter/client/graph.rb +37 -0
- data/lib/twitter/client/messaging.rb +3 -4
- data/lib/twitter/client/profile.rb +29 -0
- data/lib/twitter/client/search.rb +27 -0
- data/lib/twitter/client/status.rb +9 -3
- data/lib/twitter/client/timeline.rb +1 -0
- data/lib/twitter/client/user.rb +20 -9
- data/lib/twitter/client.rb +13 -9
- data/lib/twitter/config.rb +6 -0
- data/lib/twitter/console.rb +3 -0
- data/lib/twitter/core.rb +1 -1
- data/lib/twitter/ext/stdlib.rb +17 -1
- data/lib/twitter/model.rb +39 -10
- data/lib/twitter/version.rb +1 -1
- data/lib/twitter.rb +13 -4
- data/spec/twitter/client/account_spec.rb +28 -0
- data/spec/twitter/client/base_spec.rb +10 -0
- data/spec/twitter/client/blocks_spec.rb +76 -0
- data/spec/twitter/client/friendship_spec.rb +7 -7
- data/spec/twitter/client/graph_spec.rb +67 -0
- data/spec/twitter/client/messaging_spec.rb +3 -3
- data/spec/twitter/client/profile_spec.rb +91 -0
- data/spec/twitter/client/search_spec.rb +68 -0
- data/spec/twitter/client/status_spec.rb +27 -0
- data/spec/twitter/client/user_spec.rb +0 -17
- data/spec/twitter/ext/stdlib_spec.rb +20 -3
- data/spec/twitter/model_spec.rb +46 -26
- metadata +92 -67
- data/lib/twitter/rails.rb +0 -89
- data/spec/twitter/rails_spec.rb +0 -110
data/lib/twitter/client/user.rb
CHANGED
@@ -14,6 +14,11 @@ class Twitter::Client
|
|
14
14
|
# @twitter.user(234943) #=> Twitter::User object instance for user with numeric id of 234943
|
15
15
|
# @twitter.user('mylogin') #=> Twitter::User object instance for user with screen name 'mylogin'
|
16
16
|
#
|
17
|
+
# Where <tt>options</tt> is a +Hash+ of options that can include:
|
18
|
+
# * <tt>:page</tt> - optional. Retrieves the next set of friends. There are 100 friends per page. Default: 1.
|
19
|
+
# * <tt>:lite</tt> - optional. Prevents the inline inclusion of current status. Default: false.
|
20
|
+
# * <tt>:since</tt> - optional. Only relevant for <tt>:friends</tt> action. Narrows the results to just those friends added after the date given as value of this option. Must be HTTP-formatted date.
|
21
|
+
#
|
17
22
|
# An <tt>ArgumentError</tt> will be raised if an invalid <tt>action</tt>
|
18
23
|
# is given. Valid actions are:
|
19
24
|
# * +:info+
|
@@ -25,30 +30,36 @@ class Twitter::Client
|
|
25
30
|
# followers = client.my(:followers)
|
26
31
|
# OR
|
27
32
|
# followers = client.my(:info).followers
|
28
|
-
def user(id, action = :info)
|
33
|
+
def user(id, action = :info, options = {})
|
29
34
|
raise ArgumentError, "Invalid user action: #{action}" unless @@USER_URIS.keys.member?(action)
|
30
|
-
raise ArgumentError, "Unable to retrieve followers for user: #{id}" if action.eql?(:followers) and not id.eql?(@login)
|
31
35
|
id = id.to_i if id.is_a?(Twitter::User)
|
32
|
-
|
33
|
-
|
36
|
+
params = options.merge(:id => id)
|
37
|
+
response = http_connect {|conn| create_http_get_request(@@USER_URIS[action], params) }
|
38
|
+
bless_models(Twitter::User.unmarshal(response.body))
|
34
39
|
end
|
35
40
|
|
36
41
|
# Syntactic sugar for queries relating to authenticated user in Twitter's User API
|
37
42
|
#
|
38
|
-
#
|
43
|
+
# Where <tt>action</tt> is one of the following:
|
39
44
|
# * <tt>:info</tt> - Returns user instance for the authenticated user.
|
40
45
|
# * <tt>:friends</tt> - Returns Array of users that are authenticated user's friends
|
41
46
|
# * <tt>:followers</tt> - Returns Array of users that are authenticated user's followers
|
42
47
|
#
|
48
|
+
# Where <tt>options</tt> is a +Hash+ of options that can include:
|
49
|
+
# * <tt>:page</tt> - optional. Retrieves the next set of friends. There are 100 friends per page. Default: 1.
|
50
|
+
# * <tt>:lite</tt> - optional. Prevents the inline inclusion of current status. Default: false.
|
51
|
+
# * <tt>:since</tt> - optional. Only relevant for <tt>:friends</tt> action. Narrows the results to just those friends added after the date given as value of this option. Must be HTTP-formatted date.
|
52
|
+
#
|
43
53
|
# An <tt>ArgumentError</tt> will be raised if an invalid <tt>action</tt>
|
44
54
|
# is given. Valid actions are:
|
45
55
|
# * +:info+
|
46
56
|
# * +:friends+
|
47
57
|
# * +:followers+
|
48
|
-
def my(action)
|
58
|
+
def my(action, options = {})
|
49
59
|
raise ArgumentError, "Invalid user action: #{action}" unless @@USER_URIS.keys.member?(action)
|
50
|
-
|
51
|
-
|
52
|
-
|
60
|
+
params = options.merge(:id => @login)
|
61
|
+
response = http_connect {|conn| create_http_get_request(@@USER_URIS[action], params) }
|
62
|
+
users = Twitter::User.unmarshal(response.body)
|
63
|
+
bless_models(users)
|
53
64
|
end
|
54
65
|
end
|
data/lib/twitter/client.rb
CHANGED
@@ -9,12 +9,16 @@ class Twitter::Client
|
|
9
9
|
include Twitter::ClassUtilMixin
|
10
10
|
end
|
11
11
|
|
12
|
-
require('twitter/client/base
|
13
|
-
require('twitter/client/timeline
|
14
|
-
require('twitter/client/status
|
15
|
-
require('twitter/client/friendship
|
16
|
-
require('twitter/client/messaging
|
17
|
-
require('twitter/client/user
|
18
|
-
require('twitter/client/auth
|
19
|
-
require('twitter/client/favorites
|
20
|
-
|
12
|
+
require('twitter/client/base')
|
13
|
+
require('twitter/client/timeline')
|
14
|
+
require('twitter/client/status')
|
15
|
+
require('twitter/client/friendship')
|
16
|
+
require('twitter/client/messaging')
|
17
|
+
require('twitter/client/user')
|
18
|
+
require('twitter/client/auth')
|
19
|
+
require('twitter/client/favorites')
|
20
|
+
require('twitter/client/blocks')
|
21
|
+
require('twitter/client/account')
|
22
|
+
require('twitter/client/graph')
|
23
|
+
require('twitter/client/profile')
|
24
|
+
require('twitter/client/search')
|
data/lib/twitter/config.rb
CHANGED
@@ -22,6 +22,9 @@ module Twitter
|
|
22
22
|
:protocol,
|
23
23
|
:host,
|
24
24
|
:port,
|
25
|
+
:search_protocol,
|
26
|
+
:search_host,
|
27
|
+
:search_port,
|
25
28
|
:proxy_host,
|
26
29
|
:proxy_port,
|
27
30
|
:proxy_user,
|
@@ -49,6 +52,9 @@ module Twitter
|
|
49
52
|
@@defaults = { :host => 'twitter.com',
|
50
53
|
:port => 443,
|
51
54
|
:protocol => :ssl,
|
55
|
+
:search_host => 'search.twitter.com',
|
56
|
+
:search_port => 80,
|
57
|
+
:search_protocol => :http,
|
52
58
|
:proxy_host => nil,
|
53
59
|
:proxy_port => nil,
|
54
60
|
:user_agent => "default",
|
data/lib/twitter/console.rb
CHANGED
data/lib/twitter/core.rb
CHANGED
data/lib/twitter/ext/stdlib.rb
CHANGED
@@ -12,7 +12,7 @@ class Hash
|
|
12
12
|
result = ''
|
13
13
|
return result if self.empty?
|
14
14
|
self.each do |key, val|
|
15
|
-
result << "#{key}=#{
|
15
|
+
result << "#{key}=#{CGI.escape(val.to_s)}&"
|
16
16
|
end
|
17
17
|
result.chop # remove the last '&' character, since it can be discarded
|
18
18
|
end
|
@@ -34,3 +34,19 @@ class Time
|
|
34
34
|
format ? self.to_formatted_s(format) : self.rfc2822
|
35
35
|
end
|
36
36
|
end
|
37
|
+
|
38
|
+
# Extension to Kernel to add #gem_present? without any exceptions raised
|
39
|
+
module Kernel
|
40
|
+
|
41
|
+
# Returns whether or not a gem exists without raising a Gem::LoadError exception
|
42
|
+
def gem_present?(gem_name, version = nil)
|
43
|
+
present = false
|
44
|
+
begin
|
45
|
+
present = !!(version ? gem(gem_name, version) : gem(gem_name))
|
46
|
+
rescue Gem::LoadError => le
|
47
|
+
present = false
|
48
|
+
warn("Gem load error: Couldn't load #{gem_name} #{version ? "with version requirement #{version}: #{le.to_s}": ""}")
|
49
|
+
end
|
50
|
+
present
|
51
|
+
end
|
52
|
+
end
|
data/lib/twitter/model.rb
CHANGED
@@ -124,15 +124,15 @@ module Twitter
|
|
124
124
|
end
|
125
125
|
|
126
126
|
module AuthenticatedUserMixin
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
127
|
+
def self.included(base)
|
128
|
+
base.send(:include, InstanceMethods)
|
129
|
+
end
|
130
|
+
|
131
|
+
module InstanceMethods
|
132
132
|
# Returns an Array of user objects that represents the authenticated
|
133
133
|
# user's friends on Twitter.
|
134
|
-
def followers
|
135
|
-
@client.my(:followers)
|
134
|
+
def followers(options = {})
|
135
|
+
@client.my(:followers, options)
|
136
136
|
end
|
137
137
|
|
138
138
|
# Adds given user as a friend. Returns user object as given by
|
@@ -152,13 +152,19 @@ module Twitter
|
|
152
152
|
def defriend(user)
|
153
153
|
@client.friend(:remove, user)
|
154
154
|
end
|
155
|
-
|
155
|
+
end
|
156
156
|
end
|
157
157
|
|
158
158
|
# Represents a <tt>Twitter</tt> user
|
159
159
|
class User
|
160
160
|
include ModelMixin
|
161
|
-
@@ATTRIBUTES = [:id, :name, :description, :location, :screen_name, :url,
|
161
|
+
@@ATTRIBUTES = [:id, :name, :description, :location, :screen_name, :url,
|
162
|
+
:protected, :profile_image_url, :profile_background_color,
|
163
|
+
:profile_text_color, :profile_link_color, :profile_sidebar_fill_color,
|
164
|
+
:profile_sidebar_border_color, :profile_background_image_url,
|
165
|
+
:profile_background_tile, :utc_offset, :time_zone,
|
166
|
+
:following, :notifications, :favourites_count, :followers_count,
|
167
|
+
:friends_count, :statuses_count, :created_at, ]
|
162
168
|
attr_accessor *@@ATTRIBUTES
|
163
169
|
|
164
170
|
class << self
|
@@ -219,7 +225,9 @@ module Twitter
|
|
219
225
|
# Represents a status posted to <tt>Twitter</tt> by a <tt>Twitter</tt> user.
|
220
226
|
class Status
|
221
227
|
include ModelMixin
|
222
|
-
@@ATTRIBUTES = [:id, :text, :created_at, :user
|
228
|
+
@@ATTRIBUTES = [:id, :text, :source, :truncated, :created_at, :user,
|
229
|
+
:favorited, :in_reply_to_status_id, :in_reply_to_user_id,
|
230
|
+
:in_reply_to_screen_name]
|
223
231
|
attr_accessor *@@ATTRIBUTES
|
224
232
|
|
225
233
|
class << self
|
@@ -260,6 +268,14 @@ module Twitter
|
|
260
268
|
client.status(:post, text)
|
261
269
|
end
|
262
270
|
end
|
271
|
+
|
272
|
+
def reply?
|
273
|
+
!!@in_reply_to_status_id
|
274
|
+
end
|
275
|
+
|
276
|
+
def reply(status)
|
277
|
+
client.status(:reply, :status => status, :in_reply_to_status_id => @id)
|
278
|
+
end
|
263
279
|
|
264
280
|
protected
|
265
281
|
# Constructor callback
|
@@ -328,4 +344,17 @@ module Twitter
|
|
328
344
|
@created_at = Time.parse(@created_at) if @created_at.is_a?(String)
|
329
345
|
end
|
330
346
|
end # Message
|
347
|
+
|
348
|
+
# RateLimitStatus provides information about how many requests you have left
|
349
|
+
# and when you can resume more requests if your remaining_hits count is zero.
|
350
|
+
class RateLimitStatus
|
351
|
+
include ModelMixin
|
352
|
+
@@ATTRIBUTES = [:remaining_hits, :hourly_limit, :reset_time_in_seconds, :reset_time]
|
353
|
+
attr_accessor *@@ATTRIBUTES
|
354
|
+
|
355
|
+
class << self
|
356
|
+
# Used as factory method callback
|
357
|
+
def attributes; @@ATTRIBUTES; end
|
358
|
+
end
|
359
|
+
end
|
331
360
|
end # Twitter
|
data/lib/twitter/version.rb
CHANGED
data/lib/twitter.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
#
|
2
|
+
require('rubygems')
|
2
3
|
|
3
4
|
module Twitter; end
|
4
5
|
|
@@ -6,14 +7,21 @@ def require_local(suffix)
|
|
6
7
|
require(File.expand_path(File.join(File.dirname(__FILE__), suffix)))
|
7
8
|
end
|
8
9
|
|
9
|
-
# For better unicode support
|
10
|
-
|
11
|
-
|
10
|
+
# For better unicode support in 1.8
|
11
|
+
if RUBY_VERSION < '1.9'
|
12
|
+
$KCODE = 'u'
|
13
|
+
require 'jcode'
|
14
|
+
end
|
12
15
|
|
13
16
|
# External requires
|
17
|
+
require('yaml')
|
18
|
+
require('date')
|
19
|
+
require('time')
|
14
20
|
require('net/https')
|
15
21
|
require('uri')
|
22
|
+
require('cgi')
|
16
23
|
require('json')
|
24
|
+
require('yaml')
|
17
25
|
|
18
26
|
# Ordering matters...pay attention here!
|
19
27
|
require_local('twitter/ext')
|
@@ -23,3 +31,4 @@ require_local('twitter/core')
|
|
23
31
|
require_local('twitter/model')
|
24
32
|
require_local('twitter/config')
|
25
33
|
require_local('twitter/client')
|
34
|
+
require_local('twitter/console')
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper')
|
2
|
+
|
3
|
+
describe Twitter::Client, "#account_info" do
|
4
|
+
before(:each) do
|
5
|
+
@uri = Twitter::Client.class_eval("@@ACCOUNT_URIS[:rate_limit_status]")
|
6
|
+
@request = mas_net_http_get(:basic_auth => nil)
|
7
|
+
@twitter = client_context
|
8
|
+
@default_header = @twitter.send(:http_header)
|
9
|
+
@response = mas_net_http_response(:success)
|
10
|
+
@connection = mas_net_http(@response)
|
11
|
+
@response.stub!(:body).and_return("{}")
|
12
|
+
Net::HTTP.stub!(:new).and_return(@connection)
|
13
|
+
@rate_limit_status = mock(Twitter::RateLimitStatus)
|
14
|
+
@twitter.stub!(:bless_models).and_return({})
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should create expected HTTP GET request" do
|
18
|
+
@twitter.should_receive(:create_http_get_request).with(@uri).and_return(@request)
|
19
|
+
@twitter.account_info
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should raise Twitter::RESTError when 500 HTTP response received when giving page options" do
|
23
|
+
@connection = mas_net_http(mas_net_http_response(:server_error))
|
24
|
+
lambda {
|
25
|
+
@twitter.account_info
|
26
|
+
}.should raise_error(Twitter::RESTError)
|
27
|
+
end
|
28
|
+
end
|
@@ -15,6 +15,16 @@ describe "Twitter::Client" do
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
+
describe Twitter::Client, "#inspect" do
|
19
|
+
before(:each) do
|
20
|
+
@client = Twitter::Client.new(:login => "NippleEquality", :password => "3rdnipple")
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should block out password attribute values" do
|
24
|
+
@client.inspect.should_not match(/@password="3rdnipple"/)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
18
28
|
describe Twitter::Client, "#http_header" do
|
19
29
|
before(:each) do
|
20
30
|
@user_agent = 'myapp'
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper')
|
2
|
+
|
3
|
+
describe Twitter::Client, "#block" do
|
4
|
+
before(:each) do
|
5
|
+
@twitter = client_context
|
6
|
+
@id = 1234567
|
7
|
+
@screen_name = 'dummylogin'
|
8
|
+
@friend = Twitter::User.new(:id => @id, :screen_name => @screen_name)
|
9
|
+
@uris = Twitter::Client.class_eval("@@BLOCK_URIS")
|
10
|
+
@request = mas_net_http_get(:basic_auth => nil)
|
11
|
+
@response = mas_net_http_response(:success)
|
12
|
+
@connection = mas_net_http(@response)
|
13
|
+
Net::HTTP.stub!(:new).and_return(@connection)
|
14
|
+
Twitter::User.stub!(:unmarshal).and_return(@friend)
|
15
|
+
end
|
16
|
+
|
17
|
+
def create_uri(action, id)
|
18
|
+
"#{@uris[action]}/#{id}.json"
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should create expected HTTP GET request for :add case using integer user ID" do
|
22
|
+
# the integer user ID scenario...
|
23
|
+
@twitter.should_receive(:create_http_get_request).with(create_uri(:add, @id)).and_return(@request)
|
24
|
+
@twitter.block(:add, @id)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should create expected HTTP GET request for :add case using screen name" do
|
28
|
+
# the screen name scenario...
|
29
|
+
@twitter.should_receive(:create_http_get_request).with(create_uri(:add, @screen_name)).and_return(@request)
|
30
|
+
@twitter.block(:add, @screen_name)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should create expected HTTP GET request for :add case using Twitter::User object" do
|
34
|
+
# the Twitter::User object scenario...
|
35
|
+
@twitter.should_receive(:create_http_get_request).with(create_uri(:add, @friend.to_i)).and_return(@request)
|
36
|
+
@twitter.block(:add, @friend)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should create expected HTTP GET request for :remove case using integer user ID" do
|
40
|
+
# the integer user ID scenario...
|
41
|
+
@twitter.should_receive(:create_http_get_request).with(create_uri(:remove, @id)).and_return(@request)
|
42
|
+
@twitter.block(:remove, @id)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should create expected HTTP GET request for :remove case using screen name" do
|
46
|
+
# the screen name scenario...
|
47
|
+
@twitter.should_receive(:create_http_get_request).with(create_uri(:remove, @screen_name)).and_return(@request)
|
48
|
+
@twitter.block(:remove, @screen_name)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should create expected HTTP GET request for :remove case using Twitter::User object" do
|
52
|
+
# the Twitter::User object scenario...
|
53
|
+
@twitter.should_receive(:create_http_get_request).with(create_uri(:remove, @friend.to_i)).and_return(@request)
|
54
|
+
@twitter.block(:remove, @friend)
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should bless user model returned for :add case" do
|
58
|
+
@twitter.should_receive(:bless_model).with(@friend)
|
59
|
+
@twitter.block(:add, @friend)
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should bless user model returned for :remove case" do
|
63
|
+
@twitter.should_receive(:bless_model).with(@friend)
|
64
|
+
@twitter.block(:remove, @friend)
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should raise ArgumentError if action given is not valid" do
|
68
|
+
lambda {
|
69
|
+
@twitter.block(:crap, @friend)
|
70
|
+
}.should raise_error(ArgumentError)
|
71
|
+
end
|
72
|
+
|
73
|
+
after(:each) do
|
74
|
+
nilize(@twitter, @id, @uris, @request, @response, @connection)
|
75
|
+
end
|
76
|
+
end
|
@@ -7,7 +7,7 @@ describe Twitter::Client, "#friend" do
|
|
7
7
|
@screen_name = 'dummylogin'
|
8
8
|
@friend = Twitter::User.new(:id => @id, :screen_name => @screen_name)
|
9
9
|
@uris = Twitter::Client.class_eval("@@FRIENDSHIP_URIS")
|
10
|
-
@request =
|
10
|
+
@request = mas_net_http_post(:basic_auth => nil)
|
11
11
|
@response = mas_net_http_response(:success)
|
12
12
|
@connection = mas_net_http(@response)
|
13
13
|
Net::HTTP.stub!(:new).and_return(@connection)
|
@@ -20,37 +20,37 @@ describe Twitter::Client, "#friend" do
|
|
20
20
|
|
21
21
|
it "should create expected HTTP GET request for :add case using integer user ID" do
|
22
22
|
# the integer user ID scenario...
|
23
|
-
@twitter.should_receive(:
|
23
|
+
@twitter.should_receive(:create_http_post_request).with(create_uri(:add, @id)).and_return(@request)
|
24
24
|
@twitter.friend(:add, @id)
|
25
25
|
end
|
26
26
|
|
27
27
|
it "should create expected HTTP GET request for :add case using screen name" do
|
28
28
|
# the screen name scenario...
|
29
|
-
@twitter.should_receive(:
|
29
|
+
@twitter.should_receive(:create_http_post_request).with(create_uri(:add, @screen_name)).and_return(@request)
|
30
30
|
@twitter.friend(:add, @screen_name)
|
31
31
|
end
|
32
32
|
|
33
33
|
it "should create expected HTTP GET request for :add case using Twitter::User object" do
|
34
34
|
# the Twitter::User object scenario...
|
35
|
-
@twitter.should_receive(:
|
35
|
+
@twitter.should_receive(:create_http_post_request).with(create_uri(:add, @friend.to_i)).and_return(@request)
|
36
36
|
@twitter.friend(:add, @friend)
|
37
37
|
end
|
38
38
|
|
39
39
|
it "should create expected HTTP GET request for :remove case using integer user ID" do
|
40
40
|
# the integer user ID scenario...
|
41
|
-
@twitter.should_receive(:
|
41
|
+
@twitter.should_receive(:create_http_post_request).with(create_uri(:remove, @id)).and_return(@request)
|
42
42
|
@twitter.friend(:remove, @id)
|
43
43
|
end
|
44
44
|
|
45
45
|
it "should create expected HTTP GET request for :remove case using screen name" do
|
46
46
|
# the screen name scenario...
|
47
|
-
@twitter.should_receive(:
|
47
|
+
@twitter.should_receive(:create_http_post_request).with(create_uri(:remove, @screen_name)).and_return(@request)
|
48
48
|
@twitter.friend(:remove, @screen_name)
|
49
49
|
end
|
50
50
|
|
51
51
|
it "should create expected HTTP GET request for :remove case using Twitter::User object" do
|
52
52
|
# the Twitter::User object scenario...
|
53
|
-
@twitter.should_receive(:
|
53
|
+
@twitter.should_receive(:create_http_post_request).with(create_uri(:remove, @friend.to_i)).and_return(@request)
|
54
54
|
@twitter.friend(:remove, @friend)
|
55
55
|
end
|
56
56
|
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper')
|
2
|
+
|
3
|
+
describe Twitter::Client, "#graph(:friends...)" do
|
4
|
+
before(:each) do
|
5
|
+
@twitter = client_context
|
6
|
+
@id = 1234567
|
7
|
+
@screen_name = 'dummylogin'
|
8
|
+
@friend = Twitter::User.new(:id => @id, :screen_name => @screen_name)
|
9
|
+
@uris = Twitter::Client.class_eval("@@GRAPH_URIS")
|
10
|
+
@request = mas_net_http_get(:basic_auth => nil)
|
11
|
+
@response = mas_net_http_response(:success)
|
12
|
+
@response.stub!(:body).and_return("[1, 2, 3, 4, 5, 6]")
|
13
|
+
@connection = mas_net_http(@response)
|
14
|
+
Net::HTTP.stub!(:new).and_return(@connection)
|
15
|
+
Twitter::User.stub!(:unmarshal).and_return(@friend)
|
16
|
+
end
|
17
|
+
|
18
|
+
def create_uri(action)
|
19
|
+
"#{@uris[action]}.json"
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should create expected HTTP GET request for :friends case using integer user ID" do
|
23
|
+
# the integer user ID scenario...
|
24
|
+
@twitter.should_receive(:create_http_get_request).with(create_uri(:friends), :id => @id).and_return(@request)
|
25
|
+
@twitter.graph(:friends, @id)
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should create expected HTTP GET request for :friends case using screen name" do
|
29
|
+
# the screen name scenario...
|
30
|
+
@twitter.should_receive(:create_http_get_request).with(create_uri(:friends), :id => @screen_name).and_return(@request)
|
31
|
+
@twitter.graph(:friends, @screen_name)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should create expected HTTP GET request for :friends case using Twitter::User object" do
|
35
|
+
# the Twitter::User object scenario...
|
36
|
+
@twitter.should_receive(:create_http_get_request).with(create_uri(:friends), :id => @friend.to_i).and_return(@request)
|
37
|
+
@twitter.graph(:friends, @friend)
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should create expected HTTP GET request for :followers case using integer user ID" do
|
41
|
+
# the integer user ID scenario...
|
42
|
+
@twitter.should_receive(:create_http_get_request).with(create_uri(:followers), :id => @id).and_return(@request)
|
43
|
+
@twitter.graph(:followers, @id)
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should create expected HTTP GET request for :followers case using screen name" do
|
47
|
+
# the screen name scenario...
|
48
|
+
@twitter.should_receive(:create_http_get_request).with(create_uri(:followers), :id => @screen_name).and_return(@request)
|
49
|
+
@twitter.graph(:followers, @screen_name)
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should create expected HTTP GET request for :followers case using Twitter::User object" do
|
53
|
+
# the Twitter::User object scenario...
|
54
|
+
@twitter.should_receive(:create_http_get_request).with(create_uri(:followers), :id => @friend.to_i).and_return(@request)
|
55
|
+
@twitter.graph(:followers, @friend)
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should raise ArgumentError if action given is not valid" do
|
59
|
+
lambda {
|
60
|
+
@twitter.graph(:crap, @friend)
|
61
|
+
}.should raise_error(ArgumentError)
|
62
|
+
end
|
63
|
+
|
64
|
+
after(:each) do
|
65
|
+
nilize(@twitter, @id, @uris, @request, @response, @connection)
|
66
|
+
end
|
67
|
+
end
|
@@ -14,7 +14,7 @@ describe Twitter::Client, "#messages" do
|
|
14
14
|
end
|
15
15
|
|
16
16
|
it "should create expected HTTP GET request for :received case" do
|
17
|
-
@twitter.should_receive(:create_http_get_request).with(@uris[:received]).and_return(@request)
|
17
|
+
@twitter.should_receive(:create_http_get_request).with(@uris[:received], {}).and_return(@request)
|
18
18
|
@twitter.messages(:received)
|
19
19
|
end
|
20
20
|
|
@@ -24,7 +24,7 @@ describe Twitter::Client, "#messages" do
|
|
24
24
|
end
|
25
25
|
|
26
26
|
it "should create expected HTTP GET request for :sent case" do
|
27
|
-
@twitter.should_receive(:create_http_get_request).with(@uris[:sent]).and_return(@request)
|
27
|
+
@twitter.should_receive(:create_http_get_request).with(@uris[:sent], {}).and_return(@request)
|
28
28
|
@twitter.messages(:sent)
|
29
29
|
end
|
30
30
|
|
@@ -46,7 +46,7 @@ describe Twitter::Client, "#messages" do
|
|
46
46
|
end
|
47
47
|
|
48
48
|
it "should generate expected GET HTTP request for paging case" do
|
49
|
-
@twitter.should_receive(:create_http_get_request).with(@uris[:received]
|
49
|
+
@twitter.should_receive(:create_http_get_request).with(@uris[:received], {:page => @page}).and_return(@request)
|
50
50
|
@twitter.messages(:received, :page => @page)
|
51
51
|
end
|
52
52
|
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper')
|
2
|
+
|
3
|
+
describe Twitter::Client, "#profile" do
|
4
|
+
before(:each) do
|
5
|
+
@twitter = client_context
|
6
|
+
@user_attrs = {
|
7
|
+
:id => "JaneEyre",
|
8
|
+
:login => "Jane Eyre",
|
9
|
+
:url => "http://janeeyrerocks.co.uk",
|
10
|
+
:location => "Thornfield Manor",
|
11
|
+
}
|
12
|
+
# name, email, url, location, description
|
13
|
+
@info_attrs = {
|
14
|
+
:name => "Jane Eyre",
|
15
|
+
:email => "jane.eyre@gmail.co.uk",
|
16
|
+
:url => "http://janeeyrerocks.co.uk",
|
17
|
+
:location => "Thornfield Manor",
|
18
|
+
:description => "Governess who falls for slave-trade aristocrat with French lovechild he doesn't acknowledge & wife locked in damp attic with keeper.",
|
19
|
+
}
|
20
|
+
# background_color, text_color, link_color, sidebar_fill_color, sidebar_border_color
|
21
|
+
@colors_attrs = {
|
22
|
+
:background_color => "#ffffff",
|
23
|
+
:text_color => "#101010",
|
24
|
+
:link_color => "#990000",
|
25
|
+
}
|
26
|
+
# value
|
27
|
+
@device_attrs = {
|
28
|
+
:value => "sms",
|
29
|
+
}
|
30
|
+
@user = Twitter::User.new
|
31
|
+
@uris = Twitter::Client.class_eval("@@PROFILE_URIS")
|
32
|
+
@request = mas_net_http_get(:basic_auth => nil)
|
33
|
+
@json = JSON.unparse(@user_attrs)
|
34
|
+
@response = mas_net_http_response(:success, @json)
|
35
|
+
@connection = mas_net_http(@response)
|
36
|
+
|
37
|
+
Net::HTTP.stub!(:new).and_return(@connection)
|
38
|
+
Twitter::User.stub!(:unmarshal).and_return(@user)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should invoke #http_connect with expected arguments for :info case" do
|
42
|
+
@twitter.should_receive(:http_connect).with(@info_attrs.to_http_str).and_return(@response)
|
43
|
+
@twitter.profile(:info, @info_attrs)
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should invoke #http_connect with expected arguments for :colors case" do
|
47
|
+
@twitter.should_receive(:http_connect).with(@colors_attrs.to_http_str).and_return(@response)
|
48
|
+
@twitter.profile(:colors, @colors_attrs)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should invoke #http_connect with expected arguments for :device case" do
|
52
|
+
@twitter.should_receive(:http_connect).with(@device_attrs.to_http_str).and_return(@response)
|
53
|
+
@twitter.profile(:info, @device_attrs)
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should create expected HTTP POST request for :info case" do
|
57
|
+
@twitter.should_receive(:create_http_post_request).with(@uris[:info]).and_return(@request)
|
58
|
+
@twitter.profile(:info, @info_attrs)
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should create expected HTTP POST request for :colors case" do
|
62
|
+
@twitter.should_receive(:create_http_post_request).with(@uris[:colors]).and_return(@request)
|
63
|
+
@twitter.profile(:colors, @colors_attrs)
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should create expected HTTP POST request for :device case" do
|
67
|
+
@twitter.should_receive(:create_http_post_request).with(@uris[:device]).and_return(@request)
|
68
|
+
@twitter.profile(:device, @device_attrs)
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should bless returned Twitter::User object for :info case" do
|
72
|
+
@twitter.should_receive(:bless_model).with(@user)
|
73
|
+
@twitter.profile(:info, @info_attrs)
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should bless returned Twitter::User object for :colors case" do
|
77
|
+
@twitter.should_receive(:bless_model).with(@user)
|
78
|
+
@twitter.profile(:colors, @colors_attrs)
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should bless returned Twitter::User object for :device case" do
|
82
|
+
@twitter.should_receive(:bless_model).with(@user)
|
83
|
+
@twitter.profile(:device, @device_attrs)
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should raise an ArgumentError when giving an invalid profile action"
|
87
|
+
|
88
|
+
after(:each) do
|
89
|
+
nilize(@twitter, @uris, @request, @response, @connection, @sender, @recipient, @user, @attributes)
|
90
|
+
end
|
91
|
+
end
|