Skip to content

Instantly share code, notes, and snippets.

@jordanbyron
Forked from practicingruby/refactoring patterns
Created October 2, 2010 18:41
Show Gist options
  • Save jordanbyron/607876 to your computer and use it in GitHub Desktop.
Save jordanbyron/607876 to your computer and use it in GitHub Desktop.
## Extract Class (http://refactoring.com/catalog/extractClass.html)
class Person
attr_accessor :name, :office_area_code, :office_number
def telephone_number
[office_area_code, office_number].join('-')
end
end
# Refactored
class Person
attr_accessor :name
def office_telephone
@office_telephone ||= TelephoneNumber.new
end
def office_telephone=(telephone)
@office_telephone = telephone
end
def telephone_number
office_telephone.telephone_number
end
class TelephoneNumber
attr_accessor :area_code, :number
def telephone_number
[area_code.to_s, number].join('-')
end
end
end
--
p = Person.new
p.name = "Jordan"
# No violations here
office_telephone = TelephoneNumber.new
office_telephone.area_code = 203
office_telephone.number = "555-5555"
p.office_telephone = office_telephone
p.telephone_number #=> "203-555-5555"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment