tap 0.12.4 → 0.17.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. data/History +34 -0
  2. data/README +62 -41
  3. data/bin/tap +36 -40
  4. data/cmd/console.rb +14 -6
  5. data/cmd/manifest.rb +62 -58
  6. data/cmd/run.rb +49 -31
  7. data/doc/API +84 -0
  8. data/doc/Class Reference +83 -115
  9. data/doc/Examples/Command Line +36 -0
  10. data/doc/Examples/Workflow +40 -0
  11. data/lib/tap/app.rb +293 -214
  12. data/lib/tap/app/node.rb +43 -0
  13. data/lib/tap/app/queue.rb +77 -0
  14. data/lib/tap/app/stack.rb +16 -0
  15. data/lib/tap/app/state.rb +22 -0
  16. data/lib/tap/constants.rb +2 -2
  17. data/lib/tap/env.rb +400 -314
  18. data/lib/tap/env/constant.rb +227 -0
  19. data/lib/tap/env/gems.rb +63 -0
  20. data/lib/tap/env/manifest.rb +89 -0
  21. data/lib/tap/env/minimap.rb +292 -0
  22. data/lib/tap/{support → env}/string_ext.rb +2 -2
  23. data/lib/tap/exe.rb +113 -125
  24. data/lib/tap/join.rb +175 -0
  25. data/lib/tap/joins.rb +9 -0
  26. data/lib/tap/joins/switch.rb +44 -0
  27. data/lib/tap/joins/sync.rb +99 -0
  28. data/lib/tap/root.rb +100 -491
  29. data/lib/tap/root/utils.rb +220 -0
  30. data/lib/tap/{support → root}/versions.rb +31 -29
  31. data/lib/tap/schema.rb +248 -0
  32. data/lib/tap/schema/parser.rb +413 -0
  33. data/lib/tap/schema/utils.rb +82 -0
  34. data/lib/tap/support/intern.rb +19 -6
  35. data/lib/tap/support/templater.rb +8 -3
  36. data/lib/tap/task.rb +175 -171
  37. data/lib/tap/tasks/dump.rb +58 -0
  38. data/lib/tap/tasks/load.rb +62 -0
  39. metadata +30 -73
  40. data/cmd/destroy.rb +0 -27
  41. data/cmd/generate.rb +0 -27
  42. data/doc/Command Reference +0 -105
  43. data/doc/Syntax Reference +0 -234
  44. data/doc/Tutorial +0 -348
  45. data/lib/tap/dump.rb +0 -142
  46. data/lib/tap/file_task.rb +0 -384
  47. data/lib/tap/generator/arguments.rb +0 -13
  48. data/lib/tap/generator/base.rb +0 -176
  49. data/lib/tap/generator/destroy.rb +0 -60
  50. data/lib/tap/generator/generate.rb +0 -93
  51. data/lib/tap/generator/generators/command/command_generator.rb +0 -21
  52. data/lib/tap/generator/generators/command/templates/command.erb +0 -32
  53. data/lib/tap/generator/generators/config/config_generator.rb +0 -98
  54. data/lib/tap/generator/generators/generator/generator_generator.rb +0 -37
  55. data/lib/tap/generator/generators/generator/templates/task.erb +0 -27
  56. data/lib/tap/generator/generators/generator/templates/test.erb +0 -26
  57. data/lib/tap/generator/generators/root/root_generator.rb +0 -84
  58. data/lib/tap/generator/generators/root/templates/MIT-LICENSE +0 -22
  59. data/lib/tap/generator/generators/root/templates/README +0 -14
  60. data/lib/tap/generator/generators/root/templates/Rakefile +0 -84
  61. data/lib/tap/generator/generators/root/templates/Rapfile +0 -11
  62. data/lib/tap/generator/generators/root/templates/gemspec +0 -27
  63. data/lib/tap/generator/generators/root/templates/test/tap_test_helper.rb +0 -3
  64. data/lib/tap/generator/generators/task/task_generator.rb +0 -25
  65. data/lib/tap/generator/generators/task/templates/task.erb +0 -14
  66. data/lib/tap/generator/generators/task/templates/test.erb +0 -19
  67. data/lib/tap/generator/manifest.rb +0 -20
  68. data/lib/tap/generator/preview.rb +0 -69
  69. data/lib/tap/load.rb +0 -64
  70. data/lib/tap/spec.rb +0 -41
  71. data/lib/tap/support/aggregator.rb +0 -65
  72. data/lib/tap/support/audit.rb +0 -333
  73. data/lib/tap/support/constant.rb +0 -143
  74. data/lib/tap/support/constant_manifest.rb +0 -126
  75. data/lib/tap/support/dependencies.rb +0 -54
  76. data/lib/tap/support/dependency.rb +0 -44
  77. data/lib/tap/support/executable.rb +0 -198
  78. data/lib/tap/support/executable_queue.rb +0 -125
  79. data/lib/tap/support/gems.rb +0 -43
  80. data/lib/tap/support/join.rb +0 -144
  81. data/lib/tap/support/joins.rb +0 -12
  82. data/lib/tap/support/joins/switch.rb +0 -27
  83. data/lib/tap/support/joins/sync_merge.rb +0 -38
  84. data/lib/tap/support/manifest.rb +0 -171
  85. data/lib/tap/support/minimap.rb +0 -90
  86. data/lib/tap/support/node.rb +0 -176
  87. data/lib/tap/support/parser.rb +0 -450
  88. data/lib/tap/support/schema.rb +0 -385
  89. data/lib/tap/support/shell_utils.rb +0 -67
  90. data/lib/tap/test.rb +0 -77
  91. data/lib/tap/test/assertions.rb +0 -38
  92. data/lib/tap/test/env_vars.rb +0 -29
  93. data/lib/tap/test/extensions.rb +0 -73
  94. data/lib/tap/test/file_test.rb +0 -362
  95. data/lib/tap/test/file_test_class.rb +0 -15
  96. data/lib/tap/test/regexp_escape.rb +0 -87
  97. data/lib/tap/test/script_test.rb +0 -46
  98. data/lib/tap/test/script_tester.rb +0 -115
  99. data/lib/tap/test/subset_test.rb +0 -260
  100. data/lib/tap/test/subset_test_class.rb +0 -99
  101. data/lib/tap/test/tap_test.rb +0 -109
  102. data/lib/tap/test/utils.rb +0 -231
data/cmd/run.rb CHANGED
@@ -11,24 +11,22 @@
11
11
  #
12
12
 
13
13
  env = Tap::Env.instance
14
- app = Tap::App.instance
14
+ app = Tap::App.new
15
15
 
16
16
  #
17
- # divide argv
17
+ # parse argv
18
18
  #
19
19
 
20
+ # separate out argv schema
20
21
  argv = []
21
- break_regexp = Tap::Support::Parser::BREAK
22
+ break_regexp = Tap::Schema::Parser::BREAK
22
23
  while !ARGV.empty? && ARGV[0] !~ break_regexp
23
24
  argv << ARGV.shift
24
25
  end
25
26
 
26
- #
27
- # handle options
28
- #
29
-
30
- dump = false
31
- ConfigParser.new do |opts|
27
+ # parse options
28
+ schemas = []
29
+ ConfigParser.new(app.config) do |opts|
32
30
  opts.separator ""
33
31
  opts.separator "configurations:"
34
32
 
@@ -45,42 +43,62 @@ ConfigParser.new do |opts|
45
43
  Tap::App.lazydoc.resolve
46
44
  puts Lazydoc.usage(__FILE__)
47
45
  puts opts
48
- exit
46
+ exit(0)
49
47
  end
50
48
 
51
49
  opts.on('-T', '--manifest', 'Print a list of available tasks') do
52
- puts env.summarize(:tasks)
53
- exit
50
+ tasks = env.manifest(:task)
51
+ tasks_found = !tasks.all_empty?
52
+
53
+ middleware = env.manifest(:middleware)
54
+ middleware_found = !middleware.all_empty?
55
+
56
+ if tasks_found
57
+ puts "=== tasks ===" if middleware_found
58
+ puts tasks.summarize
59
+ end
60
+
61
+ if middleware_found
62
+ puts "=== middleware ===" if tasks_found
63
+ puts middleware.summarize
64
+ end
65
+
66
+ exit(0)
54
67
  end
55
68
 
56
- opts.on("-w", "--workflow FILE", "Build the workflow file") do |path|
69
+ opts.on('-m', '--middleware MIDDLEWARE', 'Specify app middleware') do |key|
70
+ middleware = env[:middleware][key] or raise("unknown middleware: #{key}")
71
+ app.use(middleware)
72
+ end
73
+
74
+ opts.on("-s", "--schema FILE", "Build the schema file") do |path|
57
75
  unless File.exists?(path)
58
- puts "No such file or directory - #{path}"
59
- puts "(did you mean 'tap run -- #{path}'?)"
60
- exit
76
+ puts "No such schema file - #{path}"
77
+ exit(1)
61
78
  end
62
-
63
- schema = Tap::Support::Schema.load_file(path)
64
- env.build(schema, app)
79
+
80
+ schemas << Tap::Schema.load_file(path)
65
81
  end
66
82
 
67
- end.parse!(argv, app.config)
83
+ end.parse!(argv, :clear_config => false, :add_defaults => false)
68
84
 
69
85
  #
70
- # build and run the argv
86
+ # build and run
71
87
  #
72
88
 
73
- schema = Tap::Support::Schema.parse(ARGV)
74
- env.build(schema, app)
75
- ARGV.replace(argv)
76
-
77
- if app.queue.empty?
78
- puts "no task specified"
79
- unless ARGV.empty?
89
+ begin
90
+ # parse argv schema
91
+ schemas << Tap::Schema.parse(ARGV)
92
+ ARGV.replace(argv)
93
+
94
+ env.run(schemas, app)
95
+ rescue
96
+ raise if $DEBUG
97
+ puts $!.message
98
+ if $!.message == "no nodes specified" && !ARGV.empty?
80
99
  puts "(did you mean 'tap run -- #{ARGV.join(' ')}'?)"
81
100
  end
82
- exit
101
+ exit(1)
83
102
  end
84
103
 
85
- env.set_signals
86
- app.run
104
+ exit(0)
data/doc/API ADDED
@@ -0,0 +1,84 @@
1
+ = Application Programming Interface
2
+
3
+ (Note these are all currently provisional.)
4
+
5
+ == Tap::App
6
+
7
+ Applications require the following API for nodes, joins, and middleware.
8
+
9
+ ==== Node
10
+
11
+ Note the signature for call can be modified as necessary.
12
+
13
+ call(*inputs) any return is allowed
14
+ dependencies() returns an array of dependency nodes
15
+ joins() returns an array of joins
16
+
17
+ ==== Dependency
18
+
19
+ Same as a node, but call must be able to execute without inputs. For instance
20
+ signatures like call(), call(a=:default), or call(*inputs) are allowed, but
21
+ call(a, b, c) is not.
22
+
23
+ ==== Join
24
+
25
+ call(result) any return is allowed
26
+
27
+ ==== Middleware
28
+
29
+ Middleware.new(stack) returns an instance of middleware
30
+ call(node, inputs=[]) any return is allowed
31
+ stack() returns the original stack
32
+
33
+ Note the middleware API is essentially the same as for {Rack}[http://rack.rubyforge.org/].
34
+
35
+ == Tap::Schema
36
+
37
+ Schema describe workflows as data. To build a workflow from a schema, workflow classes need to instantiate themselves using the schema data. The <tt>parse</tt> and <tt>instantiate</tt> methods are provided to do so.
38
+
39
+ WorkflowClass.parse(argv=ARGV, app=App.instance)
40
+ WorkflowClass.instantiate(argh, app=App.instance)
41
+
42
+ As implied in by the inputs, <tt>parse</tt> instantiates from an array, while <tt>instantiate</tt> instantiates from a hash with symbol keys. If <tt>parse</tt> receives a string, it must be able to convert it to an array (ex using Shellwords).
43
+
44
+ How the class actually performs the instantiation is up to the class but typically parse creates a hash and calls instantiate.
45
+
46
+ ==== Tap::Task (and subclasses)
47
+
48
+ Parse and instantiate must return: [instance, args]
49
+
50
+ ==== Tap::Join (and subclasses)
51
+
52
+ Parse and instantiate must return: [inputs, outputs, instance]
53
+
54
+ == Tap::Env
55
+
56
+ Envs identify resources by a constant attribute using Tap::Env#constant_manifest. For instance this identifies the Sample node:
57
+
58
+ [sample.rb]
59
+
60
+ # ::node summary
61
+ # description
62
+ class Sample < Tap::Node
63
+ end
64
+
65
+ Here the constant name is inferred using the filepath. A more formal declaration allows resources to be placed in files that are not named after the resource:
66
+
67
+ [alt.rb]
68
+
69
+ # Sample::node summary
70
+ # description
71
+ class Sample < Tap::Node
72
+ end
73
+
74
+ Joins are similarly identified by <tt>::join</tt>. Resources intended to be discovered by constant_manifest must map the attribute documentation to the class 'desc' method.
75
+
76
+ Sample::desc.summary # => "summary"
77
+ Sample::desc.to_s # => "description"
78
+
79
+ The easiest way to do so is with a {lazy_attr}[link:lazydoc/classes/Lazydoc/Attributes.html].
80
+
81
+ # ::resource
82
+ class Resource
83
+ lazy_attr :desc, 'resource'
84
+ end
@@ -11,19 +11,16 @@ http://tap.rubyforge.org/images/Method.png
11
11
 
12
12
  Tasks are fundamentally just a method, simply a block of code.
13
13
 
14
- ==== Tap::Support::Executable
14
+ ==== Tap::App::Node
15
15
 
16
- http://tap.rubyforge.org/images/Executable.png
16
+ http://tap.rubyforge.org/images/Node.png
17
17
 
18
- Executable essentially wraps a method and adds support for dependencies, joins,
19
- and auditing. Executables are the nodes in a workflow. Any Executable may be
20
- joined to another Executable, enqued, and run by an App. To wrap a method,
21
- Executable extends an object and defines which method on the object is 'executable'.
22
- Any method may be made executable, and so any method can participate in a workflow
23
- (see Object#_method).
24
-
25
- Tasks are constructed such that <tt>process</tt> is the executable method, hence
26
- <tt>process</tt> is the standard method overridden in Task subclasses.
18
+ Nodes are the building blocks of workflows. Nodes are essentially a method
19
+ wrapped with support for dependencies and joins. Any object responding to
20
+ <tt>call</tt> may be turned into a node, so any method may be used in a
21
+ workflow. Tasks are constructed so that <tt>call</tt> forwards arguments to
22
+ <tt>process</tt>. This allows hooks and callbacks to be inserted as needed in
23
+ subclasses.
27
24
 
28
25
  ==== {Configurable}[http://tap.rubyforge.org/configurable/]
29
26
 
@@ -104,7 +101,7 @@ simply validated.
104
101
 
105
102
  vc.array = "string" # !> ValidationError
106
103
 
107
- Validation blocks sometimes imply metadata. For instance <tt>c.flag</tt> makes
104
+ Validation blocks sometimes imply metadata. For instance <tt>c.flag</tt> makes
108
105
  a config into a flag on the command line.
109
106
 
110
107
  ==== {Lazydoc}[http://tap.rubyforge.org/lazydoc]
@@ -134,12 +131,12 @@ For example:
134
131
  lazydoc['Const::Name']['key'].comment # => "This is an extended, multiline comment."
135
132
 
136
133
  Lazydoc can also register specific lines for documentation, like method
137
- definitions or configurations. Tap uses Lazydoc to identify files that contain
134
+ definitions or configurations. Tap uses Lazydoc to identify files that contain
138
135
  tasks and generators, to extract config documentation, and to infer the args
139
- arguments a task receives. Here is an example of information gleaned from a
136
+ arguments a task receives. Here is an example of information gleaned from a
140
137
  task definition:
141
138
 
142
- # Sample::manifest a summary of the task
139
+ # Sample::task a summary of the task
143
140
  class Sample < Tap::Task
144
141
  config :key, 'value' # a simple configuration
145
142
 
@@ -147,7 +144,7 @@ task definition:
147
144
  end
148
145
  end
149
146
 
150
- Sample::manifest.to_s # => "a summary of the task"
147
+ Sample::desc.to_s # => "a summary of the task"
151
148
  Sample::args.to_s # => "A B='B' C..."
152
149
 
153
150
  key = Sample.configurations[:key]
@@ -160,12 +157,13 @@ information.
160
157
 
161
158
  http://tap.rubyforge.org/images/Task.png
162
159
 
163
- Tasks are the bread and butter of Tap. Tasks act as the nodes in workflows and,
164
- using the Configurable and Lazydoc metadata, map to the command line as miniature
165
- applications. That said, tasks are perfectly useful as ordinary objects.
160
+ Tasks are the bread and butter of Tap. Tasks act as the nodes in workflows
161
+ and, using the Configurable and Lazydoc metadata, map to the command line as
162
+ miniature applications. That said, tasks are perfectly useful as ordinary
163
+ objects.
166
164
 
167
- When subclassing is too much, tasks may be interned with a block that effectively
168
- replaces <tt>process</tt>:
165
+ When subclassing is too much, tasks may be interned with a block that
166
+ effectively replaces <tt>process</tt>:
169
167
 
170
168
  t = Tap::Task.intern {|task| 1 + 2 }
171
169
  t.process # => 3
@@ -194,91 +192,68 @@ and imperative workflows.
194
192
  end
195
193
  t1.sequence(t2)
196
194
 
197
- Results are aggregated into the underlying Tap::App.
198
-
199
- t1.enq('input')
195
+ results = []
196
+ t2.on_complete do |result|
197
+ results << result
198
+ end
200
199
 
200
+ Results may be collected by the underlying Tap::App.
201
+
201
202
  app = Tap::App.instance
203
+ app.enq(t1)
202
204
  app.run
203
205
 
204
206
  runlist # => [t0, t1, t2]
205
- app.results(t2) # => ["input:one:two"]
206
-
207
- Tracking the evolution of a result through a workflow can get complex. Tap
208
- audits workflows to help. Setting the names of the tasks will identify them
209
- in an audit dump:
210
-
211
- t1.name = 'un'
212
- t2.name = 'deux'
213
-
214
- app._results(t2)[0].dump
215
- # =>
216
- # o-[] "input"
217
- # o-[un] "input:one"
218
- # o-[deux] "input:one:two"
207
+ results # => ["input:one:two"]
219
208
 
220
209
  == Apps
221
210
 
222
- ==== Tap::Root
223
-
224
- http://tap.rubyforge.org/images/Root.png
225
-
226
- A Root represents the base of a directory structure. Roots allow you to alias
227
- relative paths, basically allowing you to develop code for a conceptual
228
- directory structure that can be defined later.
211
+ ==== Tap::App::Queue
229
212
 
230
- root = Tap::Root.new '/path/to/root'
231
- root.root # => '/path/to/root'
232
- root['config'] # => '/path/to/root/config'
233
- root.filepath('config', 'sample.yml') # => '/path/to/root/config/sample.yml'
213
+ http://tap.rubyforge.org/images/Queue.png
234
214
 
235
- While simple, this ability to alias paths is useful, powerful, and forms the
236
- basis of the Tap execution environment.
237
-
238
- ==== Tap::Support::ExecutableQueue
239
-
240
- http://tap.rubyforge.org/images/ExecutableQueue.png
241
-
242
- Apps coordinate the execution of tasks through a queue. The queue is just a
243
- stack of Executable objects, basically methods, and the inputs to those
244
- methods; during a run the enqued methods are sequentially executed with the
245
- inputs.
215
+ Apps coordinate the execution of tasks through a queue. The queue is just a
216
+ stack of nodes and inputs; during a run the nodes are sequentially executed
217
+ with the inputs.
246
218
 
247
219
  === Tap::App
248
220
 
249
221
  http://tap.rubyforge.org/images/App.png
250
222
 
251
- Instances of Tap::App coordinate the execution of tasks.
223
+ Instances of Tap::App coordinate the execution of nodes.
252
224
 
253
225
  Task initialization requires an App, which is by default Tap::App.instance.
254
226
  Tasks use their app for logging, dependency-resolution, checks, and to enque
255
- themselves. Normally a script will only need and use a single instance (often
256
- Tap::App.instance), but there is no reason why multiple instances could not be
257
- used.
227
+ themselves.
258
228
 
259
- log = StringIO.new
260
- app = Tap::App.instance
261
- app.logger = Logger.new(log)
262
- app.logger.formatter = lambda do |severity, time, progname, msg|
263
- " %s %s: %s\n" % [severity[0,1], progname, msg]
264
- end
265
-
266
- t = Tap::Task.intern {|task, *inputs| inputs }
267
- t.log 'action', 'to app'
268
- log.string # => " I action: to app\n"
269
-
229
+ results = []
230
+ app = Tap::App.new {|result| results << result }
231
+ t = app.task {|task, *inputs| inputs }
270
232
  t.enq(1)
271
233
  t.enq(2,3)
272
234
 
273
235
  app.queue.to_a # => [[t, [1]], [t, [2,3]]]
274
236
  app.run
275
- app.results(t) # => [[1], [2,3]]
276
-
277
- As shown, apps also aggregate results for tasks, which is important for
278
- divergent workflows.
237
+ results # => [[1], [2,3]]
279
238
 
280
239
  == Envs
281
240
 
241
+ ==== Tap::Root
242
+
243
+ http://tap.rubyforge.org/images/Root.png
244
+
245
+ A Root represents the base of a directory structure. Roots allow you to alias
246
+ relative paths, basically allowing you to develop code for a conceptual
247
+ directory structure that can be defined later.
248
+
249
+ root = Tap::Root.new '/path/to/root'
250
+ root.root # => '/path/to/root'
251
+ root['config'] # => '/path/to/root/config'
252
+ root.path('config', 'sample.yml') # => '/path/to/root/config/sample.yml'
253
+
254
+ While simple, this ability to alias paths is useful, powerful, and forms the
255
+ basis of the Tap environment.
256
+
282
257
  ==== Tap::Env
283
258
 
284
259
  http://tap.rubyforge.org/images/Env.png
@@ -312,61 +287,54 @@ http://tap.rubyforge.org/images/Nested-Env.png
312
287
 
313
288
  To prevent conflicts between similarly-named resources under different Envs,
314
289
  Env allows selection of Envs, also by minimized paths. Say you installed the
315
- 'sample_tasks' gem.
290
+ 'tap-tasks' gem.
316
291
 
317
292
  % tap manifest
318
293
  --------------------------------------------------------------------------------
319
- Desktop: (/Users/username/Desktop)
294
+ Desktop: (/Users/username/Desktop)
320
295
  --------------------------------------------------------------------------------
321
- sample_tasks: (/Library/Ruby/Gems/1.8/gems/sample_tasks-0.10.0)
296
+ tap-tasks: (/Library/Ruby/Gems/1.8/gems/tap-tasks-0.1.0)
322
297
  tasks
323
- concat (lib/tap/tasks/concat.rb)
324
- copy (lib/tap/tasks/copy.rb)
325
- grep (lib/tap/tasks/grep.rb)
326
- print_tree (lib/tap/tasks/print_tree.rb)
298
+ argv (lib/tap/tasks/argv.rb)
299
+ inspect (lib/tap/tasks/dump/inspect.rb)
300
+ dump/yaml (lib/tap/tasks/dump/yaml.rb)
301
+ load/yaml (lib/tap/tasks/load/yaml.rb)
327
302
  --------------------------------------------------------------------------------
328
- tap: (/Library/Ruby/Gems/1.8/gems/tap-0.10.8)
329
- generators
330
- command (lib/tap/generator/generators/command/command_generator.rb)
331
- config (lib/tap/generator/generators/config/config_generator.rb)
332
- file_task (lib/tap/generator/generators/file_task/file_task_generator.rb)
333
- generator (lib/tap/generator/generators/generator/generator_generator.rb)
334
- root (lib/tap/generator/generators/root/root_generator.rb)
335
- task (lib/tap/generator/generators/task/task_generator.rb)
303
+ tap: (/Library/Ruby/Gems/1.8/gems/tap-0.12.4)
336
304
  commands
337
- console (cmd/console.rb)
338
- destroy (cmd/destroy.rb)
339
- generate (cmd/generate.rb)
340
- manifest (cmd/manifest.rb)
341
- run (cmd/run.rb)
342
- server (cmd/server.rb)
305
+ console (cmd/console.rb)
306
+ destroy (cmd/destroy.rb)
307
+ generate (cmd/generate.rb)
308
+ manifest (cmd/manifest.rb)
309
+ run (cmd/run.rb)
310
+ generators
311
+ command (lib/tap/generator/generators/command/command_generator.rb)
312
+ config (lib/tap/generator/generators/config/config_generator.rb)
313
+ generator (lib/tap/generator/generators/generator/generator_generator.rb)
314
+ root (lib/tap/generator/generators/root/root_generator.rb)
315
+ task (lib/tap/generator/generators/task/task_generator.rb)
343
316
  tasks
344
- dump (lib/tap/tasks/dump.rb)
345
- load (lib/tap/tasks/load.rb)
346
- rake (lib/tap/tasks/rake.rb)
317
+ dump (lib/tap/dump.rb)
318
+ load (lib/tap/load.rb)
347
319
  --------------------------------------------------------------------------------
348
320
 
349
321
  Desktop
350
- |- sample_tasks
322
+ |- tap-tasks
351
323
  `- tap
352
324
 
353
- In this printout of the manifest, you can see the resources available to tap on
354
- the Desktop (none), in the sample_tasks gem, and in tap itself. Since there
355
- aren't any conflicts among tasks, the minipath of any of the tasks is sufficient
356
- for identification:
325
+ In this printout of the manifest, you can see the resources available to tap
326
+ on the Desktop (none), in the tap-tasks gem, and in tap itself. In most cases
327
+ the minipath of any of the tasks is sufficient for identification:
357
328
 
358
- % tap run -- print_tree
359
- % tap run -- dump
329
+ % tap run -- load --: dump/yaml
360
330
 
361
331
  If there were a conflict, you'd have to specify the environment minipath like:
362
332
 
363
- % tap run -- sample_tasks:print_tree
364
- % tap run -- tap:dump
333
+ % tap run -- tap:load --: tap-tasks:dump/yaml
365
334
 
366
335
  ==== Tap::Exe
367
336
 
368
337
  http://tap.rubyforge.org/images/Run-Env.png
369
338
 
370
- Tap::Exe adds several configurations (ex before/after) which only get loaded
371
- for the present directory, and methods for building and executing workflows
372
- from command line inputs.
339
+ Tap::Exe adds methods for building and executing workflows from command line
340
+ inputs.