inochi 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,18 +1,63 @@
1
1
  <% chapter "History", "history" do %>
2
2
  <% project_history do %>
3
+ <% section "Version 0.2.0 (2009-01-25)" do %>
4
+ This release adds support for unit testing, improves the portability of **Inochi** and configurability of your projects, adds new content to the user manual, and fixes some bugs.
5
+
6
+ <% paragraph "Contributor kudos" do %>
7
+ Florian Gilcher patched **Inochi** to:
8
+
9
+ * Run on both JRuby and normal Ruby in multiple versions and with different executable names on Windows.
10
+
11
+ * Allow project authors to be specified by hand instead of always relying on the license file to be in expected form, because his license template doesn't follow that form.
12
+ <% end %>
13
+
14
+ <% paragraph "New features" do %>
15
+ * Added support for unit testing via the [minitest](http://rubyforge.org/projects/bfts/) library. See <%= xref "Test your project" %> for documentation.
16
+
17
+ Also, in related news, the scaffold generator now emits a default unit test for the main project library.
18
+
19
+ * Added optional ProgramName parameter to the scaffold generator. This allows you to specify reasonable program names when your project module has a strange capitalization:
20
+
21
+ > inochi ERBook
22
+ create er_book/LICENSE
23
+
24
+ > inochi ERBook erbook
25
+ create erbook/LICENSE
26
+
27
+ > inochi ERBook foobar
28
+ create foobar/LICENSE
29
+
30
+ * Allow project authors to be specified via
31
+
32
+ `Inochi.init :YourProject, :authors => ...`
33
+ <% end %>
34
+
35
+ <% paragraph "Bug fixes" do %>
36
+ * Use `Gem::RubyGemsVersion` instead of a shell command to determine rubygems version for generation of <tt>setup.erb</tt>. (Florian Gilcher)
37
+
38
+ * Add blank lines between all list items, not just multi-line ones, in the plain-text version of the relase announcement for improved readability.
39
+
40
+ * Omit LaTeX-style heading numbers from release announcements. They caused confusion, especially in plain-text announcements, when trying to determine which version of a project was released.
41
+ <% end %>
42
+
43
+ <% paragraph "Housekeeping" do %>
44
+ * Added unit tests for utility methods provided by the **Inochi** module: project name calculation and CamelCase to snake\_case conversion.
45
+ <% end %>
46
+ <% end %>
47
+
3
48
  <% section "Version 0.1.0 (2009-01-13)" do %>
4
- This release reattempts to fix the [circular dependency problem](http://www.ruby-forum.com/topic/176173#771281) that occurred when installing either **<%= $project %>** or **<%= ERBook::PROJECT %>**.
49
+ This release reattempts to fix the [circular dependency problem](http://www.ruby-forum.com/topic/176173#771281) that occurred when installing either **Inochi** or **ERBook**.
5
50
 
6
51
  <% paragraph "New features" do %>
7
- * `Inochi.init()` now adds `#major()`, `#series()`, and `#requirement()` instance methods to a project's `VERSION` constant.
52
+ * `**Inochi**.init()` now adds `#major()`, `#series()`, and `#requirement()` instance methods to a project's `VERSION` constant.
8
53
  <% end %>
9
54
 
10
55
  <% paragraph "Bug fixes" do %>
11
- * Solved circular dependency problem by making inochi gem not dependent on erbook gem. However, **<%= ERBook::PROJECT %>** is still required during runtime and is supplied on the `gem install` command for **<%= $project %>**.
56
+ * Solved circular dependency problem by making inochi gem not dependent on erbook gem. However, ERBook is still required during runtime and is supplied on the `gem install` command for **Inochi**.
12
57
 
13
58
  <%= xref "Installation" %> has been updated accordingly.
14
59
 
15
- * Add forgotten Rake dependency for **<%= $project %>** gem.
60
+ * Add forgotten Rake dependency for **Inochi** gem.
16
61
  <% end %>
17
62
  <% end %>
18
63
 
@@ -20,17 +65,17 @@
20
65
  This release fixes some show-stopper bugs.
21
66
 
22
67
  <% paragraph "Contributor kudos" do %>
23
- * Florian Gilcher tried the first release of **<%= $project %>** and reported bugs.
68
+ * Florian Gilcher tried the first release of **Inochi** and reported bugs.
24
69
  <% end %>
25
70
 
26
71
  <% paragraph "Bug fixes" do %>
27
72
  * Florian Gilcher reported that the name of the project library was [being determined incorrectly](http://www.ruby-forum.com/topic/176173#771351).
28
73
 
29
- * Florian Gilcher reported that there was a [circular dependency problem](http://www.ruby-forum.com/topic/176173#771281) when installing the **<%= $project %>** gem.
74
+ * Florian Gilcher reported that there was a [circular dependency problem](http://www.ruby-forum.com/topic/176173#771281) when installing the **Inochi** gem.
30
75
 
31
76
  The solution is to specify the <tt>--force</tt> option when installing the gem. <%= xref "Installation" %> has been updated accordingly.
32
77
 
33
- * Generated project scaffolds now check against the major version of the **<%= $project %>** gem, to avoid runtime version conflicts.
78
+ * Generated project scaffolds now check against the major version of the **Inochi** gem, to avoid runtime version conflicts.
34
79
  <% end %>
35
80
 
36
81
  <% paragraph "Housekeeping" do %>
@@ -39,7 +84,7 @@
39
84
  <% end %>
40
85
 
41
86
  <% section "Version 0.0.0 (2009-01-13)" do %>
42
- This is the first release of **<%= $project %>**.
87
+ This is the first release of **Inochi**.
43
88
 
44
89
  Happy birthday!
45
90
  <% end %>
@@ -14,11 +14,11 @@
14
14
  <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
15
15
  <meta name="generator" content="ERBook 6.0.1"/>
16
16
 
17
- <title>Inochi 0.1.0</title>
17
+ <title>Inochi 0.2.0</title>
18
18
 
19
19
  <meta name="author" content="Suraj N. Kurapati"/>
20
20
 
21
- <meta name="date" content="19 January 2009"/>
21
+ <meta name="date" content="25 January 2009"/>
22
22
 
23
23
  <link rel="alternate" type="application/rss+xml" href="http://snk.tuxfamily.org/lib/inochi/ann.xml"/>
24
24
 
@@ -642,13 +642,13 @@
642
642
 
643
643
  <div class="logo"><img src='inochi.png' alt='project logo' /></div>
644
644
 
645
- <h1 class="title">Inochi 0.1.0</h1>
645
+ <h1 class="title">Inochi 0.2.0</h1>
646
646
 
647
647
  <h2 class="subtitle">Gives life to RubyGems-based software</h2>
648
648
 
649
649
  <h3 class="authors"><a href="mailto:sunaku@gmail.com">Suraj N. Kurapati</a></h3>
650
650
 
651
- <h3 class="date">19 January 2009</h3>
651
+ <h3 class="date">25 January 2009</h3>
652
652
 
653
653
  </div>
654
654
 
@@ -663,7 +663,7 @@
663
663
  <a name="Contents"/><div class="nav" id="Contents"><a title="Reverse jump to listing" href="#rev:Contents">&equiv;</a>&#x25B3;&#x25BD;<a title="Jump to this segment" href="#Contents">&#x25CE;</a></div>
664
664
  <h1 class="title">Contents</h1>
665
665
  <ul>
666
- <li>1&nbsp;&nbsp;<a id="rev:Introduction" href="#Introduction">Introduction</a><ul><li><a id="rev:Etymology" href="#Etymology">Etymology</a></li><li>1.1&nbsp;&nbsp;<a id="rev:Logistics" href="#Logistics">Logistics</a><ul><li><a id="rev:Version-numbers" href="#Version-numbers">Version numbers</a></li></ul></li><li>1.2&nbsp;&nbsp;<a id="rev:License" href="#License">License</a></li><li>1.3&nbsp;&nbsp;<a id="rev:Credits" href="#Credits">Credits</a></li></ul></li><li>2&nbsp;&nbsp;<a id="rev:Setup" href="#Setup">Setup</a><ul><li>2.1&nbsp;&nbsp;<a id="rev:Requirements" href="#Requirements">Requirements</a></li><li>2.2&nbsp;&nbsp;<a id="rev:Installation" href="#Installation">Installation</a></li><li>2.3&nbsp;&nbsp;<a id="rev:Manifest" href="#Manifest">Manifest</a></li></ul></li><li>3&nbsp;&nbsp;<a id="rev:Usage" href="#Usage">Usage</a><ul><li>3.1&nbsp;&nbsp;<a id="rev:Command-line-interface" href="#Command-line-interface">Command-line interface</a></li><li>3.2&nbsp;&nbsp;<a id="rev:Ruby-library-interface" href="#Ruby-library-interface">Ruby library interface</a></li><li>3.3&nbsp;&nbsp;<a id="rev:Tutorial" href="#Tutorial">Tutorial</a><ul><li>3.3.1&nbsp;&nbsp;<a id="rev:Have-a-brilliant-idea" href="#Have-a-brilliant-idea">Have a brilliant idea</a></li><li>3.3.2&nbsp;&nbsp;<a id="rev:Generate-your-project" href="#Generate-your-project">Generate your project</a></li><li>3.3.3&nbsp;&nbsp;<a id="rev:Configure-your-project" href="#Configure-your-project">Configure your project</a><ul><li>3.3.3.1&nbsp;&nbsp;<a id="rev:Project-information" href="#Project-information">Project information</a></li><li>3.3.3.2&nbsp;&nbsp;<a id="rev:Project-executable" href="#Project-executable">Project executable</a></li><li>3.3.3.3&nbsp;&nbsp;<a id="rev:Rake-tasks" href="#Rake-tasks">Rake tasks</a></li><li>3.3.3.4&nbsp;&nbsp;<a id="rev:User-manual" href="#User-manual">User manual</a><ul><li><a id="rev:doc-index.erb" href="#doc-index.erb"><tt>doc/index.erb</tt></a></li><li><a id="rev:doc-intro.erb" href="#doc-intro.erb"><tt>doc/intro.erb</tt></a></li><li><a id="rev:doc-setup.erb" href="#doc-setup.erb"><tt>doc/setup.erb</tt></a></li><li><a id="rev:doc-theory.erb" href="#doc-theory.erb"><tt>doc/theory.erb</tt></a></li><li><a id="rev:doc-usage.erb" href="#doc-usage.erb"><tt>doc/usage.erb</tt></a></li><li><a id="rev:doc-history.erb" href="#doc-history.erb"><tt>doc/history.erb</tt></a></li></ul></li></ul></li><li>3.3.4&nbsp;&nbsp;<a id="rev:Implement-your-project" href="#Implement-your-project">Implement your project</a><ul><li><a id="rev:Goodbye-LOAD_PATH-hello-require" href="#Goodbye-LOAD_PATH-hello-require">Goodbye <code class="code"><span style="color:#d70;font-weight:bold">$LOAD_PATH</span></code>, hello <code class="code">require()</code></a></li></ul></li><li>3.3.5&nbsp;&nbsp;<a id="rev:Test-your-project" href="#Test-your-project">Test your project</a></li><li>3.3.6&nbsp;&nbsp;<a id="rev:Publish-your-project" href="#Publish-your-project">Publish your project</a><ul><li>3.3.6.1&nbsp;&nbsp;<a id="rev:Build-a-RubyGem" href="#Build-a-RubyGem">Build a RubyGem</a></li><li>3.3.6.2&nbsp;&nbsp;<a id="rev:Publish-a-RubyGem" href="#Publish-a-RubyGem">Publish a RubyGem</a></li><li>3.3.6.3&nbsp;&nbsp;<a id="rev:Announce-a-release" href="#Announce-a-release">Announce a release</a><ul><li><a id="rev:Login-information" href="#Login-information">Login information</a></li><li>3.3.6.3.1&nbsp;&nbsp;<a id="rev:Manual-release-announcement" href="#Manual-release-announcement">Manual release announcement</a></li></ul></li><li>3.3.6.4&nbsp;&nbsp;<a id="rev:Publish-the-documentation" href="#Publish-the-documentation">Publish the documentation</a></li></ul></li></ul></li></ul></li><li>4&nbsp;&nbsp;<a id="rev:history" href="#history">History</a><ul><li>4.1&nbsp;&nbsp;<a id="rev:Version-0.1.0-2009-01-13" href="#Version-0.1.0-2009-01-13">Version 0.1.0 (2009-01-13)</a><ul><li><a id="rev:New-features" href="#New-features">New features</a></li><li><a id="rev:Bug-fixes" href="#Bug-fixes">Bug fixes</a></li></ul></li><li>4.1&nbsp;&nbsp;<a id="rev:Version-0.0.1-2009-01-13" href="#Version-0.0.1-2009-01-13">Version 0.0.1 (2009-01-13)</a><ul><li><a id="rev:Contributor-kudos" href="#Contributor-kudos">Contributor kudos</a></li><li><a id="rev:Bug-fixes-608680498" href="#Bug-fixes-608680498">Bug fixes</a></li><li><a id="rev:Housekeeping" href="#Housekeeping">Housekeeping</a></li></ul></li><li>4.1&nbsp;&nbsp;<a id="rev:Version-0.0.0-2009-01-13" href="#Version-0.0.0-2009-01-13">Version 0.0.0 (2009-01-13)</a></li></ul></li>
666
+ <li>1&nbsp;&nbsp;<a id="rev:Introduction" href="#Introduction">Introduction</a><ul><li><a id="rev:Etymology" href="#Etymology">Etymology</a></li><li>1.1&nbsp;&nbsp;<a id="rev:Logistics" href="#Logistics">Logistics</a><ul><li><a id="rev:Version-numbers" href="#Version-numbers">Version numbers</a></li></ul></li><li>1.2&nbsp;&nbsp;<a id="rev:License" href="#License">License</a></li><li>1.3&nbsp;&nbsp;<a id="rev:Credits" href="#Credits">Credits</a></li></ul></li><li>2&nbsp;&nbsp;<a id="rev:Setup" href="#Setup">Setup</a><ul><li>2.1&nbsp;&nbsp;<a id="rev:Requirements" href="#Requirements">Requirements</a></li><li>2.2&nbsp;&nbsp;<a id="rev:Installation" href="#Installation">Installation</a></li><li>2.3&nbsp;&nbsp;<a id="rev:Manifest" href="#Manifest">Manifest</a></li></ul></li><li>3&nbsp;&nbsp;<a id="rev:Usage" href="#Usage">Usage</a><ul><li>3.1&nbsp;&nbsp;<a id="rev:Command-line-interface" href="#Command-line-interface">Command-line interface</a></li><li>3.2&nbsp;&nbsp;<a id="rev:Ruby-library-interface" href="#Ruby-library-interface">Ruby library interface</a></li><li>3.3&nbsp;&nbsp;<a id="rev:Tutorial" href="#Tutorial">Tutorial</a><ul><li>3.3.1&nbsp;&nbsp;<a id="rev:Have-a-brilliant-idea" href="#Have-a-brilliant-idea">Have a brilliant idea</a></li><li>3.3.2&nbsp;&nbsp;<a id="rev:Generate-your-project" href="#Generate-your-project">Generate your project</a><ul><li><a id="rev:View-Rake-tasks" href="#View-Rake-tasks">View Rake tasks</a></li><li><a id="rev:Run-unit-tests" href="#Run-unit-tests">Run unit tests</a></li><li><a id="rev:Run-project-executable" href="#Run-project-executable">Run project executable</a></li><li><a id="rev:Show-user-manual" href="#Show-user-manual">Show user manual</a></li></ul></li><li>3.3.3&nbsp;&nbsp;<a id="rev:Configure-your-project" href="#Configure-your-project">Configure your project</a><ul><li>3.3.3.1&nbsp;&nbsp;<a id="rev:Project-information" href="#Project-information">Project information</a></li><li>3.3.3.2&nbsp;&nbsp;<a id="rev:Project-executable" href="#Project-executable">Project executable</a></li><li>3.3.3.3&nbsp;&nbsp;<a id="rev:Rake-tasks" href="#Rake-tasks">Rake tasks</a></li><li>3.3.3.4&nbsp;&nbsp;<a id="rev:User-manual" href="#User-manual">User manual</a><ul><li><a id="rev:doc-index.erb" href="#doc-index.erb"><tt>doc/index.erb</tt></a></li><li><a id="rev:doc-intro.erb" href="#doc-intro.erb"><tt>doc/intro.erb</tt></a></li><li><a id="rev:doc-setup.erb" href="#doc-setup.erb"><tt>doc/setup.erb</tt></a></li><li><a id="rev:doc-theory.erb" href="#doc-theory.erb"><tt>doc/theory.erb</tt></a></li><li><a id="rev:doc-usage.erb" href="#doc-usage.erb"><tt>doc/usage.erb</tt></a></li><li><a id="rev:doc-history.erb" href="#doc-history.erb"><tt>doc/history.erb</tt></a></li></ul></li></ul></li><li>3.3.4&nbsp;&nbsp;<a id="rev:Implement-your-project" href="#Implement-your-project">Implement your project</a><ul><li><a id="rev:Goodbye-LOAD_PATH-hello-require" href="#Goodbye-LOAD_PATH-hello-require">Goodbye <code class="code"><span style="color:#d70;font-weight:bold">$LOAD_PATH</span></code>, hello <code class="code">require()</code></a></li></ul></li><li>3.3.5&nbsp;&nbsp;<a id="rev:Test-your-project" href="#Test-your-project">Test your project</a><ul><li><a id="rev:Units-and-tests" href="#Units-and-tests">Units and tests</a></li><li><a id="rev:Test-execution" href="#Test-execution">Test execution</a></li><li><a id="rev:Helper-libraries" href="#Helper-libraries">Helper libraries</a></li></ul></li><li>3.3.6&nbsp;&nbsp;<a id="rev:Publish-your-project" href="#Publish-your-project">Publish your project</a><ul><li>3.3.6.1&nbsp;&nbsp;<a id="rev:Build-a-RubyGem" href="#Build-a-RubyGem">Build a RubyGem</a></li><li>3.3.6.2&nbsp;&nbsp;<a id="rev:Publish-a-RubyGem" href="#Publish-a-RubyGem">Publish a RubyGem</a></li><li>3.3.6.3&nbsp;&nbsp;<a id="rev:Announce-a-release" href="#Announce-a-release">Announce a release</a><ul><li><a id="rev:Login-information" href="#Login-information">Login information</a></li><li>3.3.6.3.1&nbsp;&nbsp;<a id="rev:Manual-release-announcement" href="#Manual-release-announcement">Manual release announcement</a></li></ul></li><li>3.3.6.4&nbsp;&nbsp;<a id="rev:Publish-the-documentation" href="#Publish-the-documentation">Publish the documentation</a></li></ul></li></ul></li></ul></li><li>4&nbsp;&nbsp;<a id="rev:history" href="#history">History</a><ul><li>4.1&nbsp;&nbsp;<a id="rev:Version-0.2.0-2009-01-25" href="#Version-0.2.0-2009-01-25">Version 0.2.0 (2009-01-25)</a><ul><li><a id="rev:Contributor-kudos" href="#Contributor-kudos">Contributor kudos</a></li><li><a id="rev:New-features" href="#New-features">New features</a></li><li><a id="rev:Bug-fixes" href="#Bug-fixes">Bug fixes</a></li><li><a id="rev:Housekeeping" href="#Housekeeping">Housekeeping</a></li></ul></li><li>4.1&nbsp;&nbsp;<a id="rev:Version-0.1.0-2009-01-13" href="#Version-0.1.0-2009-01-13">Version 0.1.0 (2009-01-13)</a><ul><li><a id="rev:New-features-608879868" href="#New-features-608879868">New features</a></li><li><a id="rev:Bug-fixes-608886358" href="#Bug-fixes-608886358">Bug fixes</a></li></ul></li><li>4.1&nbsp;&nbsp;<a id="rev:Version-0.0.1-2009-01-13" href="#Version-0.0.1-2009-01-13">Version 0.0.1 (2009-01-13)</a><ul><li><a id="rev:Contributor-kudos-608900438" href="#Contributor-kudos-608900438">Contributor kudos</a></li><li><a id="rev:Bug-fixes-608905168" href="#Bug-fixes-608905168">Bug fixes</a></li><li><a id="rev:Housekeeping-608918928" href="#Housekeeping-608918928">Housekeeping</a></li></ul></li><li>4.1&nbsp;&nbsp;<a id="rev:Version-0.0.0-2009-01-13" href="#Version-0.0.0-2009-01-13">Version 0.0.0 (2009-01-13)</a></li></ul></li>
667
667
 
668
668
  </ul>
669
669
  </div>
@@ -818,8 +818,6 @@
818
818
  <p>The &#8220;inochi.png&#8221; image and its &#8220;inochi.svg&#8221; source utilize the <a href='http://openclipart.org/media/files/Peileppe/8978'>&#8220;3 flowers&#8221;</a> graphic, which was created and released into the public domain by <a href='http://openclipart.org/media/people/Peileppe'>Peileppe Production</a> on June 25, 2008.</p></div>
819
819
  </div></p></div>
820
820
  </div>
821
-
822
-
823
821
  <div class="chapter">
824
822
  <a name="Setup"/><div class="nav" id="Setup"><a title="Reverse jump to listing" href="#rev:Setup">&equiv;</a><a title="Jump to previous segment" href="#Credits">&#x25B3;</a><a title="Jump to next segment" href="#Requirements">&#x25BD;</a><a title="Jump to this segment" href="#Setup">&#x25CE;</a></div>
825
823
  <h1 class="title">
@@ -854,8 +852,8 @@
854
852
  <p>If the installation was successful, you will see output like this:</p>
855
853
 
856
854
  <p><pre>project: Inochi
857
- version: 0.1.0
858
- release: 2009-01-19
855
+ version: 0.2.0
856
+ release: 2009-01-25
859
857
  website: http://snk.tuxfamily.org/lib/inochi
860
858
  install: /home/sun/src/inochi</pre></p>
861
859
 
@@ -925,7 +923,13 @@ install: /home/sun/src/inochi</pre></p>
925
923
 
926
924
  <p><pre>Inochi - Gives life to RubyGems-based software
927
925
 
928
- Progress indicators:
926
+ Generates a project scaffold using the given information.
927
+
928
+ Existing files are backed up and NOT overwritten. It is your
929
+ responsibility to merge changes between the existing files and
930
+ the newly generated files. See the --merge option for details.
931
+
932
+ This tool announces its progress as it runs, using these indicators:
929
933
 
930
934
  create: A file is being created because it does not exist.
931
935
 
@@ -939,7 +943,19 @@ Progress indicators:
939
943
 
940
944
  Usage:
941
945
 
942
- inochi [Option...] ModuleName
946
+ inochi [Options] ProjectName [ProgramName]
947
+
948
+
949
+ ProjectName: Name of your project, which will be normalized
950
+ into the naame of a Ruby module that will serve
951
+ as a namespace for all code in your project.
952
+
953
+ ProgramName: (Optional) Name of the main project executable,
954
+ which also serves as the name of the generated
955
+ project directory and the main project library.
956
+
957
+
958
+ Options:
943
959
 
944
960
  --merger, -m &lt;s&gt;: A command that invokes a text merging tool with three
945
961
  arguments: (1) old file, (2) new file, (3) output file.
@@ -955,7 +971,7 @@ Usage:
955
971
  <a name="Merging-files-with-kdiff3"/><div class="nav" id="Merging-files-with-kdiff3"><a title="Reverse jump to listing" href="#rev:Merging-files-with-kdiff3">&equiv;</a><a title="Jump to previous segment" href="#Command-line-interface">&#x25B3;</a><a title="Jump to next segment" href="#Ruby-library-interface">&#x25BD;</a><a title="Jump to this segment" href="#Merging-files-with-kdiff3">&#x25CE;</a></div>
956
972
  <p class="title">Tip 1.&nbsp;&nbsp;Merging files with <strong>kdiff3</strong></p>
957
973
  <div class="content">
958
- <img class="icon" src="&icon_tip;" alt="tip"/>
974
+ <img class="icon" alt="tip" src="&icon_tip;"/>
959
975
  <p>Instead of merging files by hand, you can transfer wanted changes between files semi-automatically using <a href='http://kdiff3.sourceforge.net'>kdiff3</a>. Simply follow these instructions:</p>
960
976
 
961
977
  <ol>
@@ -973,7 +989,7 @@ shift
973
989
  output_file=$1
974
990
  shift
975
991
 
976
- kdiff3 --auto &quot;$old_file&quot; &quot;$new_file&quot; --output &quot;$output_file&quot;</pre>
992
+ kdiff3 --merge &quot;$old_file&quot; &quot;$new_file&quot; --output &quot;$output_file&quot;</pre>
977
993
  </li>
978
994
 
979
995
  <li>
@@ -1072,7 +1088,7 @@ kdiff3 --auto &quot;$old_file&quot; &quot;$new_file&quot; --output &quot;$output
1072
1088
 
1073
1089
  <p><em>However</em>, you must go to work the next morning, so there isn&#8217;t much time. What can you do? Let&#8217;s see how <strong>Inochi</strong> can help us meet this challenge.</p></div>
1074
1090
  </div> <div class="section">
1075
- <a name="Generate-your-project"/><div class="nav" id="Generate-your-project"><a title="Reverse jump to listing" href="#rev:Generate-your-project">&equiv;</a><a title="Jump to previous segment" href="#Have-a-brilliant-idea">&#x25B3;</a><a title="Jump to next segment" href="#Configure-your-project">&#x25BD;</a><a title="Jump to this segment" href="#Generate-your-project">&#x25CE;</a></div>
1091
+ <a name="Generate-your-project"/><div class="nav" id="Generate-your-project"><a title="Reverse jump to listing" href="#rev:Generate-your-project">&equiv;</a><a title="Jump to previous segment" href="#Have-a-brilliant-idea">&#x25B3;</a><a title="Jump to next segment" href="#View-Rake-tasks">&#x25BD;</a><a title="Jump to this segment" href="#Generate-your-project">&#x25CE;</a></div>
1076
1092
  <h3 class="title">
1077
1093
  3.3.2&nbsp;&nbsp;Generate your project
1078
1094
  </h3>
@@ -1083,6 +1099,7 @@ kdiff3 --auto &quot;$old_file&quot; &quot;$new_file&quot; --output &quot;$output
1083
1099
  create word_count/Rakefile
1084
1100
  create word_count/bin/word_count
1085
1101
  create word_count/lib/word_count.rb
1102
+ create word_count/test/word_count.rb
1086
1103
  create word_count/doc/index.erb
1087
1104
  create word_count/doc/intro.erb
1088
1105
  create word_count/doc/setup.erb
@@ -1095,10 +1112,11 @@ kdiff3 --auto &quot;$old_file&quot; &quot;$new_file&quot; --output &quot;$output
1095
1112
 
1096
1113
  <p><pre># cd word_count</pre></p>
1097
1114
 
1098
- <p>View the available Rake tasks:</p>
1099
-
1100
- <p><pre># rake -T
1101
- (in /tmp/Inochi20090119-28736-efadjc-0/word_count)
1115
+ <p><div class="paragraph">
1116
+ <a name="View-Rake-tasks"/><div class="nav" id="View-Rake-tasks"><a title="Reverse jump to listing" href="#rev:View-Rake-tasks">&equiv;</a><a title="Jump to previous segment" href="#Generate-your-project">&#x25B3;</a><a title="Jump to next segment" href="#Run-unit-tests">&#x25BD;</a><a title="Jump to this segment" href="#View-Rake-tasks">&#x25CE;</a></div>
1117
+ <p class="title">View Rake tasks</p>
1118
+ <div class="content"><p><pre># rake -T
1119
+ (in /tmp/Inochi20090125-24483-1xmgxqy-0/word_count)
1102
1120
  rake ann # Build all release announcements.
1103
1121
  rake ann:feed # Build RSS announcement: doc/ann.xml
1104
1122
  rake ann:html # Build HTML announcement: ANN.html
@@ -1117,12 +1135,25 @@ rake pub:ann:raa # Announce to RAA (Ruby Application Archive).
1117
1135
  rake pub:ann:talk # Announce to ruby-talk mailing list.
1118
1136
  rake pub:doc # Publish documentation to project website.
1119
1137
  rake pub:pak # Publish release packages to RubyForge.
1120
- </pre></p>
1121
-
1122
- <p>Try the main project executable:</p>
1123
-
1124
- <p><pre># ruby bin/word_count
1125
- Command-line options: {:help=&gt;false, :manual=&gt;false, :version=&gt;false}
1138
+ rake test # Run all unit tests.
1139
+ </pre></p></div>
1140
+ </div> <div class="paragraph">
1141
+ <a name="Run-unit-tests"/><div class="nav" id="Run-unit-tests"><a title="Reverse jump to listing" href="#rev:Run-unit-tests">&equiv;</a><a title="Jump to previous segment" href="#View-Rake-tasks">&#x25B3;</a><a title="Jump to next segment" href="#Run-project-executable">&#x25BD;</a><a title="Jump to this segment" href="#Run-unit-tests">&#x25CE;</a></div>
1142
+ <p class="title">Run unit tests</p>
1143
+ <div class="content"><p><pre># rake test
1144
+ (in /tmp/Inochi20090125-24483-1xmgxqy-0/word_count)
1145
+ Loaded suite word_count
1146
+ Started
1147
+ .
1148
+ Finished in 0.001064 seconds.
1149
+
1150
+ 1 tests, 23 assertions, 0 failures, 0 errors, 0 skips
1151
+ </pre></p></div>
1152
+ </div> <div class="paragraph">
1153
+ <a name="Run-project-executable"/><div class="nav" id="Run-project-executable"><a title="Reverse jump to listing" href="#rev:Run-project-executable">&equiv;</a><a title="Jump to previous segment" href="#Run-unit-tests">&#x25B3;</a><a title="Jump to next segment" href="#Show-user-manual">&#x25BD;</a><a title="Jump to this segment" href="#Run-project-executable">&#x25CE;</a></div>
1154
+ <p class="title">Run project executable</p>
1155
+ <div class="content"><p><pre># ruby bin/word_count
1156
+ Command-line options: {:manual=&gt;false, :version=&gt;false, :help=&gt;false}
1126
1157
  Command-line arguments: []
1127
1158
  </pre></p>
1128
1159
 
@@ -1133,9 +1164,20 @@ WordCount - TODO: put a single line description of your project here.
1133
1164
 
1134
1165
  TODO: Explain the command-line usage of this program here.
1135
1166
 
1167
+
1136
1168
  Usage:
1137
1169
 
1138
- word_count [Option...] Arg1 Arg2 Arg3...
1170
+ word_count [Options] Param1 Param2 Param3...
1171
+
1172
+
1173
+ Param1: Description for the first parameter.
1174
+
1175
+ Param2: Description for the second parameter.
1176
+
1177
+ Param3: Description for the third parameter.
1178
+
1179
+
1180
+ Options:
1139
1181
 
1140
1182
  --manual, -m: Show the user manual
1141
1183
  --version, -v: Print version and exit
@@ -1147,20 +1189,25 @@ Usage:
1147
1189
  <p><pre># ruby bin/word_count --version
1148
1190
  project: WordCount
1149
1191
  version: 0.0.0
1150
- release: 2009-01-19
1192
+ release: 2009-01-25
1151
1193
  website: http://word_count.rubyforge.org
1152
- install: /tmp/Inochi20090119-28736-efadjc-0/word_count
1153
- </pre></p>
1194
+ install: /tmp/Inochi20090125-24483-1xmgxqy-0/word_count
1195
+ </pre></p></div>
1196
+ </div> <div class="paragraph">
1197
+ <a name="Show-user-manual"/><div class="nav" id="Show-user-manual"><a title="Reverse jump to listing" href="#rev:Show-user-manual">&equiv;</a><a title="Jump to previous segment" href="#Run-project-executable">&#x25B3;</a><a title="Jump to next segment" href="#Configure-your-project">&#x25BD;</a><a title="Jump to this segment" href="#Show-user-manual">&#x25CE;</a></div>
1198
+ <p class="title">Show user manual</p>
1199
+ <div class="content"><p>Build the user manual (please disregard any &#8220;unclosed span&#8221; warnings):</p>
1154
1200
 
1155
- <p>See the user manual:</p>
1201
+ <p><pre># rake doc:man</pre></p>
1156
1202
 
1157
- <p><pre># rake doc:man 2&gt;/dev/null
1203
+ <p>Launch the user manual:</p>
1158
1204
 
1159
- # ruby bin/word_count --manual</pre></p>
1205
+ <p><pre># ruby bin/word_count --manual</pre></p>
1160
1206
 
1161
1207
  <p>The manual will now appear in your default web browser.</p></div>
1208
+ </div></p></div>
1162
1209
  </div> <div class="section">
1163
- <a name="Configure-your-project"/><div class="nav" id="Configure-your-project"><a title="Reverse jump to listing" href="#rev:Configure-your-project">&equiv;</a><a title="Jump to previous segment" href="#Generate-your-project">&#x25B3;</a><a title="Jump to next segment" href="#Project-information">&#x25BD;</a><a title="Jump to this segment" href="#Configure-your-project">&#x25CE;</a></div>
1210
+ <a name="Configure-your-project"/><div class="nav" id="Configure-your-project"><a title="Reverse jump to listing" href="#rev:Configure-your-project">&equiv;</a><a title="Jump to previous segment" href="#Show-user-manual">&#x25B3;</a><a title="Jump to next segment" href="#Project-information">&#x25BD;</a><a title="Jump to this segment" href="#Configure-your-project">&#x25CE;</a></div>
1164
1211
  <h3 class="title">
1165
1212
  3.3.3&nbsp;&nbsp;Configure your project
1166
1213
  </h3>
@@ -1197,7 +1244,7 @@ require <span style="background-color:#fff0f0;color:#D20"><span style="color:#71
1197
1244
  <span style="color:#036;font-weight:bold">Inochi</span>.init <span style="color:#A60">:WordCount</span>,
1198
1245
  <span style="color:#A60">:project</span> =&gt; <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">WordCount</span><span style="color:#710">'</span></span>,
1199
1246
  <span style="color:#A60">:version</span> =&gt; <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">0.0.0</span><span style="color:#710">'</span></span>,
1200
- <span style="color:#A60">:release</span> =&gt; <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">2009-01-19</span><span style="color:#710">'</span></span>,
1247
+ <span style="color:#A60">:release</span> =&gt; <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">2009-01-25</span><span style="color:#710">'</span></span>,
1201
1248
  <span style="color:#A60">:website</span> =&gt; <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">http://word_count.rubyforge.org</span><span style="color:#710">'</span></span>,
1202
1249
  <span style="color:#A60">:tagline</span> =&gt; <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">TODO: put a single line description of your project here.</span><span style="color:#710">'</span></span>,
1203
1250
  <span style="color:#A60">:require</span> =&gt; {
@@ -1223,9 +1270,20 @@ require <span style="background-color:#fff0f0;color:#D20"><span style="color:#71
1223
1270
  <span style="color:#666">#</span>
1224
1271
  <span style="color:#666"># TODO: Explain the command-line usage of this program here.</span>
1225
1272
  <span style="color:#666">#</span>
1273
+ <span style="color:#666">#</span>
1226
1274
  <span style="color:#666"># Usage:</span>
1227
1275
  <span style="color:#666">#</span>
1228
- <span style="color:#666"># word_count [Option...] Arg1 Arg2 Arg3...</span>
1276
+ <span style="color:#666"># word_count [Options] Param1 Param2 Param3...</span>
1277
+ <span style="color:#666">#</span>
1278
+ <span style="color:#666">#</span>
1279
+ <span style="color:#666"># Param1: Description for the first parameter.</span>
1280
+ <span style="color:#666">#</span>
1281
+ <span style="color:#666"># Param2: Description for the second parameter.</span>
1282
+ <span style="color:#666">#</span>
1283
+ <span style="color:#666"># Param3: Description for the third parameter.</span>
1284
+ <span style="color:#666">#</span>
1285
+ <span style="color:#666">#</span>
1286
+ <span style="color:#666"># Options:</span>
1229
1287
  <span style="color:#666">#</span>
1230
1288
 
1231
1289
  require <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">rubygems</span><span style="color:#710">'</span></span>
@@ -1292,7 +1350,7 @@ require <span style="background-color:#fff0f0;color:#D20"><span style="color:#71
1292
1350
  <span style="background:#eee"><span style="font-weight:bold;color:#888">&lt;%</span> project_summary <span style="color:#080;font-weight:bold">do</span> <span style="font-weight:bold;color:#888">%&gt;</span></span>
1293
1351
  <span style="color:#F00;background-color:#FAA">&gt;</span> TODO: explain the purpose of your project
1294
1352
 
1295
- ****<span style="background:#eee"><span style="font-weight:bold;color:#888">&lt;%=</span> <span style="color:#d70;font-weight:bold">$project</span> <span style="font-weight:bold;color:#888">%&gt;</span></span>**** is a __________ that __________.
1353
+ **<span style="background:#eee"><span style="font-weight:bold;color:#888">&lt;%=</span> <span style="color:#d70;font-weight:bold">$project</span> <span style="font-weight:bold;color:#888">%&gt;</span></span>** is a __________ that __________.
1296
1354
  <span style="background:#eee"><span style="font-weight:bold;color:#888">&lt;%</span> <span style="color:#080;font-weight:bold">end</span> <span style="font-weight:bold;color:#888">%&gt;</span></span>
1297
1355
 
1298
1356
  <span style="color:#F00;background-color:#FAA">&gt;</span> TODO: explain why your project is important
@@ -1379,9 +1437,9 @@ require <span style="background-color:#fff0f0;color:#D20"><span style="color:#71
1379
1437
  <span style="background:#eee"><span style="font-weight:bold;color:#888">&lt;%</span> section <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">Requirements</span><span style="color:#710">&quot;</span></span> <span style="color:#080;font-weight:bold">do</span> <span style="font-weight:bold;color:#888">%&gt;</span></span>
1380
1438
  Your system needs the following software to run **<span style="background:#eee"><span style="font-weight:bold;color:#888">&lt;%=</span> <span style="color:#d70;font-weight:bold">$project</span> <span style="font-weight:bold;color:#888">%&gt;</span></span>**.
1381
1439
 
1382
- | Software | Description | Notes |
1383
- | -------- | ----------- | ----- |
1384
- | [Ruby](http://ruby-lang.org) | Ruby language interpreter | Version 1.8.7 is required. |
1440
+ | Software | Description | Notes |
1441
+ | -------- | ----------- | ----- |
1442
+ | [Ruby](http://ruby-lang.org) | Ruby language interpreter | Version 1.8.7 is required. |
1385
1443
  | [RubyGems](http://rubygems.org) | Ruby packaging system | Version 1.3.1 is required. |
1386
1444
  <span style="background:#eee"><span style="font-weight:bold;color:#888">&lt;%</span> <span style="color:#080;font-weight:bold">end</span> <span style="font-weight:bold;color:#888">%&gt;</span></span>
1387
1445
 
@@ -1450,7 +1508,7 @@ require <span style="background-color:#fff0f0;color:#D20"><span style="color:#71
1450
1508
 
1451
1509
  You will see this output:
1452
1510
 
1453
- <span style="color:#070">&lt;pre&gt;</span><span style="background:#eee"><span style="font-weight:bold;color:#888">&lt;%=</span> verbatim <span style="background-color:#f0fff0;color:#2B2"><span style="color:#161">`</span><span style="">ruby bin/</span><span style="background:#eee"><span style="font-weight:bold;color:#888">#{</span><span style="color:#d70;font-weight:bold">$program</span><span style="font-weight:bold;color:#888">}</span></span><span style=""> --help</span><span style="color:#161">`</span></span> <span style="font-weight:bold;color:#888">%&gt;</span></span><span style="color:#070">&lt;/pre&gt;</span>
1511
+ <span style="color:#070">&lt;pre&gt;</span><span style="background:#eee"><span style="font-weight:bold;color:#888">&lt;%=</span> verbatim <span style="background-color:#f0fff0;color:#2B2"><span style="color:#161">`</span><span style="">ruby bin/</span><span style="background:#eee"><span style="font-weight:bold;color:#888">#{</span><span style="color:#d70;font-weight:bold">$program_name</span><span style="font-weight:bold;color:#888">}</span></span><span style=""> --help</span><span style="color:#161">`</span></span> <span style="font-weight:bold;color:#888">%&gt;</span></span><span style="color:#070">&lt;/pre&gt;</span>
1454
1512
 
1455
1513
  <span style="color:#F00;background-color:#FAA">&gt;</span> TODO: explain the command-line arguments
1456
1514
  <span style="background:#eee"><span style="font-weight:bold;color:#888">&lt;%</span> <span style="color:#080;font-weight:bold">end</span> <span style="font-weight:bold;color:#888">%&gt;</span></span>
@@ -1479,7 +1537,7 @@ require <span style="background-color:#fff0f0;color:#D20"><span style="color:#71
1479
1537
  <span style="color:#F00;background-color:#FAA">&gt;</span> TODO: put release notes for your project
1480
1538
  <span style="color:#F00;background-color:#FAA">&gt;</span> here -- newest first, oldest last.
1481
1539
 
1482
- <span style="background:#eee"><span style="font-weight:bold;color:#888">&lt;%</span> section <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">Version 0.0.0 (2009-01-19)</span><span style="color:#710">&quot;</span></span> <span style="color:#080;font-weight:bold">do</span> <span style="font-weight:bold;color:#888">%&gt;</span></span>
1540
+ <span style="background:#eee"><span style="font-weight:bold;color:#888">&lt;%</span> section <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">Version 0.0.0 (2009-01-25)</span><span style="color:#710">&quot;</span></span> <span style="color:#080;font-weight:bold">do</span> <span style="font-weight:bold;color:#888">%&gt;</span></span>
1483
1541
  <span style="color:#F00;background-color:#FAA">&gt;</span> TODO: write a short summary of the changes in this release
1484
1542
 
1485
1543
  This release changes __________, adds __________, and fixes __________.
@@ -1546,7 +1604,7 @@ require <span style="background-color:#fff0f0;color:#D20"><span style="color:#71
1546
1604
  <h3 class="title">
1547
1605
  3.3.4&nbsp;&nbsp;Implement your project
1548
1606
  </h3>
1549
- <div class="content"><p>Add the following code to the bottom of the main project library:</p>
1607
+ <div class="content"><p>Add the following code to the bottom of <tt>lib/word_count.rb</tt>, the main project library:</p>
1550
1608
 
1551
1609
  <p><pre class="code"><span style="color:#080;font-weight:bold">module</span> <span style="color:#B06;font-weight:bold">WordCount</span>
1552
1610
  <span style="color:#666"># Returns the number of words in the given input.</span>
@@ -1556,13 +1614,45 @@ require <span style="background-color:#fff0f0;color:#D20"><span style="color:#71
1556
1614
  <span style="color:#080;font-weight:bold">end</span>
1557
1615
  </pre></p>
1558
1616
 
1559
- <p>Add the following code to the bottom of the main project executable:</p>
1617
+ <p>Add the following code to the bottom of <tt>bin/word_count</tt>, the main project executable:</p>
1560
1618
 
1561
1619
  <p><pre class="code">input = <span style="color:#038;font-weight:bold">ARGF</span>.read
1562
1620
  total = <span style="color:#036;font-weight:bold">WordCount</span>.count(input)
1563
1621
  puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">There are </span><span style="background:#eee"><span style="font-weight:bold;color:#888">#{</span>total<span style="font-weight:bold;color:#888">}</span></span><span style=""> words in the input.</span><span style="color:#710">&quot;</span></span>
1564
1622
  </pre></p>
1565
1623
 
1624
+ <p>Add the following code to the bottom of <tt>test/word_count.rb</tt>, a unit test for the main project library:</p>
1625
+
1626
+ <p><pre class="code">describe <span style="color:#036;font-weight:bold">WordCount</span> <span style="color:#080;font-weight:bold">do</span>
1627
+ it <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">handles empty input</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1628
+ <span style="color:#036;font-weight:bold">WordCount</span>.count(<span style="color:#038;font-weight:bold">nil</span>).must_equal(<span style="color:#00D;font-weight:bold">0</span>)
1629
+ <span style="color:#036;font-weight:bold">WordCount</span>.count(<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="color:#710">'</span></span>).must_equal(<span style="color:#00D;font-weight:bold">0</span>)
1630
+ <span style="color:#036;font-weight:bold">WordCount</span>.count(<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style=""> </span><span style="color:#710">'</span></span>).must_equal(<span style="color:#00D;font-weight:bold">0</span>)
1631
+ <span style="color:#080;font-weight:bold">end</span>
1632
+
1633
+ it <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">handles single words</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1634
+ <span style="color:#036;font-weight:bold">WordCount</span>.count(<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">a</span><span style="color:#710">'</span></span>).must_equal(<span style="color:#00D;font-weight:bold">1</span>)
1635
+ <span style="color:#036;font-weight:bold">WordCount</span>.count(<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">foo</span><span style="color:#710">'</span></span>).must_equal(<span style="color:#00D;font-weight:bold">1</span>)
1636
+ <span style="color:#036;font-weight:bold">WordCount</span>.count(<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">bar</span><span style="color:#710">'</span></span>).must_equal(<span style="color:#00D;font-weight:bold">1</span>)
1637
+ <span style="color:#080;font-weight:bold">end</span>
1638
+
1639
+ it <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">handles multiple words</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1640
+ <span style="color:#036;font-weight:bold">WordCount</span>.count(<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">a b</span><span style="color:#710">'</span></span>).must_equal(<span style="color:#00D;font-weight:bold">2</span>)
1641
+ <span style="color:#036;font-weight:bold">WordCount</span>.count(<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">a-b</span><span style="color:#710">'</span></span>).must_equal(<span style="color:#00D;font-weight:bold">2</span>)
1642
+ <span style="color:#036;font-weight:bold">WordCount</span>.count(<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">a/b</span><span style="color:#710">'</span></span>).must_equal(<span style="color:#00D;font-weight:bold">2</span>)
1643
+ <span style="color:#080;font-weight:bold">end</span>
1644
+
1645
+ it <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">ignores punctuation and space</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1646
+ <span style="color:#036;font-weight:bold">WordCount</span>.count(<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">!</span><span style="color:#710">'</span></span>).must_equal(<span style="color:#00D;font-weight:bold">0</span>)
1647
+ <span style="color:#036;font-weight:bold">WordCount</span>.count(<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">! @ # % #!@#</span><span style="color:#710">'</span></span>).must_equal(<span style="color:#00D;font-weight:bold">0</span>)
1648
+ <span style="color:#036;font-weight:bold">WordCount</span>.count(<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style=""> !</span><span style="color:#710">'</span></span>).must_equal(<span style="color:#00D;font-weight:bold">0</span>)
1649
+ <span style="color:#036;font-weight:bold">WordCount</span>.count(<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">! </span><span style="color:#710">'</span></span>).must_equal(<span style="color:#00D;font-weight:bold">0</span>)
1650
+ <span style="color:#036;font-weight:bold">WordCount</span>.count(<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style=""> ! </span><span style="color:#710">'</span></span>).must_equal(<span style="color:#00D;font-weight:bold">0</span>)
1651
+ <span style="color:#036;font-weight:bold">WordCount</span>.count(<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style=""> ! </span><span style="color:#710">'</span></span>).must_equal(<span style="color:#00D;font-weight:bold">0</span>)
1652
+ <span style="color:#080;font-weight:bold">end</span>
1653
+ <span style="color:#080;font-weight:bold">end</span>
1654
+ </pre></p>
1655
+
1566
1656
  <p><div class="paragraph">
1567
1657
  <a name="Goodbye-LOAD_PATH-hello-require"/><div class="nav" id="Goodbye-LOAD_PATH-hello-require"><a title="Reverse jump to listing" href="#rev:Goodbye-LOAD_PATH-hello-require">&equiv;</a><a title="Jump to previous segment" href="#Implement-your-project">&#x25B3;</a><a title="Jump to next segment" href="#Test-your-project">&#x25BD;</a><a title="Jump to this segment" href="#Goodbye-LOAD_PATH-hello-require">&#x25CE;</a></div>
1568
1658
  <p class="title">Goodbye <code class="code"><span style="color:#d70;font-weight:bold">$LOAD_PATH</span></code>, hello <code class="code">require()</code></p>
@@ -1578,19 +1668,58 @@ puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">
1578
1668
  <p>Regardless of whether a sub-library is used within your project itself or from within an external application, we always <code class="code">require()</code> the sub-library using the same canonical path.</p></div>
1579
1669
  </div></p></div>
1580
1670
  </div> <div class="section">
1581
- <a name="Test-your-project"/><div class="nav" id="Test-your-project"><a title="Reverse jump to listing" href="#rev:Test-your-project">&equiv;</a><a title="Jump to previous segment" href="#Goodbye-LOAD_PATH-hello-require">&#x25B3;</a><a title="Jump to next segment" href="#Publish-your-project">&#x25BD;</a><a title="Jump to this segment" href="#Test-your-project">&#x25CE;</a></div>
1671
+ <a name="Test-your-project"/><div class="nav" id="Test-your-project"><a title="Reverse jump to listing" href="#rev:Test-your-project">&equiv;</a><a title="Jump to previous segment" href="#Goodbye-LOAD_PATH-hello-require">&#x25B3;</a><a title="Jump to next segment" href="#Units-and-tests">&#x25BD;</a><a title="Jump to this segment" href="#Test-your-project">&#x25CE;</a></div>
1582
1672
  <h3 class="title">
1583
1673
  3.3.5&nbsp;&nbsp;Test your project
1584
1674
  </h3>
1585
- <div class="content"><blockquote>
1586
- <p>TODO: show how to write a unit test for the code</p>
1587
- </blockquote>
1675
+ <div class="content"><p>To reduce the amount of code you have to write, <strong>Inochi</strong> defines the following convention for unit tests.</p>
1588
1676
 
1589
- <blockquote>
1590
- <p>TODO: integrate minitest tasks into Inochi.rake()</p>
1591
- </blockquote></div>
1677
+ <p><div class="paragraph">
1678
+ <a name="Units-and-tests"/><div class="nav" id="Units-and-tests"><a title="Reverse jump to listing" href="#rev:Units-and-tests">&equiv;</a><a title="Jump to previous segment" href="#Test-your-project">&#x25B3;</a><a title="Jump to next segment" href="#Test-execution">&#x25BD;</a><a title="Jump to this segment" href="#Units-and-tests">&#x25CE;</a></div>
1679
+ <p class="title">Units and tests</p>
1680
+ <div class="content"><p>Every Ruby source file in your project&#8217;s <tt>lib/</tt> directory is considered to be a <strong>unit</strong>. Likewise, every Ruby source file in your project&#8217;s <tt>test/</tt> is considered to be a <strong>test</strong>.</p>
1681
+
1682
+ <p>As a result, your project&#8217;s <tt>test/</tt> directory structure <em>mirrors</em> the structure of your project&#8217;s <tt>lib/</tt> directory. For example, if your project has a <tt>lib/foo/bar.rb</tt> unit, then <tt>test/foo/bar.rb</tt> would be its the corresponding test.</p></div>
1683
+ </div> <div class="paragraph">
1684
+ <a name="Test-execution"/><div class="nav" id="Test-execution"><a title="Reverse jump to listing" href="#rev:Test-execution">&equiv;</a><a title="Jump to previous segment" href="#Units-and-tests">&#x25B3;</a><a title="Jump to next segment" href="#Helper-libraries">&#x25BD;</a><a title="Jump to this segment" href="#Test-execution">&#x25CE;</a></div>
1685
+ <p class="title">Test execution</p>
1686
+ <div class="content"><p><pre>rake test</pre></p>
1687
+
1688
+ <p>The above command begins the testing process, during which:</p>
1689
+
1690
+ <ul>
1691
+ <li>
1692
+ <p>Tests which lack corresponding units are <em>skipped</em> and not executed. A message specifying which test file was skipped is printed to the standard error stream whenever this occurs.</p>
1693
+ </li>
1694
+
1695
+ <li>
1696
+ <p>Before a test is executed, its corresponding unit is automatically loaded into the Ruby environment using <code class="code">require()</code>.</p>
1697
+ </li>
1698
+ </ul>
1699
+
1700
+ <p>As for the details of test execution:</p>
1701
+
1702
+ <ul>
1703
+ <li>
1704
+ <p>Tests are executed by the <a href='http://rubyforge.org/projects/bfts/'>minitest</a> library, which allows you to write unit tests in a combination of styles: traditional TDD, modern BDD, alternative rSpec BDD, and mock-based validation styles.</p>
1705
+ </li>
1706
+
1707
+ <li>
1708
+ <p>Within each test, test cases are executed in random order. This is the default behavior of the <a href='http://rubyforge.org/projects/bfts/'>minitest</a> library.</p>
1709
+ </li>
1710
+ </ul></div>
1711
+ </div> <div class="paragraph">
1712
+ <a name="Helper-libraries"/><div class="nav" id="Helper-libraries"><a title="Reverse jump to listing" href="#rev:Helper-libraries">&equiv;</a><a title="Jump to previous segment" href="#Test-execution">&#x25B3;</a><a title="Jump to next segment" href="#Publish-your-project">&#x25BD;</a><a title="Jump to this segment" href="#Helper-libraries">&#x25CE;</a></div>
1713
+ <p class="title">Helper libraries</p>
1714
+ <div class="content"><p>Your project&#8217;s main directory is added to Ruby&#8217;s load path. So if your tests have helper libraries stored in your project&#8217;s <tt>test/</tt> directory, you can load them into your tests by adding a &#8220;test/&#8221; prefix.</p>
1715
+
1716
+ <p>For example, if your <tt>test/foo/bar.rb</tt> test has a <tt>test/foo/qux.rb</tt> helper library, then you would write the following code inside the test to load the helper library:</p>
1717
+
1718
+ <p><pre class="code">require <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">test/foo/qux</span><span style="color:#710">'</span></span>
1719
+ </pre></p></div>
1720
+ </div></p></div>
1592
1721
  </div> <div class="section">
1593
- <a name="Publish-your-project"/><div class="nav" id="Publish-your-project"><a title="Reverse jump to listing" href="#rev:Publish-your-project">&equiv;</a><a title="Jump to previous segment" href="#Test-your-project">&#x25B3;</a><a title="Jump to next segment" href="#Build-a-RubyGem">&#x25BD;</a><a title="Jump to this segment" href="#Publish-your-project">&#x25CE;</a></div>
1722
+ <a name="Publish-your-project"/><div class="nav" id="Publish-your-project"><a title="Reverse jump to listing" href="#rev:Publish-your-project">&equiv;</a><a title="Jump to previous segment" href="#Helper-libraries">&#x25B3;</a><a title="Jump to next segment" href="#Build-a-RubyGem">&#x25BD;</a><a title="Jump to this segment" href="#Publish-your-project">&#x25CE;</a></div>
1594
1723
  <h3 class="title">
1595
1724
  3.3.6&nbsp;&nbsp;Publish your project
1596
1725
  </h3>
@@ -1606,8 +1735,14 @@ puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">
1606
1735
  <div class="content"><p>Build a RubyGem by running:</p>
1607
1736
 
1608
1737
  <p><pre># rake pak
1609
- (in /tmp/Inochi20090119-28736-efadjc-0/word_count)
1610
- (in /tmp/Inochi20090119-28736-efadjc-0/word_count)
1738
+ (in /tmp/Inochi20090125-24483-1xmgxqy-0/word_count)
1739
+ (in /tmp/Inochi20090125-24483-1xmgxqy-0/word_count)
1740
+ Loaded suite word_count
1741
+ Started
1742
+ .
1743
+ Finished in 0.001073 seconds.
1744
+
1745
+ 1 tests, 23 assertions, 0 failures, 0 errors, 0 skips
1611
1746
  Successfully built RubyGem
1612
1747
  Name: word_count
1613
1748
  Version: 0.0.0
@@ -1628,7 +1763,7 @@ puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">
1628
1763
  <span style="color:#808">bindir</span>: <span style="background-color:#fff0f0;color:#D20">bin</span>
1629
1764
  <span style="color:#808">cert_chain</span>: <span style="background-color:#fff0f0;color:#D20">[]</span>
1630
1765
 
1631
- <span style="color:#808">date</span>: <span style="background-color:#fff0f0;color:#D20">2009-01-19 00:00:00 -08:00</span>
1766
+ <span style="color:#808">date</span>: <span style="background-color:#fff0f0;color:#D20">2009-01-25 00:00:00 -08:00</span>
1632
1767
  <span style="color:#808">default_executable</span>:
1633
1768
  <span style="color:#808">dependencies</span>:
1634
1769
  - <span style="color:#339;font-weight:bold">!ruby/object</span>:<span style="color:#B06;font-weight:bold">Gem::Dependency</span>
@@ -1652,6 +1787,8 @@ puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">
1652
1787
  <span style="color:#808">files</span>:
1653
1788
  - <span style="background-color:#fff0f0;color:#D20">lib</span>
1654
1789
  - <span style="background-color:#fff0f0;color:#D20">lib/word_count.rb</span>
1790
+ - <span style="background-color:#fff0f0;color:#D20">test</span>
1791
+ - <span style="background-color:#fff0f0;color:#D20">test/word_count.rb</span>
1655
1792
  - <span style="background-color:#fff0f0;color:#D20">bin</span>
1656
1793
  - <span style="background-color:#fff0f0;color:#D20">bin/word_count</span>
1657
1794
  - <span style="background-color:#fff0f0;color:#D20">Rakefile</span>
@@ -1747,7 +1884,7 @@ puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">
1747
1884
  <div class="content"><p>Build release announcements by running:</p>
1748
1885
 
1749
1886
  <p><pre># rake ann
1750
- (in /tmp/Inochi20090119-28736-efadjc-0/word_count)
1887
+ (in /tmp/Inochi20090125-24483-1xmgxqy-0/word_count)
1751
1888
  </pre></p>
1752
1889
 
1753
1890
  <p>This produces the following files in your project directory:</p>
@@ -1776,31 +1913,104 @@ puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">
1776
1913
  </div></p></div>
1777
1914
  </div></p></div>
1778
1915
  </div><div class="chapter">
1779
- <a name="history"/><div class="nav" id="history"><a title="Reverse jump to listing" href="#rev:history">&equiv;</a><a title="Jump to previous segment" href="#Publish-the-documentation">&#x25B3;</a><a title="Jump to next segment" href="#Version-0.1.0-2009-01-13">&#x25BD;</a><a title="Jump to this segment" href="#history">&#x25CE;</a></div>
1916
+ <a name="history"/><div class="nav" id="history"><a title="Reverse jump to listing" href="#rev:history">&equiv;</a><a title="Jump to previous segment" href="#Publish-the-documentation">&#x25B3;</a><a title="Jump to next segment" href="#Version-0.2.0-2009-01-25">&#x25BD;</a><a title="Jump to this segment" href="#history">&#x25CE;</a></div>
1780
1917
  <h1 class="title">
1781
1918
  Chapter&nbsp;4
1782
1919
  <br/>
1783
1920
  <big>History</big>
1784
1921
  </h1>
1785
1922
  <div class="content"><p><p><div class="section">
1786
- <a name="Version-0.1.0-2009-01-13"/><div class="nav" id="Version-0.1.0-2009-01-13"><a title="Reverse jump to listing" href="#rev:Version-0.1.0-2009-01-13">&equiv;</a><a title="Jump to previous segment" href="#history">&#x25B3;</a><a title="Jump to next segment" href="#New-features">&#x25BD;</a><a title="Jump to this segment" href="#Version-0.1.0-2009-01-13">&#x25CE;</a></div>
1923
+ <a name="Version-0.2.0-2009-01-25"/><div class="nav" id="Version-0.2.0-2009-01-25"><a title="Reverse jump to listing" href="#rev:Version-0.2.0-2009-01-25">&equiv;</a><a title="Jump to previous segment" href="#history">&#x25B3;</a><a title="Jump to next segment" href="#Contributor-kudos">&#x25BD;</a><a title="Jump to this segment" href="#Version-0.2.0-2009-01-25">&#x25CE;</a></div>
1924
+ <h2 class="title">
1925
+ 4.1&nbsp;&nbsp;Version 0.2.0 (2009-01-25)
1926
+ </h2>
1927
+ <div class="content"><p>This release adds support for unit testing, improves the portability of <strong>Inochi</strong> and configurability of your projects, adds new content to the user manual, and fixes some bugs.</p>
1928
+
1929
+ <p><div class="paragraph">
1930
+ <a name="Contributor-kudos"/><div class="nav" id="Contributor-kudos"><a title="Reverse jump to listing" href="#rev:Contributor-kudos">&equiv;</a><a title="Jump to previous segment" href="#Version-0.2.0-2009-01-25">&#x25B3;</a><a title="Jump to next segment" href="#New-features">&#x25BD;</a><a title="Jump to this segment" href="#Contributor-kudos">&#x25CE;</a></div>
1931
+ <p class="title">Contributor kudos</p>
1932
+ <div class="content"><p>Florian Gilcher patched <strong>Inochi</strong> to:</p>
1933
+
1934
+ <ul>
1935
+ <li>
1936
+ <p>Run on both JRuby and normal Ruby in multiple versions and with different executable names on Windows.</p>
1937
+ </li>
1938
+
1939
+ <li>
1940
+ <p>Allow project authors to be specified by hand instead of always relying on the license file to be in expected form, because his license template doesn&#8217;t follow that form.</p>
1941
+ </li>
1942
+ </ul></div>
1943
+ </div> <div class="paragraph">
1944
+ <a name="New-features"/><div class="nav" id="New-features"><a title="Reverse jump to listing" href="#rev:New-features">&equiv;</a><a title="Jump to previous segment" href="#Contributor-kudos">&#x25B3;</a><a title="Jump to next segment" href="#Bug-fixes">&#x25BD;</a><a title="Jump to this segment" href="#New-features">&#x25CE;</a></div>
1945
+ <p class="title">New features</p>
1946
+ <div class="content"><ul>
1947
+ <li>
1948
+ <p>Added support for unit testing via the <a href='http://rubyforge.org/projects/bfts/'>minitest</a> library. See <a class="xref" href="#Test-your-project">Section 3.3.5. Test your project</a> for documentation.</p>
1949
+
1950
+ <p>Also, in related news, the scaffold generator now emits a default unit test for the main project library.</p>
1951
+ </li>
1952
+
1953
+ <li>
1954
+ <p>Added optional ProgramName parameter to the scaffold generator. This allows you to specify reasonable program names when your project module has a strange capitalization:</p>
1955
+
1956
+ <pre>&gt; inochi ERBook
1957
+ create er_book/LICENSE
1958
+
1959
+ &gt; inochi ERBook erbook
1960
+ create erbook/LICENSE
1961
+
1962
+ &gt; inochi ERBook foobar
1963
+ create foobar/LICENSE</pre>
1964
+ </li>
1965
+
1966
+ <li>
1967
+ <p>Allow project authors to be specified via</p>
1968
+
1969
+ <p><code class="code"><span style="color:#036;font-weight:bold">Inochi</span>.init <span style="color:#A60">:YourProject</span>, <span style="color:#A60">:authors</span> =&gt; ...</code></p>
1970
+ </li>
1971
+ </ul></div>
1972
+ </div> <div class="paragraph">
1973
+ <a name="Bug-fixes"/><div class="nav" id="Bug-fixes"><a title="Reverse jump to listing" href="#rev:Bug-fixes">&equiv;</a><a title="Jump to previous segment" href="#New-features">&#x25B3;</a><a title="Jump to next segment" href="#Housekeeping">&#x25BD;</a><a title="Jump to this segment" href="#Bug-fixes">&#x25CE;</a></div>
1974
+ <p class="title">Bug fixes</p>
1975
+ <div class="content"><ul>
1976
+ <li>
1977
+ <p>Use <code class="code"><span style="color:#036;font-weight:bold">Gem</span>::<span style="color:#036;font-weight:bold">RubyGemsVersion</span></code> instead of a shell command to determine rubygems version for generation of <tt>setup.erb</tt>. (Florian Gilcher)</p>
1978
+ </li>
1979
+
1980
+ <li>
1981
+ <p>Add blank lines between all list items, not just multi-line ones, in the plain-text version of the relase announcement for improved readability.</p>
1982
+ </li>
1983
+
1984
+ <li>
1985
+ <p>Omit LaTeX-style heading numbers from release announcements. They caused confusion, especially in plain-text announcements, when trying to determine which version of a project was released.</p>
1986
+ </li>
1987
+ </ul></div>
1988
+ </div> <div class="paragraph">
1989
+ <a name="Housekeeping"/><div class="nav" id="Housekeeping"><a title="Reverse jump to listing" href="#rev:Housekeeping">&equiv;</a><a title="Jump to previous segment" href="#Bug-fixes">&#x25B3;</a><a title="Jump to next segment" href="#Version-0.1.0-2009-01-13">&#x25BD;</a><a title="Jump to this segment" href="#Housekeeping">&#x25CE;</a></div>
1990
+ <p class="title">Housekeeping</p>
1991
+ <div class="content"><ul>
1992
+ <li>Added unit tests for utility methods provided by the <strong>Inochi</strong> module: project name calculation and CamelCase to snake_case conversion.</li>
1993
+ </ul></div>
1994
+ </div></p></div>
1995
+ </div> <div class="section">
1996
+ <a name="Version-0.1.0-2009-01-13"/><div class="nav" id="Version-0.1.0-2009-01-13"><a title="Reverse jump to listing" href="#rev:Version-0.1.0-2009-01-13">&equiv;</a><a title="Jump to previous segment" href="#Housekeeping">&#x25B3;</a><a title="Jump to next segment" href="#New-features-608879868">&#x25BD;</a><a title="Jump to this segment" href="#Version-0.1.0-2009-01-13">&#x25CE;</a></div>
1787
1997
  <h2 class="title">
1788
1998
  4.1&nbsp;&nbsp;Version 0.1.0 (2009-01-13)
1789
1999
  </h2>
1790
2000
  <div class="content"><p>This release reattempts to fix the <a href='http://www.ruby-forum.com/topic/176173#771281'>circular dependency problem</a> that occurred when installing either <strong>Inochi</strong> or <strong>ERBook</strong>.</p>
1791
2001
 
1792
2002
  <p><div class="paragraph">
1793
- <a name="New-features"/><div class="nav" id="New-features"><a title="Reverse jump to listing" href="#rev:New-features">&equiv;</a><a title="Jump to previous segment" href="#Version-0.1.0-2009-01-13">&#x25B3;</a><a title="Jump to next segment" href="#Bug-fixes">&#x25BD;</a><a title="Jump to this segment" href="#New-features">&#x25CE;</a></div>
2003
+ <a name="New-features-608879868"/><div class="nav" id="New-features-608879868"><a title="Reverse jump to listing" href="#rev:New-features-608879868">&equiv;</a><a title="Jump to previous segment" href="#Version-0.1.0-2009-01-13">&#x25B3;</a><a title="Jump to next segment" href="#Bug-fixes-608886358">&#x25BD;</a><a title="Jump to this segment" href="#New-features-608879868">&#x25CE;</a></div>
1794
2004
  <p class="title">New features</p>
1795
2005
  <div class="content"><ul>
1796
- <li><code class="code"><span style="color:#036;font-weight:bold">Inochi</span>.init()</code> now adds <code class="code"><span style="color:#666">#major()</span></code>, <code class="code"><span style="color:#666">#series()</span></code>, and <code class="code"><span style="color:#666">#requirement()</span></code> instance methods to a project&#8217;s <code class="code"><span style="color:#036;font-weight:bold">VERSION</span></code> constant.</li>
2006
+ <li><code class="code">**<span style="color:#036;font-weight:bold">Inochi</span>**.init()</code> now adds <code class="code"><span style="color:#666">#major()</span></code>, <code class="code"><span style="color:#666">#series()</span></code>, and <code class="code"><span style="color:#666">#requirement()</span></code> instance methods to a project&#8217;s <code class="code"><span style="color:#036;font-weight:bold">VERSION</span></code> constant.</li>
1797
2007
  </ul></div>
1798
2008
  </div> <div class="paragraph">
1799
- <a name="Bug-fixes"/><div class="nav" id="Bug-fixes"><a title="Reverse jump to listing" href="#rev:Bug-fixes">&equiv;</a><a title="Jump to previous segment" href="#New-features">&#x25B3;</a><a title="Jump to next segment" href="#Version-0.0.1-2009-01-13">&#x25BD;</a><a title="Jump to this segment" href="#Bug-fixes">&#x25CE;</a></div>
2009
+ <a name="Bug-fixes-608886358"/><div class="nav" id="Bug-fixes-608886358"><a title="Reverse jump to listing" href="#rev:Bug-fixes-608886358">&equiv;</a><a title="Jump to previous segment" href="#New-features-608879868">&#x25B3;</a><a title="Jump to next segment" href="#Version-0.0.1-2009-01-13">&#x25BD;</a><a title="Jump to this segment" href="#Bug-fixes-608886358">&#x25CE;</a></div>
1800
2010
  <p class="title">Bug fixes</p>
1801
2011
  <div class="content"><ul>
1802
2012
  <li>
1803
- <p>Solved circular dependency problem by making inochi gem not dependent on erbook gem. However, <strong>ERBook</strong> is still required during runtime and is supplied on the <code class="code">gem install</code> command for <strong>Inochi</strong>.</p>
2013
+ <p>Solved circular dependency problem by making inochi gem not dependent on erbook gem. However, ERBook is still required during runtime and is supplied on the <code class="code">gem install</code> command for <strong>Inochi</strong>.</p>
1804
2014
 
1805
2015
  <p><a class="xref" href="#Installation">Section 2.2. Installation</a> has been updated accordingly.</p>
1806
2016
  </li>
@@ -1811,20 +2021,20 @@ puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">
1811
2021
  </ul></div>
1812
2022
  </div></p></div>
1813
2023
  </div> <div class="section">
1814
- <a name="Version-0.0.1-2009-01-13"/><div class="nav" id="Version-0.0.1-2009-01-13"><a title="Reverse jump to listing" href="#rev:Version-0.0.1-2009-01-13">&equiv;</a><a title="Jump to previous segment" href="#Bug-fixes">&#x25B3;</a><a title="Jump to next segment" href="#Contributor-kudos">&#x25BD;</a><a title="Jump to this segment" href="#Version-0.0.1-2009-01-13">&#x25CE;</a></div>
2024
+ <a name="Version-0.0.1-2009-01-13"/><div class="nav" id="Version-0.0.1-2009-01-13"><a title="Reverse jump to listing" href="#rev:Version-0.0.1-2009-01-13">&equiv;</a><a title="Jump to previous segment" href="#Bug-fixes-608886358">&#x25B3;</a><a title="Jump to next segment" href="#Contributor-kudos-608900438">&#x25BD;</a><a title="Jump to this segment" href="#Version-0.0.1-2009-01-13">&#x25CE;</a></div>
1815
2025
  <h2 class="title">
1816
2026
  4.1&nbsp;&nbsp;Version 0.0.1 (2009-01-13)
1817
2027
  </h2>
1818
2028
  <div class="content"><p>This release fixes some show-stopper bugs.</p>
1819
2029
 
1820
2030
  <p><div class="paragraph">
1821
- <a name="Contributor-kudos"/><div class="nav" id="Contributor-kudos"><a title="Reverse jump to listing" href="#rev:Contributor-kudos">&equiv;</a><a title="Jump to previous segment" href="#Version-0.0.1-2009-01-13">&#x25B3;</a><a title="Jump to next segment" href="#Bug-fixes-608680498">&#x25BD;</a><a title="Jump to this segment" href="#Contributor-kudos">&#x25CE;</a></div>
2031
+ <a name="Contributor-kudos-608900438"/><div class="nav" id="Contributor-kudos-608900438"><a title="Reverse jump to listing" href="#rev:Contributor-kudos-608900438">&equiv;</a><a title="Jump to previous segment" href="#Version-0.0.1-2009-01-13">&#x25B3;</a><a title="Jump to next segment" href="#Bug-fixes-608905168">&#x25BD;</a><a title="Jump to this segment" href="#Contributor-kudos-608900438">&#x25CE;</a></div>
1822
2032
  <p class="title">Contributor kudos</p>
1823
2033
  <div class="content"><ul>
1824
2034
  <li>Florian Gilcher tried the first release of <strong>Inochi</strong> and reported bugs.</li>
1825
2035
  </ul></div>
1826
2036
  </div> <div class="paragraph">
1827
- <a name="Bug-fixes-608680498"/><div class="nav" id="Bug-fixes-608680498"><a title="Reverse jump to listing" href="#rev:Bug-fixes-608680498">&equiv;</a><a title="Jump to previous segment" href="#Contributor-kudos">&#x25B3;</a><a title="Jump to next segment" href="#Housekeeping">&#x25BD;</a><a title="Jump to this segment" href="#Bug-fixes-608680498">&#x25CE;</a></div>
2037
+ <a name="Bug-fixes-608905168"/><div class="nav" id="Bug-fixes-608905168"><a title="Reverse jump to listing" href="#rev:Bug-fixes-608905168">&equiv;</a><a title="Jump to previous segment" href="#Contributor-kudos-608900438">&#x25B3;</a><a title="Jump to next segment" href="#Housekeeping-608918928">&#x25BD;</a><a title="Jump to this segment" href="#Bug-fixes-608905168">&#x25CE;</a></div>
1828
2038
  <p class="title">Bug fixes</p>
1829
2039
  <div class="content"><ul>
1830
2040
  <li>
@@ -1842,14 +2052,14 @@ puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">
1842
2052
  </li>
1843
2053
  </ul></div>
1844
2054
  </div> <div class="paragraph">
1845
- <a name="Housekeeping"/><div class="nav" id="Housekeeping"><a title="Reverse jump to listing" href="#rev:Housekeeping">&equiv;</a><a title="Jump to previous segment" href="#Bug-fixes-608680498">&#x25B3;</a><a title="Jump to next segment" href="#Version-0.0.0-2009-01-13">&#x25BD;</a><a title="Jump to this segment" href="#Housekeeping">&#x25CE;</a></div>
2055
+ <a name="Housekeeping-608918928"/><div class="nav" id="Housekeeping-608918928"><a title="Reverse jump to listing" href="#rev:Housekeeping-608918928">&equiv;</a><a title="Jump to previous segment" href="#Bug-fixes-608905168">&#x25B3;</a><a title="Jump to next segment" href="#Version-0.0.0-2009-01-13">&#x25BD;</a><a title="Jump to this segment" href="#Housekeeping-608918928">&#x25CE;</a></div>
1846
2056
  <p class="title">Housekeeping</p>
1847
2057
  <div class="content"><ul>
1848
2058
  <li>Only add project libraries to <code class="code"><span style="color:#d70;font-weight:bold">$LOAD_PATH</span></code> if not already there.</li>
1849
2059
  </ul></div>
1850
2060
  </div></p></div>
1851
2061
  </div> <div class="section">
1852
- <a name="Version-0.0.0-2009-01-13"/><div class="nav" id="Version-0.0.0-2009-01-13"><a title="Reverse jump to listing" href="#rev:Version-0.0.0-2009-01-13">&equiv;</a><a title="Jump to previous segment" href="#Housekeeping">&#x25B3;</a>&#x25BD;<a title="Jump to this segment" href="#Version-0.0.0-2009-01-13">&#x25CE;</a></div>
2062
+ <a name="Version-0.0.0-2009-01-13"/><div class="nav" id="Version-0.0.0-2009-01-13"><a title="Reverse jump to listing" href="#rev:Version-0.0.0-2009-01-13">&equiv;</a><a title="Jump to previous segment" href="#Housekeeping-608918928">&#x25B3;</a>&#x25BD;<a title="Jump to this segment" href="#Version-0.0.0-2009-01-13">&#x25CE;</a></div>
1853
2063
  <h2 class="title">
1854
2064
  4.1&nbsp;&nbsp;Version 0.0.0 (2009-01-13)
1855
2065
  </h2>
@@ -1867,16 +2077,16 @@ puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">
1867
2077
 
1868
2078
  <div id="footer">
1869
2079
 
1870
- Generated by <a href="http://snk.tuxfamily.org/lib/erbook/">ERBook 6.0.1</a> on Mon Jan 19 12:55:48 -0800 2009.
2080
+ Generated by <a href="http://snk.tuxfamily.org/lib/erbook/">ERBook 6.0.1</a> on Sun Jan 25 10:26:44 -0800 2009.
1871
2081
 
1872
2082
  <div id="footer-credits">
1873
2083
  <p>
1874
- <img class="icon" src="&icon_caution;" alt="caution"/>
1875
- <img class="icon" src="&icon_tip;" alt="tip"/>
1876
- <img class="icon" src="&icon_important;" alt="important"/>
1877
- <img class="icon" src="&icon_note;" alt="note"/>
1878
- <img class="icon" src="&icon_warning;" alt="warning"/>
1879
- <img class="icon" src="&icon_quote;" alt="quote"/>
2084
+ <img class="icon" alt="caution" src="&icon_caution;"/>
2085
+ <img class="icon" alt="tip" src="&icon_tip;"/>
2086
+ <img class="icon" alt="important" src="&icon_important;"/>
2087
+ <img class="icon" alt="note" src="&icon_note;"/>
2088
+ <img class="icon" alt="warning" src="&icon_warning;"/>
2089
+ <img class="icon" alt="quote" src="&icon_quote;"/>
1880
2090
 
1881
2091
  <br/>
1882
2092
 
@@ -1884,7 +2094,7 @@ puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">
1884
2094
  </p>
1885
2095
 
1886
2096
  <p>
1887
- <img class="icon" src="&icon_link;" alt="link"/>
2097
+ <img class="icon" alt="link" src="&icon_link;"/>
1888
2098
 
1889
2099
  <br/>
1890
2100