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.
- data/History +34 -0
- data/README +62 -41
- data/bin/tap +36 -40
- data/cmd/console.rb +14 -6
- data/cmd/manifest.rb +62 -58
- data/cmd/run.rb +49 -31
- data/doc/API +84 -0
- data/doc/Class Reference +83 -115
- data/doc/Examples/Command Line +36 -0
- data/doc/Examples/Workflow +40 -0
- data/lib/tap/app.rb +293 -214
- data/lib/tap/app/node.rb +43 -0
- data/lib/tap/app/queue.rb +77 -0
- data/lib/tap/app/stack.rb +16 -0
- data/lib/tap/app/state.rb +22 -0
- data/lib/tap/constants.rb +2 -2
- data/lib/tap/env.rb +400 -314
- data/lib/tap/env/constant.rb +227 -0
- data/lib/tap/env/gems.rb +63 -0
- data/lib/tap/env/manifest.rb +89 -0
- data/lib/tap/env/minimap.rb +292 -0
- data/lib/tap/{support → env}/string_ext.rb +2 -2
- data/lib/tap/exe.rb +113 -125
- data/lib/tap/join.rb +175 -0
- data/lib/tap/joins.rb +9 -0
- data/lib/tap/joins/switch.rb +44 -0
- data/lib/tap/joins/sync.rb +99 -0
- data/lib/tap/root.rb +100 -491
- data/lib/tap/root/utils.rb +220 -0
- data/lib/tap/{support → root}/versions.rb +31 -29
- data/lib/tap/schema.rb +248 -0
- data/lib/tap/schema/parser.rb +413 -0
- data/lib/tap/schema/utils.rb +82 -0
- data/lib/tap/support/intern.rb +19 -6
- data/lib/tap/support/templater.rb +8 -3
- data/lib/tap/task.rb +175 -171
- data/lib/tap/tasks/dump.rb +58 -0
- data/lib/tap/tasks/load.rb +62 -0
- metadata +30 -73
- data/cmd/destroy.rb +0 -27
- data/cmd/generate.rb +0 -27
- data/doc/Command Reference +0 -105
- data/doc/Syntax Reference +0 -234
- data/doc/Tutorial +0 -348
- data/lib/tap/dump.rb +0 -142
- data/lib/tap/file_task.rb +0 -384
- data/lib/tap/generator/arguments.rb +0 -13
- data/lib/tap/generator/base.rb +0 -176
- data/lib/tap/generator/destroy.rb +0 -60
- data/lib/tap/generator/generate.rb +0 -93
- data/lib/tap/generator/generators/command/command_generator.rb +0 -21
- data/lib/tap/generator/generators/command/templates/command.erb +0 -32
- data/lib/tap/generator/generators/config/config_generator.rb +0 -98
- data/lib/tap/generator/generators/generator/generator_generator.rb +0 -37
- data/lib/tap/generator/generators/generator/templates/task.erb +0 -27
- data/lib/tap/generator/generators/generator/templates/test.erb +0 -26
- data/lib/tap/generator/generators/root/root_generator.rb +0 -84
- data/lib/tap/generator/generators/root/templates/MIT-LICENSE +0 -22
- data/lib/tap/generator/generators/root/templates/README +0 -14
- data/lib/tap/generator/generators/root/templates/Rakefile +0 -84
- data/lib/tap/generator/generators/root/templates/Rapfile +0 -11
- data/lib/tap/generator/generators/root/templates/gemspec +0 -27
- data/lib/tap/generator/generators/root/templates/test/tap_test_helper.rb +0 -3
- data/lib/tap/generator/generators/task/task_generator.rb +0 -25
- data/lib/tap/generator/generators/task/templates/task.erb +0 -14
- data/lib/tap/generator/generators/task/templates/test.erb +0 -19
- data/lib/tap/generator/manifest.rb +0 -20
- data/lib/tap/generator/preview.rb +0 -69
- data/lib/tap/load.rb +0 -64
- data/lib/tap/spec.rb +0 -41
- data/lib/tap/support/aggregator.rb +0 -65
- data/lib/tap/support/audit.rb +0 -333
- data/lib/tap/support/constant.rb +0 -143
- data/lib/tap/support/constant_manifest.rb +0 -126
- data/lib/tap/support/dependencies.rb +0 -54
- data/lib/tap/support/dependency.rb +0 -44
- data/lib/tap/support/executable.rb +0 -198
- data/lib/tap/support/executable_queue.rb +0 -125
- data/lib/tap/support/gems.rb +0 -43
- data/lib/tap/support/join.rb +0 -144
- data/lib/tap/support/joins.rb +0 -12
- data/lib/tap/support/joins/switch.rb +0 -27
- data/lib/tap/support/joins/sync_merge.rb +0 -38
- data/lib/tap/support/manifest.rb +0 -171
- data/lib/tap/support/minimap.rb +0 -90
- data/lib/tap/support/node.rb +0 -176
- data/lib/tap/support/parser.rb +0 -450
- data/lib/tap/support/schema.rb +0 -385
- data/lib/tap/support/shell_utils.rb +0 -67
- data/lib/tap/test.rb +0 -77
- data/lib/tap/test/assertions.rb +0 -38
- data/lib/tap/test/env_vars.rb +0 -29
- data/lib/tap/test/extensions.rb +0 -73
- data/lib/tap/test/file_test.rb +0 -362
- data/lib/tap/test/file_test_class.rb +0 -15
- data/lib/tap/test/regexp_escape.rb +0 -87
- data/lib/tap/test/script_test.rb +0 -46
- data/lib/tap/test/script_tester.rb +0 -115
- data/lib/tap/test/subset_test.rb +0 -260
- data/lib/tap/test/subset_test_class.rb +0 -99
- data/lib/tap/test/tap_test.rb +0 -109
- 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.
|
14
|
+
app = Tap::App.new
|
15
15
|
|
16
16
|
#
|
17
|
-
#
|
17
|
+
# parse argv
|
18
18
|
#
|
19
19
|
|
20
|
+
# separate out argv schema
|
20
21
|
argv = []
|
21
|
-
break_regexp = Tap::
|
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
|
-
|
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
|
-
|
53
|
-
|
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(
|
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
|
59
|
-
|
60
|
-
exit
|
76
|
+
puts "No such schema file - #{path}"
|
77
|
+
exit(1)
|
61
78
|
end
|
62
|
-
|
63
|
-
|
64
|
-
env.build(schema, app)
|
79
|
+
|
80
|
+
schemas << Tap::Schema.load_file(path)
|
65
81
|
end
|
66
82
|
|
67
|
-
end.parse!(argv,
|
83
|
+
end.parse!(argv, :clear_config => false, :add_defaults => false)
|
68
84
|
|
69
85
|
#
|
70
|
-
# build and run
|
86
|
+
# build and run
|
71
87
|
#
|
72
88
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
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
|
-
|
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
|
data/doc/Class Reference
CHANGED
@@ -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::
|
14
|
+
==== Tap::App::Node
|
15
15
|
|
16
|
-
http://tap.rubyforge.org/images/
|
16
|
+
http://tap.rubyforge.org/images/Node.png
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
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.
|
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.
|
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.
|
136
|
+
arguments a task receives. Here is an example of information gleaned from a
|
140
137
|
task definition:
|
141
138
|
|
142
|
-
# Sample::
|
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::
|
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.
|
164
|
-
using the Configurable and Lazydoc metadata, map to the command line as
|
165
|
-
applications.
|
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
|
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
|
-
|
198
|
-
|
199
|
-
|
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
|
-
|
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::
|
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
|
-
|
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
|
-
|
236
|
-
|
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
|
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.
|
256
|
-
Tap::App.instance), but there is no reason why multiple instances could not be
|
257
|
-
used.
|
227
|
+
themselves.
|
258
228
|
|
259
|
-
|
260
|
-
app = Tap::App.
|
261
|
-
app.
|
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
|
-
|
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
|
-
'
|
290
|
+
'tap-tasks' gem.
|
316
291
|
|
317
292
|
% tap manifest
|
318
293
|
--------------------------------------------------------------------------------
|
319
|
-
Desktop:
|
294
|
+
Desktop: (/Users/username/Desktop)
|
320
295
|
--------------------------------------------------------------------------------
|
321
|
-
|
296
|
+
tap-tasks: (/Library/Ruby/Gems/1.8/gems/tap-tasks-0.1.0)
|
322
297
|
tasks
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
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:
|
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
|
338
|
-
destroy
|
339
|
-
generate
|
340
|
-
manifest
|
341
|
-
run
|
342
|
-
|
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
|
345
|
-
load
|
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
|
-
|-
|
322
|
+
|- tap-tasks
|
351
323
|
`- tap
|
352
324
|
|
353
|
-
In this printout of the manifest, you can see the resources available to tap
|
354
|
-
the Desktop (none), in the
|
355
|
-
|
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 --
|
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 --
|
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
|
371
|
-
|
372
|
-
from command line inputs.
|
339
|
+
Tap::Exe adds methods for building and executing workflows from command line
|
340
|
+
inputs.
|