tap-server 0.4.0 → 0.5.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 CHANGED
@@ -1,3 +1,8 @@
1
+ == 0.5.0 / 2009-06-17
2
+
3
+ * added Extname routes
4
+ * Controller.uri can now add scheme, host, port
5
+
1
6
  == 0.4.0 / 2009-05-25
2
7
 
3
8
  Significant internal rework to utilize Tap-0.17.0.
@@ -0,0 +1,29 @@
1
+ module Tap
2
+ class Controller
3
+
4
+ # Add handling of extnames to controller paths. The extname of a request
5
+ # is chomped and stored in the extname attribute for use wherever.
6
+ module Extname
7
+
8
+ # Returns the extname for the current request, or nil if no extname
9
+ # was specified in the paths_info.
10
+ def extname
11
+ @extname ||= nil
12
+ end
13
+
14
+ # Overrides route to chomp of the extname from the request path info.
15
+ # If no extname is specified, extname will be remain nil.
16
+ def route
17
+ @extname = File.extname(request.path_info)
18
+ @extname = nil if @extname.empty?
19
+ args = super
20
+
21
+ unless args.empty? || extname == nil
22
+ args.last.chomp!(extname)
23
+ end
24
+
25
+ args
26
+ end
27
+ end
28
+ end
29
+ end
@@ -24,6 +24,40 @@ module Tap
24
24
 
25
25
  [200, headers, [content]]
26
26
  end
27
+
28
+ def yamlize(obj, indent="")
29
+ case obj
30
+ when Hash
31
+ lines = []
32
+ obj.each_pair do |key, value|
33
+ lines << case value
34
+ when Hash, Array
35
+ "#{indent}#{key}:\n#{yamlize(value, indent + ' ')}"
36
+ when '#'
37
+ next
38
+ else
39
+ "#{indent}#{key}: #{value}"
40
+ end
41
+ end
42
+ lines.empty? ? "#{indent}{}" : lines.join("\n")
43
+ when Array
44
+ lines = []
45
+ obj.each do |value|
46
+ lines << case value
47
+ when Hash, Array
48
+ "#{indent}-\n#{yamlize(value, indent + ' ')}"
49
+ when '#'
50
+ next
51
+ else
52
+ "#{indent}- #{value}"
53
+ end
54
+ end
55
+ lines.empty? ? "#{indent}[]" : lines.join("\n")
56
+ else
57
+ obj
58
+ end
59
+ end
60
+
27
61
  end
28
62
  end
29
63
  end
@@ -1,5 +1,6 @@
1
1
  require 'erb'
2
2
  require 'tap/server'
3
+ require 'tap/controller/extname'
3
4
  require 'tap/controller/rest_routes'
4
5
  require 'tap/controller/utils'
5
6
 
@@ -31,10 +32,11 @@ module Tap
31
32
  end
32
33
 
33
34
  set_variables.each do |variable|
34
- child.set(variable, get(variable))
35
+ value = get(variable)
36
+ value = value.dup if Configurable::Delegate.duplicable_value?(value)
37
+ child.set(variable, value)
35
38
  end
36
39
 
37
- child.set(:actions, actions.dup)
38
40
  child.set(:define_action, true)
39
41
  end
40
42
 
@@ -52,17 +54,14 @@ module Tap
52
54
 
53
55
  # Sets an instance variable for self (ie the class), short for:
54
56
  #
55
- # instance_variable_set(:@attribute, input)
57
+ # instance_variable_set(:@attribute, value)
56
58
  #
57
- # These variables are meaningful to a default Tap::Controller and will
58
- # be inherited by subclasses:
59
- #
60
- # actions:: sets actions
61
- # default_action:: the default action (:index)
62
- #
63
- def set(variable, input)
59
+ # Set variables inherited by subclasses. The value is duplicated on
60
+ # the subclass so the parent and child variable may be modified
61
+ # independently.
62
+ def set(variable, value)
64
63
  set_variables << variable
65
- instance_variable_set("@#{variable}", input)
64
+ instance_variable_set("@#{variable}", value)
66
65
  end
67
66
 
68
67
  # Gets the value of an instance variable set via set. Returns nil for
@@ -72,7 +71,7 @@ module Tap
72
71
  instance_variable_get("@#{variable}")
73
72
  end
74
73
 
75
- # An array of variables set via set. set_variables are inherited.
74
+ # An array of variables set via set.
76
75
  def set_variables
77
76
  @set_variables ||= []
78
77
  end
@@ -169,8 +168,21 @@ module Tap
169
168
  self.class.actions.include?(action.to_sym)
170
169
  end
171
170
 
172
- # Returns a uri to the specified action on self.
173
- def uri(action=nil, params={})
171
+ # Returns a uri to the specified action on self. The parameters will
172
+ # be built into a query string, if specified. By default the uri will
173
+ # not specify a protocol or host. Specifying an option hash will add
174
+ # these to the uri.
175
+ def uri(action=nil, params=nil, options=nil)
176
+ if action.kind_of?(Hash)
177
+ unless params == nil && options == nil
178
+ raise "extra arguments specified for uri hash syntax"
179
+ end
180
+
181
+ options = action
182
+ params = options[:params]
183
+ action = options[:action]
184
+ end
185
+
174
186
  uri = []
175
187
 
176
188
  if controller_path
@@ -183,11 +195,25 @@ module Tap
183
195
  uri << action
184
196
  end
185
197
 
186
- unless params.empty?
198
+ unless params == nil || params.empty?
187
199
  uri << '?'
188
200
  uri << build_query(params)
189
201
  end
190
202
 
203
+ if options
204
+ scheme = (options[:scheme] || request.scheme)
205
+ port = (options[:port] || request.port)
206
+
207
+ if scheme == "https" && port != 443 ||
208
+ scheme == "http" && port != 80
209
+ uri.unshift ":#{port}"
210
+ end
211
+
212
+ uri.unshift(options[:host] || request.host)
213
+ uri.unshift("://")
214
+ uri.unshift(scheme)
215
+ end
216
+
191
217
  uri.join
192
218
  end
193
219
 
@@ -3,11 +3,12 @@ require 'tap/controller'
3
3
  module Tap
4
4
  module Controllers
5
5
  # ::controller
6
- class Data < Tap::Controller
6
+ class Data < Tap::Controller
7
7
  include RestRoutes
8
8
  include Utils
9
9
 
10
10
  set :default_layout, 'layout.erb'
11
+ set :reserved_ids, ['new']
11
12
 
12
13
  # GET /projects
13
14
  def index
@@ -39,6 +40,8 @@ module Tap
39
40
  def create(id)
40
41
  if id == "new"
41
42
  id = data.next_id(type).to_s
43
+ else
44
+ check_id(id)
42
45
  end
43
46
 
44
47
  data.create(type, id) {|io| io << parse_entry }
@@ -62,7 +65,8 @@ module Tap
62
65
  end
63
66
 
64
67
  def upload(id=nil)
65
- check_id(id)
68
+ check_id(id) if id
69
+
66
70
  data.import(type, request[type], id)
67
71
  redirect uri
68
72
  end
@@ -74,11 +78,21 @@ module Tap
74
78
 
75
79
  # Renames id to request['name'] in the schema data.
76
80
  def rename(id)
77
- redirect data.move(type, id, request['new_id'])
81
+ if new_id = request['new_id']
82
+ check_id(new_id)
83
+ else
84
+ raise "no new id specified"
85
+ end
86
+
87
+ redirect data.move(type, id, new_id)
78
88
  end
79
89
 
80
90
  def duplicate(id)
81
- redirect data.copy(type, id, request['new_id'] || "#{id}_copy")
91
+ if new_id = request['new_id']
92
+ check_id(new_id)
93
+ end
94
+
95
+ redirect data.copy(type, id, new_id || "#{id}_copy")
82
96
  end
83
97
 
84
98
  # Helper methods
@@ -123,7 +137,7 @@ module Tap
123
137
  end
124
138
 
125
139
  def check_id(id)
126
- if id == "new"
140
+ if self.class.get(:reserved_ids).include?(id)
127
141
  raise "reserved id: #{id.inspect}"
128
142
  end
129
143
  end
@@ -4,41 +4,53 @@ module Tap
4
4
  module Controllers
5
5
  class Schema < Data
6
6
 
7
- # Adds tasks or joins to the schema. Parameters:
7
+ # Adds to the specified schema. Parameters:
8
8
  #
9
- # tasks[]:: An array of tasks to add to the schema.
10
- # inputs[]:: An array of task indicies used as inputs to a join.
11
- # outputs[]:: An array of task indicies used as outputs for a join.
9
+ # tasks[]:: The specified task ids are added to the schema
10
+ # queue[]:: Queues with empty inputs are added for the task ids
11
+ # middleware[]:: Middleware by the specified ids are added
12
+ #
13
+ # Joins are a bit more complicated. A join is added if inputs
14
+ # and outputs are specified.
15
+ #
16
+ # inputs[]:: An array inputs to a join
17
+ # outputs[]:: An array outputs for a join
18
+ # join:: The join id, 'join' if unspecified
12
19
  #
13
20
  def add(id)
14
21
  if id == "new"
15
22
  id = data.next_id(type).to_s
16
23
  end
17
24
 
18
- tasks = request['tasks'] || []
19
- inputs = request['inputs'] || []
20
- outputs = request['outputs'] || []
21
- queue = request['queue'] || []
22
-
23
25
  update_schema(id) do |schema|
24
- current = schema.tasks
25
- tasks.each do |task|
26
- key = task
27
- while current.has_key?(key)
28
- i ||= 0
29
- key = "#{task}_#{i}"
30
- i += 1
26
+ # tasks[]
27
+ if tasks = request['tasks']
28
+ tasks.each do |task|
29
+ key = 0
30
+ key += 1 while schema.tasks.has_key?(key.to_s)
31
+ schema.tasks[key.to_s] = {'id' => task}
31
32
  end
32
-
33
- current[key] = {'id' => task}
34
33
  end
35
34
 
35
+ # inputs[] outputs[] join
36
+ inputs = request['inputs'] || []
37
+ outputs = request['outputs'] || []
36
38
  if !inputs.empty? && !outputs.empty?
37
- schema.joins << [inputs, outputs]
39
+ schema.joins << [inputs, outputs, {'id' => request['join'] || 'join'}]
38
40
  end
39
41
 
40
- queue.each do |task|
41
- schema.queue << [task]
42
+ # queue[]
43
+ if queue = request['queue']
44
+ queue.each do |key|
45
+ schema.queue << [key, []]
46
+ end
47
+ end
48
+
49
+ # middleware[]
50
+ if middleware = request['middleware']
51
+ middleware.each do |middleware|
52
+ schema.middleware << {'id' => middleware}
53
+ end
42
54
  end
43
55
  end
44
56
 
@@ -49,6 +61,8 @@ module Tap
49
61
  #
50
62
  # tasks[]:: An array of task keys to remove.
51
63
  # joins[]:: An array of join indicies to remove.
64
+ # queue[]:: An array of queue indicies to remove.
65
+ # middleware[]:: An array of middleware indicies to remove.
52
66
  #
53
67
  def remove(id)
54
68
  if id == "new"
@@ -58,11 +72,10 @@ module Tap
58
72
  tasks = request['tasks'] || []
59
73
  joins = request['joins'] || []
60
74
  queue = request['queue'] || []
75
+ middleware = request['middleware'] || []
61
76
 
62
77
  update_schema(id) do |schema|
63
- tasks.each do |key|
64
- schema.tasks.delete(key)
65
- end
78
+ tasks.each {|key| schema.tasks.delete(key) }
66
79
 
67
80
  joins.each {|index| schema.joins[index.to_i] = nil }
68
81
  schema.joins.compact!
@@ -70,24 +83,22 @@ module Tap
70
83
  queue.each {|index| schema.queue[index.to_i] = nil }
71
84
  schema.queue.compact!
72
85
 
86
+ middleware.each {|index| schema.middleware[index.to_i] = nil }
87
+ schema.middleware.compact!
88
+
73
89
  schema.cleanup!
74
90
  end
75
91
 
76
92
  redirect uri(id)
77
93
  end
78
94
 
79
- def configure(id)
95
+ def save(id)
80
96
  if id == "new"
81
97
  id = data.next_id(type).to_s
82
98
  end
83
99
 
84
- schema = Tap::Schema.new(request['schema'] || {})
85
- schema.scrub! do |obj|
86
- scrub(obj['config'])
87
- end
88
-
89
100
  data.create_or_update(type, id) do |io|
90
- io << schema.dump
101
+ io << yamlize(request['schema'] || '')
91
102
  end
92
103
 
93
104
  redirect uri(id)
@@ -111,8 +122,8 @@ module Tap
111
122
  Tap::Schema.new
112
123
  end
113
124
 
114
- schema.resolve! do |type, key, data|
115
- env.manifest(type)[key]
125
+ schema.resolve! do |type, key|
126
+ env[type][key]
116
127
  end
117
128
 
118
129
  render "entry.erb", :locals => {
@@ -121,41 +132,28 @@ module Tap
121
132
  }, :layout => true
122
133
  end
123
134
 
124
- def stringify(obj)
125
- case obj
126
- when String, Numeric, true, false
127
- obj.to_s
128
- when Symbol, Regexp
129
- obj.inspect
130
- when nil
131
- '~'
132
- when $stdout
133
- 'data/results.txt'
134
- else
135
- obj
136
- end
135
+ #########################
136
+ # Helpers
137
+ #########################
138
+
139
+ def render_config(resource, name="")
140
+ klass = resource[:class]
141
+ values = resource[:config] || default_config(klass.configurations)
142
+
143
+ module_render "_configs.erb", klass,
144
+ :locals => {
145
+ :name => name,
146
+ :configs => klass.configurations,
147
+ :values => values
148
+ }
137
149
  end
138
150
 
139
- def default_config(configurable)
140
- configs = configurable.configurations
141
- Configurable::DelegateHash.new(configs).to_hash do |hash, key, value|
142
- hash[key.to_s] = stringify(value)
143
- end
151
+ def default_config(configs)
152
+ Configurable::DelegateHash.new(configs).to_hash
144
153
  end
145
154
 
146
- def scrub(obj)
147
- case obj
148
- when Hash
149
- obj.delete_if do |key, value|
150
- value ? scrub(value) : true
151
- end
152
- when Array
153
- obj.delete_if do |value|
154
- value ? scrub(value) : true
155
- end
156
- end
157
-
158
- false
155
+ def format_yaml(object)
156
+ object == nil ? "~" : YAML.dump(object)[4...-1].strip
159
157
  end
160
158
 
161
159
  def update_schema(id)
@@ -170,6 +168,35 @@ module Tap
170
168
 
171
169
  id
172
170
  end
171
+
172
+ def summarize(schema)
173
+ summary = {}
174
+ schema.tasks.each_key do |key|
175
+ summary[key] = [[],[]]
176
+ end
177
+
178
+ index = 0
179
+ join_order = []
180
+ schema.joins.each do |inputs, outputs, join|
181
+ join_order.concat inputs
182
+
183
+ inputs.each do |key|
184
+ summary[key][1] << index
185
+ end
186
+
187
+ outputs.each do |key|
188
+ summary[key][0] << index
189
+ end
190
+
191
+ index += 1
192
+ end
193
+
194
+ summary.keys.sort_by do |key|
195
+ join_order.index(key) || join_order.length
196
+ end.collect do |key|
197
+ [key, *summary[key]]
198
+ end
199
+ end
173
200
  end
174
201
  end
175
202
  end
@@ -1,27 +1,32 @@
1
1
  <dl class="configs">
2
- <% configurations.each_pair do |key, config| %>
2
+ <% configs.each_pair do |key, config| %>
3
3
  <% next if config[:type] == :hidden %>
4
+ <% config_name = "#{name}[#{key.inspect}]" %>
5
+ <% value = values[key] %>
4
6
  <% if config.is_nest? %>
5
7
  <dt class="name"><%= key %></dt>
6
8
  <dd class="nested-configs">
9
+ <% configurations = config.default(false).delegates %>
7
10
  <%= 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]
11
+ :name => config_name,
12
+ :configs => configurations,
13
+ :values => value || default_config(configurations)
12
14
  }) %>
13
15
  </dd>
14
16
  <% else %>
15
17
  <dt><%= key %></dt>
16
18
  <dd class="config">
19
+ <% if config_template = module_path("_#{config[:type]}.erb", obj) %>
17
20
  <%= render(
18
- :file => module_path("_#{config[:type]}.erb", obj) || module_path("_config.erb", obj),
21
+ :file => config_template,
19
22
  :locals => {
20
- :id => "#{id}_config_#{key}",
21
23
  :obj => obj,
22
- :name => "#{name}[#{key}]",
24
+ :name => config_name,
23
25
  :config => config,
24
- :value => values[key.to_s]}) %>
26
+ :value => value}) %>
27
+ <% else%>
28
+ <input name="<%= config_name %>" type="text" value="<%= format_yaml(value) %>" />
29
+ <% end %>
25
30
  </dd>
