tap-suite 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. data/History +8 -0
  2. data/MIT-LICENSE +17 -15
  3. data/README +4 -15
  4. data/lib/tap/suite/version.rb +9 -0
  5. metadata +14 -13
  6. data/doc/Tutorial +0 -344
data/History CHANGED
@@ -1,3 +1,11 @@
1
+ == 0.4.0 / 2009-12-05
2
+
3
+ Updated versions to utilize Tap-0.19.0 and related libraries.
4
+
5
+ == 0.3.0 / 2009-06-17
6
+
7
+ Updated versions to utilize Tap-0.18.0 and related libraries.
8
+
1
9
  == 0.2.0 / 2009-05-25
2
10
 
3
11
  Updated versions to utilize Tap-0.17.0 and related libraries.
@@ -1,19 +1,21 @@
1
1
  Copyright (c) 2009, Regents of the University of Colorado.
2
2
 
3
- Permission is hereby granted, free of charge, to any person obtaining a copy of this
4
- software and associated documentation files (the "Software"), to deal in the Software
5
- without restriction, including without limitation the rights to use, copy, modify, merge,
6
- publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
7
- to whom the Software is furnished to do so, subject to the following conditions:
3
+ Copyright (c) 2009, Simon Chiang.
8
4
 
9
- The above copyright notice and this permission notice shall be included in all copies or
10
- substantial portions of the Software.
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
11
 
12
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
13
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
14
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
15
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
16
- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
17
- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
19
- OTHER DEALINGS IN THE SOFTWARE.
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README CHANGED
@@ -8,41 +8,30 @@ workflows.
8
8
  == Description
9
9
 
