tap-server 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. data/History +5 -0
  2. data/cmd/server.rb +36 -8
  3. data/lib/tap/controller/rest_routes.rb +77 -0
  4. data/lib/tap/controller/utils.rb +29 -0
  5. data/lib/tap/controller.rb +244 -145
  6. data/lib/tap/controllers/app.rb +97 -55
  7. data/lib/tap/controllers/data.rb +132 -0
  8. data/lib/tap/controllers/schema.rb +137 -223
  9. data/lib/tap/controllers/server.rb +70 -27
  10. data/lib/tap/server/data.rb +178 -0
  11. data/lib/tap/server/runner.rb +71 -0
  12. data/lib/tap/server/server_error.rb +35 -0
  13. data/lib/tap/server.rb +60 -275
  14. data/lib/tap/tasks/echo.rb +39 -6
  15. data/lib/tap/tasks/render.rb +65 -0
  16. data/public/stylesheets/tap.css +15 -2
  17. data/views/configurable/_config.erb +1 -0
  18. data/views/configurable/_configs.erb +28 -0
  19. data/views/configurable/_flag.erb +2 -0
  20. data/views/configurable/_list_select.erb +8 -0
  21. data/views/configurable/_select.erb +6 -0
  22. data/views/configurable/_switch.erb +2 -0
  23. data/views/layout.erb +1 -1
  24. data/views/object/obj.erb +1 -0
  25. data/views/tap/controllers/app/_action.erb +3 -0
  26. data/views/tap/controllers/app/build.erb +18 -0
  27. data/views/tap/controllers/app/enque.erb +13 -0
  28. data/views/tap/controllers/app/info.erb +20 -7
  29. data/views/tap/controllers/data/_controls.erb +21 -0
  30. data/views/tap/controllers/data/_index_entry.erb +1 -0
  31. data/views/tap/controllers/data/_upload.erb +8 -0
  32. data/views/tap/controllers/data/entry.erb +8 -0
  33. data/views/tap/controllers/data/index.erb +14 -0
  34. data/views/tap/controllers/schema/_build.erb +6 -0
  35. data/views/tap/controllers/schema/_index_entry.erb +6 -0
  36. data/views/tap/controllers/schema/entry.erb +135 -0
  37. data/views/tap/controllers/schema/join.erb +6 -4
  38. data/views/tap/controllers/schema/task.erb +6 -0
  39. data/views/tap/controllers/server/access.erb +4 -0
  40. data/views/tap/controllers/server/admin.erb +21 -0
  41. data/views/tap/controllers/server/help.erb +23 -0
  42. data/views/tap/controllers/server/index.erb +43 -3
  43. data/views/tap/task/input.erb +17 -0
  44. data/views/tap/tasks/load/input.erb +11 -0
  45. metadata +35 -17
  46. data/lib/tap/server_error.rb +0 -34
  47. data/lib/tap/support/persistence.rb +0 -71
  48. data/lib/tap/tasks/server.rb +0 -30
  49. data/views/tap/controllers/app/index.erb +0 -44
  50. data/views/tap/controllers/schema/config/default.erb +0 -4
  51. data/views/tap/controllers/schema/config/flag.erb +0 -3
  52. data/views/tap/controllers/schema/config/switch.erb +0 -6
  53. data/views/tap/controllers/schema/configurations.erb +0 -27
  54. data/views/tap/controllers/schema/node.erb +0 -47
  55. data/views/tap/controllers/schema/preview.erb +0 -3
  56. data/views/tap/controllers/schema/round.erb +0 -30
  57. data/views/tap/controllers/schema/schema.erb +0 -28
  58. data/views/tap/tasks/echo/result.html +0 -1
@@ -1,14 +1,47 @@
1
1
  module Tap
2
2
  module Tasks
3
3
 
4
- # ::manifest
4
+ # ::task
5
5
  class Echo < Tap::Task
