switch to case statement
refactored into smaller methods. added multi-line output.
more accurate output
moved indentation out into it's own method
switched to module and class << self