26
31
  <% end %>
27
32
  <% end %>
@@ -1,2 +1,2 @@
1
1
  <input name="<%= name %>" type="hidden" value="false" />
2
- <input name="<%= name %>" type="checkbox" value="true" <%= value == "true" ? 'checked="true"' : '' %> />
2
+ <input name="<%= name %>" type="checkbox" value="true" <%= value ? 'checked="true"' : '' %> />
@@ -1,8 +1,6 @@
1
- <input type="hidden" name="<%= name %>[][]" value="" />
1
+ <input type="hidden" name="<%= name %>[]" value="#" />
2
2
  <select name="<%= name %>[]" multiple="true">
3
- <% value.collect! {|val| stringify(val) } %>
4
3
  <% (config[:options] || []).each do |option| %>
5
- <% option = stringify(option) %>
6
- <option value="<%= escape_html(option) %>" <%= value.include?(option) ? "selected='true' " : ""%>><%= option %></option>
4
+ <option value="<%= format_yaml(option) %>" <%= value && value.include?(option) ? "selected='true' " : ""%>><%= option %></option>
7
5
  <% end %>
8
6
  </select>
@@ -1,6 +1,5 @@
1
1
  <select name="<%= name %>">
2
2
  <% (config[:options] || []).each do |option| %>
3
- <% option = stringify(option) %>
4
- <option value="<%= escape_html(option) %>" <%= value == option ? "selected='true' " : ""%>><%= option %></option>
3
+ <option value="<%= format_yaml(option) %>" <%= value == option ? "selected='true' " : ""%>><%= option %></option>
5
4
  <% end %>
6
5
  </select>
@@ -1,2 +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>
1
+ <input name="<%= name %>" type="radio" value="true" <%= value ? 'checked="true" ' : '' %>>on</input>
2
+ <input name="<%= name %>" type="radio" value="false" <%= !value ? 'checked="true" ' : '' %>>off</input>
@@ -0,0 +1,32 @@
1
+ <h1 class="class"><%= obj %></h1>
2
+
3
+ <ul>
4
+ <li class="source_file">
5
+ <h2>Source File</h2>
6
+ <p><%= obj.source_file %><p>
7
+ </li>
8
+ <li>
9
+ <h2>Summary</h2>
10
+ <%= obj.desc.subject %>
11
+ </li>
12
+ <li>
13
+ <h2>Documentation</h2>
14
+ <pre class="desc"><%= obj.desc.wrap %></pre>
15
+ </li>
16
+ <li class="ancestors">
17
+ <h2>Actions</h2>
18
+ <ol>
19
+ <% obj.actions.each do |action| %>
20
+ <li><%= action %></li>
21
+ <% end %>
22
+ </ol>
23
+ </li>
24
+ <li class="ancestors">
25
+ <h2>Ancestors</h2>
26
+ <ol>
27
+ <% obj.ancestors.each do |ancestor| %>
28
+ <li><%= ancestor %></li>
29
+ <% end %>
30
+ </ol>
31
+ </li>
32
+ </ul>
@@ -1,14 +1,30 @@
1
1
  <%= render('_build.erb', :locals => {:id => id}) %>
2
2
  <%= render('_controls.erb', :locals => {:id => id}) %>
3
3
 
4
- <h2>Design:</h2>
5
4
  <!-- add form -->
6
- <% traverse = schema.traverse %>
5
+ <% summary = summarize(schema) %>
7
6
  <form id="add_<%= id %>" class="add" method="post" action="<%= uri(id) %>">
8
7
  <input type="hidden" name="_method" value="add" />
9
8
 