6
- def process(*args)
7
- args = args.flatten
8
- args << name
9
- log name, args.inspect
10
- args
6
+ config :key, 'default' # a basic config
7
+
8
+ config :flag_false, false, &c.flag # a flag config (false)
9
+ config :flag_true, true, &c.flag # a flag config (true)
10
+
11
+ config :switch_false, false, &c.switch # a switch config (false)
12
+ config :switch_true, true, &c.switch # a switch config (true)
13
+
14
+ config :string, "string", &c.string # string
15
+ #config :sym, :sym, &c.symbol # sym
16
+ config :integer, 10, &c.integer # integer
17
+ config :numeric, 10, &c.numeric # numeric
18
+ config :float, 10, &c.float # float
19
+
20
+ config :string_or_nil, nil, &c.string_or_nil # string_or_nil (nil)
21
+ #config :sym_or_nil, nil, &c.symbol_or_nil # symbol_or_nil (nil)
22
+ config :integer_or_nil, nil, &c.integer_or_nil # integer_or_nil (nil)
23
+ config :number_or_nil, nil, &c.numeric_or_nil # number_or_nil (nil)
24
+ config :float_or_nil, nil, &c.float_or_nil # float_or_nil (nil)
25
+
26
+ #config :range, 1..10, &c.range # range
27
+ #config :array, [1,2,3], &c.array # array
28
+ #config :hash, {}, &c.hash # hash
29
+ #config :regexp, /abc/, &c.regexp # regexp
30
+ config :select, 3, &c.select(12,3, &c.integer) # list
31
+ config :list_select, [3], &c.list_select(1,4,12,3, &c.integer) # list select
32
+
33
+ #
34
+ #
35
+ # config :output, $stdout, &c.io # regexp
36
+
37
+ nest :nest do # nest desc
38
+ config :a, 'default' # a nested config (before)
39
+ nest :nest do # double-nest desc
40
+ config :key, 'default' # a double-nested config
41
+ end
42
+ config :z, 'default' # a nested config (after)
11
43
  end
44
+
12
45
  end
13
46
  end
14
47
  end
@@ -0,0 +1,65 @@
1
+ require 'tap/tasks/dump'
2
+ require 'tap/env'
3
+ require 'erb'
4
+
5
+ module Tap
6
+ module Tasks
7
+ # :startdoc::task render an object
8
+ class Render < Tap::Tasks::Dump
9
+
10
+ config :dir, :views
11
+ config :path, 'obj.erb'
12
+
13
+ attr_accessor :env
14
+
15
+ def initialize(config={}, app=Tap::App.instance, env=Tap::Env.instance)
16
+ super(config, app)
17
+ @env = env
18
+ end
19
+
20
+ # Renders the specified template as ERB using the options. Options:
21
+ #
22
+ # locals:: a hash of local variables used in the template
23
+ #
24
+ # The filename used to identify errors in an erb template to a specific
25
+ def render(path, options={})
26
+ # render template
27
+ template = File.read(path)
28
+
29
+ # assign locals to the render binding
30
+ # this almost surely may be optimized...
31
+ locals = options[:locals]
32
+ binding = empty_binding
33
+
34
+ locals.each_pair do |key, value|
35
+ @assignment_value = value
36
+ eval("#{key} = remove_instance_variable(:@assignment_value)", binding)
37
+ end if locals
38
+
39
+ erb = ERB.new(template, nil, "<>")
40
+ erb.filename = path
41
+ erb.result(binding)
42
+ end
43
+
44
+ # Dumps the object to io using obj.inspect
45
+ def dump(obj, io)
46
+ template_path = env.class_path(dir, obj, path) do |file|
47
+ File.file?(file)
48
+ end
49
+
50
+ unless template_path
51
+ raise "no template for: #{obj.class}"
52
+ end
53
+
54
+ io.puts render(template_path, :locals => {:obj => obj})
55
+ end
56
+
57
+ protected
58
+
59
+ # Generates an empty binding to self without any locals assigned.
60
+ def empty_binding # :nodoc:
61
+ binding
62
+ end
63
+ end
64
+ end
65
+ end
@@ -1,6 +1,19 @@
1
1
  /*
2
2
  Tap Styles
3
3
  */
