tap 0.12.4 → 0.17.0
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|