9
+ <h2>Add:</h2>
10
+ <p>
11
+ Select resources to add or enque. To add a join, select the join
12
+ and the input and output indices for the join in the summary table.
13
+ </p>
14
+
15
+ <h3>Tasks</h3>
16
+ <ul>
17
+ <% server.env.minimap.each do |(env_name, env)| %>
18
+ <% env.manifest(:task).minimap.each do |(name, const)| %>
19
+ <% key = "#{env_name}:#{name}" %>
20
+ <li><input name="tasks[]" value="<%= key %>" type="checkbox"><%= key %></input></li>
21
+ <% end %>
22
+ <% end %>
23
+ </ul>
24
+
25
+ <h3>Joins</h3>
10
26
  <table>
11
- <% traverse.each do |(key, inputs, outputs)| %>
27
+ <% summary.each do |(key, inputs, outputs)| %>
12
28
  <tr>
13
29
  <td><input name="outputs[]" value="<%= key %>" type="checkbox" /></td>
14
30
  <td><a href="#task_<%= key %>"><%= key %></a></td>
@@ -18,22 +34,32 @@
18
34
  </tr>
19
35
  <% end %>
20
36
  </table>
21
-
22
37
  <ul>
23
38
  <% server.env.minimap.each do |(env_name, env)| %>
24
- <% env.manifest(:task).minimap.each do |(name, const)| %>
39
+ <% env.manifest(:join).minimap.each do |(name, const)| %>
25
40
  <% key = "#{env_name}:#{name}" %>
26
- <li><input name="tasks[]" value="<%= key %>" type="checkbox"><%= key %></input></li>
41
+ <li><input name="join" value="<%= key %>" type="radio"><%= key %></input></li>
27
42
  <% end %>
28
43
  <% end %>
29
44
  </ul>
30
45
 
46
+ <h3>Middleware</h3>
31
47
  <ul>
32
- <% traverse.each do |(key, inputs, outputs)| %>
48
+ <% server.env.minimap.each do |(env_name, env)| %>
49
+ <% env.manifest(:middleware).minimap.each do |(name, const)| %>
50
+ <% key = "#{env_name}:#{name}" %>
51
+ <li><input name="middleware[]" value="<%= key %>" type="checkbox"><%= key %></input></li>
52
+ <% end %>
53
+ <% end %>
54
+ </ul>
55
+
56
+ <h3>Queue</h3>
57
+ <ul>
58
+ <% summary.each do |(key, inputs, outputs)| %>
33
59
  <li><input name="queue[]" value="<%= key %>" type="checkbox"><%= key %></input></li>
34
60
  <% end %>
35
61
  </ul>
36
-
62
+
37
63
  <input type="submit" value="Add" />
38
64
  </form>
39
65
 
@@ -41,30 +67,36 @@
41
67
  <form id="remove_<%= id %>" class="remove" method="post" action="<%= uri(id) %>">
42
68
  <input type="hidden" name="_method" value="remove" />
43
69
 
70
+ <h2>Remove:</h2>
71
+ <p>
72
+ Select resources to remove.
73
+ </p>
74
+
75
+ <h3>Tasks</h3>
44
76
  <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>
77
+ <% summary.each do |(key, inputs, outputs)| %>
78
+ <li><input name="tasks[]" value="<%= key %>" type="checkbox"><%= key %></input></li>
50
79
  <% end %>
51
80
  </ul>
52
-
81
+
82
+ <h3>Joins</h3>
53
83
  <ul>
54
84
  <% 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>
85
+ <li><input name="joins[]" value="<%= index %>" type="checkbox"><%= index %></input></li>
59
86
  <% end %>
60
87
  </ul>
61
88
 
89
+ <h3>Middleware</h3>
90
+ <ul>
91
+ <% schema.middleware.each_index do |index| %>
92
+ <li><input name="middleware[]" value="<%= index %>" type="checkbox"><%= index %></input></li>
93
+ <% end %>
94
+ </ul>
95
+
96
+ <h3>Queue</h3>
62
97
  <ul>
63
98
  <% 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>
99
+ <li><input name="queue[]" value="<%= index %>" type="checkbox"><%= index %></input></li>
68
100
  <% end %>
69
101
  </ul>
70
102
 
@@ -73,31 +105,28 @@
73
105
 
74
106
  <!-- configure form -->
75
107
  <form id="configure_<%= id %>" class="configure" method="post" action="<%= uri(id) %>">
76
- <input type="hidden" name="_method" value="configure" />
108
+ <input type="hidden" name="_method" value="save" />
77
109
 
78
110
  <h2>Configure:</h2>
