reap 6.0.0 → 6.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/web/index.html ADDED
@@ -0,0 +1,312 @@
1
+ <html>
2
+
3
+ <head>
4
+ <title>Reap</title>
5
+ <style>
6
+
7
+ body { margin: 0; padding: 0; font-size: 10pt; font-size: 1em; }
8
+
9
+ p { font-family: sans-serif; text-align: justify;
10
+ font-size: 1em; line-height: 1.3em;
11
+ }
12
+
13
+ img { }
14
+
15
+ h2 { color: red; margin-top: 30px; }
16
+
17
+ td { margin: 0; padding: 0; vertical-align: top; }
18
+
19
+ b.p { color: white; }
20
+ b.b { color: black; }
21
+ b.r { color: red; }
22
+
23
+ pre { font-size: .9em; line-height: 1.2em;
24
+ margin: 0;
25
+ padding: 0; padding-bottom: 5px; padding-top: 15px;
26
+ background: #FFFBBF;
27
+ }
28
+
29
+ pre.white { background: white; }
30
+
31
+ span.m { font-family: monospace; }
32
+
33
+ div#title {
34
+ float: top;
35
+ background: black repeat-x;
36
+ border-bottom: 1px solid gray;
37
+ }
38
+
39
+ div#title table {}
40
+
41
+ td#meta { color: white; vertical-align: bottom;
42
+ font-size: 64pt; font-family: sans-serif; font-weight: bold; }
43
+
44
+ td#slogon {
45
+ width: 120px;
46
+ vertical-align: middle; text-align: left; font-family: monospace;
47
+ color: gray; font-size: 1.3em; padding-left: 10px; text-align: center;
48
+ white-space: nowrap;
49
+ }
50
+
51
+ div#menu { width: 100%; vertical-align: middle; padding-left: 30px;
52
+ font-family: sans-serif; font-size: .8em; line-height: 3em;
53
+ border-bottom: 1px solid black;
54
+ color: red; background: white; }
55
+
56
+ div#menu a { color: red; text-decoration: none; font-weight: bold; }
57
+
58
+ div#menu a:hover { color: pink; }
59
+
60
+ div#container { margin: 10px; padding: 10px; padding-top: 5px;
61
+ border: 0;
62
+ }
63
+
64
+ div#copy { font-size: 7pt; font-family: sans-serif; margin: 5px;
65
+ border-top: 1px solid #cccccc; color: gray;
66
+ }
67
+
68
+ div#eg { float: right; margin: 20px; margin-top: -110px;
69
+ padding: 0px; padding-top: 7px;
70
+ border: solid 1px lightgray;
71
+ text-align: center;
72
+ font-family: monospace; font-size: .8em;
73
+ color: green; background: #cccccc; }
74
+
75
+ iframe { width: 430px; height: 1000px; border: 0; border-left: solid 1px #DDDDDD;
76
+ margin: 0px; margin-top: 5px; padding-left: 5px;
77
+ background: #EEFFEE; }
78
+
79
+ </style>
80
+ </head>
81
+
82
+ <body>
83
+
84
+ <div id="title">
85
+ <table width="100%" border="0" style="padding: 0;">
86
+ <tr>
87
+ <td id="slogon">
88
+ <b class="p">w h e n</b> <br/>
89
+ <b class="p">y o u r</b> <br/>
90
+ <b class="r">r u b y</b> <br/>
91
+ <b class="p">r u n s</b> <br/>
92
+ <b class="p">o v e r</b>&nbsp;
93
+ </td>
94
+ <td id="meta">
95
+ RE<b class="r">A</b>P
96
+ </td>
97
+ </tr>
98
+ <tr>
99
+ </tr>
100
+ </table>
101
+ </div>
102
+
103
+ <div id="menu" colspan="2">
104
+ <a href="http://rubyforge.org/frs/?group_id=811">Download</a> &middot;
105
+ <a href="doc/api/index.html">Documentation</a> &middot;
106
+ <a href="http://rubyforge.org/projects/reap/">Development</a>
107
+ </div>
108
+
109
+ <div id="eg">
110
+ <b>Example ProjectInfo File</b><br/>
111
+ <iframe src="ProjectInfo.html">Sorry, there are no iframes in your web world.</iframe>
112
+ </div>
113
+
114
+ <div id="container">
115
+
116
+ <p>Reap is a set of integrated tasks designed to simplify the life of
117
+ Ruby application developers and project managers. The tasks
118
+ cover the range of common nneds, from setting up a standard
119
+ project structure to distributing and announcments.
120
+ Because of the commonality between the tasks, Reap utilizes a
121
+ central YAML-format configuration file to harvest project
122
+ information, significantly simplifying usage.</p>
123
+
124
+ <p>Custom task can also be easily created to suit specific
125
+ project requirements. In this respect Reap is much like
126
+ Rake. In fact Reap can be used as a replacement for Rake.
127
+ On the other hand Reap tasks can also be used via Rake
128
+ just as if they were another set of avaiable Rake tasks.</p>
129
+
130
+
131
+ <h2> Usage </h2>
132
+
133
+ <p>To use Reap, you simply need to install it and add a ProjectInfo
134
+ to your projects main directory. By default, Reap supports the standard
135
+ project layout as promoted by setup.rb.</p>
136
+
137
+ <p>Once you ProjectInfo file is filled out you can see what tasks are ready to run
138
+ simply by typing 'reap' into the command line. For example you might see
139
+ something like:</p>
140
+
141
+ <pre>
142
+ ~/myproj$ reap
143
+
144
+ info Display ProjectInfo file.
145
+ testext Extract unit-tests from lib scripts.
146
+ test Run unit-tests (each in a separate process).
147
+ rdoc Generate API Documentation.
148
+ doap Generate DOAP project file.
149
+ publish Publish documents to the web.
150
+ perm Normalize ownership and permissions of files.
151
+ package Build distribution packages.
152
+ install Locally install package using built-in setup.rb.
153
+ release Release distribution files.
154
+ announce Email project announcement.
155
+ </pre>
156
+
157
+ <p>To get started, it easiest to use a pre-existing ProjectInfo file and modifying
158
+ it to fit your project. Besides copying another project's ProjectInfo file
159
+ you can ask Reap for an empty one.</p>
160
+
161
+ <pre>
162
+ ~/myproj$ reap template
163
+ </pre>
164
+
165
+ <p>Each task section of the project information file can be used as a task name and
166
+ a YAML private type identifies the type of task it represents.
167
+ To find out what parameters each task accepts see Reap's RDoc API.</p>
168
+
169
+ <p>If you prefer using Rake for all your project tasks. Reap provides an
170
+ simple interface for doing so. Here's an example of a Rakefile.</p>
171
+
172
+ <pre>
173
+ require 'rake'
174
+ require 'reap/reap'
175
+
176
+ task_package 'pack' do |pkg|
177
+ pkg.distribute = [ 'gem' ]
178
+ pkg.dependencies = [ facets ]
179
+ end
180
+ </pre>
181
+
182
+ <p>In the above, all information is provided directly via the Ruby task code.
183
+ You can also use Rake while utilizing the ProjectInfo file, if you prefer.
184
+ In that case it is very simple. In your Rake file simple put:</p>
185
+
186
+ <pre>
187
+ require 'rake'
188
+ require 'reap/rake'
189
+ </pre>
190
+
191
+ <p>Then all the tasks defined in the ProjectInfo file will be available via Rake.
192
+ You can add additional Rake tasks, of course.</p>
193
+
194
+ <h2> Creating Tasks </h2>
195
+
196
+ <p>Building a Reap task is pretty easy too. In fact if you ever used Rake
197
+ you already have a good idea about how to do it.</p>
198
+
199
+ <p>The first thing you need to know is where to put the tasks code.
200
+ With Reap each task typically has it's own file.
201
+ To create a custom task particular to a project add a task/ directory
202
+ to your project and place your custom task file in it.</p>
203
+
204
+ <!--
205
+ <p>If you have custom tasks you'd like to use for all your projects
206
+ you can place them either in you home directory under ~/.config/reap/task/,
207
+ or you could make them universally available to all users in the
208
+ shared data directory, on Debian, /usr/share/reap/task/.</p>
209
+ -->
210
+
211
+ <p>Here's an "oh-so-simple" example:</p>
212
+
213
+ <pre>
214
+ module Tasks
215
+
216
+ def simple( name, data )
217
+
218
+ desc 'This is a custom reap task class.'
219
+
220
+ task name do
221
+ data.message ||= master.message
222
+ puts data.message + "\n\n" + data.signed
223
+ end
224
+
225
+ end
226
+
227
+ end
228
+ </pre>
229
+
230
+ <p>The corresponding settings in the ProjectInfo file will then be:</p>
231
+
232
+ <pre>
233
+ message: Hi, how are you?
234
+
235
+ simple: !!simple
236
+ signed: Your friend, Tom.
237
+ </pre>
238
+
239
+ <p>And to use it type:</p>
240
+
241
+ <pre>
242
+ % reap simple
243
+ </pre>
244
+
245
+ <p>Notice the reference to 'master'. This is an OpenCascade interface
246
+ (similar to OpenObject and OpenStruct) to the whole ProjectInfo dataset.</p>
247
+
248
+ <p>You might recognize the core methods of creating a task, 'desc' and 'task'.
249
+ These are used exactly as they are in Rake. We encapsulate them in a
250
+ task-definition method (eg. simple) so the task can be generated dyanmically
251
+ if such a section (!!simple) appears in the ProjectInfo file. Such
252
+ task-definition methods are recognized by reap b/c they are stored in the
253
+ special purpose Tasks module.</p>
254
+
255
+ <p>It's a good idea to take some time and learn all the standard
256
+ properties of a project's information file which you can draw on for
257
+ your own tasks. Looking at the RDoc API documentation will elucidate most these.
258
+ </p>
259
+
260
+ <p>The rest of building a task is a matter or writing the code to have it do
261
+ what you want it to, of course. If you develop any nice tasks, be sure to pass
262
+ them along!
263
+ </p>
264
+
265
+
266
+ <h2> Status </h2>
267
+
268
+ <p>Reap works fairly well at this point, although not all intended functionality is complete.
269
+ The primary tasks, like packaging, testing and rdocing are the most well developed.
270
+ Other tasks have some limitations. For instance, the publish task
271
+ is limited to uploading to RubyForge at the moment. And the announcment task can't
272
+ route email via TLS servers. But Reap is very usable and is used in a number of
273
+ projects including Facets and Nitro. Moreover, if you use it, contributions
274
+ to it's improvement are very welcome and will be sung many wonderous praises &nbsp;<span class="m">;)</span>
275
+ </p>
276
+
277
+ <p>IMPORTANT!!! Microsoft Windows support is weak at the moment. No doubt a few of
278
+ the built-in tasks will fail under Windoes. But fixing this issues is a high priority
279
+ for upcoming releases. So staty tuned --or heck, help out!</p>
280
+
281
+
282
+ <h2> Future </h2>
283
+
284
+ <p>The future of Reap looks very bright. Some of the plans for the future
285
+ include:</p>
286
+
287
+ <p>
288
+ 1. Code audit to catch any overlooked bugs and potential gotchas.<br/>
289
+ 2. Full Windows compatability, replacing most of the shell calls.<br/>
290
+ 3. Switching from setup.rb to an improved package.rb install system.<br/>
291
+ 4. SCM related tasks, starting with Darcs and later Subversion.<br/>
292
+ </p>
293
+
294
+
295
+ <h2> License </h2>
296
+
297
+ <p>Reap Copyright (c) 2004-2006 Thomas Sawyer, Ruby License</p>
298
+
299
+ <p>THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
300
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
301
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
302
+ PURPOSE.
303
+ </p>
304
+
305
+ <br/><br/>
306
+
307
+ </div>
308
+
309
+ <div id="copy">Copyright (c) 2006 Thomas Sawyer, All Rights Reserved.</div>
310
+
311
+ </body>
312
+ </html>
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
3
3
  specification_version: 1
4
4
  name: reap
5
5
  version: !ruby/object:Gem::Version
6
- version: 6.0.0
7
- date: 2006-06-05 00:00:00 -04:00
6
+ version: 6.0.1
7
+ date: 2006-06-06 00:00:00 -04:00
8
8
  summary: The Flexible Ruby Project Management Assistant
9
9
  require_paths:
10
10
  - lib
@@ -28,36 +28,27 @@ cert_chain:
28
28
  authors:
29
29
  - Thomas Sawyer
30
30
  files:
31
- - lib
32
- - data
33
31
  - bin
32
+ - note
33
+ - data
34
+ - forge
35
+ - lib
36
+ - web
37
+ - sample
34
38
  - COPYING
39
+ - ProjectInfo
35
40
  - README
36
41
  - setup.rb
37
- - sample
38
- - lib/reap
39
- - lib/reap/projectinfo.rb
40
- - lib/reap/rake.rb
41
- - lib/reap/bin
42
- - lib/reap/reap.rb
43
- - lib/reap/class
44
- - lib/reap/taskutils.rb
45
- - lib/reap/tasks.rb
46
- - lib/reap/bin/reap.rb
47
- - lib/reap/bin/rubytest.rb
48
- - lib/reap/class/rdoc.rb
49
- - lib/reap/class/doap.rb
50
- - lib/reap/class/installer.rb
51
- - lib/reap/class/test.rb
52
- - lib/reap/class/announce.rb
53
- - lib/reap/class/extest.rb
54
- - lib/reap/class/manifest.rb
55
- - lib/reap/class/publish.rb
56
- - lib/reap/class/package.rb
57
- - lib/reap/class/filer.rb
42
+ - bin/rubytest
43
+ - bin/reap
44
+ - note/history
45
+ - note/doap.xml
46
+ - note/LATEST
47
+ - note/history/Rakefile-0.1
58
48
  - data/reap
59
49
  - data/reap/scaffold
60
50
  - data/reap/setup.rb
51
+ - data/reap/install.rb
61
52
  - data/reap/scaffold/subversion
62
53
  - data/reap/scaffold/standard
63
54
  - data/reap/scaffold/subversion/branches
@@ -94,8 +85,56 @@ files:
94
85
  - data/reap/scaffold/standard/test
95
86
  - data/reap/scaffold/standard/doc/note
96
87
  - data/reap/scaffold/standard/doc/api
97
- - bin/rubytest
98
- - bin/reap
88
+ - forge/installer.rb
89
+ - forge/TODO
90
+ - forge/ProjectInfo.rb
91
+ - forge/scaffold.rb
92
+ - forge/unit_runner
93
+ - forge/ProjectInfo
94
+ - forge/reference
95
+ - forge/unit_runner/sample.rb
96
+ - forge/unit_runner/README
97
+ - forge/unit_runner/cunit.rb
98
+ - forge/unit_runner/commentrunner.rb
99
+ - forge/unit_runner/forkedrunner.rb
100
+ - forge/reference/rubyforgepublisher.rb
101
+ - forge/reference/sshpublisher.rb
102
+ - forge/reference/compositepublisher.rb
103
+ - forge/reference/rubyforge.rb
104
+ - forge/reference/ftptools.rb
105
+ - forge/reference/license-each.rb
106
+ - forge/reference/suby-cvs.rb
107
+ - forge/reference/publisher.rb
108
+ - forge/reference/Rakefile.htm
109
+ - forge/reference/aRakefile
110
+ - forge/reference/Rakefile
111
+ - forge/reference/installers
112
+ - forge/reference/installers/package.rb
113
+ - forge/reference/installers/setup.rb
114
+ - lib/reap
115
+ - lib/reap/projectinfo.rb
116
+ - lib/reap/rake.rb
117
+ - lib/reap/bin
118
+ - lib/reap/reap.rb
119
+ - lib/reap/class
120
+ - lib/reap/taskutils.rb
121
+ - lib/reap/tasks.rb
122
+ - lib/reap/bin/reap.rb
123
+ - lib/reap/bin/rubytest.rb
124
+ - lib/reap/class/rdoc.rb
125
+ - lib/reap/class/doap.rb
126
+ - lib/reap/class/test.rb
127
+ - lib/reap/class/announce.rb
128
+ - lib/reap/class/extest.rb
129
+ - lib/reap/class/manifest.rb
130
+ - lib/reap/class/publish.rb
131
+ - lib/reap/class/package.rb
132
+ - lib/reap/class/filer.rb
133
+ - web/doc
134
+ - web/index.html
135
+ - web/ProjectInfo.html
136
+ - web/images
137
+ - web/images/grape.jpg
99
138
  - sample/task
100
139
  - sample/Rakefile
101
140
  - sample/Reapfile
@@ -1,178 +0,0 @@
1
- require 'rbconfig'
2
- require 'fileutils'
3
-
4
- module Reap
5
-
6
- # = Installer
7
- #
8
- # The Installer class generates a specialized install.rb
9
- # script specifically for your project. It currently
10
- # does not support c/c++ ext/ compilation.
11
-
12
- class Installer
13
-
14
- include TaskUtils
15
-
16
- def self.config(name)
17
- # XXX use pathname
18
- prefix = Regexp.quote(Config::CONFIG["prefix"])
19
- exec_prefix = Regexp.quote(Config::CONFIG["exec_prefix"])
20
- Config::CONFIG[name].gsub(/\A\/?(#{prefix}|#{exec_prefix})\/?/, '')
21
- end
22
-
23
- KINDS = [
24
- :bin, :lib, :ext, :data, :conf, :doc
25
- ]
26
-
27
- SITE_DIRS = {
28
- :bin => config("bindir"),
29
- :lib => config("sitelibdir"),
30
- :ext => config("sitearchdir"),
31
- :data => config("datadir"),
32
- :conf => config("sysconfdir"),
33
- :doc => File.join(config("datadir"), "doc"),
34
- }
35
-
36
- VEND_DIRS = {
37
- :bin => config("bindir"),
38
- :lib => config("rubylibdir"),
39
- :ext => config("archdir"),
40
- :data => config("datadir"),
41
- :conf => config("sysconfdir"),
42
- :doc => File.join(config("datadir"), "doc"),
43
- }
44
-
45
- MODES = {
46
- :bin => 0755,
47
- :lib => 0644,
48
- :ext => 0755, # was: 0555,
49
- :data => 0644,
50
- :conf => 0644,
51
- :doc => 0644,
52
- }
53
-
54
- attr_accessor :trunk, :template, :options
55
-
56
- def initialize( ins )
57
- super
58
- @trunk = '.' unless @trunk
59
- @spec = parse( @template )
60
- @transfer = Hash.new { |h,k| h[k] = [] }
61
- end
62
-
63
- #--
64
- # TODO use shellwords
65
- #++
66
- def parse( spec )
67
- lines = spec.strip.split("\n")
68
- lines.each { |line|
69
- words = line.strip.split(/\s+/)
70
- send( *words )
71
- }
72
- end
73
-
74
- # substitute variables
75
- def vsub( str )
76
- return nil if str.nil?
77
- str = str.gsub( '$version', @options[:version].to_s )
78
- str = str.gsub( '$name', @options[:name].to_s )
79
- str
80
- end
81
-
82
- # Return the installation directory.
83
- def dir( kind, mode=:site )
84
- case mode
85
- when :site
86
- SITE_DIRS[ kind ]
87
- when :vendor
88
- VEND_DIRS[ kind ]
89
- else
90
- raise ArgumentError, "unknown mode -- #{mode}"
91
- end
92
- end
93
-
94
- # Return installation prefix.
95
- def prefix( kind )
96
- Config::CONFIG["prefix"]
97
- end
98
-
99
- #--
100
- # DSL methods for setting installation spec.
101
- #++
102
-
103
- # Setup a lib installation transfer.
104
- def lib( from, glob, to )
105
- to = '' if to == '.'
106
- @transfer[:lib] << { :from=>vsub(from), :glob=>vsub(glob), :to=>vsub(to) }
107
- end
108
-
109
- # Setup a bin installation transfer.
110
- def bin( from, glob, to )
111
- to = '' if to == '.'
112
- @transfer[:bin] << { :from=>vsub(from), :glob=>vsub(glob), :to=>vsub(to) }
113
- end
114
-
115
- # Compile script and write to install file (install.rb).
116
-
117
- def compile_and_write
118
- script = ""
119
- script << "# INSTALL SCRIPT\n"
120
- script << "# Generated by Reap\n"
121
- script << "# #{Time.now}\n"
122
- script << "\n"
123
- script << compile
124
- script << "\n"
125
- script << "# END"
126
-
127
- write( script )
128
- end
129
-
130
- alias_method :call, :compile_and_write
131
-
132
- private
133
-
134
- # Compile installation instructions.
135
-
136
- def compile
137
- mkdirp = []
138
- script = ''
139
- Dir.chdir( @trunk ) do
140
- KINDS.each { |kind|
141
- @transfer[kind].each { |trans|
142
- next unless File.directory?( trans[:from] )
143
- files = []
144
- Dir.chdir( trans[:from] ) {
145
- files = Dir.glob( trans[:glob] ).reject { |f| File.directory?( f ) }
146
- }
147
- files.each { |file|
148
- f = File.join( trans[:from], file )
149
- t = File.join( prefix(kind), dir(kind), trans[:to], file )
150
- m = MODES[kind]
151
- d = File.dirname(t)
152
- unless mkdirp.include?(d)
153
- script << "mkdir_p '%s'\n" % d
154
- mkdirp << d
155
- end
156
- script << "install '%s', '%s', :mode=>%o\n" % [ f, t, m ]
157
- }
158
- }
159
- }
160
- end
161
- script
162
- end
163
-
164
- def write( script )
165
- install_file = File.join( @trunk, 'install.rb' )
166
- if File.file?( install_file )
167
- script_template = File.read( install_file )
168
- script = script_template.gsub(/\# INSTALL SCRIPT.*\# END/, script)
169
- end
170
- File.open( install_file, 'w+' ) do |f|
171
- f << script
172
- end
173
- end
174
- end
175
-
176
- end
177
-
178
- end #module Reap