validate username characters and length

This commit is contained in:
2011-03-02 00:54:04 +00:00
parent 56984a0ecb
commit 5b661e0264
3 changed files with 45 additions and 20 deletions

View File

@@ -4,25 +4,32 @@ require 'twhois'
if ARGV.size > 0
ARGV.each do |username|
user = Twhois.lookup(username)
if user
puts "@#{user.screen_name}:"
puts " Name: #{user.name}"
puts " URL: #{user.url}" if user.url
puts " Location: #{user.location}" if user.location
puts " Description: #{user.description}" if user.description
puts " Followers: #{user.followers_count}"
puts " Following: #{user.friends_count}"
puts " Tweets: #{user.statuses_count}"
puts " Last Tweet (#{user.status['created_at']}):"
puts " #{user.status['text']}"
puts " Timezone: #{user.time_zone}" if user.time_zone
puts " Joined On: #{user.created_at}"
puts " Profile Picture: #{user.profile_image_url}"
puts " Private Account: #{user.protected ? "Yes" : "No"}"
else
puts "@#{username}:"
puts " Not Found"
begin
user = Twhois.lookup(username)
if user
puts "@#{user.screen_name}:"
puts " Name: #{user.name}"
puts " URL: #{user.url}" if user.respond_to?(:url)
puts " Profile: http://twitter.com/#{user.screen_name}"
puts " Location: #{user.location}" if user.respond_to?(:location)
puts " Description: #{user.description}" if user.respond_to?(:description)
puts " Followers: #{user.followers_count}"
puts " Following: #{user.friends_count}"
puts " Tweets: #{user.statuses_count}"
if user.respond_to?(:status)
puts " Last Tweet (#{user.status['created_at']}):"
puts " #{user.status['text']}"
end
puts " Timezone: #{user.time_zone}" if user.respond_to?(:time_zone)
puts " Joined On: #{user.created_at}"
puts " Profile Picture: #{user.profile_image_url}"
puts " Private Account: #{user.protected ? "Yes" : "No"}"
else
puts "@#{username}:"
puts " Not Found"
end
rescue Twhois::InvalidUsername => e
puts "\"#{username}\" is not a valid Twitter username"
end
end
else

View File

@@ -12,12 +12,20 @@ module Twhois
LOOKUP_HOST = "api.twitter.com"
LOOKUP_PATH = "/1/users/show.json?screen_name="
class InvalidUsername < StandardError; end
# Lookup a Twitter user by their username.
def self.lookup(username)
raise InvalidUsername, "Username is invalid" unless valid_username?(username)
res = Net::HTTP.start(LOOKUP_HOST) { |http| http.get(LOOKUP_PATH + username) }
if res.code == '200'
User.new(JSON.parse(res.body))
end
end
def self.valid_username?(username)
return false if username.match(/^[a-zA-Z0-9_]{1,15}$/).nil?
return true
end
end

View File

@@ -18,8 +18,18 @@ describe Twhois do
end
it "should return error on unknown user" do
user = Twhois.lookup('jimehoawhefoahelfhasdf')
user = Twhois.lookup('akjsdfkjasdfasd')
user.should be_nil
end
it "should raise an exception on invalid usernames" do
lambda { # invalid characters
user = Twhois.lookup("abc/damn")
}.should raise_error(Twhois::InvalidUsername)
lambda { # longer than 15 characters
user = Twhois.lookup("abcasdjfakajsdfasdfasdfa")
}.should raise_error(Twhois::InvalidUsername)
end
end