diff --git a/koans/autotest/discover.rb b/koans/autotest/discover.rb new file mode 100644 index 0000000..31a7804 --- /dev/null +++ b/koans/autotest/discover.rb @@ -0,0 +1,3 @@ +Autotest.add_discovery do + "rubykoan" if File.exist? 'path_to_enlightenment.rb' +end diff --git a/koans/autotest/rubykoan.rb b/koans/autotest/rubykoan.rb new file mode 100644 index 0000000..d43dc91 --- /dev/null +++ b/koans/autotest/rubykoan.rb @@ -0,0 +1,24 @@ +require 'autotest' + +class Autotest::Rubykoan < Autotest + def initialize + super + @exceptions = /\.txt|Rakefile|\.rdoc/ + + self.order = :alpha + self.add_mapping(/^about_.*rb$/) do |filename, _| + filename + end + + end + + def make_test_cmd files_to_test + "#{ruby} 'path_to_enlightenment.rb'" + end + + # quiet test/unit chatter + def handle_results(results) + end + +end + diff --git a/koans/edgecase.rb b/koans/edgecase.rb index 8cf180b..99cefc7 100644 --- a/koans/edgecase.rb +++ b/koans/edgecase.rb @@ -43,15 +43,23 @@ class Object end module EdgeCase + module Color #shamelessly stolen (and modified) from redgreen - COLORS = { :clear => 0, :red => 31, :green => 32, :yellow => 33, :blue => 34, :magenta => 35, :cyan => 36 } + COLORS = { + :clear => 0, :black => 30, :red => 31, + :green => 32, :yellow => 33, :blue => 34, + :magenta => 35, :cyan => 36, + } + + module_function COLORS.each do |color, value| - class_eval "def self.#{color}(string); colorize(string, #{value}); end" + module_eval "def #{color}(string); colorize(string, #{value}); end" + module_function color end - def self.colorize(string, color_value) + def colorize(string, color_value) if ENV['NO_COLOR'] string else @@ -59,7 +67,7 @@ module EdgeCase end end - def self.color(color_value) + def color(color_value) "\e[#{color_value}m" end end @@ -88,9 +96,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 @@ -108,18 +116,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(a_zenlike_statement) end def find_interesting_lines(backtrace) @@ -130,26 +139,27 @@ module EdgeCase # Hat's tip to Ara T. Howard for the zen statements from his # metakoans Ruby Quiz (http://rubyquiz.com/quiz67.html) - def say_something_zenlike + def a_zenlike_statement 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 @@ -189,7 +199,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