Skip to content

Instantly share code, notes, and snippets.

@jonahoffline
Created February 7, 2013 02:07
Show Gist options
  • Save jonahoffline/4727808 to your computer and use it in GitHub Desktop.
Save jonahoffline/4727808 to your computer and use it in GitHub Desktop.
Refactoring examples using code taken from SpamBitch.
# Original
class Spammer
def initialize
@random_telephones = Proc.new { "787-#{rand(000..999)}-#{rand(0000..9999)}" }
@sms_telephones = Proc.new { "787#{rand(000..999)}#{rand(0000..9999)}" }
end
def telephone
@random_telephones.call
end
def sms(carrier)
case carrier
when 'claro'
"#{@sms_telephones.call}@vtexto.com"
when 'att'
"#{@sms_telephones.call}@txt.att.net"
when 'tmobile'
"#{@sms_telephones.call}@sms.tmobile.net"
else
raise "Carrier not Supported"
end
end
end
# Refactor 1
module SpamBitch
module Phone
def self.telephone
"787-#{rand(000..999)}-#{rand(0000..9999)}"
end
def self.sms(carrier='')
gateway = case carrier
when 'claro'
'vtexto.com'
when 'att'
'txt.att.net'
when 'tmobile'
'sms.tmobile.net'
else
raise "Carrier not Supported"
end
"#{telephone.gsub(/-/, '')}@#{gateway}"
end
end
end
# Refactor #2
module SpamBitch
module Phone
def self.carriers
{ claro: 'vtexto.com', att: 'txt.att.net', tmobile: 'sms.tmobile.net' }
end
def self.telephone
"787-#{rand(000..999)}-#{rand(0000..9999)}"
end
def self.sms(carrier='')
gateway = carrier.empty? ? carriers[carriers.keys[rand(carriers.length)]] : carriers[carrier]
"#{telephone.gsub(/-/, '')}@#{gateway}"
end
end
end
# Refactor #3 (Final version... so far.)
module SpamBitch
module Phone
def self.carriers
{ claro: 'vtexto.com', att: 'txt.att.net', tmobile: 'sms.tmobile.net' }
end
def self.random_carrier
carriers.keys[rand(carriers.length)]
end
def self.telephone
"787-#{rand(000..999)}-#{rand(0000..9999)}"
end
def self.sms(carrier='')
gateway = carrier.empty? ? carriers[random_carrier] : carriers[carrier]
"#{telephone.gsub(/-/, '')}@#{gateway}"
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment