jnunemaker-twitter 0.5.1 → 0.5.2
Sign up to get free protection for your applications and to get access to all the features.
- data/History +8 -0
- data/Rakefile +7 -0
- data/VERSION.yml +1 -1
- data/examples/search.rb +6 -1
- data/lib/twitter/request.rb +15 -5
- data/lib/twitter/search.rb +3 -1
- data/test/twitter/base_test.rb +6 -0
- data/test/twitter/search_test.rb +15 -5
- metadata +77 -11
data/History
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
0.5.2 - April 8, 2009
|
2
|
+
* 4 minor fixes
|
3
|
+
* added mash as an install dependency, forgot it initially
|
4
|
+
* fixed that search wasn't taking into account a bunch of options duh!
|
5
|
+
* fixed some missing vars and stuff in exception raising
|
6
|
+
* added development dependencies to rake file to make that more explicit (technomancy)
|
7
|
+
* lame workaround for Mash#hash that allows using return objects in sets and such (technomancy)
|
8
|
+
|
1
9
|
0.5.1 - April 5, 2009
|
2
10
|
* 1 minor change
|
3
11
|
* Added data error hash returned from twitter to a few of the exceptions to help with debugging
|
data/Rakefile
CHANGED
@@ -13,7 +13,14 @@ begin
|
|
13
13
|
gem.files = FileList["[A-Z]*", "{examples,lib,test}/**/*"]
|
14
14
|
|
15
15
|
gem.add_dependency('oauth')
|
16
|
+
gem.add_dependency('mash')
|
16
17
|
gem.add_dependency('httparty', '>= 0.4.2')
|
18
|
+
|
19
|
+
gem.add_development_dependency('thoughtbot-shoulda')
|
20
|
+
gem.add_development_dependency('jeremymcanally-matchy')
|
21
|
+
gem.add_development_dependency('mocha')
|
22
|
+
gem.add_development_dependency('fakeweb')
|
23
|
+
gem.add_development_dependency('mash')
|
17
24
|
end
|
18
25
|
rescue LoadError
|
19
26
|
puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
|
data/VERSION.yml
CHANGED
data/examples/search.rb
CHANGED
@@ -7,4 +7,9 @@ puts '*'*50, 'First Run', '*'*50
|
|
7
7
|
search.each { |result| pp result }
|
8
8
|
|
9
9
|
puts '*'*50, 'Second Run', '*'*50
|
10
|
-
search.each { |result| pp result }
|
10
|
+
search.each { |result| pp result }
|
11
|
+
|
12
|
+
puts '*'*50, 'Parameter Check', '*'*50
|
13
|
+
pp Twitter::Search.new('#austineats').fetch().results.first
|
14
|
+
pp Twitter::Search.new('#austineats').page(2).fetch().results.first
|
15
|
+
pp Twitter::Search.new('#austineats').since(1412737343).fetch().results.first
|
data/lib/twitter/request.rb
CHANGED
@@ -51,13 +51,14 @@ module Twitter
|
|
51
51
|
def raise_errors(response)
|
52
52
|
case response.code.to_i
|
53
53
|
when 400
|
54
|
-
|
54
|
+
data = parse(response)
|
55
|
+
raise RateLimitExceeded.new(data), "(#{response.code}): #{response.message} - #{data['error'] if data}"
|
55
56
|
when 401
|
56
57
|
data = parse(response)
|
57
|
-
raise Unauthorized.new(data), "(#{response.code}): #{response.message} - #{data['error']}"
|
58
|
+
raise Unauthorized.new(data), "(#{response.code}): #{response.message} - #{data['error'] if data}"
|
58
59
|
when 403
|
59
60
|
data = parse(response)
|
60
|
-
raise General.new(data), "(#{response.code}): #{response.message} - #{data['error']}"
|
61
|
+
raise General.new(data), "(#{response.code}): #{response.message} - #{data['error'] if data}"
|
61
62
|
when 404
|
62
63
|
raise NotFound, "(#{response.code}): #{response.message}"
|
63
64
|
when 500
|
@@ -73,13 +74,22 @@ module Twitter
|
|
73
74
|
|
74
75
|
def mash(obj)
|
75
76
|
if obj.is_a?(Array)
|
76
|
-
obj.map { |item|
|
77
|
+
obj.map { |item| make_mash_with_consistent_hash(item) }
|
77
78
|
elsif obj.is_a?(Hash)
|
78
|
-
|
79
|
+
make_mash_with_consistent_hash(obj)
|
79
80
|
else
|
80
81
|
obj
|
81
82
|
end
|
82
83
|
end
|
84
|
+
|
85
|
+
# Lame workaround for the fact that mash doesn't hash correctly
|
86
|
+
def make_mash_with_consistent_hash(obj)
|
87
|
+
m = Mash.new(obj)
|
88
|
+
def m.hash
|
89
|
+
inspect.hash
|
90
|
+
end
|
91
|
+
return m
|
92
|
+
end
|
83
93
|
|
84
94
|
def to_query(options)
|
85
95
|
options.inject([]) do |collection, opt|
|
data/lib/twitter/search.rb
CHANGED
@@ -85,7 +85,9 @@ module Twitter
|
|
85
85
|
|
86
86
|
def fetch(force=false)
|
87
87
|
if @fetch.nil? || force
|
88
|
-
|
88
|
+
query = @query.dup
|
89
|
+
query[:q] = query[:q].join(' ')
|
90
|
+
response = self.class.get('http://search.twitter.com/search.json', :query => query, :format => :json)
|
89
91
|
@fetch = Mash.new(response)
|
90
92
|
end
|
91
93
|
|
data/test/twitter/base_test.rb
CHANGED
@@ -69,6 +69,12 @@ class BaseTest < Test::Unit::TestCase
|
|
69
69
|
first.user.name.should == '-oAk-'
|
70
70
|
first.text.should == '@jnunemaker cold out today. cold yesterday. even colder today.'
|
71
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
|
72
78
|
end
|
73
79
|
end
|
74
80
|
end
|
data/test/twitter/search_test.rb
CHANGED
@@ -43,23 +43,33 @@ class SearchTest < Test::Unit::TestCase
|
|
43
43
|
end
|
44
44
|
|
45
45
|
should "should be able to specify the language" do
|
46
|
-
@search.lang('en')
|
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()
|
47
49
|
end
|
48
50
|
|
49
51
|
should "should be able to specify the number of results per page" do
|
50
|
-
@search.per_page(25)
|
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()
|
51
55
|
end
|
52
56
|
|
53
57
|
should "should be able to specify the page number" do
|
54
|
-
@search.page(20)
|
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()
|
55
61
|
end
|
56
62
|
|
57
63
|
should "should be able to specify only returning results greater than an id" do
|
58
|
-
@search.since(1234)
|
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()
|
59
67
|
end
|
60
68
|
|
61
69
|
should "should be able to specify geo coordinates" do
|
62
|
-
@search.geocode('40.757929', '-73.985506', '25mi')
|
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()
|
63
73
|
end
|
64
74
|
|
65
75
|
should "should be able to clear the filters set" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jnunemaker-twitter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Nunemaker
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-04-
|
12
|
+
date: 2009-04-08 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -22,6 +22,16 @@ dependencies:
|
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: "0"
|
24
24
|
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: mash
|
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:
|
25
35
|
- !ruby/object:Gem::Dependency
|
26
36
|
name: httparty
|
27
37
|
type: :runtime
|
@@ -32,6 +42,56 @@ dependencies:
|
|
32
42
|
- !ruby/object:Gem::Version
|
33
43
|
version: 0.4.2
|
34
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: mash
|
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:
|
35
95
|
description:
|
36
96
|
email: nunemaker@gmail.com
|
37
97
|
executables: []
|
@@ -44,23 +104,20 @@ files:
|
|
44
104
|
- History
|
45
105
|
- License
|
46
106
|
- Notes
|
47
|
-
- Rakefile
|
48
107
|
- README.rdoc
|
108
|
+
- Rakefile
|
49
109
|
- VERSION.yml
|
50
110
|
- examples/connect.rb
|
51
111
|
- examples/friendship_existance.rb
|
52
|
-
- examples/helpers
|
53
112
|
- examples/helpers/config_store.rb
|
54
113
|
- examples/search.rb
|
55
114
|
- examples/timeline.rb
|
56
115
|
- examples/update.rb
|
57
|
-
- lib/twitter
|
116
|
+
- lib/twitter.rb
|
58
117
|
- lib/twitter/base.rb
|
59
118
|
- lib/twitter/oauth.rb
|
60
119
|
- lib/twitter/request.rb
|
61
120
|
- lib/twitter/search.rb
|
62
|
-
- lib/twitter.rb
|
63
|
-
- test/fixtures
|
64
121
|
- test/fixtures/firehose.json
|
65
122
|
- test/fixtures/friends_timeline.json
|
66
123
|
- test/fixtures/rate_limit_exceeded.json
|
@@ -70,7 +127,6 @@ files:
|
|
70
127
|
- test/fixtures/status.json
|
71
128
|
- test/fixtures/user_timeline.json
|
72
129
|
- test/test_helper.rb
|
73
|
-
- test/twitter
|
74
130
|
- test/twitter/base_test.rb
|
75
131
|
- test/twitter/oauth_test.rb
|
76
132
|
- test/twitter/request_test.rb
|
@@ -80,7 +136,6 @@ has_rdoc: true
|
|
80
136
|
homepage: http://github.com/jnunemaker/twitter
|
81
137
|
post_install_message:
|
82
138
|
rdoc_options:
|
83
|
-
- --inline-source
|
84
139
|
- --charset=UTF-8
|
85
140
|
require_paths:
|
86
141
|
- lib
|
@@ -103,5 +158,16 @@ rubygems_version: 1.2.0
|
|
103
158
|
signing_key:
|
104
159
|
specification_version: 2
|
105
160
|
summary: wrapper for the twitter api (oauth only)
|
106
|
-
test_files:
|
107
|
-
|
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
|