cmdparse 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Rakefile ADDED
@@ -0,0 +1,207 @@
1
+ # -*- ruby -*-
2
+ #
3
+ # $Id$
4
+ #
5
+ # cmdparse: an advanced command line parser using optparse which supports commands
6
+ # Copyright (C) 2004 Thomas Leitner
7
+ #
8
+ # This program is free software; you can redistribute it and/or modify it under the terms of the GNU
9
+ # General Public License as published by the Free Software Foundation; either version 2 of the
10
+ # License, or (at your option) any later version.
11
+ #
12
+ # This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
13
+ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ # General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License along with this program; if not,
17
+ # write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
+ #
19
+
20
+
21
+ begin
22
+ require 'rubygems'
23
+ require 'rake/gempackagetask'
24
+ rescue Exception
25
+ nil
26
+ end
27
+
28
+ require 'rake/clean'
29
+ require 'rake/packagetask'
30
+ require 'rake/rdoctask'
31
+ require 'rake/testtask'
32
+
33
+ # General actions ##############################################################
34
+
35
+ require 'lib/cmdparse'
36
+
37
+ PKG_NAME = "cmdparse"
38
+ PKG_VERSION = CommandParser::VERSION.join( '.' )
39
+ PKG_FULLNAME = PKG_NAME + "-" + PKG_VERSION
40
+
41
+ SRC_RB = FileList['lib/**/*.rb']
42
+
43
+ # The default task is run if rake is given no explicit arguments.
44
+
45
+ desc "Default Task"
46
+ task :default => :doc
47
+
48
+
49
+ # End user tasks ################################################################
50
+
51
+ desc "Prepares for installation"
52
+ task :prepare do
53
+ ruby "setup.rb config"
54
+ ruby "setup.rb setup"
55
+ end
56
+
57
+
58
+ desc "Installs the package #{PKG_NAME}"
59
+ task :install => [:prepare]
60
+ task :install do
61
+ ruby "setup.rb install"
62
+ end
63
+
64
+
65
+ task :clean do
66
+ ruby "setup.rb clean"
67
+ end
68
+
69
+
70
+ CLOBBER << "doc/output"
71
+ desc "Builds the documentation"
72
+ task :doc => [:rdoc] do
73
+ Dir.chdir("doc")
74
+ sh "webgen -V 4"
75
+ Dir.chdir("..")
76
+ end
77
+
78
+ rd = Rake::RDocTask.new do |rdoc|
79
+ rdoc.rdoc_dir = 'doc/output/rdoc'
80
+ rdoc.title = PKG_NAME
81
+ rdoc.options << '--line-numbers' << '--inline-source' << '-m README'
82
+ rdoc.rdoc_files.include( 'README' )
83
+ rdoc.rdoc_files.include( 'lib/**/*.rb' )
84
+ end
85
+
86
+
87
+ # Developer tasks ##############################################################
88
+
89
+
90
+ PKG_FILES = FileList.new( [
91
+ 'setup.rb',
92
+ 'TODO',
93
+ 'COPYING',
94
+ 'README',
95
+ 'Rakefile',
96
+ 'ChangeLog',
97
+ 'VERSION',
98
+ 'lib/**/*.rb',
99
+ 'doc/**/*'
100
+ ]) do |fl|
101
+ fl.exclude( /\bsvn\b/ )
102
+ fl.exclude( 'doc/output' )
103
+ end
104
+
105
+ if !defined? Gem
106
+ puts "Package Target requires RubyGEMs"
107
+ else
108
+ spec = Gem::Specification.new do |s|
109
+
110
+ #### Basic information
111
+
112
+ s.name = PKG_NAME
113
+ s.version = PKG_VERSION
114
+ s.summary = "An advanced command line parser using optparse which supports commands"
115
+ s.description = <<-EOF
116
+ cmdparse extends the default option parser 'optparse' by adding
117
+ support for commands. Programs that use such command line interfaces
118
+ are, for example, subversion's 'svn' or Rubygem's 'gem' program.
119
+ EOF
120
+
121
+ #### Dependencies, requirements and files
122
+
123
+ s.files = PKG_FILES.to_a
124
+
125
+ s.require_path = 'lib'
126
+ s.autorequire = nil
127
+
128
+ #### Documentation
129
+
130
+ s.has_rdoc = true
131
+ s.extra_rdoc_files = rd.rdoc_files.reject do |fn| fn =~ /\.rb$/ end.to_a
132
+ s.rdoc_options = ['--line-numbers', '-m README']
133
+
134
+ #### Author and project details
135
+
136
+ s.author = "Thomas Leitner"
137
+ s.email = "t_leitner@gmx.at"
138
+ s.homepage = "cmdparse.rubyforge.org"
139
+ s.rubyforge_project = "cmdparse"
140
+ end
141
+
142
+ task :package => [:generateFiles]
143
+ task :generateFiles do |t|
144
+ sh "svn log -r HEAD:1 -v > ChangeLog"
145
+ File.open('VERSION', 'w+') do |file| file.write( PKG_VERSION + "\n" ) end
146
+ end
147
+
148
+ CLOBBER << "ChangeLog" << "VERSION"
149
+
150
+ Rake::GemPackageTask.new( spec ) do |pkg|
151
+ pkg.need_zip = true
152
+ pkg.need_tar = true
153
+ end
154
+
155
+ end
156
+
157
+
158
+ desc "Creates a tag in the repository"
159
+ task :tag do
160
+ repositoryPath = File.dirname( $1 ) if `svn info` =~ /^URL: (.*)$/
161
+ fail "Tag already created in repository " if /#{PKG_FULLNAME}/ =~ `svn ls #{repositoryPath}/versions`
162
+ sh "svn cp -m 'Created version #{PKG_FULLNAME}' #{repositoryPath}/trunk #{repositoryPath}/versions/#{PKG_FULLNAME}"
163
+ end
164
+
165
+ desc "Upload documentation to homepage"
166
+ task :uploaddoc => [:doc] do
167
+ Dir.chdir('doc/output')
168
+ sh "scp -r * gettalong@rubyforge.org:/var/www/gforge-projects/cmdparse/"
169
+ end
170
+
171
+
172
+ # Misc tasks ###################################################################
173
+
174
+
175
+ def count_lines( filename )
176
+ lines = 0
177
+ codelines = 0
178
+ open( filename ) do |f|
179
+ f.each do |line|
180
+ lines += 1
181
+ next if line =~ /^\s*$/
182
+ next if line =~ /^\s*#/
183
+ codelines += 1
184
+ end
185
+ end
186
+ [lines, codelines]
187
+ end
188
+
189
+
190
+ def show_line( msg, lines, loc )
191
+ printf "%6s %6s %s\n", lines.to_s, loc.to_s, msg
192
+ end
193
+
194
+
195
+ desc "Show statistics"
196
+ task :statistics do
197
+ total_lines = 0
198
+ total_code = 0
199
+ show_line( "File Name", "Lines", "LOC" )
200
+ SRC_RB.each do |fn|
201
+ lines, codelines = count_lines fn
202
+ show_line( fn, lines, codelines )
203
+ total_lines += lines
204
+ total_code += codelines
205
+ end
206
+ show_line( "Total", total_lines, total_code )
207
+ end
data/TODO ADDED
@@ -0,0 +1,5 @@
1
+
2
+
3
+ ---- DONE ----
4
+
5
+ * define banner in a common way (like option parser), maybe use the one from option parser
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.0.0
@@ -0,0 +1,137 @@
1
+ html {
2
+ margin: 0px 5%;
3
+ background-color: #eee;
4
+ }
5
+
6
+ body {
7
+ margin: 0px;
8
+ padding: 0px;
9
+ background-color: #fff;
10
+ font-size: 12px;
11
+ font-family: Verdana, Arial, Helvetica;
12
+ }
13
+
14
+ /* General layout of the page */
15
+
16
+ #header, #footer {
17
+ width: 100%;
18
+ background-color: #58b;
19
+ color: #fff;
20
+ }
21
+
22
+ #menu {
23
+ float: left;
24
+ width: 230px;
25
+ padding: 20px 0px 0px 20px;
26
+ border: 3px solid #58b;
27
+ }
28
+
29
+ #body {
30
+ margin-left: 250px;
31
+ padding: 20px;
32
+ }
33
+
34
+ #footer {
35
+ clear: both;
36
+ padding: 5px 0px;
37
+ text-align: center;
38
+ }
39
+
40
+
41
+ /* styling the header */
42
+
43
+ #headerbar {
44
+ width: 100%;
45
+ font-size: 90%;
46
+ }
47
+
48
+ span#navbar, span#languages {
49
+ padding: 3px;
50
+ width: 45%;
51
+ }
52
+
53
+ span#navbar {
54
+ float: left;
55
+ text-align: left;
56
+ }
57
+
58
+ span#languages {
59
+ float: right;
60
+ text-align: right;
61
+ }
62
+
63
+ div#header h1, h2 {
64
+ margin: 0px;
65
+ padding: 15px 50px 0px;
66
+
67
+ font-size: 300%;
68
+ font-style: italic;
69
+ font-weight: normal;
70
+ }
71
+
72
+ div#header h2 {
73
+ padding-top: 0px;
74
+ padding-bottom: 15px;
75
+ font-size: 100%;
76
+ }
77
+
78
+ /* styling the menu */
79
+
80
+ #menu a {
81
+ text-decoration: none;
82
+ color: #b55;
83
+ font-weight: bold;
84
+ font-size: 130%;
85
+ }
86
+
87
+ #menu a:hover {
88
+ text-decoration: underline;
89
+ }
90
+
91
+ #menu .webgen-menuitem-selected {
92
+ border-left: 3px solid #58b;
93
+ }
94
+
95
+ #menu .webgen-submenu {
96
+ }
97
+
98
+ #menu ul {
99
+ list-style-type: none;
100
+ padding: 0px;
101
+ margin-left: 10px;
102
+ }
103
+
104
+ #menu li > ul {
105
+ font-size: 95%;
106
+ }
107
+
108
+ #menu li {
109
+ margin: 0.0em 0px;
110
+ padding: 2px 0px;
111
+ padding-left: 5px;
112
+ border-left: 3px solid #CCCCCC;
113
+ }
114
+
115
+ /* styling the content */
116
+
117
+ div.section {
118
+ margin-bottom: 30px;
119
+ }
120
+
121
+ h2.section_header {
122
+ padding: 0px;
123
+ border-bottom: 3px double #8b5;
124
+
125
+ letter-spacing: 0.2em;
126
+ font-size: 150%;
127
+ font-weight: bold;
128
+ color: #8b5;
129
+ }
130
+
131
+ pre.webgen-file {
132
+ padding-left: 10px;
133
+ margin: 0px 10px;
134
+ border-left: 3px solid #8b5;
135
+ }
136
+
137
+ }
@@ -0,0 +1,32 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
4
+ <head>
5
+ <title>CommandParser: {title: }</title>
6
+ <link href="{relocatable: default.css}" rel="stylesheet" />
7
+ </head>
8
+ <body>
9
+ <div id="header">
10
+ <h1>{title: }</h1>
11
+ <h2>cmdparse: an advanced command line parser using optparse which supports commands</h2>
12
+ <div id="headerbar">
13
+ <span id="navbar">{navbar: }</span>
14
+ <span id="languages">{lang: }</span>
15
+ <div style="clear: both; border-top: 1px solid #58b"></div>
16
+ </div>
17
+ </div>
18
+
19
+ <div id="menu">
20
+ {menu: }
21
+ </div>
22
+
23
+ <div id="body">
24
+ {content: }
25
+ </div>
26
+
27
+ <div id="footer">
28
+ generated with <em><b><a href="http://webgen.rubyforge.org">webgen</a></b></em> on <b>{date: }</b>
29
+ </div>
30
+
31
+ </body>
32
+ </html>
@@ -0,0 +1,32 @@
1
+ <div class="section">
2
+ <h2 class="section_header">Download</h2>
3
+ <p>The newest version of cmdparse can be downloaded from Rubyforge.</p>
4
+ <p>Homepage: <a href="http://cmdparse.rubyforge.org">cmdparse.rubyforge.org</a><br />
5
+ Download: <a href="http://rubyforge.org/frs/?group_id=396">http://rubyforge.org/frs/?group_id=396</a>
6
+ </p>
7
+ </div>
8
+
9
+ <div class="section">
10
+ <h2 class="section_header">Dependencies</h2>
11
+ <p>optparse - part of the standard ruby distribution, so nothing to do here</p>
12
+ </div>
13
+
14
+ <div class="section">
15
+ <h2 class="section_header">Installation</h2>
16
+ You can use the standard way to install cmdparse:
17
+ <pre>
18
+ $ ruby setup.rb config
19
+ $ ruby setup.rb setup
20
+ $ ruby setup.rb install
21
+ </pre>
22
+
23
+ Or you could use Rake and substitute the above commands with this:
24
+ <pre>
25
+ $ rake install
26
+ </pre>
27
+
28
+ Or you could install cmdparse the "GEM way":
29
+ <pre>
30
+ $ gem install cmdparse
31
+ </pre>
32
+ </div>
@@ -0,0 +1,8 @@
1
+ <div class="section">
2
+ <h2 class="section_header">Feature list</h2>
3
+ <ul>
4
+ <li>Based upon the standard library <code>optparse</code></li>
5
+ <li>Each command is implemented via a class</li>
6
+ <li>As easy to use as <code>optparse</code> itself</li>
7
+ </ul>
8
+ </div>
@@ -0,0 +1,21 @@
1
+ <div class="section">
2
+ <h2 class="section_header">Welcome</h2>
3
+ <p>... to the homepage of <i><b>cmdparse</b></i>, an advanced command line parser.</p>
4
+ <p>Have a look around the site!</p>
5
+ </div>
6
+
7
+ <div class="section">
8
+ <h2 class="section_header">Description</h2>
9
+ <p>Some new programs use a "command style" command line. Examples for such programs are the "svn"
10
+ program from Subversion and the "gem" program from Rubygems. The standard Ruby distribution has no
11
+ library to create programs that use such a command line interface.</p>
12
+
13
+ <p>This library, cmdparse, can be used to create such a command line interface. Internally it uses
14
+ optparse to parse options and it provides a nice API for specifying commands.</p>
15
+
16
+ </div>
17
+
18
+ <div class="section">
19
+ <h2 class="section_header">And so ...</h2>
20
+ <p>... have fun!</p>
21
+ </div>