Added colors to output (based on renemendoza's patch).
authorJim Weirich <jim.weirich@gmail.com>
Thu, 26 Aug 2010 11:45:31 +0000 (07:45 -0400)
committerJim Weirich <jim.weirich@gmail.com>
Thu, 26 Aug 2010 11:45:31 +0000 (07:45 -0400)
src/edgecase.rb

index 71a70b9..3da9435 100644 (file)
@@ -43,6 +43,18 @@ class Object
 end
 
 module EdgeCase
+
+  module Color
+    #shamelessly stolen from redgreen
+    COLORS = { :clear => 0, :red => 31, :green => 32, :yellow => 33, :blue => 34, :magenta => 35, :cyan => 36 }
+    def self.method_missing(color_name, *args)
+      color(color_name) + args.first + color(:clear) 
+    end 
+    def self.color(color)
+      "\e[#{COLORS[color.to_sym]}m"
+    end 
+  end
+
   class Sensei
     attr_reader :failure, :failed_test
 
@@ -67,9 +79,9 @@ module EdgeCase
     def accumulate(test)
       if test.passed?
         @pass_count += 1
-        puts "  #{test.name} has expanded your awareness."
+        puts Color.green("  #{test.name} has expanded your awareness.")
       else
-        puts "  #{test.name} has damaged your karma."
+        puts Color.red("  #{test.name} has damaged your karma.")
         @failed_test = test
         @failure = test.failure
         throw :edgecase_exit
@@ -87,18 +99,19 @@ module EdgeCase
     def report
       if failed?
         puts
-        puts "You have not yet reached enlightenment ..."
-        puts failure.message
+        puts Color.green("You have not yet reached enlightenment ...")
+        puts Color.red(failure.message)
         puts
-        puts "Please meditate on the following code:"
+        puts Color.green("Please meditate on the following code:")
         if assert_failed?
-          puts find_interesting_lines(failure.backtrace)
+          #puts find_interesting_lines(failure.backtrace)
+          puts find_interesting_lines(failure.backtrace).collect {|l| Color.red(l) }
         else
-          puts failure.backtrace
+          puts Color.red(failure.backtrace)
         end
         puts
       end
-      say_something_zenlike
+      puts Color.green(say_something_zenlike)
     end
 
     def find_interesting_lines(backtrace)
@@ -112,23 +125,24 @@ module EdgeCase
     def say_something_zenlike
       puts
       if !failed?
-        puts "Mountains are again merely mountains"
+        zen_statement =  "Mountains are again merely mountains"
       else
-        case (@pass_count % 10)
+        zen_statement = case (@pass_count % 10)
         when 0
-          puts "mountains are merely mountains"
+          "mountains are merely mountains"
         when 1, 2
-          puts "learn the rules so you know how to break them properly"
+          "learn the rules so you know how to break them properly"
         when 3, 4
-          puts "remember that silence is sometimes the best answer"
+          "remember that silence is sometimes the best answer"
         when 5, 6
-          puts "sleep is the best meditation"
+          "sleep is the best meditation"
         when 7, 8
-          puts "when you lose, don't lose the lesson"
+          "when you lose, don't lose the lesson"
         else
-          puts "things are not what they appear to be: nor are they otherwise"
+          "things are not what they appear to be: nor are they otherwise"
         end
       end
+      zen_statement
     end
   end
 
@@ -168,7 +182,7 @@ module EdgeCase
 
       def run_tests(accumulator)
         puts
-        puts "Thinking #{self}"
+        puts Color.green("Thinking #{self}")
         testmethods.each do |m|
           self.run_test(m, accumulator) if Koan.test_pattern =~ m.to_s
         end