forked from zapnap/sinatra-template
/
tweeter.rb
89 lines (74 loc) · 1.79 KB
/
tweeter.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
require 'pp'
require 'geonames'
class Tweeter
include Comparable
attr_reader :foafs, :geoname
def initialize(client, tweeter, who = 'friends')
@foafs = []
@client = client
case tweeter
when String
@given_screen_name = URI.escape(tweeter)
puts "@given_screen_name: #{@given_screen_name}"
@tweeter = self.show
if self.exists?
foafs = self.who(who)
@foafs = foafs.map { |foaf| Tweeter.new(@client, foaf) }
# @geoname = GeoNames.new(@tweeter['location']) unless @tweeter['location'].blank?
end
when Hash
@tweeter = tweeter
end
# This is somewhat of an ugly hack. The alternative is to put this
# logic in method_missing()
@tweeter['url'] = '' unless @tweeter['url']
end
def exists(resp)
@exists = resp['error'] != 'Not found'
end
def exists?
@exists
end
def show
puts "Calling @client.show(#{@given_screen_name})"
resp = @client.show(@given_screen_name)
exists(resp)
resp
end
def friends
puts "Calling @client.friends"
resp = @client.friends
# puts resp.to_yaml
resp
end
def followers
puts "Calling @client.followers"
resp = @client.followers
end
def all
self.friends | self.followers
end
def who(who)
case who
when 'friends': self.friends
when 'followers': self.followers
when 'all': self.all
else []
end
end
def <=>(other_tweeter)
self.screen_name <=> other_tweeter.screen_name
end
def ==(other_tweeter)
self.screen_name == other_tweeter.screen_name
end
def method_missing(name, *args, &block)
# puts "Calling #{@tweeter['screen_name']}.#{name}"
if @tweeter[name.to_s]
# puts "Returning #{name}: #{@tweeter[name.to_s]}"
@tweeter[name.to_s]
else
super
end
end
end