4
- form {
5
- border: black solid thin;
4
+
5
+ /* schema */
6
+ form.build, form.rename, form.duplicate, form.delete {
7
+ display: inline;
8
+ }
9
+
10
+ li.task, li.join, li.queue {
11
+ border-top: thin solid black;
12
+ padding: 0.5em;
13
+ }
14
+
15
+ pre.yaml {
16
+ padding: 1em;
17
+ background-color: 99FFCC;
18
+ overflow: hidden;
6
19
  }
@@ -0,0 +1 @@
1
+ <input name="<%= name %>" type="text" value="<%= escape_html(value) %>" />
@@ -0,0 +1,28 @@
1
+ <dl class="configs">
2
+ <% configurations.each_pair do |key, config| %>
3
+ <% next if config[:type] == :hidden %>
4
+ <% if config.is_nest? %>
5
+ <dt class="name"><%= key %></dt>
6
+ <dd class="nested-configs">
7
+ <%= module_render("_configs.erb", obj, :locals => {
8
+ :id => id,
9
+ :name => "#{name}[#{key}]",
10
+ :configurations => config.default(false).delegates,
11
+ :values => values[key.to_s]
12
+ }) %>
13
+ </dd>
14
+ <% else %>
15
+ <dt><%= key %></dt>
16
+ <dd class="config">
17
+ <%= render(
18
+ :file => module_path("_#{config[:type]}.erb", obj) || module_path("_config.erb", obj),
19
+ :locals => {
20
+ :id => "#{id}_config_#{key}",
21
+ :obj => obj,
22
+ :name => "#{name}[#{key}]",
23
+ :config => config,
24
+ :value => values[key.to_s]}) %>
25
+ </dd>
26
+ <% end %>
27
+ <% end %>
28
+ </dl>
@@ -0,0 +1,2 @@
1
+ <input name="<%= name %>" type="hidden" value="false" />
2
+ <input name="<%= name %>" type="checkbox" value="true" <%= value == "true" ? 'checked="true"' : '' %> />
@@ -0,0 +1,8 @@
1
+ <input type="hidden" name="<%= name %>[][]" value="" />
2
+ <select name="<%= name %>[]" multiple="true">
3
+ <% value.collect! {|val| stringify(val) } %>
4
+ <% (config[:options] || []).each do |option| %>
5
+ <% option = stringify(option) %>
6
+ <option value="<%= escape_html(option) %>" <%= value.include?(option) ? "selected='true' " : ""%>><%= option %></option>
7
+ <% end %>
8
+ </select>
@@ -0,0 +1,6 @@
1
+ <select name="<%= name %>">
2
+ <% (config[:options] || []).each do |option| %>
3
+ <% option = stringify(option) %>
4
+ <option value="<%= escape_html(option) %>" <%= value == option ? "selected='true' " : ""%>><%= option %></option>
5
+ <% end %>
6
+ </select>
@@ -0,0 +1,2 @@
1
+ <input name="<%= name %>" type="radio" value="true" <%= value == "true" ? 'checked="true" ' : '' %>>on</input>
2
+ <input name="<%= name %>" type="radio" value="false" <%= value == "false" ? 'checked="true" ' : '' %>>off</input>
data/views/layout.erb CHANGED
@@ -1,6 +1,6 @@
1
1
  <html>
2
2
  <head>
3
- <title>Tap (Task Application)</title>
3
+ <title>Tap (Server)</title>
4
4
  <link rel="stylesheet" type="text/css" href="/stylesheets/tap.css" />
5
5
  <script src="/javascripts/prototype.js"></script>
6
6
  <script src="/javascripts/tap.js"></script>
@@ -0,0 +1 @@
1
+ <%= obj.inspect %>
@@ -0,0 +1,3 @@
1
+ <form action="<%= uri action %>" style="display:inline" method="post">
2
+ <input type="submit" value="<%= action %>" />
3
+ </form>
@@ -0,0 +1,18 @@
1
+ <form action="<%= uri :build %>" method="post">
2
+ <textarea rows="10" cols="40" name="schema">
3
+ tasks:
4
+ load:
5
+ id: load
6
+ dump:
7
+ id: dump
8
+ joins:
9
+ - - [load]
10
+ - [dump]
11
+ </textarea><br/>
12
+ <input type="checkbox" name="reset">reset</input>
13
+ <input type="checkbox" name="run">run</input>
14
+ <input type="submit" value="build" />
15
+ </form>
16
+ <ul>
17
+ <li><a href="<%= uri :info %>">Info</a></li>
18
+ </ul>
@@ -0,0 +1,13 @@
1
+ <form action="<%= uri :enque %>" method="post">
2
+ <textarea rows="10" cols="40" name="queue">
3
+ - - load
4
+ - - goodnight moon
5
+ - - load
6
+ - - hello world
7
+ </textarea><br/>
8
+ <input type="hidden" name="load" value="on" />
9
+ <input type="submit" value="enque" />
10
+ </form>
11
+ <ul>
12
+ <li><a href="<%= uri :info %>">Info</a></li>
13
+ </ul>
@@ -1,8 +1,21 @@
1
- <% id = app.hash %>
2
- <% update_info = "Tap.App.info('/app/info', 'update-#{id}', 'info-#{id}', 1000);" %>
3
- <div class="info">
4
- <input class="update-" id="update-<%= id %>" type="checkbox" <%= update ? "checked='true' " : "" %>onchange="<%= update_info %>" />
5
- <a href="/app/info">update</a>
6
- <span class="info" id="info-<%= id %>"><%= content %></span>
1
+ <div>
2
+ <% actions.each do |action| %>
3
+ <%= render "_action.erb", :locals => {:action => action } %>
4
+ <% end %>
5
+ <%= app.info %>
7
6
  </div>
8
- <script type="text/javascript"><%= update ? update_info : "" %></script>
7
+ <ul>
8
+ <li><a href="<%= uri :schema %>">Build</a> (<a href="<%= uri :build %>">manual</a>)</li>
9
+ <li><a href="<%= uri :data %>">Enque</a> (<a href="<%= uri :enque %>">manual</a>)</li>
10
+ </ul>
11
+
12
+ <h3>Current Build:</h3>
13
+ <% if tasks.empty? %>
14
+ <span>(no workflow built)</span>
15
+ <% end %>
16
+ <dl>
17
+ <% tasks.each_pair do |key, task| %>
18
+ <dt><%= key %></dt>
19
+ <dd><%= task.class %></dd>
20
+ <% end %>
21
+ </dl>
@@ -0,0 +1,21 @@
1
+ <form id="rename_<%= id %>" class="rename" method="post" action="<%= uri(id) %>">
2
+ <input type="text" name="new_id" value="<%= id %>" />
3
+ <input type="hidden" name="_method" value="rename" />
4
+ <input type="submit" value="Rename" />
5
+ </form>
6
+
7
+ <form id="duplicate_<%= id %>" class="duplicate" method="post" action="<%= uri(id) %>">
8
+ <input type="hidden" name="_method" value="duplicate" />
9
+ <input type="submit" value="Duplicate" />
10
+ </form>
11
+
12
+ <form id="delete_<%= id %>" class="delete" method="post" action="<%= uri(id) %>">
13
+ <input class="action" type="hidden" name="_method" value="delete" />
14
+ <input type="submit" value="Delete" />
15
+ </form>
16
+
17
+ <ul>
18
+ <li><a href="<%= uri %>">index</a></li>
19
+ <li><a href="<%= uri(id, :as => :preview) %>">preview</a></li>
20
+ <li><a href="<%= uri(id, :as => :download) %>">download</a></li>
21
+ </ul>
@@ -0,0 +1 @@
1
+ <%= data.cache[type].include?(id) ? "*" : "" %><a href="<%= uri(id) %>"><%= id %></a>
@@ -0,0 +1,8 @@
1
+ <form class="upload" enctype="multipart/form-data" method="post" action="<%= uri %>">
2
+ <input type="hidden" name="_method" value="upload" />
3
+ <ul>
4
+ <li><input type="file" name="<%= type %>" /></li>
5
+ <li><input type="text" name="id" value="" /> Id (if other than file name)</li>
6
+ </ul>
7
+ <input type="submit" value="Upload" />
8
+ </form>
@@ -0,0 +1,8 @@
1
+ <%= render('_controls.erb', :locals => {:id => id}) %>
2
+
3
+ <form class="<%= type %>" method="post" action="<%= uri %>">
4
+ <input type="hidden" name="_method" value="<%= id == 'new' ? 'create' : 'update' %>" />
5
+ <input type="hidden" name="id" value="<%= id %>" />
6
+ <textarea name="<%= type %>"><%= content %></textarea>
7
+ <input type="submit" value="Save" />
8
+ </form>
@@ -0,0 +1,14 @@
1
+ <h1><%= type %></h1>
2
+ <%= render('_upload.erb') %>
3
+ <form id="select_<%= type %>" class="select" method="post" action="<%= uri %>">
4
+ <input type="hidden" name="_method" value="select" />
5
+
6
+ <ul>
7
+ <% data.index(type).each do |id| %>
8
+ <li><input type="checkbox" name="id[]" value="<%= id %>" /> <%= render('_index_entry.erb', :locals => {:id => id})%></li>
9
+ <% end %>
10
+ <li><a href="<%= uri('new') %>">new</a></li>
11
+ </ul>
12
+
13
+ <input type="submit" value="Select" />
14
+ </form>
@@ -0,0 +1,6 @@
1
+ <form id="build_<%= id %>" class="build" method="post" action="<%= uri("../build") %>">
2
+ <input type="hidden" name="_method" value="build" />
3
+ <input type="hidden" name="id" value="<%= id %>" />
4
+ <input type="hidden" name="reset" value="on" />
5
+ <input type="submit" value="Build" />
6
+ </form>
@@ -0,0 +1,6 @@
1
+ <%= data.cache[type].include?(id) ? "*" : "" %><%= id %>
2
+ <ul>
3
+ <li><a href="<%= uri(id) %>">edit</a></li>
4
+ <li><a href="<%= uri(id, :as => :preview) %>">preview</a></li>
5
+ <li><a href="<%= uri(id, :as => :download) %>">download</a></li>
6
+ </ul>
@@ -0,0 +1,135 @@
1
+ <%= render('_build.erb', :locals => {:id => id}) %>
2
+ <%= render('_controls.erb', :locals => {:id => id}) %>
3
+
4
+ <h2>Design:</h2>
5
+ <!-- add form -->
6
+ <% traverse = schema.traverse %>
7
+ <form id="add_<%= id %>" class="add" method="post" action="<%= uri(id) %>">
8
+ <input type="hidden" name="_method" value="add" />
9
+
10
+ <table>
11
+ <% traverse.each do |(key, inputs, outputs)| %>
12
+ <tr>
13
+ <td><input name="outputs[]" value="<%= key %>" type="checkbox" /></td>
14
+ <td><a href="#task_<%= key %>"><%= key %></a></td>
15
+ <td><input name="inputs[]" value="<%= key %>" type="checkbox" /></td>
16
+ <td>[<% inputs.each do |index| %><a href="#join_<%= index %>"><%= index %></a> <% end %>]</td>
17
+ <td>[<% outputs.each do |index| %><a href="#join_<%= index %>"><%= index %></a> <% end %>]</td>
18
+ </tr>
19
+ <% end %>
20
+ </table>
21
+
22
+ <ul>
23
+ <% server.env.minimap.each do |(env_name, env)| %>
24
+ <% env.manifest(:task).minimap.each do |(name, const)| %>
25
+ <% key = "#{env_name}:#{name}" %>
26
+ <li><input name="tasks[]" value="<%= key %>" type="checkbox"><%= key %></input></li>
27
+ <% end %>
28
+ <% end %>
29
+ </ul>
30
+
31
+ <ul>
32
+ <% traverse.each do |(key, inputs, outputs)| %>
33
+ <li><input name="queue[]" value="<%= key %>" type="checkbox"><%= key %></input></li>
34
+ <% end %>
35
+ </ul>
36
+
37
+ <input type="submit" value="Add" />
38
+ </form>
39
+
40
+ <!-- remove form -->
41
+ <form id="remove_<%= id %>" class="remove" method="post" action="<%= uri(id) %>">
42
+ <input type="hidden" name="_method" value="remove" />
43
+
44
+ <ul>
45
+ <% traverse.each do |(key, inputs, outputs)| %>
46
+ <li>
47
+ <input name="tasks[]" value="<%= key %>" type="checkbox" />
48
+ <a href="#task_<%= key %>"><%= key %></a>
49
+ </li>
50
+ <% end %>
51
+ </ul>
52
+
53
+ <ul>
54
+ <% schema.joins.each_index do |index| %>
55
+ <li>
56
+ <input name="joins[]" value="<%= index %>" type="checkbox" />
57
+ <a href="#join_<%= index %>"><%= index %></a>
58
+ </li>
59
+ <% end %>
60
+ </ul>
61
+
62
+ <ul>
63
+ <% schema.queue.each_index do |index| %>
64
+ <li>
65
+ <input name="queue[]" value="<%= index %>" type="checkbox" />
66
+ <a href="#queue_<%= index %>"><%= index %></a>
67
+ </li>
68
+ <% end %>
69
+ </ul>
70
+
71
+ <input type="submit" value="Remove" />
72
+ </form>
73
+
74
+ <!-- configure form -->
75
+ <form id="configure_<%= id %>" class="configure" method="post" action="<%= uri(id) %>">
76
+ <input type="hidden" name="_method" value="configure" />
77
+
78
+ <h2>Configure:</h2>
79
+ <ul class="tasks">
80
+ <% schema.tasks.each_pair do |key, task| %>
81
+ <% name = "schema[tasks][#{key}]" %>
82
+ <% task_class = task['class'] %>
83
+ <li id="task_<%= key %>" class="task">
84
+ <h3><a href="#add_<%= id %>"><%= key %></a></h3>
85
+
86
+ <input type="hidden" name="<%= name %>[id]" value="<%= task['id'] %>">
87
+ <%= module_render('task.erb', task_class, :locals => {
88
+ :id => "#{id}_task_#{key}",
89
+ :name => name,
90
+ :values => task['config'] || default_config(task_class),
91
+ :task => task }) %>
92
+ </li>
93
+ <% end %>
94
+ </ul>
95
+
96
+ <ul class="joins">
97
+ <% schema.joins.each_with_index do |(inputs, outputs, join), index| %>
98
+ <% name = "schema[joins][]" %>
99
+ <% join_class = join['class'] %>
100
+ <li id="join_<%= index %>" class="join">
101
+ <h3><a href="#add_<%= id %>"><%= index %></a></h3>
102
+ <% inputs.each do |input| %>
103
+ <input type="hidden" name="<%= name %>[0][]" value="<%= input %>">
104
+ <% end %>
105
+ <% outputs.each do |output| %>
106
+ <input type="hidden" name="<%= name %>[1][]" value="<%= output %>">
107
+ <% end %>
108
+ <input type="hidden" name="<%= name %>[2][id]" value="<%= join['id'] || 'join' %>">
109
+ <%= module_render('join.erb', join_class, :locals => {
110
+ :id => "#{id}_join_#{index}",
111
+ :name => "#{name}[2]",
112
+ :values => join['config'] || default_config(join_class),
113
+ :join => join }) %>
114
+ </li>
115
+ <% end %>
116
+ </ul>
117
+
118
+ <h2>Enque:</h2>
119
+ <ul class="queue">
120
+ <% schema.queue.each_with_index do |(key, args), index| %>
121
+ <% name = "schema[queue][]" %>
122
+ <% task = schema.tasks[key] %>
123
+ <li id="queue_<%= index %>" class="queue">
124
+ <h3><%= key %></h3>
125
+ <input type="hidden" name="<%= name %>[0]" value="<%= key %>">
126
+ <%= module_render('input.erb', task['class'], :locals => {
127
+ :id => id,
128
+ :name => "#{name}[1]",
129
+ :args => args || [],
130
+ :task => task }) %>
131
+ </li>
132
+ <% end %>
133
+ </ul>
134
+ <input type="submit" value="Save" />
135
+ </form>
@@ -1,4 +1,6 @@
1
- [<% nodes.each do |node| %>
2
- <% index = schema.index(node) %>
3
- <a href="#node_<%= index %>"><%= index %></a>
4
- <% end %>]
1
+ <%= module_render("_configs.erb", obj, :locals => {
2
+ :id => id,
3
+ :name => "#{name}[config]",
4
+ :configurations => obj.configurations,
5
+ :values => values || {}
6
+ }) %>
@@ -0,0 +1,6 @@
1
+ <%= module_render("_configs.erb", obj, :locals => {
2
+ :id => id,
3
+ :name => "#{name}[config]",
4
+ :configurations => obj.configurations,
5
+ :values => values
6
+ }) %>
@@ -0,0 +1,4 @@
1
+ <form action="<%= uri :access %>" method="post">
2
+ <input type="input" name="secret" value="<%= secret %>" />
3
+ <input type="submit" value="access" />
4
+ </form>
@@ -0,0 +1,21 @@
1
+ <div>Ruby <%= RUBY_VERSION %> (<%= RUBY_PLATFORM %>)</div>
2
+ <div>Tap <%= Tap::VERSION %></div>
3
+ <div>
4
+ Server:
5
+ <% config = server.config.to_hash %>
6
+ <% config.delete(:env) %>
7
+ <pre class="yaml"><%= YAML.dump(config) %></pre>
8
+ </div>
9
+ <% if Object.const_defined?(:Gem) %>
10
+ <div>
11
+ Active Gems:
12
+ <ul>
13
+ <% Gem.loaded_specs.each_pair do |key, spec| %>
14
+ <li><%= spec.full_name %></li>
15
+ <% end %>
16
+ </ul>
17
+ </div>
18
+ <% end %>
19
+ <form action="<%= uri :shutdown, :secret => secret %>" method="post">
20
+ <input type="submit" value="shutdown" />
21
+ </form>
@@ -0,0 +1,23 @@
1
+ <h1 class="class"><%= obj %></h1>
2
+ <span class="summary"><%= obj.desc.subject %></span>
3
+
4
+ <h2>Documentation</h2>
5
+ <pre class="desc"><%= obj.desc.wrap %></pre>
6
+
7
+ <h2>Attributes</h2>
8
+ <table>
9
+ <tr class="source_file">
10
+ <td>Source File</td>
11
+ <td><%= obj.source_file %></td>
12
+ <tr>
13
+ <tr class="ancestors">
14
+ <td>Ancestors</td>
15
+ <td>
16
+ <ul>
17
+ <% obj.ancestors.each do |ancestor| %>
18
+ <li><%= ancestor %></li>
19
+ <% end %>
20
+ </ul>
21
+ </td>
22
+ <tr>
23
+ </table>
@@ -1,3 +1,43 @@
1
- <% if shutdown_key %>
2
- <a href="<%= uri(:shutdown) %>?shutdown_key=<%= shutdown_key %>">shutdown</a>
3
- <% end %>
1
+ <div id="branding">
2
+ <h1><a href="<%= Tap::WEBSITE %>">Tap (<ins>T</ins>ask <ins>Ap</ins>plication) <%= Tap::VERSION %> </a></h1>
3
+ </div>
4
+
5
+ <div id="content_main">
6
+ <dl id="envs" class="manifest">
7
+ <% env_keys = server.env.minihash(true) %>
8
+ <% server.env.each do |env| %>
9
+ <% root = env.root %>
10
+ <% env_key = env_keys[env] %>
11
+ <dt class="key"><%= env_key %> (<%= root.root %>)</dt>
12
+ <dd class="value">
13
+ <% controllers = env.manifest(:controller) %>
14
+ <% unless controllers.empty? %>
15
+ <dl id="controllers" class="manifest">
16
+ <dt class="key">controllers</dt>
17
+ <dd class="value">
18
+ <ol>
19
+ <% controllers.minimap.each do |(key, const)| %>
20
+ <li><a href="<%= escape(key) %>"><%= key %></a> (<a href="<%= help_uri('controller', key) %>"><%= const.require_path %></a>)</li>
21
+ <% end %>
22
+ </ol>
23
+ </dd>
24
+ </dl>
25
+ <% end %>
26
+
27
+ <% tasks = env.manifest(:task) %>
28
+ <% unless tasks.empty? %>
29
+ <dl id="tasks" class="manifest">
30
+ <dt class="key">tasks</dt>
31
+ <dd class="value">
32
+ <ol>
33
+ <% tasks.minimap.each do |(key, const)| %>
34
+ <li><%= key %> (<a href="<%= help_uri('task', key) %>"><%= const.require_path %></a>)</li>
35
+ <% end %>
36
+ </ol>
37
+ </dd>
38
+ </dl>
39
+ <% end %>
40
+ </dd>
41
+ <% end %>
42
+ </dl>
43
+ </div>
@@ -0,0 +1,17 @@
1
+ <ul>
2
+ <% obj.args.arguments.each do |argument| %>
3
+ <li class="input">
4
+ <input name="<%= name %>[]" value="<%= args.shift %>" />
5
+ <span><%= argument %></span>
6
+ <% if argument =~ /\.{3}\z/ %>
7
+ <% args << '' %>
8
+ <% args.each do |arg| %>
9
+ </li>
10
+ <li class="input">
11
+ <input name="<%= name %>[]" value="<%= arg %>" />
12
+ <span>...</span>
13
+ <% end %>
14
+ <% end %>
15
+ </li>
16
+ <% end %>
17
+ </ul>
@@ -0,0 +1,11 @@
1
+ <ul>
2
+ <li class="input">
3
+ <% config = task['config'] %>
4
+ <% if config && config['file'] == 'true' %>
5
+ <input name="<%= name %>[]" value="<%= args[0] %>" />
6
+ <% else %>
7
+ <textarea name="<%= name %>[]"><%= args[0] %></textarea>
8
+ <% end %>
9
+ <span>Data</span>
10
+ </li>
11
+ </ul>