inochi 1.1.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (104) hide show
  1. data/CREDITS +17 -1
  2. data/bin/inochi +19 -539
  3. data/lib/inochi.rb +1 -41
  4. data/lib/inochi/engine.rb +101 -0
  5. data/lib/inochi/generate.rb +52 -0
  6. data/lib/inochi/inochi.rb +109 -0
  7. data/lib/inochi/tasks/ann.rake +230 -0
  8. data/lib/inochi/tasks/api.rake +28 -0
  9. data/lib/inochi/tasks/gem.rake +46 -0
  10. data/lib/inochi/tasks/init.rake +38 -0
  11. data/lib/inochi/tasks/man.rake +78 -0
  12. data/lib/inochi/tasks/project.rake +25 -0
  13. data/lib/inochi/tasks/pub.rake +130 -0
  14. data/lib/inochi/templates/CREDITS.rbs +18 -0
  15. data/lib/inochi/templates/EXAMPLES.rbs +24 -0
  16. data/lib/inochi/templates/FURTHER.rbs +17 -0
  17. data/lib/inochi/templates/HACKING.rbs +92 -0
  18. data/lib/inochi/templates/HISTORY.rbs +55 -0
  19. data/lib/inochi/templates/LICENSE.rbs +15 -0
  20. data/lib/inochi/templates/MANUAL.rbs +27 -0
  21. data/lib/inochi/templates/README.rbs +60 -0
  22. data/lib/inochi/templates/USAGE.rbs +23 -0
  23. data/lib/inochi/templates/command.rbs +23 -0
  24. data/lib/inochi/templates/inochi.opts.rbs +43 -0
  25. data/lib/inochi/templates/inochi.rb.rbs +102 -0
  26. data/lib/inochi/templates/library.rbs +7 -0
  27. data/lib/inochi/templates/library_test.rb.rbs +3 -0
  28. data/lib/inochi/templates/test_helper.rb.rbs +3 -0
  29. data/lib/inochi/templates/test_runner.rbs +25 -0
  30. data/{doc → logo}/inochi.png +0 -0
  31. data/man.html +959 -0
  32. data/man/man1/inochi.1.gz +0 -0
  33. metadata +129 -198
  34. data/doc/README +0 -6
  35. data/doc/api/apple-touch-icon.png +0 -0
  36. data/doc/api/classes/Array.html +0 -370
  37. data/doc/api/classes/File.html +0 -110
  38. data/doc/api/classes/Inochi.html +0 -1477
  39. data/doc/api/classes/Inochi/Manual.html +0 -157
  40. data/doc/api/classes/Inochi/Phrases.html +0 -331
  41. data/doc/api/classes/Inochi/Version.html +0 -190
  42. data/doc/api/classes/TempDir.html +0 -164
  43. data/doc/api/created.rid +0 -1
  44. data/doc/api/css/main.css +0 -263
  45. data/doc/api/css/panel.css +0 -383
  46. data/doc/api/css/reset.css +0 -53
  47. data/doc/api/favicon.ico +0 -0
  48. data/doc/api/files/CREDITS.html +0 -61
  49. data/doc/api/files/LICENSE.html +0 -76
  50. data/doc/api/files/lib/inochi/book_rb.html +0 -106
  51. data/doc/api/files/lib/inochi/init_rb.html +0 -66
  52. data/doc/api/files/lib/inochi/main_rb.html +0 -52
  53. data/doc/api/files/lib/inochi/rake_rb.html +0 -52
  54. data/doc/api/files/lib/inochi/test/bacon_rb.html +0 -67
  55. data/doc/api/files/lib/inochi/test/context_rb.html +0 -69
  56. data/doc/api/files/lib/inochi/test/dfect_rb.html +0 -67
  57. data/doc/api/files/lib/inochi/test/matchy_rb.html +0 -69
  58. data/doc/api/files/lib/inochi/test/minitest_rb.html +0 -71
  59. data/doc/api/files/lib/inochi/test/mocha_rb.html +0 -67
  60. data/doc/api/files/lib/inochi/test/rspec_rb.html +0 -67
  61. data/doc/api/files/lib/inochi/test/shoulda_rb.html +0 -67
  62. data/doc/api/files/lib/inochi/test/test_spec_rb.html +0 -67
  63. data/doc/api/files/lib/inochi/test/test_unit_rb.html +0 -67
  64. data/doc/api/files/lib/inochi/util/combo_rb.html +0 -59
  65. data/doc/api/files/lib/inochi/util/tempdir_rb.html +0 -68
  66. data/doc/api/files/lib/inochi/util_rb.html +0 -59
  67. data/doc/api/files/lib/inochi_rb.html +0 -76
  68. data/doc/api/i/arrows.png +0 -0
  69. data/doc/api/i/results_bg.png +0 -0
  70. data/doc/api/i/tree_bg.png +0 -0
  71. data/doc/api/index.html +0 -14
  72. data/doc/api/js/jquery-1.3.2.min.js +0 -19
  73. data/doc/api/js/jquery-effect.js +0 -593
  74. data/doc/api/js/main.js +0 -22
  75. data/doc/api/js/searchdoc.js +0 -628
  76. data/doc/api/panel/index.html +0 -71
  77. data/doc/api/panel/search_index.js +0 -1
  78. data/doc/api/panel/tree.js +0 -1
  79. data/doc/history.erb +0 -268
  80. data/doc/index.erb +0 -11
  81. data/doc/index.html +0 -3179
  82. data/doc/inochi.svg +0 -405
  83. data/doc/intro.erb +0 -87
  84. data/doc/setup.erb +0 -105
  85. data/doc/usage.erb +0 -641
  86. data/lib/inochi/book.rb +0 -91
  87. data/lib/inochi/init.rb +0 -256
  88. data/lib/inochi/main.rb +0 -85
  89. data/lib/inochi/rake.rb +0 -902
  90. data/lib/inochi/test/bacon.rb +0 -3
  91. data/lib/inochi/test/context.rb +0 -4
  92. data/lib/inochi/test/dfect.rb +0 -3
  93. data/lib/inochi/test/matchy.rb +0 -4
  94. data/lib/inochi/test/minitest.rb +0 -7
  95. data/lib/inochi/test/mocha.rb +0 -3
  96. data/lib/inochi/test/rspec.rb +0 -3
  97. data/lib/inochi/test/shoulda.rb +0 -3
  98. data/lib/inochi/test/test_spec.rb +0 -3
  99. data/lib/inochi/test/test_unit.rb +0 -3
  100. data/lib/inochi/util.rb +0 -99
  101. data/lib/inochi/util/combo.rb +0 -191
  102. data/lib/inochi/util/tempdir.rb +0 -29
  103. data/rakefile +0 -12
  104. data/test/inochi.rb +0 -111