10
10
  {Tap}[http://tap.rubyforge.org] is a configurable, distributable workflow
11
- framework. Several related modules apply Tap in particularly useful ways. The
12
- Tap-Suite is simply a collection of those gems, facilitating installation and
13
- update.
11
+ framework. Tap-Suite is a collection of gems facilitating development with
12
+ Tap.
14
13
 
15
14
  Currently these modules are included:
16
15
 
17
16
  * {Tap}[http://tap.rubyforge.org/rdoc]
18
17
  * {Rap}[http://tap.rubyforge.org/rap]
19
18
  * {Tap-Generators}[http://tap.rubyforge.org/tap-gen]
20
- * {Tap-Server}[http://tap.rubyforge.org/tap-server]
21
19
  * {Tap-Tasks}[http://tap.rubyforge.org/tap-tasks]
22
20
  * {Tap-Test}[http://tap.rubyforge.org/tap-test]
23
21
 
24
22
  Check out these links for documentation, development, and bug tracking.
25
23
 
26
24
  * Website[http://tap.rubyforge.org]
27
- * Lighthouse[http://bahuvrihi.lighthouseapp.com/projects/9908-tap-task-application/tickets]
28
25
  * Github[http://github.com/bahuvrihi/tap/tree/master]
29
26
  * {Google Group}[http://groups.google.com/group/ruby-on-tap]
30
27
 
31
28
  == Installation
32
29
 
33
- {Tap Suite}[http://tap.rubyforge.org/tap-suite] is available as a gem on RubyForge[http://rubyforge.org/projects/tap]. Use:
30
+ Tap Suite is available as a gem on Gemcutter[http://gemcutter.org/gems/tap-suite].
34
31
 
35
32
  % gem install tap-suite
36
33
 
37
- Tap requires an updated version of RubyGems[http://docs.rubygems.org/] (>= 1.2.0). To check the version and update RubyGems:
38
-
39
- % gem --version
40
- % gem --update system
41
-
42
34
  == Info
43
35
 
44
- Copyright (c) 2009, Regents of the University of Colorado.
45
- Developer:: {Simon Chiang}[http://bahuvrihi.wordpress.com], {Biomolecular Structure Program}[http://biomol.uchsc.edu/], {Hansen Lab}[http://hsc-proteomics.uchsc.edu/hansenlab/]
46
- Support:: CU Denver School of Medicine Deans Academic Enrichment Fund
36
+ Developer:: {Simon Chiang}[http://bahuvrihi.wordpress.com]
47
37
  License:: {MIT-Style}[link:files/MIT-LICENSE.html]
48
-
@@ -0,0 +1,9 @@
1
+ module Tap
2
+ module Suite
3
+ MAJOR = 0
4
+ MINOR = 3
5
+ TINY = 0
6
+
7
+ VERSION="#{MAJOR}.#{MINOR}.#{TINY}"
8
+ end
9
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tap-suite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simon Chiang
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-05-25 00:00:00 -06:00
12
+ date: 2009-12-05 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: 0.17.0
23
+ version: 0.19.0
24
24
  version:
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rap
@@ -30,7 +30,7 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 0.13.0
33
+ version: 0.15.0
34
34
  version:
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: tap-gen
@@ -40,7 +40,7 @@ dependencies:
40
40
  requirements:
41
41
  - - ">="
42
42
  - !ruby/object:Gem::Version
43
- version: 0.1.0
43
+ version: 0.3.0
44
44
  version:
45
45
  - !ruby/object:Gem::Dependency
46
46
  name: tap-server
@@ -50,7 +50,7 @@ dependencies:
50
50
  requirements:
51
51
  - - ">="
52
52
  - !ruby/object:Gem::Version
53
- version: 0.1.0
53
+ version: 0.6.0
54
54
  version:
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: tap-tasks
@@ -60,7 +60,7 @@ dependencies:
60
60
  requirements:
61
61
  - - ">="
62
62
  - !ruby/object:Gem::Version
63
- version: 0.2.0
63
+ version: 0.5.0
64
64
  version:
65
65
  - !ruby/object:Gem::Dependency
66
66
  name: tap-test
@@ -70,7 +70,7 @@ dependencies:
70
70
  requirements:
71
71
  - - ">="
72
72
  - !ruby/object:Gem::Version
73
- version: 0.1.0
73
+ version: 0.3.0
74
74
  version:
75
75
  description:
76
76
  email: simon.a.chiang@gmail.com
@@ -82,14 +82,15 @@ extra_rdoc_files:
82
82
  - README
83
83
  - MIT-LICENSE
84
84
  - History
85
- - doc/Tutorial
86
85
  files:
86
+ - lib/tap/suite/version.rb
87
87
  - README
88
88
  - MIT-LICENSE
89
89
  - History
90
- - doc/Tutorial
91
- has_rdoc: false
90
+ has_rdoc: true
92
91
  homepage: http://tap.rubyforge.org
92
+ licenses: []
93
+
93
94
  post_install_message:
94
95
  rdoc_options:
95
96
  - --main
@@ -115,9 +116,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
115
116
  requirements: []
116
117
 
117
118
  rubyforge_project: tap
118
- rubygems_version: 1.3.1
119
+ rubygems_version: 1.3.5
119
120
  signing_key:
120
- specification_version: 2
121
+ specification_version: 3
121
122
  summary: A collection of modules to rapidly develop Tap workflows
122
123
  test_files: []
123
124
 
@@ -1,344 +0,0 @@
1
- = Tap (Task Application)
2
-
3
- Tap is a framework for creating configurable, distributable workflows.
4
- Although scalable for complex workflows, at it simplest Tap works like a
5
- supercharged rake. Using the rap executable, you can declare tasks using a
6
- syntax almost identical to rake, but with added support for configurations and
7
- documentation.
8
-
9
- Note: this tutorial spans several modules in the {Tap-Suite}[http://tap.rubyforge.org/tap-suite].
10
- Be sure to install the full suite beforehand.
11
-
12
- % gem install tap-suite
13
-
14
- == Quickstart
15
-
16
- If you've used rake, Tap will be easy to pick up. To get started, make a
17
- Rapfile with a simple task declaration:
18
-
19
- [Rapfile]
20
-
21
- # ::desc your basic goodnight moon task
22
- # Says goodnight with a configurable message.
23
- Rap.task(:goodnight, :obj, :message => 'goodnight') do |task, args|
24
- puts "#{task.message} #{args.obj}\n"
25
- end
26
-
27
- Now from the command line:
28
-
29
- % rap goodnight moon
30
- goodnight moon
31
-
32
- % rap goodnight world --message hello
33
- hello world
34
-
35
- % rap goodnight --help
36
- Goodnight -- your basic goodnight moon task
37
- --------------------------------------------------------------------------------
38
- Says goodnight with a configurable message.
39
- --------------------------------------------------------------------------------
40
- usage: rap goodnight OBJ
41
-
42
- configurations:
43
- --message MESSAGE
44
-
45
- options:
46
- -h, --help Print this help
47
- --config FILE Specifies a config file
48
-
49
- The declaration syntax is obviously similar to rake; configurations are new
50
- but the task-block style is the same, as are inputs. Other rake constructs are
51
- available. Here is a similar goodnight task using dependencies, rake-style.
52
-
53
- [Rapfile]
54
-
55
- # make the declarations available everywhere
56
- include Rap::Declarations
57
-
58
- namespace :example do
59
- task(:say, :message) do |task, args|
60
- print(args.message || 'goodnight')
61
- end
62
-
63
- desc "your basic goodnight moon task"
64
- task({:goodnight => 'example:say'}, :obj) do |task, args|
65
- puts " #{args.obj}\n"
66
- end
67
- end
68
-
69
- And now from the command line:
70
-
71
- % rap goodnight moon
72
- goodnight moon
73
-
74
- % rap goodnight world -- say hello
75
- hello world
76
-
77
- Unlike rake, rap inputs are written out individually and tasks are delimited
78
- by a double-dash. Aside from that, you can see rap is basically a supercharged
79
- rake. Furthermore, rap runs rake. Directly substitute rap for rake on the
80
- command line and your tasks should run as normal (see the Rap {Syntax
81
- Reference}[http://tap.rubyforge.org/rap/files/doc/Syntax%20Reference.html] for
82
- more details).
83
-
84
- However, supercharging rake isn't the point of Tap. Declarations bridge the
85
- gap between rake and tap, but tap itself is a more general framework. To get
86
- at other features like imperative workflows, testing, and distribution, we
87
- have to go beyond rap and take a look at what declarations do.
88
-
89
- Spoiler: declarations make subclasses of Tap::Task.
90
-
91
- == Beyond Rap
92
-
93
- Going back to the first example, lets take a look at how a task declaration
94
- maps to a class definition:
95
-
96
- [Rapfile]
97
-
98
- # ::desc your basic goodnight moon task
99
- # Says goodnight with a configurable message.
100
- Rap.task(:goodnight, :obj, :message => 'goodnight') do
101
- puts "#{task.message} #{args.obj}\n"
102
- end
103
-
104
- Here is a corresponding class:
105
-
106
- # Goodnight::manifest your basic goodnight moon task
107
- # Says goodnight with a configurable message.
108
- class Goodnight < Tap::Task
109
- config :message, 'goodnight'
110
-
111
- def process(obj)
112
- "#{message} #{obj}"
113
- end
114
- end
115
-
116
- The name corresponds to the class, configurations (and dependencies, although
117
- they aren't show) are written out individually, and the block corresponds to
118
- process. There are a few differences, especially relating to process, but for
119
- the moment lets gloss over them and see how Goodnight works.
120
-
121
- goodnight = Goodnight.new
122
- goodnight.message # => 'goodnight'
123
- goodnight.process('moon') # => 'goodnight moon'
124
-
125
- hello = Goodnight.new(:message => 'hello')
126
- hello.message # => 'hello'
127
- hello.process('world') # => 'hello world'
128
-
129
- Totally straightforward. Goodnight stores the default configurations, each
130
- instance has accessors to the configurations, and the defaults may be
131
- overridden during initialization, or later.
132
-
133
- Class definitions allow validation/transformation blocks to be specified for
134
- configurations. These blocks process inputs (ex the string inputs from the
135
- command line), literally defining the writer for a configuration accessor. A
136
- set of standard blocks are available through +c+, an alias for the
137
- {Configurable::Validation}[http://tap.rubyforge.org/configurable/classes/Configurable/Validation.html]
138
- module.
139
-
140
- [lib/goodnight.rb]
141
-
142
- # Goodnight::manifest a fancy goodnight moon task
143
- # Says goodnight with a configurable message.
144
- class Goodnight < Tap::Task
145
- config :message, 'goodnight' # a goodnight message
146
- config :reverse, false, &c.switch # reverses the message
147
- config :n, 1, &c.integer # repeats message n times
148
-
149
- def process(*objects)
150
- msg = "#{reverse == true ? message.reverse : message} " * n
151
- msg + objects.join(', ')
152
- end
153
- end
154
-
155
- A few examples show a validation block in action:
156
-
157
- goodnight = Goodnight.new
158
-
159
- goodnight.n = 10
160
- goodnight.n # => 10
161
-
162
- goodnight.n = "100"
163
- goodnight.n # => 100
164
-
165
- goodnight.n = "not an integer" # !> ValidationError
166
-
167
- Now from the command line:
168
-
169
- % rap goodnight moon --: dump
170
- goodnight moon
171
-
172
- % rap goodnight moon mittens "little toy boat" --: dump
173
- goodnight moon, mittens, little toy boat
174
-
175
- % rap goodnight world --message hello --reverse --n 3 --: dump
176
- olleh olleh olleh world
177
-
178
- % rap goodnight --help
179
- Goodnight -- a fancy goodnight moon task
180
- --------------------------------------------------------------------------------
181
- Says goodnight with a configurable message.
182
- --------------------------------------------------------------------------------
183
- usage: rap goodnight OBJECTS...
184
-
185
- configurations:
186
- --message MESSAGE a goodnight message
187
- --[no-]reverse reverses the message
188
- --n N repeats message n times
189
-
190
- options:
191
- -h, --help Print this help
192
- --config FILE Specifies a config file
193
-
194
- Take a quick look at the documentation. Class definitions map documentation
195
- and, in some cases, metadata to the command line; the configurations now have
196
- comments and reverse is a switch. Rich mapping like this allows tasks to act
197
- as an script interface, not unlike
198
- {OptionParser}[http://www.ruby-doc.org/stdlib/libdoc/optparse/rdoc/classes/OptionParser.html]
199
- (check out the {Configurable}[http://tap.rubyforge.org/configurable/] gem and
200
- specifically
201
- {ConfigParser}[http://tap.rubyforge.org/configurable/classes/ConfigParser.html]
202
- for more details).
203
-
204
- This is a stand-alone goodnight script:
205
-
206
- [goodnight]
207
-
208
- #!/usr/bin/env ruby
209
-
210
- require 'rubygems'
211
- require 'tap'
212
-
213
- # Goodnight::task a goodnight moon script
214
- # Says goodnight with a configurable message.
215
- class Goodnight < Tap::Task
216
- config :message, 'goodnight'
217
-
218
- def process(obj)
219
- puts "#{message} #{obj}\n"
220
- end
221
- end
222
-
223
- instance, args = Goodnight.parse!(ARGV)
224
- instance.execute(*args)
225
-
226
- Now, from the command line:
227
-
228
- % ./goodnight moon
229
- goodnight moon
230
-
231
- % ./goodnight --help
232
- ...
233
-
234
- Tasks may be subclassed, tested, and distributed as usual. No magic, just
235
- convenience.
236
-
237
- == Tap
238
-
239
- Tap comes with two executables, rap and tap. The tap executable is more
240
- verbose than rap for running tasks, but it is more configurable, scalable, and
241
- logically pure. The full suite comes with a number of commands but we'll focus
242
- on generate to make, test, and package a task library. Begin by creating a tap
243
- directory structure and a task:
244
-
245
- % tap generate root sample
246
- % cd sample
247
- % tap generate task goodnight
248
-
249
- Take a look at the task files and you find something like this:
250
-
251
- [lib/goodnight.rb]
252
-
253
- # Goodnight::manifest <replace with manifest summary>
254
- # <replace with command line description>
255
-
256
- # Goodnight Documentation
257
- class Goodnight < Tap::Task
258
-
259
- # <config file documentation>
260
- config :message, 'goodnight' # a sample config
261
-
262
- def process(name)
263
- log message, name
264
- "#{message} #{name}"
265
- end
266
- end
267
-
268
- [test/goodnight_test.rb]
269
-
270
- require File.join(File.dirname(__FILE__), 'tap_test_helper.rb')
271
- require 'goodnight'
272
-
273
- class GoodnightTest < Test::Unit::TestCase
274
- acts_as_tap_test
275
-
276
- def test_goodnight
277
- task = Goodnight.new :message => "goodnight"
278
-
279
- # a simple test
280
- assert_equal({:message => 'goodnight'}, task.config)
281
- assert_equal "goodnight moon", task.process("moon")
282
-
283
- # a more complex test
284
- task.enq("moon")
285
- app.run
286
-
287
- assert_equal ["goodnight moon"], app.results(task)
288
- assert_audit_equal [[nil, "moon"], [task, "goodnight moon"]], app._results(task)[0]
289
- end
290
- end
291
-
292
- Run the test:
293
-
294
- % rap test
295
-
296
- Run the task:
297
-
298
- % rap goodnight moon
299
- I[23:22:19] goodnight moon
300
-
301
- Ok, lets share it. Print the current gemspec manifest:
302
-
303
- % rap print_manifest
304
- true README
305
- Rakefile
306
- lib/goodnight.rb
307
- sample.gemspec
308
- true tap.yml
309
- test/goodnight_test.rb
310
- true test/tap_test_helper.rb
311
- true test/tap_test_suite.rb
312
-
313
- As you can see, this needs an update to include the task file. Open up
314
- sample.gemspec and fix the manifest.
315
-
316
- [sample.gemspec]
317
-
318
- Gem::Specification.new do |s|
319
- s.name = "sample"
320
- s.version = "0.0.1"
321
- s.platform = Gem::Platform::RUBY
322
- s.summary = "sample"
323
- s.require_path = "lib"
324
- s.add_dependency("tap")
325
- s.files = %W{
326
- lib/goodnight.rb
327
- tap.yml
328
- }
329
- end
330
-
331
- Now package the gem and install it (gem may require sudo):
332
-
333
- % rap gem
334
- % gem install pkg/sample-0.0.1.gem
335
-
336
- Now you can say goodnight anywhere, using 'tap run' or rap:
337
-
338
- % cd ~/Desktop
339
- % tap run -- goodnight moon
340
- goodnight moon
341
- % rap goodnight opus
342
- goodnight opus
343
-
344
- And that is that.