|
| 1 | += EdgeCase Ruby Koans |
| 2 | + |
| 3 | +The Ruby Koans walk you along the path to enlightenment in order to learn Ruby. |
| 4 | +The goal is to learn the Ruby language, syntax, structure, and some common |
| 5 | +functions and libraries. We also teach you culture. Testing is not just something we |
| 6 | +pay lip service to, but something we live. It is essential in your quest to learn |
| 7 | +and do great things in the language. |
| 8 | + |
| 9 | +== The Structure |
| 10 | + |
| 11 | +The koans are broken out into areas by file, hashes are covered in about_hashes.rb, |
| 12 | +modules are introduced in about_modules.rb, etc. They are presented in order in the |
| 13 | +path_to_enlightenment.rb file. |
| 14 | + |
| 15 | +Each koan builds up your knowledge of Ruby and builds upon itself. It will stop at |
| 16 | +the first place you need to correct. |
| 17 | + |
| 18 | +Some koans simply need to have the correct answer substituted for an incorrect one. |
| 19 | +Some, however, require you to supply your own answer. If you see the method +__+ (a |
| 20 | +double underscore) listed, it is a hint to you to supply your own code in order to |
| 21 | +make it work correctly. |
| 22 | + |
| 23 | +== Installing Ruby |
| 24 | + |
| 25 | +If you do not have Ruby setup, please visit http://ruby-lang.org/en/downloads/ for |
| 26 | +operating specific instructions. In order to run this you need ruby and rake |
| 27 | +installed. To check the installations simply type: |
| 28 | + |
| 29 | +*nix platforms from any terminal window: |
| 30 | + |
| 31 | + [~] $ ruby --version |
| 32 | + [~] $ rake --version |
| 33 | + |
| 34 | +Windows from the command prompt (cmd.exe) |
| 35 | + |
| 36 | + c:\ruby --version |
| 37 | + c:\rake --version |
| 38 | + |
| 39 | +Any response for Ruby with a version number greater than 1.8 is fine (should be |
| 40 | +around 1.8.6 or more). Any version of rake will do. |
| 41 | + |
| 42 | +== The Path To Enlightenment |
| 43 | + |
| 44 | +You can run the tests through rake or by calling the file itself (rake is the |
| 45 | +recommended way to run them as we might build more functionality into this task). |
| 46 | + |
| 47 | +*nix platforms, from the koans directory |
| 48 | + |
| 49 | + [ruby_koans] $ rake # runs the default target :walk_the_path |
| 50 | + [ruby_koans] $ ruby path_to_enlightenment.rb # simply call the file directly |
| 51 | + |
| 52 | +Windows is the same thing |
| 53 | + |
| 54 | + c:\ruby_koans\rake # runs the default target :walk_the_path |
| 55 | + c:\ruby_koans\ruby path_to_enlightenment.rb # simply call the file directly |
| 56 | + |
| 57 | +=== Red, Green, Refactor |
| 58 | + |
| 59 | +In test-driven development the mantra has always been, red, green, refactor. Write a |
| 60 | +failing test and run it (red), make the test pass (green), then refactor it (that is |
| 61 | +look at the code and see if you can make it any better. In this case you will need |
| 62 | +to run the koan and see it fail (red), make the test pass (green), then take a |
| 63 | +moment and reflect upon the test to see what it is teaching you and improve the |
| 64 | +code to better communicate its intent (refactor). |
| 65 | + |
| 66 | +The very first time you run it you will see the following output: |
| 67 | + |
| 68 | + [ ruby_koans ] $ rake |
| 69 | + (in /Users/person/dev/ruby_koans) |
| 70 | + cd koans |
| 71 | + |
| 72 | + Thinking AboutAsserts |
| 73 | + test_assert_truth has damaged your karma. |
| 74 | + |
| 75 | + You have not yet reached enlightenment ... |
| 76 | + <false> is not true. |
| 77 | + |
| 78 | + Please meditate on the following code: |
| 79 | + ./about_asserts.rb:10:in `test_assert_truth' |
| 80 | + path_to_enlightenment.rb:27 |
| 81 | + |
| 82 | + mountains are merely mountains |
| 83 | + |
| 84 | +You have come to your first stage. If you notice it is telling you where to look for |
| 85 | +the first solution: |
| 86 | + |
| 87 | + Please meditate on the following code: |
| 88 | + ./about_asserts.rb:10:in `test_assert_truth' |
| 89 | + path_to_enlightenment.rb:27 |
| 90 | + |
| 91 | +We then open up the about_asserts.rb file and look at the first test: |
| 92 | + |
| 93 | + # We shall contemplate truth by testing reality, via asserts. |
| 94 | + def test_assert_truth |
| 95 | + assert false # This should be true |
| 96 | + end |
| 97 | + |
| 98 | +We then change the +false+ to +true+ and run the test again. After you are |
| 99 | +done, think about what you are learning. In this case, ignore everything except |
| 100 | +the method name (+test_assert_truth+) and the parts inside the method (everything |
| 101 | +before the +end+). |
| 102 | + |
| 103 | +In this case the goal is for you to see that if you pass a value to the +assert+ |
| 104 | +method, it will either ensure it is +true+ and continue on, or fail if in fact |
| 105 | +the statement is +false+. |
| 106 | + |
| 107 | +== Inspiration |
| 108 | + |
| 109 | +A special thanks to Mike Clark and Ara Howard for inspiring this |
| 110 | +project. Mike Clark wrote an excellent blog post about learning Ruby |
| 111 | +through unit testing. This sparked an idea that has taken a bit to |
| 112 | +solidify, that of bringing new rubyists into the community through |
| 113 | +testing. Ara Howard then gave us the idea for the Koans in his ruby |
| 114 | +quiz entry on Meta Koans (a must for any rubyist wanting to improve |
| 115 | +their skills). Also, "The Little Lisper" taught us all the value of |
| 116 | +the short questions/simple answers style of learning. |
| 117 | + |
| 118 | +Mike Clark's post :: http://www.clarkware.com/cgi/blosxom/2005/03/18 |
| 119 | +Meta Koans :: http://rubyquiz.com/quiz67.html |
| 120 | +The Little Lisper :: http://www.amazon.com/Little-LISPer-Third-Daniel-Friedman/dp/0023397632 |
| 121 | + |
| 122 | +== Other Resources |
| 123 | + |
| 124 | +The Ruby Language :: http://ruby-lang.org |
| 125 | +Try Ruby in your browser :: http://tryruby.org |
| 126 | + |
| 127 | +Dave Thomas' introduction to Ruby Programming Ruby (the Pick Axe) :: http://pragprog.com/titles/ruby/programming-ruby |
| 128 | + |
| 129 | +Brian Marick's fantastic guide for beginners Everyday Scripting with Ruby :: http://pragprog.com/titles/bmsft/everyday-scripting-with-ruby |
| 130 | + |
| 131 | += Other stuff |
| 132 | + |
| 133 | +Author :: Jim Weirich < [email protected]> |
| 134 | +Author :: Joe O'Brien < [email protected]> |
| 135 | +Issue Tracker :: http://www.pivotaltracker.com/projects/48111 |
| 136 | +Requires :: Ruby 1.8.x or later and Rake (any recent version) |
0 commit comments