@@ -0,0 +1,55 @@
1
+ %#----------------------------------------------------------------------------
2
+ ## VERSIONS
3
+ %#----------------------------------------------------------------------------
4
+
5
+ This section contains release notes of current and past releases.
6
+
7
+ %#----------------------------------------------------------------------------
8
+ ### Version #{project_version} (#{project_release})
9
+ %#----------------------------------------------------------------------------
10
+
11
+ > TODO: write a short summary of the changes in this release
12
+
13
+ This release changes TODO, adds TODO, and fixes TODO.
14
+
15
+ Incompatible changes:
16
+
17
+ > TODO: list all backward-incompatible changes in this release
18
+
19
+ * TODO has been TODO to TODO --- contributor name
20
+
21
+ * TODO --- contributor name
22
+
23
+ * TODO --- contributor name
24
+
25
+ New features:
26
+
27
+ > TODO: list new features added in this release
28
+
29
+ * TODO --- contributor name
30
+
31
+ * TODO --- contributor name
32
+
33
+ * TODO --- contributor name
34
+
35
+ Bug fixes:
36
+
37
+ > TODO: describe all bugs that are fixed in this release
38
+
39
+ * TODO was TODO --- contributor name
40
+
41
+ * TODO were TODO --- contributor name
42
+
43
+ * TODO did TODO --- contributor name
44
+
45
+ Housekeeping:
46
+
47
+ > TODO: list the refactorings, clean ups, and other
48
+ > improvements that were done for this release
49
+
50
+ * TODO --- contributor name
51
+
52
+ * TODO --- contributor name
53
+
54
+ * TODO --- contributor name
55
+
@@ -0,0 +1,15 @@
1
+ (the ISC license)
2
+
3
+ Copyright #{Time.now.year} Your Name <your@email.here>
4
+
5
+ Permission to use, copy, modify, and/or distribute this software for any
6
+ purpose with or without fee is hereby granted, provided that the above
7
+ copyright notice and this permission notice appear in all copies.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
@@ -0,0 +1,27 @@
1
+ <%
2
+ ##
3
+ # Wraps the given content within <pre>
4
+ # tags in a way that is Markdown-safe.
5
+ #
6
+ def preformatted content
7
+ if content =~ /\\S/
8
+ content.gsub(/^/, ' ' * 4)
9
+ else
10
+ "<pre>\#{content}</pre>"
11
+ end
12
+ end
13
+ %>
14
+
15
+ %+ "README"
16
+
17
+ %+ "USAGE"
18
+
19
+ %+ "EXAMPLES"
20
+
21
+ %+ "HACKING"
22
+
23
+ %+ "HISTORY"
24
+
25
+ %+ "CREDITS"
26
+
27
+ %+ "FURTHER"
@@ -0,0 +1,60 @@
1
+ %#----------------------------------------------------------------------------
2
+ ## ABOUT
3
+ %#----------------------------------------------------------------------------
4
+
5
+ #{project_name} is a TODO that TODO.
6
+
7
+ %#----------------------------------------------------------------------------
8
+ ### Features
9
+ %#----------------------------------------------------------------------------
10
+
11
+ * Does TODO.
12
+
13
+ * Reduces TODO.
14
+
15
+ * Lets you TODO.
16
+
17
+ * Composed of TODO lines of code.
18
+
19
+ %#----------------------------------------------------------------------------
20
+ ### Resources
21
+ %#----------------------------------------------------------------------------
22
+
23
+ * Issue tracker (report bugs, request features, get help):
24
+ <http://github.com/TODO/#{package_name}/issues>
25
+
26
+ * Source code (browse online or obtain with [Git](http://git-scm.com)):
27
+ <http://github.com/TODO/#{package_name}>
28
+
29
+ * API documentation:
30
+ <<%= File.join(#{library_name}::WEBSITE, 'api/') %>>
31
+
32
+ * Announcements feed:
33
+ <<%= File.join(#{library_name}::WEBSITE, 'ann.xml') %>>
34
+
35
+ * Official website:
36
+ <<%= Ember::WEBSITE %>>
37
+
38
+ %#----------------------------------------------------------------------------
39
+ ### Setup
40
+ %#----------------------------------------------------------------------------
41
+
42
+ Prerequisites:
43
+
44
+ > TODO: list all software necessary to run your project
45
+
46
+ * [Ruby] #{RUBY_VERSION} or newer.
47
+
48
+ * [RubyGems] #{Gem::RubyGemsVersion} or newer.
49
+
50
+ Installing:
51
+
52
+ gem install #{package_name}
53
+
54
+ Upgrading:
55
+
56
+ gem update #{package_name}
57
+
58
+ Removing:
59
+
60
+ gem uninstall #{package_name}
@@ -0,0 +1,23 @@
1
+ %#----------------------------------------------------------------------------
2
+ ## SYNOPSIS
3
+ %#----------------------------------------------------------------------------
4
+
5
+ `#{package_name}` [<OPTIONS>] <PARAM1> <PARAM2> <PARAM3> ...
6
+
7
+ %#----------------------------------------------------------------------------
8
+ ## DESCRIPTION
9
+ %#----------------------------------------------------------------------------
10
+
11
+ > TODO: explain the usage and behavior of the above command here
12
+
13
+ %#----------------------------------------------------------------------------
14
+ ## OPTIONS
15
+ %#----------------------------------------------------------------------------
16
+
17
+ > TODO: list command-line options and explain them here
18
+
19
+ * `-h`, `--help`:
20
+ Display this manual and exit.
21
+
22
+ * `-v`, `--version`:
23
+ Print version number and exit.
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require '#{package_name}'
4
+
5
+ if ARGV.delete('-h') or ARGV.delete('--help')
6
+ # try to display UNIX version of help manual
7
+ man_path = File.join(#{library_name}::INSTDIR, 'man')
8
+ unless system 'man', '-M', man_path, '-a', '#{package_name}'
9
+ # try to display HTML version of help manual
10
+ man_html = man_path + '.html'
11
+ unless %w[$BROWSER open start].any? {|b| system "\#{b} \#{man_html}" }
12
+ # no luck; direct user to project website
13
+ puts "See \#{#{library_name}::WEBSITE}"
14
+ end
15
+ end
16
+ exit
17
+ elsif ARGV.delete('-v') or ARGV.delete('--version')
18
+ puts #{library_name}::VERSION
19
+ exit
20
+ end
21
+
22
+ # TODO: replace the following with the body of your program
23
+ puts "\#{__FILE__} was executed with \#{ARGV.inspect} arguments"
@@ -0,0 +1,43 @@
1
+ ##
2
+ # Location where `inochi pub:web` will upload files. This value
3
+ # can use any local/remote/protocol syntax supported by rsync(1).
4
+ #
5
+ :pub_web_target: TODO@rubyforge.org:/var/www/gforge-projects/#{package_name}/
6
+
7
+ ##
8
+ # Options for rsync(1), which uploads files for `inochi pub:web`.
9
+ #
10
+ :pub_web_options: --verbose --compress --archive --update
11
+
12
+ ##
13
+ # Additional files for `inochi pub:web` to upload. The values listed
14
+ # here can use any local/remote/protocol syntax supported by rsync(1).
15
+ #
16
+ # @example
17
+ #
18
+ # :pub_web_extras:
19
+ # - some/file
20
+ # - some_user@some_host:some/path
21
+ #
22
+ :pub_web_extras:
23
+
24
+ ##
25
+ # Arbitrary Ruby code that will configure this project's RubyGem before it
26
+ # is built by `inochi gem`. This code has access to a local variable named
27
+ # `gem` which holds a Gem::Specification object representing this project.
28
+ #
29
+ # @example
30
+ #
31
+ # :gem_spec_logic: |
32
+ # # show the Inochi-provided specification for this project's gem
33
+ # puts gem.to_ruby
34
+ #
35
+ # # add files that are outside this project directory to the gem
36
+ # gem.files += ['some', 'files', 'in', 'this', 'directory']
37
+ #
38
+ # # omit some added files in this project's directory from the gem
39
+ # gem.files -= ['lib/top_secret.rb', 'bin/more_top_secret_stuff']
40
+ #
41
+ # # and so on... anything is possible! use your imagination!
42
+ #
43
+ :gem_spec_logic: |
@@ -0,0 +1,102 @@
1
+ module #{library_name}
2
+
3
+ ##
4
+ # Official name of this project.
5
+ #
6
+ PROJECT = #{project_name.inspect}
7
+
8
+ ##
9
+ # Short single-line description of this project.
10
+ #
11
+ TAGLINE = "TODO: the tagline of this project"
12
+
13
+ ##
14
+ # Address of this project's official home page.
15
+ #
16
+ WEBSITE = "http://#{package_name}.rubyforge.org"
17
+
18
+ ##
19
+ # Number of this release of this project.
20
+ #
21
+ VERSION = #{project_version.inspect}
22
+
23
+ ##
24
+ # Date of this release of this project.
25
+ #
26
+ RELDATE = #{project_release.inspect}
27
+
28
+ ##
29
+ # Description of this release of this project.
30
+ #
31
+ def self.inspect
32
+ "\#{PROJECT} \#{VERSION} (\#{RELDATE})"
33
+ end
34
+
35
+ ##
36
+ # Location of this release of this project.
37
+ #
38
+ INSTDIR = File.expand_path('../../..', __FILE__)
39
+
40
+ ##
41
+ # RubyGems required by this project during runtime.
42
+ #
43
+ # @example
44
+ #
45
+ # RUNTIME = {
46
+ # # this project needs exactly version 1.2.3 of the "an_example" gem
47
+ # "an_example" => [ "1.2.3" ],
48
+ #
49
+ # # this project needs at least version 1.2 (but not
50
+ # # version 1.2.4 or newer) of the "another_example" gem
51
+ # "another_example" => [ ">= 1.2" , "< 1.2.4" ],
52
+ #
53
+ # # this project needs any version of the "yet_another_example" gem
54
+ # "yet_another_example" => [],
55
+ # }
56
+ #
57
+ RUNTIME = {}
58
+
59
+ ##
60
+ # RubyGems required by this project during development.
61
+ #
62
+ # @example
63
+ #
64
+ # DEVTIME = {
65
+ # # this project needs exactly version 1.2.3 of the "an_example" gem
66
+ # "an_example" => [ "1.2.3" ],
67
+ #
68
+ # # this project needs at least version 1.2 (but not
69
+ # # version 1.2.4 or newer) of the "another_example" gem
70
+ # "another_example" => [ ">= 1.2" , "< 1.2.4" ],
71
+ #
72
+ # # this project needs any version of the "yet_another_example" gem
73
+ # "yet_another_example" => [],
74
+ # }
75
+ #
76
+ DEVTIME = {
77
+ "inochi" => [ "~> #{Inochi::VERSION.to_i}" ], # for managing this project
78
+ }
79
+
80
+ ##
81
+ # Loads the correct version (as defined by the {RUNTIME} or {DEVTIME}
82
+ # constant in this module) of the given gem or the gem that contains
83
+ # the given library.
84
+ #
85
+ def self.require gem_name_or_library
86
+ # prepare the correct version of the gem for loading
87
+ if respond_to? :gem
88
+ gem_name = gem_name_or_library.to_s.sub(%r{/.*$}, '')
89
+ if gem_version = RUNTIME[gem_name] || DEVTIME[gem_name]
90
+ begin
91
+ gem gem_name, *gem_version
92
+ rescue LoadError => error
93
+ warn "\#{self.inspect}: \#{error}"
94
+ end
95
+ end
96
+ end
97
+
98
+ # do the loading
99
+ super
100
+ end
101
+
102
+ end
@@ -0,0 +1,7 @@
1
+ require '#{package_name}/inochi'
2
+
3
+ module #{library_name}
4
+ # TODO: add your project functionality here
5
+ # autoload :SubLibrary, '#{package_name}/sub_library'
6
+ # autoload :AnotherSubLibrary, '#{package_name}/another_sub_library'
7
+ end
@@ -0,0 +1,3 @@
1
+ require '#{package_name}'
2
+
3
+ # TODO: test the #{library_name} module here
@@ -0,0 +1,3 @@
1
+ # TODO: activate the testing framework of your choice and
2
+ # also set up the testing environment for your tests
3
+ #{library_name}.require 'test/unit'
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Adds the project library directory
4
+ # and this test directory to Ruby's
5
+ # load path and runs the given tests.
6
+ #
7
+ # Usage: ruby test/runner [TESTS_TO_RUN]
8
+ #
9
+ # Where: TESTS_TO_RUN is a list of files
10
+ # or file globbing patterns that
11
+ # describe a set of files to run.
12
+ #
13
+ # If this parameter is not given,
14
+ # all *_test.rb files within or
15
+ # beneath this directory are run.
16
+
17
+ lib_dir = File.expand_path('../../lib', __FILE__)
18
+ test_dir = File.expand_path('..', __FILE__)
19
+ $LOAD_PATH.unshift lib_dir, test_dir
20
+
21
+ require '#{package_name}/inochi'
22
+ require 'test_helper'
23
+
24
+ ARGV << "\#{test_dir}/**/*_test.rb" if ARGV.empty?
25
+ ARGV.each {|glob| Dir[glob].each {|test| load test } }
File without changes
@@ -0,0 +1,959 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta http-equiv='content-type' value='text/html;charset=utf8'>
5
+ <meta name='generator' value='Ronn/v0.5'>
6
+ <title>inochi(1) - Gives life to Ruby projects</title>
7
+ <style type='text/css'>
8
+ body {margin:0}
9
+ #man, #man code, #man pre, #man tt, #man kbd, #man samp {
10
+ font-family:consolas,monospace;
11
+ font-size:16px;
12
+ line-height:1.3;
13
+ color:#343331;
14
+ background:#fff; }
15
+ #man { max-width:87ex; margin:0 3ex 1ex 1ex; text-align:justify; }
16
+ #man div.man-navigation {
17
+ position:fixed;
18
+ top:0;
19
+ left:91ex;
20
+ height:100%;
21
+ width:100%;
22
+ padding:1ex 0 0 2ex;
23
+ border-left:0.5ex solid #DCDCDC;
24
+ background-color: #F5F5F5;
25
+ }
26
+ #man div.man-navigation a { display:block; margin-bottom:1.5ex }
27
+ #man h1, #man h2, #man h3 { color:#232221;clear:left }
28
+ #man h1 { font-size:28px; margin:15px 0 30px 0; text-align:center }
29
+ #man h2 { font-size:18px; margin-bottom:0; margin-top:10px; line-height:1.3; }
30
+ #man h3 { font-size:16px; margin:0 0 0 4ex; }
31
+ #man p, #man ul, #man ol, #man dl, #man pre { margin:0 0 18px 0; }
32
+ #man pre {
33
+ color:#333231;
34
+ background:#edeceb;
35
+ padding:5px 7px;
36
+ margin:0px 0 20px 0;
37
+ border-left:2ex solid #ddd}
38
+ #man pre + h2, #man pre + h3 {
39
+ margin-top:22px;
40
+ }
41
+ #man h2 + pre, #man h3 + pre {
42
+ margin-top:5px;
43
+ }
44
+ #man > p, #man > ul, #man > ol, #man > dl, #man > pre { margin-left:8ex; }
45
+ #man dt { margin:0; clear:left }
46
+ #man dt.flush { float:left; width:8ex }
47
+ #man dd { margin:0 0 0 9ex }
48
+ #man code, #man strong, #man b { font-weight:bold; color:#131211; }
49
+ #man pre code { font-weight:normal; color:#232221; background:inherit }
50
+ #man em, var, u {
51
+ font-style:normal; color:#333231; border-bottom:1px solid #999; }
52
+ #man h1.man-title { display:none; }
53
+ #man ol.man, #man ol.man li { margin:2px 0 10px 0; padding:0;
54
+ float:left; width:33%; list-style-type:none;
55
+ text-transform:uppercase; font-size:18px; color:#999;
56
+ letter-spacing:1px;}
57
+ #man ol.man { width:100%; }
58
+ #man ol.man li.tl { text-align:left }
59
+ #man ol.man li.tc { text-align:center;letter-spacing:4px }
60
+ #man ol.man li.tr { text-align:right; float: right }
61
+ #man ol.man a { color:#999 }
62
+ #man ol.man a:hover { color:#333231 }
63
+ #man img { display:block; margin:auto }
64
+ </style>
65
+ <style type='text/css' media='print'>
66
+ #man { max-width:none }
67
+ #man div.man-navigation { display:none }
68
+ #man a[href]:not([href^="#"]):not([data-bare-link]):after {
69
+ content:" " attr(href);
70
+ }
71
+ </style>
72
+ </head>
73
+ <body>
74
+ <div id='man'>
75
+
76
+ <div class='man-navigation'><a href='#NAME'>NAME</a> <a href='#ABOUT'>ABOUT</a> <a href='#SYNOPSIS'>SYNOPSIS</a> <a href='#DESCRIPTION'>DESCRIPTION</a> <a href='#OPTIONS'>OPTIONS</a> <a href='#inochi-init'>inochi init</a> <a href='#inochi-api'>inochi api</a> <a href='#inochi-man'>inochi man</a> <a href='#inochi-gem'>inochi gem</a> <a href='#inochi-ann'>inochi ann</a> <a href='#inochi-pub-ann-ruby-talk'>inochi pub:ann:ruby-talk</a> <a href='#inochi-pub-web'>inochi pub:web</a> <a href='#PROJECTS'>PROJECTS</a> <a href='#HACKING'>HACKING</a> <a href='#VERSIONS'>VERSIONS</a> <a href='#CREDITS'>CREDITS</a> <a href='#LICENSE'>LICENSE</a> <a href='#SEE-ALSO'>SEE ALSO</a></div>
77
+
78
+ <h1 class='man-title'>inochi(1)</h1>
79
+
80
+ <ol class='head man'>
81
+ <li class='tl'>inochi(1)</li>
82
+ <li class='tc'>Version 2.0.0</li>
83
+ <li class='tr'>inochi(1)</li>
84
+ </ol>
85
+
86
+ <h2 id='NAME'>NAME</h2>
87
+ <p><code>inochi</code> - Gives life to Ruby projects</p>
88
+
89
+ <p><img src="logo/inochi.png" alt="Inochi Logo" /></p>
90
+
91
+ <h2 id="ABOUT">ABOUT</h2>
92
+
93
+ <p>Inochi is an infrastructure for Ruby projects that helps you test, document,
94
+ package, publish, and announce your projects. It encourages <em>great</em>
95
+ documentation and reduces project administrivia.</p>
96
+
97
+ <h3 id="Features">Features</h3>
98
+
99
+ <ul>
100
+ <li><p>Provides a comprehensive help manual that is written in <a href="http://en.wikipedia.org/wiki/ERuby">eRuby</a> over
101
+ <a href="http://daringfireball.net/projects/markdown">Markdown</a> and is rendered into a Web page and a UNIX manual page.</p></li>
102
+ <li><p>Announces project releases on <a href="http://raa.ruby-lang.org">RAA</a>, <a href="http://www.ruby-lang.org/en/community/mailing-lists/">ruby-talk</a>, and via RSS feed.</p></li>
103
+ <li><p>Stores project information in a single Ruby source file.</p></li>
104
+ </ul>
105
+
106
+
107
+ <h3 id="Resources">Resources</h3>
108
+
109
+ <dl>
110
+ <dt>Issue tracker (report bugs, request features, get help)</dt><dd><p><a href="http://github.com/sunaku/inochi/issues" data-bare-link="true">http://github.com/sunaku/inochi/issues</a></p></dd>
111
+ <dt>Source code (browse online or obtain with <a href="http://git-scm.com">Git</a>)</dt><dd><p><a href="http://github.com/sunaku/inochi" data-bare-link="true">http://github.com/sunaku/inochi</a></p></dd>
112
+ <dt>API documentation</dt><dd><p><a href="http://snk.tuxfamily.org/lib/inochi/api/" data-bare-link="true">http://snk.tuxfamily.org/lib/inochi/api/</a></p></dd>
113
+ <dt>Announcements feed</dt><dd><p><a href="http://snk.tuxfamily.org/lib/inochi/ann.xml" data-bare-link="true">http://snk.tuxfamily.org/lib/inochi/ann.xml</a></p></dd>
114
+ <dt>Official website</dt><dd><p><a href="http://snk.tuxfamily.org/lib/ember/" data-bare-link="true">http://snk.tuxfamily.org/lib/ember/</a></p></dd>
115
+ </dl>
116
+
117
+
118
+ <h3 id="Setup">Setup</h3>
119
+
120
+ <p>Prerequisites:</p>
121
+
122
+ <ul>
123
+ <li><p><a href="http://ruby-lang.org">Ruby</a> 1.8.6 or newer.</p></li>
124
+ <li><p><a href="http://rubygems.org">RubyGems</a> 1.3.6 or newer.</p></li>
125
+ <li><p><a href="http://lynx.isc.org">Lynx</a> 2.8.6 or newer.</p></li>
126
+ </ul>
127
+
128
+
129
+ <p>Installing:</p>
130
+
131
+ <pre><code>gem install inochi
132
+ </code></pre>
133
+
134
+ <p>Upgrading:</p>
135
+
136
+ <pre><code>gem update inochi
137
+ </code></pre>
138
+
139
+ <p>Removing:</p>
140
+
141
+ <pre><code>gem uninstall inochi
142
+ </code></pre>
143
+
144
+ <h2 id="SYNOPSIS">SYNOPSIS</h2>
145
+
146
+ <p><code>inochi</code> [<var>OPTIONS</var>] <var>TASK</var> [<var>RAKE_OPTIONS</var>]</p>
147
+
148
+ <h2 id="DESCRIPTION">DESCRIPTION</h2>
149
+
150
+ <p>Runs <var>TASK</var> using rake(1), to which <var>RAKE_OPTIONS</var> (see <code>rake --help</code> output)
151
+ are passed. The following tasks are available for running:</p>
152
+
153
+ <dl>
154
+ <dt class="flush"><strong>ann</strong></dt><dd>Build all release announcements.</dd>
155
+ <dt><strong>ann:feed</strong></dt><dd>Build RSS feed announcement.</dd>
156
+ <dt><strong>ann:html</strong></dt><dd>Build HTML announcement.</dd>
157
+ <dt><strong>ann:text</strong></dt><dd>Build plain text announcement.</dd>
158
+ <dt class="flush"><strong>api</strong></dt><dd>Build API documentation.</dd>
159
+ <dt class="flush"><strong>clean</strong></dt><dd>Remove any temporary products.</dd>
160
+ <dt class="flush"><strong>clobber</strong></dt><dd>Remove any generated file.</dd>
161
+ <dt class="flush"><strong>gem</strong></dt><dd>Build release package for RubyGems.</dd>
162
+ <dt class="flush"><strong>init</strong></dt><dd>Instill Inochi into current directory.</dd>
163
+ <dt class="flush"><strong>man</strong></dt><dd>Build the help manual.</dd>
164
+ <dt class="flush"><strong>pub</strong></dt><dd>Publish a release of this project.</dd>
165
+ <dt class="flush"><strong>pub:ann</strong></dt><dd>Announce release on all news outlets.</dd>
166
+ <dt><strong>pub:ann:raa</strong></dt><dd>Announce release on RAA (Ruby Application Archive).</dd>
167
+ <dt><strong>pub:ann:ruby-talk</strong></dt><dd>Announce release on ruby-talk mailing list.</dd>
168
+ <dt class="flush"><strong>pub:gem</strong></dt><dd>Publish gem release package to RubyGems.org.</dd>
169
+ <dt class="flush"><strong>pub:web</strong></dt><dd>Publish help manual, API docs, and RSS feed to project website.</dd>
170
+ </dl>
171
+
172
+
173
+ <h2 id="OPTIONS">OPTIONS</h2>
174
+
175
+ <dl>
176
+ <dt><code>-h</code>, <code>--help</code></dt><dd><p>Display this manual and exit.</p></dd>
177
+ <dt><code>-v</code>, <code>--version</code></dt><dd><p>Print version number and exit.</p></dd>
178
+ </dl>
179
+
180
+
181
+ <h2 id="inochi-init">inochi init</h2>
182
+
183
+ <p>Instill Inochi into current directory.</p>
184
+
185
+ <h3 id="SYNOPSIS">SYNOPSIS</h3>
186
+
187
+ <p><code>inochi</code> init <code>project</code>=<var>PROJECT</var> [<code>package</code>=<var>PACKAGE</var>] [<code>merger</code>=<var>MERGER</var>]</p>
188
+
189
+ <h3 id="DESCRIPTION">DESCRIPTION</h3>
190
+
191
+ <p>Installs the Inochi infrastructure for the project (see <strong>PROJECTS</strong> below)
192
+ named <var>PROJECT</var> into the current working directory, or upgrades a previous
193
+ installation thereof.</p>
194
+
195
+ <p>Pre-existing files are not overwritten. Instead, it is your responsibility to
196
+ merge changes (hopefully with the aid of an automated text merging tool; see
197
+ <var>MERGER</var> below) between pre-existing and newly generated files.</p>
198
+
199
+ <h3 id="PARAMETERS">PARAMETERS</h3>
200
+
201
+ <ul>
202
+ <li><p><var>PROJECT</var>:
203
+ Name of the project. This will be normalized into the name of a Ruby
204
+ module that will serve as a namespace for all code in the project.</p></li>
205
+ <li><p><var>PACKAGE</var>:
206
+ Name of the project's package directory, shell command, and basename of the
207
+ project library file.</p></li>
208
+ <li><p><var>MERGER</var>:
209
+ Command that invokes a text merging tool with three arguments: (1) old file,
210
+ (2) new file, (3) output file. The command should direct the result of
211
+ merging the old file and the new file to the output file. In addition, the
212
+ command <em>must not</em> modify the old file or the new file.</p>
213
+
214
+ <p><strong>TIP</strong>: Instead of merging files by hand, you can transfer wanted changes
215
+ between files semi-automatically using a text merging tool such as <a href="http://meld.sourceforge.net">meld</a>,
216
+ <a href="http://kdiff3.sourceforge.net">kdiff3</a>, or <a href="http://tkdiff.sourceforge.net">tkdiff</a> as follows:</p>
217
+
218
+ <ol>
219
+ <li><p>Create a file named <code>merge2</code> containing the following text:</p>
220
+
221
+ <pre><code>#!/bin/sh
222
+ old=$1; new=$2; out=$3;
223
+ # meld "$new" "$out" # use meld
224
+ # kdiff3 --merge "$old" "$new" --output "$out" # use kdiff3
225
+ # tkdiff "$old" "$new" -o "$out" # use tkdiff
226
+ </code></pre></li>
227
+ <li><p>Uncomment the line corresponding to the tool you wish to use.</p></li>
228
+ <li><p>Make the file executable:</p>
229
+
230
+ <pre><code>chmod +x merge2
231
+ </code></pre></li>
232
+ <li><p>Pass the file's path as the value of <var>MERGER</var>:</p>
233
+
234
+ <pre><code>inochi init merger=path/to/merge2
235
+ </code></pre></li>
236
+ </ol>
237
+
238
+
239
+ <p>Now your chosen text merging tool will be launched to help you transfer your
240
+ changes. When you are finished, save the merged file and exit the merging
241
+ tool. If you do not want to transfer any changes, then simply exit the
242
+ merging tool <em>without saving</em> any changes to the merged file!</p></li>
243
+ </ul>
244
+
245
+
246
+ <h3 id="NOTIFICATIONS">NOTIFICATIONS</h3>
247
+
248
+ <dl>
249
+ <dt>create <var>FILE</var></dt><dd><p>A file is being created because it does not exist.</p></dd>
250
+ <dt>skip <var>FILE</var></dt><dd><p>A file is being skipped because it is already up to date.</p></dd>
251
+ <dt>update <var>FILE</var></dt><dd><p>A file is being updated because it is out of date. A text merging tool
252
+ (see the <strong>merger</strong> parameter above) will be launched to transfer content
253
+ from the old file (*.old) and the new file (*.new) to the out of date
254
+ file. If a text merging tool is not specified, then you will have to do
255
+ the merging by hand.</p></dd>
256
+ </dl>
257
+
258
+
259
+ <h2 id="inochi-api">inochi api</h2>
260
+
261
+ <p>Builds API documentation for the project's Ruby library using <a href="http://yardoc.org/more">YARD</a>. Ruby
262
+ constructs marked with <code>@private</code> are omitted from the API documentation.</p>
263
+
264
+ <h2 id="inochi-man">inochi man</h2>
265
+
266
+ <p>Renders the help manual's source files (see <strong>Help manual</strong> below) into:</p>
267
+
268
+ <dl>
269
+ <dt>man.ronn</dt><dd><p><a href="http://github.com/rtomayko/ronn">Ronn</a> format, rendered by <a href="http://snk.tuxfamily.org/lib/ember/">Ember</a>.</p></dd>
270
+ <dt>man.html</dt><dd><p>HTML (Web page) format, rendered by <a href="http://github.com/rtomayko/ronn">Ronn</a>.</p></dd>
271
+ <dt>man/man1/<var>PACKAGE</var>.1.gz</dt><dd><p>Roff (UNIX manual page) format, rendered by <a href="http://github.com/rtomayko/ronn">Ronn</a>.</p></dd>
272
+ </dl>
273
+
274
+
275
+ <h2 id="inochi-gem">inochi gem</h2>
276
+
277
+ <p>Builds a release package in RubyGems format (plainly known as a <strong>gem</strong>):</p>
278
+
279
+ <dl>
280
+ <dt><var>PACKAGE</var>-<var>VERSION</var>.gem</dt><dd><p>The gem itself.</p></dd>
281
+ <dt><var>PACKAGE</var>-<var>VERSION</var>.gemspec</dt><dd><p>Ruby representation of the gem's specification.</p></dd>
282
+ </dl>
283
+
284
+
285
+ <p>The gem specification is pre-initialized with information from the project's
286
+ Ruby library and help manual. In particular:</p>
287
+
288
+ <dl>
289
+ <dt>gem.description</dt><dd><p>Plain text version of all content between the <strong>ABOUT</strong> heading and any
290
+ subsequent heading.</p></dd>
291
+ <dt>gem.authors</dt><dd><p>Plain text version of all content between the <strong>AUTHORS</strong> or <strong>CREDITS</strong>
292
+ heading (whichever comes first) and any subsequent heading.</p></dd>
293
+ <dt>gem.files</dt><dd><p>Only contains the project's <code>LICENSE</code> and <code>CREDITS</code> files, rendered help
294
+ manual, Ruby library, shell command, and C extension.</p>
295
+
296
+ <p>All other files (such as the test suite and help manual source files) are
297
+ omitted (1) to reduce the gem file size and (2) because they are really only
298
+ needed during development.</p></dd>
299
+ </dl>
300
+
301
+
302
+ <p>The gem specification can be further customized through the <code>:gem_spec_logic</code>
303
+ parameter defined in the project's options file (see <strong>Options file</strong> below).</p>
304
+
305
+ <h2 id="inochi-ann">inochi ann</h2>
306
+
307
+ <p>Builds release announcements which can be edited by hand before publishing:</p>
308
+
309
+ <dl>
310
+ <dt>ann.html</dt><dd><p>Web page version of the release announcement.</p></dd>
311
+ <dt class="flush">ann.txt</dt><dd><p>Plain text version of the release announcement; converted from the Web page
312
+ version by <a href="http://lynx.isc.org">Lynx</a>.</p></dd>
313
+ <dt class="flush">ann.xml</dt><dd><p>RSS feed version of the release announcement.</p></dd>
314
+ </dl>
315
+
316
+
317
+ <h2 id="inochi-pub-ann-ruby-talk">inochi pub:ann:ruby-talk</h2>
318
+
319
+ <p>Announces the release on the <a href="http://www.ruby-lang.org/en/community/mailing-lists/">ruby-talk</a> mailing list.</p>
320
+
321
+ <p>It is recommended that you build, review, and edit the <code>ann.txt</code> file <em>by
322
+ hand</em> before running this command because (1) the body of that file is
323
+ published directly as the announcement message and (2) HTML to plain text
324
+ conversion is not perfect.</p>
325
+
326
+ <h2 id="inochi-pub-web">inochi pub:web</h2>
327
+
328
+ <p>Publishes the help manual, API documentation, and RSS feed to project website
329
+ using rsync(1) according to the :pub_web_* parameters defined in the
330
+ project's options file (see <strong>Options file</strong> below).</p>
331
+
332
+ <h2 id="PROJECTS">PROJECTS</h2>
333
+
334
+ <p>A project instilled with Inochi is composed of an options file, a license,
335
+ source code, documentation, and a Web presence; which are all explained below.</p>
336
+
337
+ <h3 id="Options-file">Options file</h3>
338
+
339
+ <p>A project's options file is a <a href="http://www.yaml.org/YAML_for_ruby.html">YAML</a> document named <code>inochi.opts</code> that defines
340
+ the following optional parameters for the various inochi(1) sub-commands:</p>
341
+
342
+ <dl>
343
+ <dt>:pub_web_target</dt><dd><p>Location where <code>inochi pub:web</code> will upload files. This value
344
+ can use any local/remote/protocol syntax supported by rsync(1).</p></dd>
345
+ <dt>:pub_web_options</dt><dd><p>Options for rsync(1), which uploads files for <code>inochi pub:web</code>.</p></dd>
346
+ <dt>:pub_web_extras</dt><dd><p>Additional files for <code>inochi pub:web</code> to upload. The values listed
347
+ here can use any local/remote/protocol syntax supported by rsync(1).</p>
348
+
349
+ <p>Example:</p>
350
+
351
+ <pre><code>:pub_web_extras:
352
+ - some/file
353
+ - some_user@some_host:some/path
354
+ </code></pre></dd>
355
+ <dt>:gem_spec_logic</dt><dd><p>Arbitrary Ruby code that will configure this project's RubyGem before it
356
+ is built by <code>inochi gem</code>. This code has access to a local variable named
357
+ <code>gem</code> which holds a Gem::Specification object representing this project.</p>
358
+
359
+ <p>Example:</p>
360
+
361
+ <pre><code>:gem_spec_logic: |
362
+ # show the Inochi-provided specification for this project's gem
363
+ puts gem.to_ruby
364
+
365
+ # add files that are outside this project directory to the gem
366
+ gem.files += ['some', 'files', 'in', 'this', 'directory']
367
+
368
+ # omit some added files in this project's directory from the gem
369
+ gem.files -= ['lib/top_secret.rb', 'bin/more_top_secret_stuff']
370
+
371
+ # and so on... anything is possible! use your imagination!
372
+ </code></pre></dd>
373
+ </dl>
374
+
375
+
376
+ <h3 id="License-file">License file</h3>
377
+
378
+ <p>A project's license defines the legal conditions under which the project is
379
+ developed and distributed. It is stored in a file named LICENSE at the root
380
+ of the project directory.</p>
381
+
382
+ <h3 id="Ruby-library">Ruby library</h3>
383
+
384
+ <p>A project's Ruby library is composed of the following files:</p>
385
+
386
+ <dl>
387
+ <dt>lib/<var>PACKAGE</var>.rb</dt><dd><p>Defines the project's namespace (Ruby module or class) and registers
388
+ sub-libraries to be automatically loaded on demand (Kernel#autoload).</p></dd>
389
+ <dt>lib/<var>PACKAGE</var>/inochi.rb</dt><dd><p>Defines project information in Ruby constants within the project's namespace
390
+ (Ruby module or class). Also defines a <code>require</code> class method on the
391
+ project's namespace that loads the correct version (as defined by the
392
+ project's dependency information) of a given gem if RubyGems is available.</p></dd>
393
+ </dl>
394
+
395
+
396
+ <h3 id="Test-suite">Test suite</h3>
397
+
398
+ <p>A project's test suite is composed of the following files:</p>
399
+
400
+ <dl>
401
+ <dt>test/runner</dt><dd><p>Executable Ruby script that hides the details of running the test suite.</p></dd>
402
+ <dt>test/test_helper.rb</dt><dd><p>Ruby source file that prepares the testing environment by loading a testing
403
+ library and defining common knowledge and utility logic shared by the actual
404
+ tests.</p></dd>
405
+ <dt>test/**/*_test.rb</dt><dd><p>Part of the test suite. Performs the actual testing.</p></dd>
406
+ </dl>
407
+
408
+
409
+ <h3 id="Shell-command">Shell command</h3>
410
+
411
+ <p>A project's shell command is an executable Ruby source file that serves as a
412
+ gateway into the project's Ruby library from the command line:</p>
413
+
414
+ <dl>
415
+ <dt>bin/<var>PACKAGE</var></dt><dd>Expects the project's <code>lib/</code> directory to be on Ruby's $LOAD_PATH (see
416
+ <strong>HACKING</strong> below). This requirement is automatically met when a user
417
+ installs the project using RubyGems.</dd>
418
+ </dl>
419
+
420
+
421
+ <h3 id="Help-manual">Help manual</h3>
422
+
423
+ <p>A project's help manual is a monolithic <a href="http://en.wikipedia.org/wiki/ERuby">eRuby</a> template that is (1) processed
424
+ by <a href="http://snk.tuxfamily.org/lib/ember/">Ember</a> with its shorthand notation, hierarchical unindentation, and
425
+ missing <code>&lt;% end %></code> inference features enabled, and (2) composed of the
426
+ following source files:</p>
427
+
428
+ <dl>
429
+ <dt class="flush">MANUAL</dt><dd><p>Primary source file of the help manual that (1) defines common knowledge and
430
+ utility logic and (2) divides its content into the following files for
431
+ easier editing and maintenance.</p></dd>
432
+ <dt class="flush">README</dt><dd><p>Introduces the project, its Web presence, and gives setup instructions.</p></dd>
433
+ <dt class="flush">USAGE</dt><dd><p>Explains how to use the project's shell command.</p></dd>
434
+ <dt>EXAMPLES</dt><dd><p>Illustrates how to perform common tasks with the project's shell command and
435
+ Ruby library, respectively.</p></dd>
436
+ <dt class="flush">HACKING</dt><dd><p>Instructs fellow software developers on running, testing, and hacking the
437
+ project's source code.</p></dd>
438
+ <dt class="flush">HISTORY</dt><dd><p>Records notes about current and past releases of the project in terms of
439
+ incompatible changes, new features, bug fixes, and housekeeping activities.</p></dd>
440
+ <dt class="flush">CREDITS</dt><dd><p>Attributes all developers and contributors whose efforts have made the
441
+ project what it is today.</p></dd>
442
+ <dt class="flush">FURTHER</dt><dd><p>Refers to related commands, help manuals, and topics beyond this project.</p></dd>
443
+ </dl>
444
+
445
+
446
+ <h3 id="Web-presence">Web presence</h3>
447
+
448
+ <p>A project's a Web presence is composed, at minimum, of the following:</p>
449
+
450
+ <dl>
451
+ <dt>Code repository</dt><dd><p>Where fellow software developers can obtain the latest source code.</p></dd>
452
+ <dt>Issue tracker</dt><dd><p>Where users and contributors can submit patches, request features, and get
453
+ help.</p></dd>
454
+ <dt>Official website</dt><dd><p>Where the help manual, API documentation, and announcements RSS feed can be
455
+ accessed (hopefully) permanently.</p></dd>
456
+ </dl>
457
+
458
+
459
+ <p>You may choose to omit some or all of these components by simply not
460
+ mentioning them in the <strong>Resources</strong> section of the help manual's README
461
+ source file.</p>
462
+
463
+ <h2 id="HACKING">HACKING</h2>
464
+
465
+ <p>This section is meant for people who want to develop Inochi's source code.</p>
466
+
467
+ <h3 id="Prerequisites">Prerequisites</h3>
468
+
469
+ <p>Install Ruby libraries necessary for development:</p>
470
+
471
+ <pre><code>gem install inochi --development
472
+ </code></pre>
473
+
474
+ <h3 id="Infrastructure">Infrastructure</h3>
475
+
476
+ <p><a href="http://snk.tuxfamily.org/lib/inochi/">Inochi</a> serves as the project infrastructure for Inochi. It handles tasks
477
+ such as building this help manual and API documentation, and packaging,
478
+ announcing, and publishing new releases. See its help manual and list of
479
+ tasks to get started:</p>
480
+
481
+ <pre><code>inochi --help # display help manual
482
+ inochi --tasks # list available tasks
483
+ </code></pre>
484
+
485
+ <h3 id="-LOAD_PATH-setup">$LOAD_PATH setup</h3>
486
+
487
+ <p>Ensure that the <code>lib/</code> directory is listed in Ruby's <code>$LOAD_PATH</code> before you
488
+ use any libraries therein or run any executables in the <code>bin/</code> directory.</p>
489
+
490
+ <p>This can be achieved by passing an option to Ruby:</p>
491
+
492
+ <pre><code>ruby -Ilib bin/inochi
493
+ irb -Ilib -r inochi
494
+ </code></pre>
495
+
496
+ <p>Or by setting the <code>$RUBYLIB</code> environment variable:</p>
497
+
498
+ <pre><code>export RUBYLIB=lib # bash, ksh, zsh
499
+ setenv RUBYLIB lib # csh
500
+ set -x RUBYLIB lib # fish
501
+
502
+ ruby bin/inochi
503
+ irb -r inochi
504
+ </code></pre>
505
+
506
+ <p>Or by installing the <a href="http://github.com/chneukirchen/rup">ruby-wrapper</a> tool.</p>
507
+
508
+ <h3 id="RubyGems-setup">RubyGems setup</h3>
509
+
510
+ <p>If you use Ruby 1.8 or older, then ensure that RubyGems is activated before
511
+ you use any libraries in the <code>lib/</code> directory or run any executables in the
512
+ <code>bin/</code> directory.</p>
513
+
514
+ <p>This can be achieved by passing an option to Ruby:</p>
515
+
516
+ <pre><code>ruby -rubygems bin/inochi
517
+ irb -rubygems -r inochi
518
+ </code></pre>
519
+
520
+ <p>Or by setting the <code>$RUBYOPT</code> environment variable:</p>
521
+
522
+ <pre><code>export RUBYOPT=-rubygems # bash, ksh, zsh
523
+ setenv RUBYOPT -rubygems # csh
524
+ set -x RUBYOPT -rubygems # fish
525
+ </code></pre>
526
+
527
+ <h3 id="Running-tests">Running tests</h3>
528
+
529
+ <p>Simply execute the included test runner, which sets up Ruby's <code>$LOAD_PATH</code> for
530
+ testing, loads the included <code>test/test_helper.rb</code> file, and then evaluates all
531
+ <code>test/**/*_test.rb</code> files:</p>
532
+
533
+ <pre><code>test/runner
534
+ </code></pre>
535
+
536
+ <p>Its exit status will indicate whether all tests have passed. It may also
537
+ print additional pass/fail information depending on the testing library used
538
+ in the <code>test/test_helper.rb</code> file.</p>
539
+
540
+ <h3 id="Contributing">Contributing</h3>
541
+
542
+ <p>Fork this project on GitHub (see <strong>Resources</strong> above) and send a pull request.</p>
543
+
544
+ <h2 id="VERSIONS">VERSIONS</h2>
545
+
546
+ <p>This section contains release notes of current and past releases.</p>
547
+
548
+ <h3 id="Version-2-0-0-2010-04-24-">Version 2.0.0 (2010-04-24)</h3>
549
+
550
+ <p>This release makes Inochi a development-time dependency only, documents nearly
551
+ everything in the help manual, renders the help manual as a UNIX manual page,
552
+ simplifies the project infrastructure it provides, and removes needless cruft.</p>
553
+
554
+ <p>Incompatible changes:</p>
555
+
556
+ <ul>
557
+ <li><p>Inochi is no longer a runtime dependency (gem or otherwise) for projects
558
+ that use it. It also no longer runs tests, creates project namespaces, or
559
+ provides libraries for internationalization, combinatorics, command-line
560
+ parsing, utility logic, or Rakefiles.</p>
561
+
562
+ <p>See <strong>PROJECTS</strong> to learn about the new Inochi infrastructure.</p></li>
563
+ <li><p>The help manual is now processed by <a href="http://github.com/rtomayko/ronn">Ronn</a> instead of <a href="http://snk.tuxfamily.org/lib/erbook/">ERBook</a>. As a
564
+ result, you may only use plain <a href="http://daringfireball.net/projects/markdown">Markdown</a> and <a href="http://en.wikipedia.org/wiki/ERuby">eRuby</a> when writing it.</p></li>
565
+ <li><p>Announcement publishing tasks no longer read login information from the
566
+ <code>~/.config/inochi/logins.yaml</code> file and prompt you to enter that
567
+ information manually instead. As a result, the forementioned file is no
568
+ longer recognized or used by Inochi so you may safely delete it.</p></li>
569
+ </ul>
570
+
571
+
572
+ <p>New features:</p>
573
+
574
+ <ul>
575
+ <li><p>The help manual is now available as a UNIX manual page (thanks to <a href="http://github.com/rtomayko/ronn">Ronn</a>)
576
+ and is now divided into smaller files that can be read directly without
577
+ needing a special viewer, and are named according to open-source packaging
578
+ conventions (such as README, HACKING, and LICENSE) so that they draw the
579
+ attention of users unaccustomed to the organization of your project.</p></li>
580
+ <li><p>A <code>require</code> class method is now added to the project's namespace. This
581
+ method verifies that the library or gem being required meets the
582
+ dependency version constraints defined by the project.</p></li>
583
+ <li><p>A <code>test/runner</code> script is now generated. It provides a fast,
584
+ self-contained way to run your project's test suite.</p></li>
585
+ <li><p>Inochi is now a Rake application. A <code>Rakefile</code> is not necessary.</p></li>
586
+ </ul>
587
+
588
+
589
+ <p>Housekeeping:</p>
590
+
591
+ <ul>
592
+ <li><p>Many KISS and YAGNI fueled iterations later, this is it! :-)</p></li>
593
+ <li><p>Nearly every aspect of Inochi is now meticulously documented in the help
594
+ manual to the best of my ability. If I missed something important, please
595
+ notify me or contribute the correction yourself!</p></li>
596
+ </ul>
597
+
598
+
599
+ <h3 id="Version-1-1-1-2009-10-03-">Version 1.1.1 (2009-10-03)</h3>
600
+
601
+ <p>This release improves Ruby 1.9 support and upgrades gem dependencies.</p>
602
+
603
+ <p>Bug fixes:</p>
604
+
605
+ <ul>
606
+ <li><p><code>require()</code> was unable to find project library in Ruby 1.9.2dev.</p></li>
607
+ <li><p>Ruby 1.9 warning about "shadowing outer variable".</p></li>
608
+ <li><p>Ruby 1.9 error about "incompatible encoding regexp match".</p></li>
609
+ </ul>
610
+
611
+
612
+ <p>Housekeeping:</p>
613
+
614
+ <ul>
615
+ <li><p>The "spicycode-rcov" project was officially renamed to "relevance-rcov".</p></li>
616
+ <li><p>Upgrade to RubyForge 2.x library for publishing gems.</p></li>
617
+ </ul>
618
+
619
+
620
+ <h3 id="Version-1-1-0-2009-09-06-">Version 1.1.0 (2009-09-06)</h3>
621
+
622
+ <p>This release improves the user manual and scaffold generator output, injects
623
+ more metadata into gems, adds support for Microsoft web browsers, and fixes
624
+ some bugs.</p>
625
+
626
+ <p>New features:</p>
627
+
628
+ <ul>
629
+ <li><p>Add instructions for building gems without Inochi as a runtime dependency.</p></li>
630
+ <li><p>Put release notes in "description" field of gemspec, as <a href="http://www.ruby-forum.com/topic/190220#830072">suggested by Eric
631
+ Hodel</a>, so that subscribers
632
+ of <a href="http://gems.rubyforge.org/index.rss">the RubyForge gems feed</a> are
633
+ aware of the changes in a published gem.</p></li>
634
+ <li><p>Set the "date" field in gemspec to project release date.</p></li>
635
+ <li><p>Change file extension of generated user manuals from .xhtml to .html to
636
+ accomodate Microsoft web browsers' inability to process the
637
+ application/xhtml+xml mime type.</p></li>
638
+ </ul>
639
+
640
+
641
+ <p>Bug fixes:</p>
642
+
643
+ <ul>
644
+ <li><p>The sdoc library was necessary to run 'rake test'.</p></li>
645
+ <li><p>Forgot to add <code>:develop</code> option to scaffold generator output.</p></li>
646
+ <li><p>Make "rake lang:dump" unconditionally overwrite the dump file.</p></li>
647
+ <li><p>Fix gem not being built and prevent Maruku errors for the dummy
648
+ "WordCount" project in the user manual.</p></li>
649
+ <li><p>Use /usr/bin/env instead of /usr/bin/ruby to launch Ruby for better
650
+ portability.</p></li>
651
+ </ul>
652
+
653
+
654
+ <p>Housekeeping:</p>
655
+
656
+ <ul>
657
+ <li><p>Use simpler Copyright reminder at the top of every file.</p></li>
658
+ <li><p>Open source is for fun, so <a href="http://loiclemeur.com/english/2009/03/never-criticize-your-competitors.html">be
659
+ nice</a>:
660
+ speak of "related works" instead of "competitors".</p></li>
661
+ <li><p>Rename "Tutorial" to "General walkthrough" in user manual and add a
662
+ "Specific topics" section for housing uncommon use cases.</p></li>
663
+ <li><p>Remove "logistics" section and redistribute its contents in more
664
+ suitable locations in the user manual.</p></li>
665
+ </ul>
666
+
667
+
668
+ <h3 id="Version-1-0-0-2009-05-03-">Version 1.0.0 (2009-05-03)</h3>
669
+
670
+ <p>This release allows your gems to not depend on Inochi, lets you choose which
671
+ unit testing library to use, adds new utility libraries and rake tasks, and
672
+ fixes some bugs.</p>
673
+
674
+ <p>Incompatible changes:</p>
675
+
676
+ <ul>
677
+ <li><p>Your program is no longer halted by <code>Inochi.init()</code> and <code>Inochi.rake()</code> if
678
+ gem dependencies are not satified. A warning is issued instead.</p></li>
679
+ <li><p>The <code>project_summary</code> and <code>project_history</code> nodes, which are provided by
680
+ <code>Inochi.book()</code> to the user manual, have been renamed to <code>project</code> and
681
+ <code>history</code> respectively.</p></li>
682
+ <li><p>ERBook 7.1.0 is now used for generating the user manual. This is a major
683
+ step up from the previous version, and so it has incompatible changes.
684
+ See its release notes for details.</p></li>
685
+ <li><p><a href="http://github.com/voloko/sdoc/tree/master">SDoc</a> is now used to generate
686
+ API documentation instead of <a href="http://yard.rubyforge.org">YARD</a>. If you
687
+ link to particular classes or methods in the generated API documentation,
688
+ be sure to update your link addresses!</p></li>
689
+ <li><p>Minitest is no longer the default testing library. You must specify which
690
+ testing library you want to use via the <code>:test_with</code> option of the
691
+ <code>Inochi.rake()</code> method. See the "Test execution" section for details.</p></li>
692
+ <li><p>The "pak" rake task, which is provided by <code>Inochi.rake()</code>, has been
693
+ renamed to "gem".</p></li>
694
+ </ul>
695
+
696
+
697
+ <p>New features:</p>
698
+
699
+ <ul>
700
+ <li><p>Add <code>:inochi_consumer</code> and <code>:inochi_producer</code> options to <code>Inochi.rake()</code>
701
+ which allows you to <em>avoid</em> having Inochi as a runtime and development
702
+ dependency, respectively, for your project's gem.</p>
703
+
704
+ <p>This is useful if you just want to use Inochi facilities for building a
705
+ gem for a pure Ruby library that does not have any need for Inochi's
706
+ runtime convenience facilities.</p></li>
707
+ <li><p>Add <code>:develop</code> option for <code>Inochi.init()</code> which lets you specify RubyGems
708
+ as development dependencies in the same way as the <code>:require</code> option.</p></li>
709
+ <li><p>Add "lint" rake task which reports <a href="http://www.infoq.com/news/2008/11/static-analysis-tool-roundup">code quality
710
+ statistics</a>.</p></li>
711
+ <li><p>Add "test:cov" rake task which reports code coverage statistics.</p></li>
712
+ <li><p>Add "test:ruby" task which runs all tests with
713
+ <a href="http://www.infoq.com/news/2008/02/multiruby-testing">multiruby</a>.</p></li>
714
+ <li><p>Add 'rake opts=' environment variable, which lets you specify command-line
715
+ arguments directly to the Ruby interpreter, for all test* rake tasks.</p></li>
716
+ <li><p>Add inochi/util/combo combinatorics library for enumerations,
717
+ permutations, and combinations which are all useful in exhaustive
718
+ brute-force unit testing.</p></li>
719
+ <li><p>Add inochi/util/tempdir library which really should be in the Ruby
720
+ standard library.</p></li>
721
+ </ul>
722
+
723
+
724
+ <p>Bug fixes:</p>
725
+
726
+ <ul>
727
+ <li><p>The "enable email notification" checkbox was not activated properly when
728
+ posting announcement to ruby-talk mailing list via Ruby-Forum.</p></li>
729
+ <li><p>Mark gems needed by <code>Inochi.rake()</code> as <em>development</em> dependencies.</p>
730
+
731
+ <p>Users must now run <code>gem install Inochi --development</code> to install these
732
+ dependencies. This also solves the recursive dependency problem between
733
+ Inochi and ERBook.</p></li>
734
+ <li><p>Set executable in gem specification only if it exists.</p></li>
735
+ <li><p>Fix parsing of stack trace in Ruby 1.9.</p></li>
736
+ </ul>
737
+
738
+
739
+ <p>Housekeeping:</p>
740
+
741
+ <ul>
742
+ <li><p>Write contributor names in CREDITS file instead of in the user manual.</p></li>
743
+ <li><p>Use completely lowercase name for Rakefile.</p></li>
744
+ <li><p>Add copyright statement at the top of every source file.</p></li>
745
+ </ul>
746
+
747
+
748
+ <h3 id="Version-0-3-0-2009-02-12-">Version 0.3.0 (2009-02-12)</h3>
749
+
750
+ <p>This release adds support for language translations, improves the user
751
+ interface, and fixes a show-stopper bug for Windows users.</p>
752
+
753
+ <p>New features:</p>
754
+
755
+ <ul>
756
+ <li><p>Add support for language translations of phrases used in a project.</p>
757
+
758
+ <ul>
759
+ <li><p>Add "lang:dump" Rake task for extracting language phrases from project.</p></li>
760
+ <li><p>Add "lang:conv" Rake task for translating dumped phrases into various
761
+ languages using the BabelFish translation service.</p></li>
762
+ <li><p>Add <code>--locale</code> option to a project's main executable for setting user's
763
+ preferred language in spite of the user's locale environment.</p></li>
764
+ </ul>
765
+ </li>
766
+ <li><p>Notify user when attempting to publish announcements in the "pub" Rake
767
+ tasks.</p></li>
768
+ </ul>
769
+
770
+
771
+ <p>Bug fixes:</p>
772
+
773
+ <ul>
774
+ <li><p>In Windows, <code>ENV['USERPROFILE']</code> gives the path to the user's home
775
+ directory and <code>ENV['HOME']</code> is not defined.</p></li>
776
+ <li><p>The only real solution to the circular gem dependency problem is:</p>
777
+
778
+ <pre><code>gem install --force
779
+ </code></pre>
780
+
781
+ <p>You should update the "Setup" section in your projects' user manuals
782
+ accordingly.</p></li>
783
+ </ul>
784
+
785
+
786
+ <p>Housekeeping:</p>
787
+
788
+ <ul>
789
+ <li><p>Break the huge lib/inochi/inochi.rb library into smaller files.</p></li>
790
+ <li><p>Instead of adding methods to singleton classes directly, define modules
791
+ and extend to them so that YARDoc documents the methods appropriately.</p></li>
792
+ <li><p>List all project contributors globally in the "Credits" section.</p></li>
793
+ <li><p>Remove "Contributor kudos" paragraph in release notes in favor of
794
+ crediting contributors inline with each item in the release notes.</p></li>
795
+ <li><p>Mention that the project license is ISC for the reader's convenience.</p></li>
796
+ </ul>
797
+
798
+
799
+ <h3 id="Version-0-2-0-2009-01-25-">Version 0.2.0 (2009-01-25)</h3>
800
+
801
+ <p>This release adds support for unit testing, improves the portability of
802
+ <strong>Inochi</strong> and configurability of your projects, adds new content to the user
803
+ manual, and fixes some bugs.</p>
804
+
805
+ <p>New features:</p>
806
+
807
+ <ul>
808
+ <li><p>Added support for unit testing via the
809
+ <a href="http://rubyforge.org/projects/bfts/">minitest</a> library.</p>
810
+
811
+ <ul>
812
+ <li>The scaffold generator now emits a default unit test for the main
813
+ project library.</li>
814
+ </ul>
815
+ </li>
816
+ <li><p>Added optional ProgramName parameter to the scaffold generator. This
817
+ allows you to specify reasonable program names when your project module
818
+ has a strange capitalization:</p>
819
+
820
+ <pre><code>$ inochi ERBook
821
+ create er_book/LICENSE
822
+
823
+ $ inochi ERBook erbook
824
+ create erbook/LICENSE
825
+
826
+ $ inochi ERBook foobar
827
+ create foobar/LICENSE
828
+ </code></pre></li>
829
+ <li><p>Allow project authors to be specified via
830
+ <code>Inochi.init :YourProject, :authors =&gt; [['name', 'mail']]</code>
831
+ (thanks to Florian Gilcher)</p></li>
832
+ </ul>
833
+
834
+
835
+ <p>Bug fixes:</p>
836
+
837
+ <ul>
838
+ <li><p>Run on both JRuby and normal Ruby in multiple versions and with different
839
+ executable names on Windows. (thanks to Florian Gilcher)</p></li>
840
+ <li><p>Use <code>Gem::RubyGemsVersion</code> instead of a shell command to determine
841
+ rubygems version for generation of setup.erb. (thanks to Florian Gilcher)</p></li>
842
+ <li><p>Add blank lines between all list items, not just multi-line ones, in the
843
+ plain-text version of the release announcement for improved readability.</p></li>
844
+ <li><p>Omit LaTeX-style heading numbers from release announcements. They caused
845
+ confusion, especially in plain-text announcements, when trying to
846
+ determine which version of a project was released.</p></li>
847
+ </ul>
848
+
849
+
850
+ <p>Housekeeping:</p>
851
+
852
+ <dl>
853
+ <dt>Added unit tests for utility methods provided by the <strong>Inochi</strong> module</dt><dd>project name calculation and CamelCase to snake_case conversion.</dd>
854
+ </dl>
855
+
856
+
857
+ <h3 id="Version-0-1-0-2009-01-13-">Version 0.1.0 (2009-01-13)</h3>
858
+
859
+ <p>This release reattempts to fix the <a href="http://www.ruby-forum.com/topic/176173#771281">circular dependency
860
+ problem</a> that occurred when
861
+ installing either Inochi or ERBook.</p>
862
+
863
+ <p>New features:</p>
864
+
865
+ <ul>
866
+ <li><code>Inochi.init()</code> now adds <code>#major()</code>, <code>#series()</code>, and <code>#requirement()</code>
867
+ instance methods to a project's <code>VERSION</code> constant.</li>
868
+ </ul>
869
+
870
+
871
+ <p>Bug fixes:</p>
872
+
873
+ <ul>
874
+ <li><p>Solved circular dependency problem by making inochi gem not dependent on
875
+ erbook gem. However, ERBook is still required during runtime and is
876
+ supplied on the <code>gem install</code> command for <strong>Inochi</strong>.</p>
877
+
878
+ <p>The "Installing" section has been updated accordingly.</p></li>
879
+ <li><p>Add forgotten Rake dependency for <strong>Inochi</strong> gem.</p></li>
880
+ </ul>
881
+
882
+
883
+ <h3 id="Version-0-0-1-2009-01-13-">Version 0.0.1 (2009-01-13)</h3>
884
+
885
+ <p>This release fixes some show-stopper bugs.</p>
886
+
887
+ <p>Bug fixes:</p>
888
+
889
+ <ul>
890
+ <li><p>The name of the project library was <a href="http://www.ruby-forum.com/topic/176173#771351">being determined
891
+ incorrectly</a>.
892
+ (thanks to Florian Gilcher)</p></li>
893
+ <li><p>There was a <a href="http://www.ruby-forum.com/topic/176173#771281">circular dependency problem</a> when installing the <strong>Inochi</strong> gem. (thanks to Florian Gilcher)</p>
894
+
895
+ <p>The solution is to specify the <code>--force</code> option when installing the gem.
896
+ The "Installing" section has been updated accordingly.</p></li>
897
+ <li><p>Generated project scaffolds now check against the major version of the
898
+ <strong>Inochi</strong> gem, to avoid runtime version conflicts.</p></li>
899
+ </ul>
900
+
901
+
902
+ <p>Housekeeping:</p>
903
+
904
+ <ul>
905
+ <li>Only add project libraries to <code>$LOAD_PATH</code> if not already there.</li>
906
+ </ul>
907
+
908
+
909
+ <h3 id="Version-0-0-0-2009-01-13-">Version 0.0.0 (2009-01-13)</h3>
910
+
911
+ <p>This is the first release of Inochi. Enjoy!</p>
912
+
913
+ <h2 id="CREDITS">CREDITS</h2>
914
+
915
+ <p>Suraj N. Kurapati,
916
+ Peileppe Production,
917
+ Florian Gilcher</p>
918
+
919
+ <h3 id="Logo">Logo</h3>
920
+
921
+ <p>The "inochi.png" image and its "inochi.svg" source utilize the
922
+ <a href="http://www.openclipart.org/detail/17456">"3 flowers"</a> graphic, which was created and released into
923
+ the public domain by <a href="http://www.openclipart.org/user-detail/Peileppe">Peileppe Production</a> on June 25, 2008.</p>
924
+
925
+ <h2 id="LICENSE">LICENSE</h2>
926
+
927
+ <p>(the ISC license)</p>
928
+
929
+ <p>Copyright 2008 Suraj N. Kurapati <a href="&#109;&#97;&#x69;&#x6c;&#116;&#111;&#x3a;&#115;&#117;&#x6e;&#x61;&#107;&#117;&#x40;&#103;&#x6d;&#97;&#x69;&#x6c;&#x2e;&#x63;&#x6f;&#x6d;" data-bare-link="true">&#x73;&#x75;&#x6e;&#97;&#x6b;&#117;&#x40;&#103;&#109;&#x61;&#105;&#x6c;&#46;&#99;&#x6f;&#109;</a></p>
930
+
931
+ <p>Permission to use, copy, modify, and/or distribute this software for any
932
+ purpose with or without fee is hereby granted, provided that the above
933
+ copyright notice and this permission notice appear in all copies.</p>
934
+
935
+ <p>THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
936
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
937
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
938
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
939
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
940
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
941
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.</p>
942
+
943
+ <h2 id="SEE-ALSO">SEE ALSO</h2>
944
+
945
+ <p>rake(1),
946
+ rsync(1),
947
+ <a href="http://github.com/rtomayko/ronn">Ronn</a>,
948
+ <a href="http://snk.tuxfamily.org/lib/ember/">Ember</a></p>
949
+
950
+
951
+ <ol class='foot man'>
952
+ <li class='tl'></li>
953
+ <li class='tc'>April 2010</li>
954
+ <li class='tr'>inochi(1)</li>
955
+ </ol>
956
+
957
+ </div>
958
+ </body>
959
+ </html>