twitter4r 0.3.0 → 0.3.1
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/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
|