Skip to content

Instantly share code, notes, and snippets.

@practicingruby
Forked from jordanbyron/refactoring patterns
Created October 2, 2010 19:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save practicingruby/607921 to your computer and use it in GitHub Desktop.
Save practicingruby/607921 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 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"
p.office_telephone.area_code = 203
p.office_telephone.number = "555-5555"
p.telephone_number #=> "203-555-5555"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment