tap 0.12.4 → 0.17.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.
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.