twitter4r 0.5.0 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/twitter/client/base.rb +73 -35
- data/lib/twitter/client/favorites.rb +2 -3
- data/lib/twitter/client/messaging.rb +1 -1
- data/lib/twitter/client/status.rb +4 -4
- data/lib/twitter/client/timeline.rb +2 -1
- data/lib/twitter/client/user.rb +4 -4
- data/lib/twitter/config.rb +11 -3
- data/lib/twitter/ext/stdlib.rb +0 -15
- data/lib/twitter/version.rb +1 -1
- data/spec/twitter/client/base_spec.rb +100 -0
- data/spec/twitter/client/favorites_spec.rb +8 -8
- data/spec/twitter/client/friendship_spec.rb +17 -17
- data/spec/twitter/client/status_spec.rb +6 -6
- data/spec/twitter/client/user_spec.rb +7 -7
- data/spec/twitter/ext/stdlib_spec.rb +0 -16
- metadata +4 -13
data/lib/twitter/client/base.rb
CHANGED
@@ -14,7 +14,7 @@ class Twitter::Client
|
|
14
14
|
# Returns the response of the OAuth/HTTP(s) request for REST API requests (not Search)
|
15
15
|
def rest_oauth_connect(method, path, params = {}, headers = {}, require_auth = true)
|
16
16
|
atoken = rest_access_token
|
17
|
-
uri = rest_request_uri(path)
|
17
|
+
uri = rest_request_uri(path, params)
|
18
18
|
if [:get, :delete].include?(method)
|
19
19
|
response = atoken.send(method, uri, http_header.merge(headers))
|
20
20
|
else
|
@@ -27,7 +27,7 @@ class Twitter::Client
|
|
27
27
|
# Returns the response of the OAuth/HTTP(s) request for Search API requests (not REST)
|
28
28
|
def search_oauth_connect(method, path, params = {}, headers = {}, require_auth = true)
|
29
29
|
atoken = search_access_token
|
30
|
-
uri = search_request_uri(path)
|
30
|
+
uri = search_request_uri(path, params)
|
31
31
|
if method == :get
|
32
32
|
response = atoken.send(method, uri, http_header.merge(headers))
|
33
33
|
end
|
@@ -49,39 +49,56 @@ class Twitter::Client
|
|
49
49
|
@@http_header = nil
|
50
50
|
|
51
51
|
def rest_consumer
|
52
|
-
unless @
|
53
|
-
|
54
|
-
|
55
|
-
|
52
|
+
unless @rest_consumer
|
53
|
+
consumer = @oauth_consumer
|
54
|
+
if consumer
|
55
|
+
key = consumer[:key] || consumer["key"]
|
56
|
+
secret = consumer[:secret] || consumer["secret"]
|
57
|
+
end
|
58
|
+
cfg = self.class.config
|
59
|
+
key ||= cfg.oauth_consumer_token
|
60
|
+
secret ||= cfg.oauth_consumer_secret
|
61
|
+
@rest_consumer = OAuth::Consumer.new(key, secret,
|
62
|
+
:site => construct_site_url,
|
63
|
+
:proxy => construct_proxy_url)
|
56
64
|
end
|
57
|
-
@
|
65
|
+
@rest_consumer
|
58
66
|
end
|
59
67
|
|
60
68
|
def rest_access_token
|
61
|
-
unless @
|
62
|
-
|
63
|
-
|
64
|
-
|
69
|
+
unless @rest_access_token
|
70
|
+
key = @oauth_access[:key] || @oauth_access["key"]
|
71
|
+
secret = @oauth_access[:secret] || @oauth_access["secret"]
|
72
|
+
@rest_access_token = OAuth::AccessToken.new(rest_consumer, key, secret)
|
65
73
|
end
|
66
|
-
@
|
74
|
+
@rest_access_token
|
67
75
|
end
|
68
76
|
|
69
77
|
def search_consumer
|
70
|
-
unless @
|
71
|
-
|
72
|
-
|
73
|
-
|
78
|
+
unless @search_consumer
|
79
|
+
cfg = self.class.config
|
80
|
+
consumer = @oauth_consumer
|
81
|
+
if consumer
|
82
|
+
key = consumer[:key] || consumer["key"]
|
83
|
+
secret = consumer[:secret] || consumer["secret"]
|
84
|
+
end
|
85
|
+
cfg = self.class.config
|
86
|
+
key ||= cfg.oauth_consumer_token
|
87
|
+
secret ||= cfg.oauth_consumer_secret
|
88
|
+
@search_consumer = OAuth::Consumer.new(key, secret,
|
89
|
+
:site => construct_site_url(:search),
|
90
|
+
:proxy => construct_proxy_url)
|
74
91
|
end
|
75
|
-
@
|
92
|
+
@search_consumer
|
76
93
|
end
|
77
94
|
|
78
95
|
def search_access_token
|
79
|
-
unless @
|
80
|
-
|
81
|
-
|
82
|
-
|
96
|
+
unless @search_access_token
|
97
|
+
key = @oauth_access[:key] || @oauth_access["key"]
|
98
|
+
secret = @oauth_access[:secret] || @oauth_access["secret"]
|
99
|
+
@search_access_token = OAuth::AccessToken.new(search_consumer, key, secret)
|
83
100
|
end
|
84
|
-
@
|
101
|
+
@search_access_token
|
85
102
|
end
|
86
103
|
|
87
104
|
def raise_rest_error(response, uri = nil)
|
@@ -103,36 +120,57 @@ class Twitter::Client
|
|
103
120
|
# create the contents of the HTTP header are determined by other
|
104
121
|
# class variables that are not designed to change after instantiation.
|
105
122
|
@@http_header ||= {
|
106
|
-
'User-Agent' => "Twitter4R v#{Twitter::Version.to_version} [#{
|
123
|
+
'User-Agent' => "Twitter4R v#{Twitter::Version.to_version} [#{self.class.config.user_agent}]",
|
107
124
|
'Accept' => 'text/x-json',
|
108
|
-
'X-Twitter-Client' =>
|
109
|
-
'X-Twitter-Client-Version' =>
|
110
|
-
'X-Twitter-Client-URL' =>
|
125
|
+
'X-Twitter-Client' => self.class.config.application_name,
|
126
|
+
'X-Twitter-Client-Version' => self.class.config.application_version,
|
127
|
+
'X-Twitter-Client-URL' => self.class.config.application_url,
|
111
128
|
}
|
112
129
|
@@http_header
|
113
130
|
end
|
114
131
|
|
115
|
-
def rest_request_uri(path)
|
116
|
-
"#{
|
132
|
+
def rest_request_uri(path, params = nil)
|
133
|
+
uri = "#{self.class.config.path_prefix}#{path}"
|
134
|
+
uri << "?#{params.to_http_str}" if params
|
135
|
+
uri
|
117
136
|
end
|
118
137
|
|
119
|
-
def search_request_uri(path)
|
120
|
-
"#{
|
138
|
+
def search_request_uri(path, params = nil)
|
139
|
+
uri = "#{self.class.config.search_path_prefix}#{path}"
|
140
|
+
uri << "?#{params.to_http_str}" if params
|
141
|
+
uri
|
121
142
|
end
|
122
143
|
|
123
144
|
def uri_components(service = :rest)
|
124
145
|
case service
|
125
146
|
when :rest
|
126
|
-
return
|
127
|
-
|
147
|
+
return self.class.config.protocol, self.class.config.host, self.class.config.port,
|
148
|
+
self.class.config.path_prefix
|
128
149
|
when :search
|
129
|
-
return
|
130
|
-
|
150
|
+
return self.class.config.search_protocol, self.class.config.search_host,
|
151
|
+
self.class.config.search_port, self.class.config.search_path_prefix
|
131
152
|
end
|
132
153
|
end
|
133
154
|
|
134
155
|
def construct_site_url(service = :rest)
|
135
156
|
protocol, host, port, path_prefix = uri_components(service)
|
136
|
-
"#{protocol == :ssl ? :https : protocol}://#{host}:#{port}"
|
157
|
+
"#{(protocol == :ssl ? :https : protocol).to_s}://#{host}:#{port}"
|
158
|
+
end
|
159
|
+
|
160
|
+
def construct_proxy_url
|
161
|
+
cfg = self.class.config
|
162
|
+
proxy_user, proxy_pass = cfg.proxy_user, cfg.proxy_pass
|
163
|
+
proxy_host, proxy_port = cfg.proxy_host, cfg.proxy_port
|
164
|
+
protocol = ((cfg.proxy_protocol == :ssl) ? :https : cfg.proxy_protocol).to_s
|
165
|
+
url = nil
|
166
|
+
if proxy_host
|
167
|
+
url = "#{protocol}://"
|
168
|
+
if proxy_user
|
169
|
+
url << "#{proxy_user}:#{proxy_pass}@"
|
170
|
+
end
|
171
|
+
url << "#{proxy_host}:#{proxy_port.to_s}"
|
172
|
+
else
|
173
|
+
url
|
174
|
+
end
|
137
175
|
end
|
138
176
|
end
|
@@ -14,9 +14,8 @@ class Twitter::Client
|
|
14
14
|
# statuses = client.favorites(:page => 2)
|
15
15
|
# The above one-liner will get the second page of favorites for the authenticated user.
|
16
16
|
def favorites(options = nil)
|
17
|
-
|
18
|
-
|
19
|
-
response = rest_oauth_connect(:get, uri)
|
17
|
+
uri = '/favorites.json'
|
18
|
+
response = rest_oauth_connect(:get, uri, options)
|
20
19
|
bless_models(Twitter::Status.unmarshal(response.body))
|
21
20
|
end
|
22
21
|
|
@@ -68,7 +68,7 @@ class Twitter::Client
|
|
68
68
|
user = user.to_i if user and user.is_a?(Twitter::User)
|
69
69
|
case action
|
70
70
|
when :post
|
71
|
-
response = rest_oauth_connect(:post, uri, {:text => value, :user => user, :source =>
|
71
|
+
response = rest_oauth_connect(:post, uri, {:text => value, :user => user, :source => self.class.config.source})
|
72
72
|
when :delete
|
73
73
|
response = rest_oauth_connect(:delete, "#{uri}/#{value.to_i}")
|
74
74
|
end
|
@@ -37,14 +37,14 @@ class Twitter::Client
|
|
37
37
|
response = nil
|
38
38
|
case action
|
39
39
|
when :get
|
40
|
-
response = rest_oauth_connect(:get,
|
40
|
+
response = rest_oauth_connect(:get, uri, {:id => value.to_i})
|
41
41
|
when :post
|
42
|
-
response = rest_oauth_connect(:post, uri, :status => value, :source =>
|
42
|
+
response = rest_oauth_connect(:post, uri, :status => value, :source => self.class.config.source)
|
43
43
|
when :delete
|
44
|
-
response = rest_oauth_connect(:delete,
|
44
|
+
response = rest_oauth_connect(:delete, uri, {:id => value.to_i})
|
45
45
|
when :reply
|
46
46
|
return nil if (!value.is_a?(Hash) || !value[:status] || !value[:in_reply_to_status_id])
|
47
|
-
params = value.merge(:source =>
|
47
|
+
params = value.merge(:source => self.class.config.source)
|
48
48
|
response = rest_oauth_connect(:post, uri, params)
|
49
49
|
end
|
50
50
|
bless_model(Twitter::Status.unmarshal(response.body))
|
@@ -40,9 +40,10 @@ class Twitter::Client
|
|
40
40
|
# <tt>options</tt> can also include the following keys:
|
41
41
|
# * <tt>:id</tt> is the user ID, screen name of Twitter::User representation of a <tt>Twitter</tt> user.
|
42
42
|
# * <tt>:since</tt> is a Time object specifying the date-time from which to return results for. Applicable for the :friend, :friends, :user and :me cases.
|
43
|
-
# * <tt>:
|
43
|
+
# * <tt>:count</tt> specifies the number of statuses to retrieve at a time. Only applicable for the :user case.
|
44
44
|
# * <tt>:page</tt> specifies page number to retrieve.
|
45
45
|
# * <tt>since_id</tt> is the status id of the public timeline from which to retrieve statuses for <tt>:public</tt>. Only applicable for the :public case.
|
46
|
+
# * <tt>include_rts</tt> flags whether to retrieve native retweets in the timeline or not. True values are true, t or 1.
|
46
47
|
#
|
47
48
|
# You can also pass this method a block, which will iterate through the results
|
48
49
|
# of the requested timeline and apply the block logic for each status returned.
|
data/lib/twitter/client/user.rb
CHANGED
@@ -35,8 +35,8 @@ class Twitter::Client
|
|
35
35
|
id = id.to_i if id.is_a?(Twitter::User)
|
36
36
|
id_param = id.is_a?(String) ? :screen_name : :user_id
|
37
37
|
params = options.merge(id_param => id)
|
38
|
-
uri =
|
39
|
-
response = rest_oauth_connect(:get, uri)
|
38
|
+
uri = @@USER_URIS[action]
|
39
|
+
response = rest_oauth_connect(:get, uri, params)
|
40
40
|
bless_models(Twitter::User.unmarshal(response.body))
|
41
41
|
end
|
42
42
|
|
@@ -60,8 +60,8 @@ class Twitter::Client
|
|
60
60
|
def my(action, options = {})
|
61
61
|
raise ArgumentError, "Invalid user action: #{action}" unless @@USER_URIS.keys.member?(action)
|
62
62
|
params = options.merge(:id => @login)
|
63
|
-
uri =
|
64
|
-
response = rest_oauth_connect(:get, uri)
|
63
|
+
uri = @@USER_URIS[action]
|
64
|
+
response = rest_oauth_connect(:get, uri, params)
|
65
65
|
users = Twitter::User.unmarshal(response.body)
|
66
66
|
bless_models(users)
|
67
67
|
end
|
data/lib/twitter/config.rb
CHANGED
@@ -12,8 +12,9 @@ module Twitter
|
|
12
12
|
# * <tt>search_host</tt> - hostname to connect to for the Twitter Search service. Defaults to <tt>'twitter.com'</tt>.
|
13
13
|
# * <tt>search_port</tt> - port to connect to for the Twitter Search service. Defaults to <tt>443</tt>.
|
14
14
|
# * <tt>search_path_prefix</tt> - path to prefix URIs of Search API calls. Defaults to <tt>""</tt>.
|
15
|
+
# * <tt>proxy_protocol</tt> - proxy protocol to use. Defaults to http.
|
15
16
|
# * <tt>proxy_host</tt> - proxy host to use. Defaults to nil.
|
16
|
-
# * <tt>proxy_port</tt> - proxy host to use. Defaults to
|
17
|
+
# * <tt>proxy_port</tt> - proxy host to use. Defaults to 8080.
|
17
18
|
# * <tt>proxy_user</tt> - proxy username to use. Defaults to nil.
|
18
19
|
# * <tt>proxy_pass</tt> - proxy password to use. Defaults to nil.
|
19
20
|
# * <tt>user_agent</tt> - user agent string to use for each request of the HTTP header.
|
@@ -38,6 +39,7 @@ module Twitter
|
|
38
39
|
:search_host,
|
39
40
|
:search_port,
|
40
41
|
:search_path_prefix,
|
42
|
+
:proxy_protocol,
|
41
43
|
:proxy_host,
|
42
44
|
:proxy_port,
|
43
45
|
:proxy_user,
|
@@ -77,8 +79,9 @@ module Twitter
|
|
77
79
|
:search_port => 80,
|
78
80
|
:search_protocol => :http,
|
79
81
|
:search_path_prefix => "",
|
82
|
+
:proxy_protocol => "http",
|
80
83
|
:proxy_host => nil,
|
81
|
-
:proxy_port =>
|
84
|
+
:proxy_port => 8080,
|
82
85
|
:user_agent => "default",
|
83
86
|
:application_name => 'Twitter4R',
|
84
87
|
:application_version => Twitter::Version.to_version,
|
@@ -93,10 +96,15 @@ module Twitter
|
|
93
96
|
|
94
97
|
# Twitter::Client class methods
|
95
98
|
class << self
|
99
|
+
# returns configuration object
|
100
|
+
def config
|
101
|
+
@@config
|
102
|
+
end
|
103
|
+
|
96
104
|
# Yields to given <tt>block</tt> to configure the Twitter4R API.
|
97
105
|
def configure(&block)
|
98
106
|
raise ArgumentError, "Block must be provided to configure" unless block_given?
|
99
|
-
yield
|
107
|
+
yield config
|
100
108
|
end # configure
|
101
109
|
end # class << self
|
102
110
|
end # Client class
|
data/lib/twitter/ext/stdlib.rb
CHANGED
@@ -35,18 +35,3 @@ class Time
|
|
35
35
|
end
|
36
36
|
end
|
37
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/version.rb
CHANGED
@@ -137,3 +137,103 @@ describe Twitter::Client, "#bless_models" do
|
|
137
137
|
nilize(@twitter, @models)
|
138
138
|
end
|
139
139
|
end
|
140
|
+
|
141
|
+
shared_examples_for "consumer token overrides" do
|
142
|
+
before(:each) do
|
143
|
+
@config_key = "234ufmewroi23o43SFsf"
|
144
|
+
@config_secret = "kfgIYFOasdfsfg236GSka"
|
145
|
+
@key_override = "#{@config_key}-1234"
|
146
|
+
@secret_override = "#{@config_secret}-1234"
|
147
|
+
Twitter::Client.configure do |conf|
|
148
|
+
conf.oauth_consumer_token = @config_key
|
149
|
+
conf.oauth_consumer_secret = @config_secret
|
150
|
+
end
|
151
|
+
@overridded_client = Twitter::Client.new(:oauth_consumer => { :key => @key_override, :secret => @secret_override })
|
152
|
+
@plain_client = Twitter::Client.new
|
153
|
+
end
|
154
|
+
|
155
|
+
it "should be set to key/secret pair passed into constructor when passed in and configuration object already has key/secret set" do
|
156
|
+
consumer = get_consumer(@overridded_client)
|
157
|
+
consumer.instance_eval("@key").should eql(@key_override)
|
158
|
+
consumer.instance_eval("@secret").should eql(@secret_override)
|
159
|
+
end
|
160
|
+
|
161
|
+
it "should be set to key/secret pair set in configuration object when none passed into constructor" do
|
162
|
+
consumer = get_consumer(@plain_client)
|
163
|
+
consumer.instance_eval("@key").should eql(@config_key)
|
164
|
+
consumer.instance_eval("@secret").should eql(@config_secret)
|
165
|
+
end
|
166
|
+
|
167
|
+
after(:each) do
|
168
|
+
Twitter::Client.configure do |conf|
|
169
|
+
conf.oauth_consumer_token = nil
|
170
|
+
conf.oauth_consumer_secret = nil
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
describe Twitter::Client, "rest consumer token" do
|
176
|
+
it_should_behave_like "consumer token overrides"
|
177
|
+
|
178
|
+
def get_consumer(client)
|
179
|
+
client.send(:rest_consumer)
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
describe Twitter::Client, "search consumer token" do
|
184
|
+
it_should_behave_like "consumer token overrides"
|
185
|
+
|
186
|
+
def get_consumer(client)
|
187
|
+
client.send(:search_consumer)
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
describe Twitter::Client, "#construct_proxy_url" do
|
192
|
+
before(:each) do
|
193
|
+
@host = "localhost"
|
194
|
+
@port = "8080"
|
195
|
+
@user = "user"
|
196
|
+
@pass = "pass123"
|
197
|
+
@client = client_context
|
198
|
+
end
|
199
|
+
|
200
|
+
def configure_host_and_port
|
201
|
+
Twitter::Client.configure do |conf|
|
202
|
+
conf.proxy_host = @host
|
203
|
+
conf.proxy_port = @port
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
def configure_user_and_password
|
208
|
+
Twitter::Client.configure do |conf|
|
209
|
+
conf.proxy_user = @user
|
210
|
+
conf.proxy_pass = @pass
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
it "should return the full proxy URL when proxy host and port given" do
|
215
|
+
configure_host_and_port
|
216
|
+
url = "http://#{@host}:#{@port}"
|
217
|
+
@client.send(:construct_proxy_url).should eql(url)
|
218
|
+
end
|
219
|
+
|
220
|
+
it "should return the full proxy URL when proxy host, port, username and password given" do
|
221
|
+
configure_host_and_port
|
222
|
+
configure_user_and_password
|
223
|
+
url = "http://#{@user}:#{@pass}@#{@host}:#{@port}"
|
224
|
+
@client.send(:construct_proxy_url).should eql(url)
|
225
|
+
end
|
226
|
+
|
227
|
+
it "should return nil when no proxy host is given" do
|
228
|
+
@client.send(:construct_proxy_url).should eql(nil)
|
229
|
+
end
|
230
|
+
|
231
|
+
after(:each) do
|
232
|
+
Twitter::Client.configure do |conf|
|
233
|
+
conf.proxy_user = nil
|
234
|
+
conf.proxy_pass = nil
|
235
|
+
conf.proxy_host = nil
|
236
|
+
conf.proxy_port = nil
|
237
|
+
end
|
238
|
+
end
|
239
|
+
end
|
@@ -15,12 +15,12 @@ describe Twitter::Client, "#favorites" do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
it "should create expected HTTP GET request when not giving options" do
|
18
|
-
@twitter.should_receive(:rest_oauth_connect).with(:get, @uri).and_return(@response)
|
18
|
+
@twitter.should_receive(:rest_oauth_connect).with(:get, @uri, nil).and_return(@response)
|
19
19
|
@twitter.favorites
|
20
20
|
end
|
21
21
|
|
22
22
|
it "should create expected HTTP GET request when giving :page options" do
|
23
|
-
@twitter.should_receive(:rest_oauth_connect).with(:get,
|
23
|
+
@twitter.should_receive(:rest_oauth_connect).with(:get, @uri, @options).and_return(@response)
|
24
24
|
@twitter.favorites(@options)
|
25
25
|
end
|
26
26
|
|
@@ -98,34 +98,34 @@ module FavoriteSpecMixin
|
|
98
98
|
end
|
99
99
|
end
|
100
100
|
|
101
|
-
|
101
|
+
shared_examples_for "Twitter::Client#favorite error handling" do
|
102
102
|
it "should raise a Twitter::RESTError exception when a 401 HTTP response is received" do
|
103
103
|
connection = mas_net_http(mas_net_http_response(:not_authorized))
|
104
104
|
lambda {
|
105
105
|
execute_method
|
106
106
|
}.should raise_error(Twitter::RESTError)
|
107
|
-
end
|
107
|
+
end
|
108
108
|
|
109
109
|
it "should raise a Twitter::RESTError exception when a 403 HTTP response is received" do
|
110
110
|
connection = mas_net_http(mas_net_http_response(:forbidden))
|
111
111
|
lambda {
|
112
112
|
execute_method
|
113
113
|
}.should raise_error(Twitter::RESTError)
|
114
|
-
end
|
114
|
+
end
|
115
115
|
|
116
116
|
it "should raise a Twitter::RESTError exception when a 404 HTTP response is received" do
|
117
117
|
connection = mas_net_http(mas_net_http_response(:file_not_found))
|
118
118
|
lambda {
|
119
119
|
execute_method
|
120
120
|
}.should raise_error(Twitter::RESTError)
|
121
|
-
end
|
121
|
+
end
|
122
122
|
|
123
123
|
it "should raise a Twitter::RESTError exception when a 500 HTTP response is received" do
|
124
124
|
connection = mas_net_http(mas_net_http_response(:server_error))
|
125
125
|
lambda {
|
126
126
|
execute_method
|
127
127
|
}.should raise_error(Twitter::RESTError)
|
128
|
-
end
|
128
|
+
end
|
129
129
|
end
|
130
130
|
|
131
131
|
describe Twitter::Client, "#favorite(:add, status)" do
|
@@ -169,7 +169,7 @@ describe Twitter::Client, "#favorite(:remove, status)" do
|
|
169
169
|
|
170
170
|
it "should create expected DELETE request for :remove action supplying integer id of status" do
|
171
171
|
@twitter.should_receive(:rest_oauth_connect).with(:delete, create_uri(:destroy, @id)).and_return(@request)
|
172
|
-
|
172
|
+
execute_method
|
173
173
|
end
|
174
174
|
|
175
175
|
it "should create expected DELETE request for :remove action supplying status object" do
|
@@ -32,63 +32,63 @@ describe Twitter::Client, "#friend" do
|
|
32
32
|
@connection = mas_net_http(@response)
|
33
33
|
Twitter::User.stub!(:unmarshal).and_return(@friend)
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
def create_uri(action, id)
|
37
|
-
|
37
|
+
"#{@uris[action]}/#{id}.json"
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
it "should create expected HTTP POST request for :add case using integer user ID" do
|
41
|
-
|
41
|
+
# the integer user ID scenario...
|
42
42
|
@twitter.should_receive(:rest_oauth_connect).with(:post, create_uri(:add, @id)).and_return(@response)
|
43
43
|
@twitter.friend(:add, @id)
|
44
44
|
end
|
45
|
-
|
45
|
+
|
46
46
|
it "should create expected HTTP POST request for :add case using screen name" do
|
47
|
-
|
47
|
+
# the screen name scenario...
|
48
48
|
@twitter.should_receive(:rest_oauth_connect).with(:post, create_uri(:add, @screen_name)).and_return(@response)
|
49
49
|
@twitter.friend(:add, @screen_name)
|
50
50
|
end
|
51
51
|
|
52
|
-
|
53
|
-
|
52
|
+
it "should create expected HTTP GET request for :add case using Twitter::User object" do
|
53
|
+
# the Twitter::User object scenario...
|
54
54
|
@twitter.should_receive(:rest_oauth_connect).with(:post, create_uri(:add, @friend.to_i)).and_return(@response)
|
55
55
|
@twitter.friend(:add, @friend)
|
56
56
|
end
|
57
|
-
|
57
|
+
|
58
58
|
it "should create expected HTTP GET request for :remove case using integer user ID" do
|
59
|
-
|
59
|
+
# the integer user ID scenario...
|
60
60
|
@twitter.should_receive(:rest_oauth_connect).with(:post, create_uri(:remove, @id)).and_return(@response)
|
61
61
|
@twitter.friend(:remove, @id)
|
62
62
|
end
|
63
63
|
|
64
|
-
|
65
|
-
|
64
|
+
it "should create expected HTTP GET request for :remove case using screen name" do
|
65
|
+
# the screen name scenario...
|
66
66
|
@twitter.should_receive(:rest_oauth_connect).with(:post, create_uri(:remove, @screen_name)).and_return(@response)
|
67
67
|
@twitter.friend(:remove, @screen_name)
|
68
68
|
end
|
69
69
|
|
70
70
|
it "should create expected HTTP GET request for :remove case using Twitter::User object" do
|
71
|
-
|
71
|
+
# the Twitter::User object scenario...
|
72
72
|
@twitter.should_receive(:rest_oauth_connect).with(:post, create_uri(:remove, @friend.to_i)).and_return(@response)
|
73
73
|
@twitter.friend(:remove, @friend)
|
74
74
|
end
|
75
|
-
|
75
|
+
|
76
76
|
it "should bless user model returned for :add case" do
|
77
77
|
@twitter.should_receive(:bless_model).with(@friend)
|
78
78
|
@twitter.friend(:add, @friend)
|
79
79
|
end
|
80
|
-
|
80
|
+
|
81
81
|
it "should bless user model returned for :remove case" do
|
82
82
|
@twitter.should_receive(:bless_model).with(@friend)
|
83
83
|
@twitter.friend(:remove, @friend)
|
84
84
|
end
|
85
|
-
|
85
|
+
|
86
86
|
it "should raise ArgumentError if action given is not valid" do
|
87
87
|
lambda {
|
88
88
|
@twitter.friend(:crap, @friend)
|
89
89
|
}.should raise_error(ArgumentError)
|
90
90
|
end
|
91
|
-
|
91
|
+
|
92
92
|
after(:each) do
|
93
93
|
nilize(@twitter, @id, @uris, @response, @connection)
|
94
94
|
end
|
@@ -26,17 +26,17 @@ describe Twitter::Client, "#status" do
|
|
26
26
|
end
|
27
27
|
|
28
28
|
it "should create expected HTTP GET request for :get case" do
|
29
|
-
@twitter.should_receive(:rest_oauth_connect).with(:get,
|
29
|
+
@twitter.should_receive(:rest_oauth_connect).with(:get, @uris[:get], @options).and_return(@response)
|
30
30
|
@twitter.status(:get, @options[:id])
|
31
31
|
end
|
32
32
|
|
33
33
|
it "should invoke @twitter#rest_oauth_connect with given parameters equivalent to {:id => value.to_i} for :get case" do
|
34
34
|
# Float case
|
35
|
-
@twitter.should_receive(:rest_oauth_connect).with(:get,
|
35
|
+
@twitter.should_receive(:rest_oauth_connect).with(:get, @uris[:get], {:id => @float.to_i}).and_return(@response)
|
36
36
|
@twitter.status(:get, @float)
|
37
37
|
|
38
38
|
# Twitter::Status object case
|
39
|
-
@twitter.should_receive(:rest_oauth_connect).with(:get,
|
39
|
+
@twitter.should_receive(:rest_oauth_connect).with(:get, @uris[:get], {:id => @status.to_i}).and_return(@response)
|
40
40
|
@twitter.status(:get, @status)
|
41
41
|
end
|
42
42
|
|
@@ -71,17 +71,17 @@ describe Twitter::Client, "#status" do
|
|
71
71
|
end
|
72
72
|
|
73
73
|
it "should create expected HTTP DELETE request for :delete case" do
|
74
|
-
@twitter.should_receive(:rest_oauth_connect).with(:delete,
|
74
|
+
@twitter.should_receive(:rest_oauth_connect).with(:delete, @uris[:delete], @options).and_return(@response)
|
75
75
|
@twitter.status(:delete, @options[:id])
|
76
76
|
end
|
77
77
|
|
78
78
|
it "should invoke @twitter#rest_oauth_connect with given parameters equivalent to {:id => value.to_i} for :delete case" do
|
79
79
|
# Float case
|
80
|
-
@twitter.should_receive(:rest_oauth_connect).with(:delete,
|
80
|
+
@twitter.should_receive(:rest_oauth_connect).with(:delete, @uris[:delete], {:id => @float.to_i}).and_return(@response)
|
81
81
|
@twitter.status(:delete, @float)
|
82
82
|
|
83
83
|
# Twitter::Status object case
|
84
|
-
@twitter.should_receive(:rest_oauth_connect).with(:delete,
|
84
|
+
@twitter.should_receive(:rest_oauth_connect).with(:delete, @uris[:delete], {:id => @status.to_i}).and_return(@response)
|
85
85
|
@twitter.status(:delete, @status)
|
86
86
|
end
|
87
87
|
|
@@ -19,12 +19,12 @@ describe Twitter::Client, "#user(id, :info)" do
|
|
19
19
|
end
|
20
20
|
|
21
21
|
it "should create expected HTTP GET request when giving numeric user id" do
|
22
|
-
@twitter.should_receive(:rest_oauth_connect).with(:get,
|
22
|
+
@twitter.should_receive(:rest_oauth_connect).with(:get, @uris[:info], {:user_id => @id}).and_return(@response)
|
23
23
|
@twitter.user(@id)
|
24
24
|
end
|
25
25
|
|
26
26
|
it "should create expected HTTP GET request when giving screen name" do
|
27
|
-
@twitter.should_receive(:rest_oauth_connect).with(:get,
|
27
|
+
@twitter.should_receive(:rest_oauth_connect).with(:get, @uris[:info], {:screen_name => @screen_name}).and_return(@response)
|
28
28
|
@twitter.user(@screen_name)
|
29
29
|
end
|
30
30
|
|
@@ -64,7 +64,7 @@ describe Twitter::Client, "#user(id, :friends)" do
|
|
64
64
|
end
|
65
65
|
|
66
66
|
it "should create expected HTTP GET request when giving numeric user id" do
|
67
|
-
@twitter.should_receive(:rest_oauth_connect).with(:get,
|
67
|
+
@twitter.should_receive(:rest_oauth_connect).with(:get, @uris[:friends], {:user_id => @id}).and_return(@response)
|
68
68
|
@twitter.user(@id, :friends)
|
69
69
|
end
|
70
70
|
|
@@ -74,12 +74,12 @@ describe Twitter::Client, "#user(id, :friends)" do
|
|
74
74
|
end
|
75
75
|
|
76
76
|
it "should create expected HTTP GET request when giving Twitter::User object" do
|
77
|
-
@twitter.should_receive(:rest_oauth_connect).with(:get,
|
77
|
+
@twitter.should_receive(:rest_oauth_connect).with(:get, @uris[:friends], {:user_id => @user.to_i}).and_return(@response)
|
78
78
|
@twitter.user(@user, :friends)
|
79
79
|
end
|
80
80
|
|
81
81
|
it "should create expected HTTP GET request when giving screen name" do
|
82
|
-
@twitter.should_receive(:rest_oauth_connect).with(:get,
|
82
|
+
@twitter.should_receive(:rest_oauth_connect).with(:get, @uris[:friends], {:screen_name => @screen_name}).and_return(@response)
|
83
83
|
@twitter.user(@screen_name, :friends)
|
84
84
|
end
|
85
85
|
|
@@ -122,7 +122,7 @@ describe Twitter::Client, "#my(:info)" do
|
|
122
122
|
end
|
123
123
|
|
124
124
|
it "should create expected HTTP GET request" do
|
125
|
-
@twitter.should_receive(:rest_oauth_connect).with(:get,
|
125
|
+
@twitter.should_receive(:rest_oauth_connect).with(:get, @uris[:info], {:id => @screen_name}).and_return(@response)
|
126
126
|
@twitter.my(:info)
|
127
127
|
end
|
128
128
|
|
@@ -160,7 +160,7 @@ describe Twitter::Client, "#my(:friends)" do
|
|
160
160
|
end
|
161
161
|
|
162
162
|
it "should create expected HTTP GET request" do
|
163
|
-
@twitter.should_receive(:rest_oauth_connect).with(:get,
|
163
|
+
@twitter.should_receive(:rest_oauth_connect).with(:get, @uris[:friends], {:id => @screen_name}).and_return(@response)
|
164
164
|
@twitter.my(:friends)
|
165
165
|
end
|
166
166
|
|
@@ -41,19 +41,3 @@ describe Time, "#to_s" do
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
-
# TODO: figure out how to stub the gem method to do what we want rather than this monstrousity. It is dependent on the system installation, which is always a bad thing. For now it will do so we can ship with 100% C0 coverage.
|
45
|
-
describe Kernel, "#gem_present?" do
|
46
|
-
before(:each) do
|
47
|
-
@present_gem = "rake"
|
48
|
-
@uninstalled_gem = "uninstalled-gem-crap"
|
49
|
-
end
|
50
|
-
|
51
|
-
it "should return true when a gem isn't present on system" do
|
52
|
-
gem_present?(@present_gem).should eql(true)
|
53
|
-
end
|
54
|
-
|
55
|
-
it "should return false when a gem isn't present on system" do
|
56
|
-
gem_present?(@uninstalled_gem).should eql(false)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: twitter4r
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 11
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
8
7
|
- 5
|
9
|
-
-
|
10
|
-
version: 0.5.
|
8
|
+
- 1
|
9
|
+
version: 0.5.1
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Susan Potter
|
@@ -15,18 +14,16 @@ autorequire: twitter
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2010-
|
17
|
+
date: 2010-09-07 00:00:00 -05:00
|
19
18
|
default_executable:
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
22
21
|
name: oauth
|
23
22
|
prerelease: false
|
24
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
24
|
requirements:
|
27
25
|
- - ">="
|
28
26
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 13
|
30
27
|
segments:
|
31
28
|
- 0
|
32
29
|
- 4
|
@@ -38,11 +35,9 @@ dependencies:
|
|
38
35
|
name: json
|
39
36
|
prerelease: false
|
40
37
|
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
38
|
requirements:
|
43
39
|
- - ">="
|
44
40
|
- !ruby/object:Gem::Version
|
45
|
-
hash: 17
|
46
41
|
segments:
|
47
42
|
- 1
|
48
43
|
- 1
|
@@ -122,22 +117,18 @@ rdoc_options: []
|
|
122
117
|
require_paths:
|
123
118
|
- lib
|
124
119
|
required_ruby_version: !ruby/object:Gem::Requirement
|
125
|
-
none: false
|
126
120
|
requirements:
|
127
121
|
- - ">="
|
128
122
|
- !ruby/object:Gem::Version
|
129
|
-
hash: 59
|
130
123
|
segments:
|
131
124
|
- 1
|
132
125
|
- 8
|
133
126
|
- 6
|
134
127
|
version: 1.8.6
|
135
128
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
|
-
none: false
|
137
129
|
requirements:
|
138
130
|
- - ">="
|
139
131
|
- !ruby/object:Gem::Version
|
140
|
-
hash: 3
|
141
132
|
segments:
|
142
133
|
- 0
|
143
134
|
version: "0"
|
@@ -146,7 +137,7 @@ requirements:
|
|
146
137
|
- json gem, version 0.4.3 or higher
|
147
138
|
- jcode (for unicode support)
|
148
139
|
rubyforge_project: twitter4r
|
149
|
-
rubygems_version: 1.3.
|
140
|
+
rubygems_version: 1.3.6
|
150
141
|
signing_key:
|
151
142
|
specification_version: 3
|
152
143
|
summary: A clean Twitter client API in pure Ruby. Will include Twitter add-ons also in Ruby.
|