111
+
112
+ <h3>Tasks</h3>
79
113
  <ul class="tasks">
80
114
  <% schema.tasks.each_pair do |key, task| %>
81
- <% name = "schema[tasks][#{key}]" %>
82
- <% task_class = task['class'] %>
83
- <li id="task_<%= key %>" class="task">
115
+ <% name = "schema[:tasks][#{key}]" %>
116
+ <li id="task_<%= key %>">
84
117
  <h3><a href="#add_<%= id %>"><%= key %></a></h3>
85
118
 
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 }) %>
119
+ <input type="hidden" name="<%= name %>[:id]" value="<%= task[:id] %>">
120
+ <%= render_config(task, "#{name}[:config]") %>
92
121
  </li>
93
122
  <% end %>
94
123
  </ul>
95
124
 
125
+ <h3>Joins</h3>
96
126
  <ul class="joins">
97
127
  <% 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">
128
+ <% name = "schema[:joins][]" %>
129
+ <li id="join_<%= index %>">
101
130
  <h3><a href="#add_<%= id %>"><%= index %></a></h3>
102
131
  <% inputs.each do |input| %>
103
132
  <input type="hidden" name="<%= name %>[0][]" value="<%= input %>">
@@ -105,31 +134,11 @@
105
134
  <% outputs.each do |output| %>
106
135
  <input type="hidden" name="<%= name %>[1][]" value="<%= output %>">
107
136
  <% 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 }) %>
137
+ <input type="hidden" name="<%= name %>[2][:id]" value="<%= join[:id] || 'join' %>">
138
+ <%= render_config(join, "#{name}[2][:config]") %>
131
139
  </li>
132
140
  <% end %>
133
141
  </ul>
142
+
134
143
  <input type="submit" value="Save" />
135
144
  </form>
@@ -3,41 +3,40 @@
3
3
  </div>
4
4
 
5
5
  <div id="content_main">
6
- <dl id="envs" class="manifest">
6
+ <ol id="envs" class="manifest">
7
7
  <% env_keys = server.env.minihash(true) %>
8
8
  <% server.env.each do |env| %>
9
9
  <% root = env.root %>
10
10
  <% env_key = env_keys[env] %>
11
- <dt class="key"><%= env_key %> (<%= root.root %>)</dt>
12
- <dd class="value">
13
11
  <% controllers = env.manifest(:controller) %>
12
+ <% tasks = env.manifest(:task) %>
13
+ <% next if controllers.empty? && tasks.empty? %>
14
+ <li>
15
+ <h2><%= env_key %></h2>
16
+ <ul>
14
17
  <% unless controllers.empty? %>
15
- <dl id="controllers" class="manifest">
16
- <dt class="key">controllers</dt>
17
- <dd class="value">
18
- <ol>
18
+ <li>
19
+ <h3>controllers</h3>
20
+ <ul>
19
21
  <% 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>
22
+ <li><a href="<%= escape(key) %>"><%= key %></a> (<a href="<%= help_uri('controller', key) %>">?</a>)</li>
21
23
  <% end %>
22
- </ol>
23
- </dd>
24
- </dl>
24
+ </ul>
25
+ </li>
25
26
  <% end %>
26
27
 
27
- <% tasks = env.manifest(:task) %>
28
28
  <% unless tasks.empty? %>
29
- <dl id="tasks" class="manifest">
30
- <dt class="key">tasks</dt>
31
- <dd class="value">
32
- <ol>
29
+ <li>
30
+ <h3>tasks</h3>
31
+ <ul>
33
32
  <% tasks.minimap.each do |(key, const)| %>
34
- <li><%= key %> (<a href="<%= help_uri('task', key) %>"><%= const.require_path %></a>)</li>
33
+ <li><%= key %> (<a href="<%= help_uri('task', key) %>">?</a>)</li>
35
34
  <% end %>
36
- </ol>
37
- </dd>
38
- </dl>
35
+ </ul>
36
+ </li>
39
37
  <% end %>
40
- </dd>
38
+ </ul>
39
+ </li>
41
40
  <% end %>
42
- </dl>
41
+ </ol>
43
42
  </div>
