rcarver-twitter 0.5.4

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.
@@ -0,0 +1,80 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class BaseTest < Test::Unit::TestCase
4
+ context "base" do
5
+ setup do
6
+ oauth = Twitter::OAuth.new('token', 'secret')
7
+ @access_token = OAuth::AccessToken.new(oauth.consumer, 'atoken', 'asecret')
8
+ oauth.stubs(:access_token).returns(@access_token)
9
+ @twitter = Twitter::Base.new(oauth)
10
+ end
11
+
12
+ context "initialize" do
13
+ should "require an oauth object" do
14
+ @twitter.instance_variable_get('@client').should == @access_token
15
+ end
16
+ end
17
+
18
+ should "delegate get to the client" do
19
+ @access_token.expects(:get).with('/foo').returns(nil)
20
+ @twitter.get('/foo')
21
+ end
22
+
23
+ should "delegate post to the client" do
24
+ @access_token.expects(:post).with('/foo', {:bar => 'baz'}).returns(nil)
25
+ @twitter.post('/foo', {:bar => 'baz'})
26
+ end
27
+
28
+ context "hitting the api" do
29
+ should "be able to get friends timeline" do
30
+ stub_get('/statuses/friends_timeline.json', 'friends_timeline.json')
31
+ timeline = @twitter.friends_timeline
32
+ timeline.size.should == 20
33
+ first = timeline.first
34
+ first.source.should == '<a href="http://www.atebits.com/software/tweetie/">Tweetie</a>'
35
+ first.user.name.should == 'John Nunemaker'
36
+ first.user.url.should == 'http://railstips.org/about'
37
+ first.id.should == 1441588944
38
+ first.favorited.should be(false)
39
+ end
40
+
41
+ should "be able to get user timeline" do
42
+ stub_get('/statuses/user_timeline.json', 'user_timeline.json')
43
+ timeline = @twitter.user_timeline
44
+ timeline.size.should == 20
45
+ first = timeline.first
46
+ first.text.should == 'Colder out today than expected. Headed to the Beanery for some morning wakeup drink. Latte or coffee...hmmm...'
47
+ first.user.name.should == 'John Nunemaker'
48
+ end
49
+
50
+ should "be able to get a status" do
51
+ stub_get('/statuses/show/1441588944.json', 'status.json')
52
+ status = @twitter.status(1441588944)
53
+ status.user.name.should == 'John Nunemaker'
54
+ status.id.should == 1441588944
55
+ end
56
+
57
+ should "be able to update status" do
58
+ stub_post('/statuses/update.json', 'status.json')
59
+ status = @twitter.update('Rob Dyrdek is the funniest man alive. That is all.')
60
+ status.user.name.should == 'John Nunemaker'
61
+ status.text.should == 'Rob Dyrdek is the funniest man alive. That is all.'
62
+ end
63
+
64
+ should "be able to get replies" do
65
+ stub_get('/statuses/replies.json', 'replies.json')
66
+ replies = @twitter.replies
67
+ replies.size.should == 19
68
+ first = replies.first
69
+ first.user.name.should == '-oAk-'
70
+ first.text.should == '@jnunemaker cold out today. cold yesterday. even colder today.'
71
+ end
72
+
73
+ should "correctly hash statuses" do
74
+ stub_get('/statuses/friends_timeline.json', 'friends_timeline.json')
75
+ hashes = @twitter.friends_timeline.map{ |s| s.hash }
76
+ hashes.should == @twitter.friends_timeline.map{ |s| s.hash }
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,55 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class OAuthTest < Test::Unit::TestCase
4
+ should "initialize with consumer token and secret" do
5
+ twitter = Twitter::OAuth.new('token', 'secret')
6
+
7
+ twitter.ctoken.should == 'token'
8
+ twitter.csecret.should == 'secret'
9
+ end
10
+
11
+ should "have a consumer" do
12
+ consumer = mock('oauth consumer')
13
+ OAuth::Consumer.expects(:new).with('token', 'secret', {:site => 'http://twitter.com'}).returns(consumer)
14
+ twitter = Twitter::OAuth.new('token', 'secret')
15
+
16
+ twitter.consumer.should == consumer
17
+ end
18
+
19
+ should "have a request token from the consumer" do
20
+ consumer = mock('oauth consumer')
21
+ request_token = mock('request token')
22
+ consumer.expects(:get_request_token).returns(request_token)
23
+ OAuth::Consumer.expects(:new).with('token', 'secret', {:site => 'http://twitter.com'}).returns(consumer)
24
+ twitter = Twitter::OAuth.new('token', 'secret')
25
+
26
+ twitter.request_token.should == request_token
27
+ end
28
+
29
+ should "be able to create access token from request token and secret" do
30
+ twitter = Twitter::OAuth.new('token', 'secret')
31
+ consumer = OAuth::Consumer.new('token', 'secret', {:site => 'http://twitter.com'})
32
+ twitter.stubs(:consumer).returns(consumer)
33
+
34
+ access_token = mock('access token', :token => 'atoken', :secret => 'asecret')
35
+ request_token = mock('request token')
36
+ request_token.expects(:get_access_token).returns(access_token)
37
+ OAuth::RequestToken.expects(:new).with(consumer, 'rtoken', 'rsecret').returns(request_token)
38
+
39
+ twitter.authorize_from_request('rtoken', 'rsecret')
40
+ twitter.access_token.class.should be(OAuth::AccessToken)
41
+ twitter.access_token.token.should == 'atoken'
42
+ twitter.access_token.secret.should == 'asecret'
43
+ end
44
+
45
+ should "be able to create access token from access token and secret" do
46
+ twitter = Twitter::OAuth.new('token', 'secret')
47
+ consumer = OAuth::Consumer.new('token', 'secret', {:site => 'http://twitter.com'})
48
+ twitter.stubs(:consumer).returns(consumer)
49
+
50
+ twitter.authorize_from_access('atoken', 'asecret')
51
+ twitter.access_token.class.should be(OAuth::AccessToken)
52
+ twitter.access_token.token.should == 'atoken'
53
+ twitter.access_token.secret.should == 'asecret'
54
+ end
55
+ end
@@ -0,0 +1,203 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class RequestTest < Test::Unit::TestCase
4
+ context "new get request" do
5
+ setup do
6
+ @base = mock('twitter base')
7
+ @request = Twitter::Request.new(@base, :get, '/statuses/user_timeline.json', {:query => {:since_id => 1234}})
8
+ end
9
+
10
+ should "have base" do
11
+ @request.base.should == @base
12
+ end
13
+
14
+ should "have method" do
15
+ @request.method.should == :get
16
+ end
17
+
18
+ should "have path" do
19
+ @request.path.should == '/statuses/user_timeline.json'
20
+ end
21
+
22
+ should "have options" do
23
+ @request.options.should == {:query => {:since_id => 1234}}
24
+ end
25
+
26
+ should "have uri" do
27
+ @request.uri.should == '/statuses/user_timeline.json?since_id=1234'
28
+ end
29
+
30
+ context "performing request for collection" do
31
+ setup do
32
+ response = mock('response') do
33
+ stubs(:body).returns(fixture_file('user_timeline.json'))
34
+ stubs(:code).returns('200')
35
+ end
36
+
37
+ @base.expects(:get).returns(response)
38
+ @object = @request.perform
39
+ end
40
+
41
+ should "return array of mashes" do
42
+ @object.size.should == 20
43
+ @object.each { |obj| obj.class.should be(Mash) }
44
+ @object.first.text.should == 'Colder out today than expected. Headed to the Beanery for some morning wakeup drink. Latte or coffee...hmmm...'
45
+ end
46
+ end
47
+
48
+ context "performing a request for a single object" do
49
+ setup do
50
+ response = mock('response') do
51
+ stubs(:body).returns(fixture_file('status.json'))
52
+ stubs(:code).returns('200')
53
+ end
54
+
55
+ @base.expects(:get).returns(response)
56
+ @object = @request.perform
57
+ end
58
+
59
+ should "return a single mash" do
60
+ @object.class.should be(Mash)
61
+ @object.text.should == 'Rob Dyrdek is the funniest man alive. That is all.'
62
+ end
63
+ end
64
+
65
+ context "with no query string" do
66
+ should "not have any query string" do
67
+ request = Twitter::Request.new(@base, :get, '/statuses/user_timeline.json')
68
+ request.uri.should == '/statuses/user_timeline.json'
69
+ end
70
+ end
71
+
72
+ context "with blank query string" do
73
+ should "not have any query string" do
74
+ request = Twitter::Request.new(@base, :get, '/statuses/user_timeline.json', :query => {})
75
+ request.uri.should == '/statuses/user_timeline.json'
76
+ end
77
+ end
78
+
79
+ should "have get shortcut to initialize and perform all in one" do
80
+ Twitter::Request.any_instance.expects(:perform).returns(nil)
81
+ Twitter::Request.get(@base, '/foo')
82
+ end
83
+
84
+ should "allow setting query string and headers" do
85
+ response = mock('response') do
86
+ stubs(:body).returns('')
87
+ stubs(:code).returns('200')
88
+ end
89
+
90
+ @base.expects(:get).with('/statuses/friends_timeline.json?since_id=1234', {'Foo' => 'Bar'}).returns(response)
91
+ Twitter::Request.get(@base, '/statuses/friends_timeline.json?since_id=1234', :headers => {'Foo' => 'Bar'})
92
+ end
93
+ end
94
+
95
+ context "new post request" do
96
+ setup do
97
+ @base = mock('twitter base')
98
+ @request = Twitter::Request.new(@base, :post, '/statuses/update.json', {:body => {:status => 'Woohoo!'}})
99
+ end
100
+
101
+ should "allow setting body and headers" do
102
+ response = mock('response') do
103
+ stubs(:body).returns('')
104
+ stubs(:code).returns('200')
105
+ end
106
+
107
+ @base.expects(:post).with('/statuses/update.json', {:status => 'Woohoo!'}, {'Foo' => 'Bar'}).returns(response)
108
+ Twitter::Request.post(@base, '/statuses/update.json', :body => {:status => 'Woohoo!'}, :headers => {'Foo' => 'Bar'})
109
+ end
110
+
111
+ context "performing request" do
112
+ setup do
113
+ response = mock('response') do
114
+ stubs(:body).returns(fixture_file('status.json'))
115
+ stubs(:code).returns('200')
116
+ end
117
+
118
+ @base.expects(:post).returns(response)
119
+ @object = @request.perform
120
+ end
121
+
122
+ should "return a mash of the object" do
123
+ @object.text.should == 'Rob Dyrdek is the funniest man alive. That is all.'
124
+ end
125
+ end
126
+
127
+ should "have post shortcut to initialize and perform all in one" do
128
+ Twitter::Request.any_instance.expects(:perform).returns(nil)
129
+ Twitter::Request.post(@base, '/foo')
130
+ end
131
+ end
132
+
133
+ context "error raising" do
134
+ setup do
135
+ oauth = Twitter::OAuth.new('token', 'secret')
136
+ oauth.authorize_from_access('atoken', 'asecret')
137
+ @base = Twitter::Base.new(oauth)
138
+ end
139
+
140
+ should "not raise error for 200" do
141
+ stub_get('http://twitter.com:80/foo', '', ['200'])
142
+ lambda {
143
+ Twitter::Request.get(@base, '/foo')
144
+ }.should_not raise_error
145
+ end
146
+
147
+ should "not raise error for 304" do
148
+ stub_get('http://twitter.com:80/foo', '', ['304'])
149
+ lambda {
150
+ Twitter::Request.get(@base, '/foo')
151
+ }.should_not raise_error
152
+ end
153
+
154
+ should "raise RateLimitExceeded for 400" do
155
+ stub_get('http://twitter.com:80/foo', 'rate_limit_exceeded.json', ['400'])
156
+ lambda {
157
+ Twitter::Request.get(@base, '/foo')
158
+ }.should raise_error(Twitter::RateLimitExceeded)
159
+ end
160
+
161
+ should "raise Unauthorized for 401" do
162
+ stub_get('http://twitter.com:80/foo', '', ['401'])
163
+ lambda {
164
+ Twitter::Request.get(@base, '/foo')
165
+ }.should raise_error(Twitter::Unauthorized)
166
+ end
167
+
168
+ should "raise General for 403" do
169
+ stub_get('http://twitter.com:80/foo', '', ['403'])
170
+ lambda {
171
+ Twitter::Request.get(@base, '/foo')
172
+ }.should raise_error(Twitter::General)
173
+ end
174
+
175
+ should "raise NotFound for 404" do
176
+ stub_get('http://twitter.com:80/foo', '', ['404'])
177
+ lambda {
178
+ Twitter::Request.get(@base, '/foo')
179
+ }.should raise_error(Twitter::NotFound)
180
+ end
181
+
182
+ should "raise InformTwitter for 500" do
183
+ stub_get('http://twitter.com:80/foo', '', ['500'])
184
+ lambda {
185
+ Twitter::Request.get(@base, '/foo')
186
+ }.should raise_error(Twitter::InformTwitter)
187
+ end
188
+
189
+ should "raise Unavailable for 502" do
190
+ stub_get('http://twitter.com:80/foo', '', ['502'])
191
+ lambda {
192
+ Twitter::Request.get(@base, '/foo')
193
+ }.should raise_error(Twitter::Unavailable)
194
+ end
195
+
196
+ should "raise Unavailable for 503" do
197
+ stub_get('http://twitter.com:80/foo', '', ['503'])
198
+ lambda {
199
+ Twitter::Request.get(@base, '/foo')
200
+ }.should raise_error(Twitter::Unavailable)
201
+ end
202
+ end
203
+ end
@@ -0,0 +1,138 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class SearchTest < Test::Unit::TestCase
4
+ context "searching" do
5
+ setup do
6
+ @search = Twitter::Search.new
7
+ end
8
+
9
+ should "should be able to initialize with a search term" do
10
+ Twitter::Search.new('httparty').query[:q].should include('httparty')
11
+ end
12
+
13
+ should "should be able to specify from" do
14
+ @search.from('jnunemaker').query[:q].should include('from:jnunemaker')
15
+ end
16
+
17
+ should "should be able to specify to" do
18
+ @search.to('jnunemaker').query[:q].should include('to:jnunemaker')
19
+ end
20
+
21
+ should "should be able to specify referencing" do
22
+ @search.referencing('jnunemaker').query[:q].should include('@jnunemaker')
23
+ end
24
+
25
+ should "should alias references to referencing" do
26
+ @search.references('jnunemaker').query[:q].should include('@jnunemaker')
27
+ end
28
+
29
+ should "should alias ref to referencing" do
30
+ @search.ref('jnunemaker').query[:q].should include('@jnunemaker')
31
+ end
32
+
33
+ should "should be able to specify containing" do
34
+ @search.containing('milk').query[:q].should include('milk')
35
+ end
36
+
37
+ should "should alias contains to containing" do
38
+ @search.contains('milk').query[:q].should include('milk')
39
+ end
40
+
41
+ should "should be able to specify hashed" do
42
+ @search.hashed('twitter').query[:q].should include('#twitter')
43
+ end
44
+
45
+ should "should be able to specify the language" do
46
+ @search.lang('en')
47
+ @search.class.expects(:get).with('http://search.twitter.com/search.json', :query => {:lang => 'en', :q => ''}, :format => :json).returns({'foo' => 'bar'})
48
+ @search.fetch()
49
+ end
50
+
51
+ should "should be able to specify the number of results per page" do
52
+ @search.per_page(25)
53
+ @search.class.expects(:get).with('http://search.twitter.com/search.json', :query => {:rpp => 25, :q => ''}, :format => :json).returns({'foo' => 'bar'})
54
+ @search.fetch()
55
+ end
56
+
57
+ should "should be able to specify the page number" do
58
+ @search.page(20)
59
+ @search.class.expects(:get).with('http://search.twitter.com/search.json', :query => {:page => 20, :q => ''}, :format => :json).returns({'foo' => 'bar'})
60
+ @search.fetch()
61
+ end
62
+
63
+ should "should be able to specify only returning results greater than an id" do
64
+ @search.since(1234)
65
+ @search.class.expects(:get).with('http://search.twitter.com/search.json', :query => {:since_id => 1234, :q => ''}, :format => :json).returns({'foo' => 'bar'})
66
+ @search.fetch()
67
+ end
68
+
69
+ should "should be able to specify geo coordinates" do
70
+ @search.geocode('40.757929', '-73.985506', '25mi')
71
+ @search.class.expects(:get).with('http://search.twitter.com/search.json', :query => {:geocode => '40.757929,-73.985506,25mi', :q => ''}, :format => :json).returns({'foo' => 'bar'})
72
+ @search.fetch()
73
+ end
74
+
75
+ should "should be able to clear the filters set" do
76
+ @search.from('jnunemaker').to('oaknd1')
77
+ @search.clear.query.should == {:q => []}
78
+ end
79
+
80
+ should "should be able to chain methods together" do
81
+ @search.from('jnunemaker').to('oaknd1').referencing('orderedlist').containing('milk').hashed('twitter').lang('en').per_page(20).since(1234).geocode('40.757929', '-73.985506', '25mi')
82
+ @search.query[:q].should == ['from:jnunemaker', 'to:oaknd1', '@orderedlist', 'milk', '#twitter']
83
+ @search.query[:lang].should == 'en'
84
+ @search.query[:rpp].should == 20
85
+ @search.query[:since_id].should == 1234
86
+ @search.query[:geocode].should == '40.757929,-73.985506,25mi'
87
+ end
88
+
89
+ context "fetching" do
90
+ setup do
91
+ stub_get('http://search.twitter.com:80/search.json?q=%40jnunemaker', 'search.json')
92
+ @search = Twitter::Search.new('@jnunemaker')
93
+ @response = @search.fetch
94
+ end
95
+
96
+ should "should return results" do
97
+ @response.results.size.should == 15
98
+ end
99
+
100
+ should "should support dot notation" do
101
+ first = @response.results.first
102
+ first.text.should == %q(Someone asked about a tweet reader. Easy to do in ruby with @jnunemaker's twitter gem and the win32-sapi gem, if you are on windows.)
103
+ first.from_user.should == 'PatParslow'
104
+ end
105
+
106
+ should "cache fetched results so multiple fetches don't keep hitting api" do
107
+ Twitter::Search.expects(:get).never
108
+ @search.fetch
109
+ end
110
+
111
+ should "rehit api if fetch is called with true" do
112
+ Twitter::Search.expects(:get).once
113
+ @search.fetch(true)
114
+ end
115
+ end
116
+
117
+ context "iterating over results" do
118
+ setup do
119
+ stub_get('http://search.twitter.com:80/search.json?q=from%3Ajnunemaker', 'search_from_jnunemaker.json')
120
+ @search.from('jnunemaker')
121
+ end
122
+
123
+ should "work" do
124
+ @search.each { |result| result.should_not be(nil) }
125
+ end
126
+
127
+ should "work multiple times in a row" do
128
+ @search.each { |result| result.should_not be(nil) }
129
+ @search.each { |result| result.should_not be(nil) }
130
+ end
131
+ end
132
+
133
+ should "should be able to iterate over results" do
134
+ @search.respond_to?(:each).should be(true)
135
+ end
136
+ end
137
+
138
+ end
@@ -0,0 +1,12 @@
1
+ require 'test_helper'
2
+
3
+ class TwitterTest < Test::Unit::TestCase
4
+ should "have firehose method for public timeline" do
5
+ stub_get('http://twitter.com:80/statuses/public_timeline.json', 'firehose.json')
6
+ hose = Twitter.firehose
7
+ hose.size.should == 20
8
+ first = hose.first
9
+ first.text.should == '#torrents Ultimativer Flirt Guide - In 10 Minuten jede Frau erobern: Ultimativer Flirt Guide - In 10 Mi.. http://tinyurl.com/d3okh4'
10
+ first.user.name.should == 'P2P Torrents'
11
+ end
12
+ end
metadata ADDED
@@ -0,0 +1,173 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rcarver-twitter
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.4
5
+ platform: ruby
6
+ authors:
7
+ - John Nunemaker
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-04-10 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: oauth
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: extlib
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: httparty
37
+ type: :runtime
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 0.4.2
44
+ version:
45
+ - !ruby/object:Gem::Dependency
46
+ name: thoughtbot-shoulda
47
+ type: :development
48
+ version_requirement:
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: "0"
54
+ version:
55
+ - !ruby/object:Gem::Dependency
56
+ name: jeremymcanally-matchy
57
+ type: :development
58
+ version_requirement:
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: "0"
64
+ version:
65
+ - !ruby/object:Gem::Dependency
66
+ name: mocha
67
+ type: :development
68
+ version_requirement:
69
+ version_requirements: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: "0"
74
+ version:
75
+ - !ruby/object:Gem::Dependency
76
+ name: fakeweb
77
+ type: :development
78
+ version_requirement:
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: "0"
84
+ version:
85
+ - !ruby/object:Gem::Dependency
86
+ name: extlib
87
+ type: :development
88
+ version_requirement:
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: "0"
94
+ version:
95
+ description:
96
+ email: nunemaker@gmail.com
97
+ executables: []
98
+
99
+ extensions: []
100
+
101
+ extra_rdoc_files:
102
+ - README.rdoc
103
+ files:
104
+ - History
105
+ - License
106
+ - Notes
107
+ - README.rdoc
108
+ - Rakefile
109
+ - VERSION.yml
110
+ - examples/connect.rb
111
+ - examples/friendship_existance.rb
112
+ - examples/helpers/config_store.rb
113
+ - examples/search.rb
114
+ - examples/timeline.rb
115
+ - examples/update.rb
116
+ - lib/twitter.rb
117
+ - lib/twitter/base.rb
118
+ - lib/twitter/oauth.rb
119
+ - lib/twitter/request.rb
120
+ - lib/twitter/search.rb
121
+ - test/fixtures/firehose.json
122
+ - test/fixtures/friends_timeline.json
123
+ - test/fixtures/rate_limit_exceeded.json
124
+ - test/fixtures/replies.json
125
+ - test/fixtures/search.json
126
+ - test/fixtures/search_from_jnunemaker.json
127
+ - test/fixtures/status.json
128
+ - test/fixtures/user_timeline.json
129
+ - test/test_helper.rb
130
+ - test/twitter/base_test.rb
131
+ - test/twitter/oauth_test.rb
132
+ - test/twitter/request_test.rb
133
+ - test/twitter/search_test.rb
134
+ - test/twitter_test.rb
135
+ has_rdoc: true
136
+ homepage: http://github.com/jnunemaker/twitter
137
+ post_install_message:
138
+ rdoc_options:
139
+ - --charset=UTF-8
140
+ require_paths:
141
+ - lib
142
+ required_ruby_version: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: "0"
147
+ version:
148
+ required_rubygems_version: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: "0"
153
+ version:
154
+ requirements: []
155
+
156
+ rubyforge_project: twitter
157
+ rubygems_version: 1.2.0
158
+ signing_key:
159
+ specification_version: 2
160
+ summary: wrapper for the twitter api (oauth only)
161
+ test_files:
162
+ - test/test_helper.rb
163
+ - test/twitter/base_test.rb
164
+ - test/twitter/oauth_test.rb
165
+ - test/twitter/request_test.rb
166
+ - test/twitter/search_test.rb
167
+ - test/twitter_test.rb
168
+ - examples/connect.rb
169
+ - examples/friendship_existance.rb
170
+ - examples/helpers/config_store.rb
171
+ - examples/search.rb
172
+ - examples/timeline.rb
173
+ - examples/update.rb