@@ -0,0 +1,49 @@
1
+ <h1 class="class"><%= obj %></h1>
2
+
3
+ <ul>
4
+ <li class="source_file">
5
+ <h2>Source File</h2>
6
+ <p><%= obj.source_file %><p>
7
+ </li>
8
+ <li>
9
+ <h2>Summary</h2>
10
+ <%= obj.desc.subject %>
11
+ </li>
12
+ <li>
13
+ <h2>Documentation</h2>
14
+ <pre class="desc"><%= obj.desc.wrap %></pre>
15
+ </li>
16
+ <li>
17
+ <h2>Signature</h2>
18
+ <%= obj.args %>
19
+ </li>
20
+ <li class="ancestors">
21
+ <% unless obj.configurations.empty? %>
22
+ <h2>Configurations</h2>
23
+ <table>
24
+ <tr>
25
+ <th>Key</th>
26
+ <th>Default</th>
27
+ <th>Type</th>
28
+ <th>Description</th>
29
+ </tr>
30
+ <% obj.configurations.each_pair do |key, delegate| %>
31
+ <tr>
32
+ <td><%= key %></td>
33
+ <td><%= delegate.default %></td>
34
+ <td><%= delegate[:type] %></td>
35
+ <td><%= delegate[:desc] %></td>
36
+ </tr>
37
+ <% end %>
38
+ </table>
39
+ <% end %>
40
+ </li>
41
+ <li class="ancestors">
42
+ <h2>Ancestors</h2>
43
+ <ol>
44
+ <% obj.ancestors.each do |ancestor| %>
45
+ <li><%= ancestor %></li>
46
+ <% end %>
47
+ </ol>
48
+ </li>
49
+ </ul>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tap-server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simon Chiang
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-05-25 00:00:00 -06:00
12
+ date: 2009-06-17 00:00:00 -06:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: 0.17.0
23
+ version: 0.18.0
24
24
  version:
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rack
@@ -45,6 +45,7 @@ extra_rdoc_files:
45
45
  files:
46
46
  - cmd/server.rb
47
47
  - lib/tap/controller.rb
48
+ - lib/tap/controller/extname.rb
48
49
  - lib/tap/controller/rest_routes.rb
49
50
  - lib/tap/controller/utils.rb
50
51
  - lib/tap/controllers/app.rb
@@ -63,7 +64,6 @@ files:
63
64
  - tap.yml
64
65
  - views/404.erb
65
66
  - views/500.erb
66
- - views/configurable/_config.erb
67
67
  - views/configurable/_configs.erb
68
68
  - views/configurable/_flag.erb
69
69
  - views/configurable/_list_select.erb
@@ -71,6 +71,7 @@ files:
71
71
  - views/configurable/_switch.erb
72
72
  - views/layout.erb
73
73
  - views/object/obj.erb
74
+ - views/tap/controller/help.erb
74
75
  - views/tap/controllers/app/_action.erb
75
76
  - views/tap/controllers/app/build.erb
76
77
  - views/tap/controllers/app/enque.erb
@@ -83,13 +84,11 @@ files:
83
84
  - views/tap/controllers/data/index.erb
84
85
  - views/tap/controllers/schema/_build.erb
85
86
  - views/tap/controllers/schema/_index_entry.erb
86
- - views/tap/controllers/schema/join.erb
87
87
  - views/tap/controllers/schema/entry.erb
88
- - views/tap/controllers/schema/task.erb
89
88
  - views/tap/controllers/server/access.erb
90
89
  - views/tap/controllers/server/admin.erb
91
- - views/tap/controllers/server/help.erb
92
90
  - views/tap/controllers/server/index.erb
91
+ - views/tap/task/help.erb
93
92
  - views/tap/task/input.erb
94
93
  - views/tap/tasks/load/input.erb
95
94
  - README
@@ -1 +0,0 @@
1
- <input name="<%= name %>" type="text" value="<%= escape_html(value) %>" />
@@ -1,6 +0,0 @@
1
- <%= module_render("_configs.erb", obj, :locals => {
2
- :id => id,
3
- :name => "#{name}[config]",
4
- :configurations => obj.configurations,
5
- :values => values || {}
6
- }) %>
@@ -1,6 +0,0 @@
1
- <%= module_render("_configs.erb", obj, :locals => {
2
- :id => id,
3
- :name => "#{name}[config]",
4
- :configurations => obj.configurations,
5
- :values => values
6
- }) %>
@@ -1,23 +0,0 @@
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>