rutema_web 1.0.3 → 1.0.4

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.txt CHANGED
@@ -1,3 +1,13 @@
1
+ === 1.0.4 / 2010-04-23
2
+ * Fixed manifest missing entry for the flot lib
3
+ * Fixed sequence of data in flot diagrams (was reversed)
4
+ * Added timeline diagrams per config
5
+ * Scenarios in a run are now listed in ascending order of start time
6
+ * Custom settings solution scrapped in favor for Sinatra's settings.
7
+ * Settings expanded to include last n runs number
8
+ * IMPORTANT: a configuration file is now needed instead of the sqlite3 database file, as rutema_web should now be able to connect to all activerecord databases. The configuration file is a yaml dump of {:db=>{:adapter=>'sqlite3', :database=>'rutema_test.db'}, :settings=>{ :page_size=>10, :last_n_runs=>20, :port=>7000, :show_setup_teardown=>true}}
9
+ Also important to know that at the moment this does not check or adjust paths, so the yaml file should be in the directory from which rutema_web is running so that paths to sqlite3 databases are correct.
10
+ * Statistics now use a drop down list instead of a bunch of buttons - tidier UI
1
11
  === 1.0.3 / 2009-12-17
2
12
  * Replaced gruff with flot removing the gruff/RMagick/ImageMagick dependency
3
13
  * Trivial caching of statistic data implemented to speed up graph display
data/Manifest.txt CHANGED
@@ -7,11 +7,11 @@ bin/rutema_web
7
7
  lib/rutema_web/gems.rb
8
8
  lib/rutema_web/main.rb
9
9
  lib/rutema_web/model.rb
10
- lib/rutema_web/ruport_formatter.rb
11
- lib/rutema_web/sinatra.rb
12
10
  lib/rutema_web/public/css/style.css
13
11
  lib/rutema_web/public/images/bg_menu.gif
14
12
  lib/rutema_web/public/images/bg_submenu.gif
13
+ lib/rutema_web/public/images/left.png
14
+ lib/rutema_web/public/images/right.png
15
15
  lib/rutema_web/public/images/run_error.png
16
16
  lib/rutema_web/public/images/run_ok.png
17
17
  lib/rutema_web/public/images/run_warn.png
@@ -19,11 +19,14 @@ lib/rutema_web/public/images/step_error.png
19
19
  lib/rutema_web/public/images/step_ok.png
20
20
  lib/rutema_web/public/images/step_warn.png
21
21
  lib/rutema_web/public/images/tie_logo.gif
22
- lib/rutema_web/public/images/left.png
23
- lib/rutema_web/public/images/right.png
24
22
  lib/rutema_web/public/js/folding.js
23
+ lib/rutema_web/public/js/graph.js
25
24
  lib/rutema_web/public/js/jquery-1.3.2.min.js
26
25
  lib/rutema_web/public/js/jquery.flot.min.js
27
26
  lib/rutema_web/public/js/jquery.flot.stack.min.js
27
+ lib/rutema_web/ruport_formatter.rb
28
+ lib/rutema_web/sinatra.rb
28
29
  lib/rutema_web/views/flot.erb
29
30
  lib/rutema_web/views/main.erb
31
+ lib/rutema_web/views/timeline.erb
32
+ test/test_model.rb
data/README.txt CHANGED
@@ -10,17 +10,12 @@ diagrams of debatable aesthetics but undoubtable value!
10
10
  == FEATURES/PROBLEMS:
11
11
 
12
12
  == SYNOPSIS:
13
- rutema_web [results.db] and browse to http://localhost:7000 for the glorious view
13
+ rutema_web config.yaml and browse to http://localhost:7000 for the glorious view
14
14
 
15
15
  == REQUIREMENTS:
16
- * patir (http://patir.rubyforge.org)
17
16
  * rutema (http://patir.rubyforge.org/rutema)
18
- * activerecord (http://ar.rubyonrails.com/)
19
- * sqlite3 (http://rubyforge.org/projects/sqlite-ruby/)
20
17
  * sinatra (http://www.sinatrarb.com/)
21
18
  * ruport (http://rubyreports.org/)
22
- * acts_as_reportable
23
- * gruff/RMagick (optional, but needed if you want to see the statistics graphs)
24
19
 
25
20
  == INSTALL:
26
21
  * sudo gem install rutema_web
@@ -28,7 +23,7 @@ rutema_web [results.db] and browse to http://localhost:7000 for the glorious vie
28
23
  == LICENSE:
29
24
  (The Ruby License)
30
25
 
31
- rutema is copyright (c) 2007 - 2009 Vassilis Rizopoulos
26
+ rutema is copyright (c) 2007 - 2010 Vassilis Rizopoulos
32
27
 
33
28
  You can redistribute it and/or modify it under either the terms of the GPL
34
29
  (see COPYING.txt file), or the conditions below:
data/Rakefile CHANGED
@@ -14,8 +14,8 @@ Hoe.spec('rutema_web') do |p|
14
14
  p.description = p.paragraphs_of('README.txt', 1..5).join("\n\n")
15
15
  p.url = p.paragraphs_of('README.txt', 0).first.split(/\n/)[1..-1]
16
16
  p.changes = p.paragraphs_of('History.txt', 0..1).join("\n\n")
17
- p.extra_deps<<['rutema',"1.0.7"]
18
- p.extra_deps<<['sinatra','0.9.4']
17
+ p.extra_deps<<['rutema',"=1.0.9"]
18
+ p.extra_deps<<['sinatra','=1.0.0']
19
19
  p.extra_deps<<['ruport','>=1.6.1']
20
20
  p.spec_extras={:executables=>["rutema_web"],
21
21
  :default_executable=>"rutema_web"}
@@ -1,4 +1,4 @@
1
1
  require 'rubygems'
2
- gem 'sinatra','0.9.4'
3
- gem 'rutema',"1.0.7"
2
+ gem 'sinatra','=1.0.0'
3
+ gem 'rutema',"=1.0.9"
4
4
  gem 'ruport','>=1.6.1'
@@ -1,29 +1,36 @@
1
1
  $:.unshift File.join(File.dirname(__FILE__),"..")
2
2
  require 'rutema_web/sinatra'
3
- require 'rutema/db'
4
3
  require 'optparse'
4
+ require 'rutema/reporters/activerecord'
5
5
  #This is the web frontend for Rutema databases.
6
6
  module RutemaWeb
7
+ extend Rutema::ActiveRecordConnections
7
8
  #This module defines the version numbers for the library
8
9
  module Version
9
10
  MAJOR=1
10
11
  MINOR=0
11
- TINY=3
12
+ TINY=4
12
13
  STRING=[ MAJOR, MINOR, TINY ].join( "." )
13
14
  end
14
15
  #Starts App
15
16
  def self.start
16
17
  logger=Patir.setup_logger
17
- db_file=parse_command_line(ARGV)
18
- db_file=File.expand_path(db_file)
19
- Rutema.connect_to_ar(db_file,logger)
20
- RutemaWeb::UI::SinatraApp.run!
18
+ cfg_file=parse_command_line(ARGV)
19
+ cfg_file=File.expand_path(cfg_file)
20
+ configuration=YAML.load_file(cfg_file)
21
+ if (configuration[:db])
22
+ self.connect_to_active_record(configuration[:db],logger)
23
+ RutemaWeb::UI::SinatraApp.define_settings(configuration[:settings])
24
+ RutemaWeb::UI::SinatraApp.run!
25
+ else
26
+ logger.fatal("No database configuration information found in #{cfg_file}")
27
+ end
21
28
  end
22
29
  #Parses the command line arguments
23
30
  def self.parse_command_line args
24
31
  args.options do |opt|
25
- opt.on("Usage:")
26
- opt.on("rutemaweb [options] database_file")
32
+ opt.on("Usage:")
33
+ opt.on("rutema_web [options] config_file")
27
34
  opt.on("Options:")
28
35
  opt.on("--debug", "-d","Turns on debug messages") { $DEBUG=true }
29
36
  opt.on("-v", "--version","Displays the version") { $stdout.puts("v#{Version::STRING}");exit 0 }
@@ -38,6 +45,7 @@ module RutemaWeb
38
45
  end
39
46
  end
40
47
  end
48
+
41
49
  end
42
50
 
43
51
 
@@ -1,7 +1,5 @@
1
1
  # Copyright (c) 2008 Vassilis Rizopoulos. All rights reserved.
2
- $:.unshift File.join(File.dirname(__FILE__),"..")
3
- require 'active_record'
4
- require 'ruport/acts_as_reportable'
2
+ $:.unshift File.join(File.dirname(__FILE__),"..")
5
3
  require 'rutema/model'
6
4
  module Rutema
7
5
  module Model
@@ -0,0 +1,38 @@
1
+ $(function () {
2
+ var options = {
3
+ stack: true,
4
+ bars: { show: true },
5
+ xaxis: { tickDecimals: 0, tickSize: 1 }
6
+ };
7
+ var data = [];
8
+ var placeholder = $("#placeholder");
9
+
10
+ $.plot(placeholder, data, options);
11
+
12
+ $("input.fetchSeries").click(function () {
13
+ //var button = $(this);
14
+ var cfg = document.configurations_form.configurations_list.value
15
+ // find the URL in the link right next to us
16
+ var dataurl = '/statistics/data/' + cfg;
17
+
18
+ // then fetch the data with jQuery
19
+ function onDataReceived(series) {
20
+ // and plot all we got
21
+ $.plot(placeholder, series, {
22
+ series: {
23
+ stack: true,
24
+ bars: { show: true, barWidth: 0.6 },
25
+ },
26
+ legend: {position:'nw'}
27
+ });
28
+ }
29
+
30
+ $.ajax({
31
+ url: dataurl,
32
+ method: 'GET',
33
+ dataType: 'json',
34
+ success: onDataReceived
35
+ });
36
+ });
37
+ })
38
+
@@ -61,7 +61,7 @@ module RutemaWeb
61
61
  end
62
62
  return msg
63
63
  end
64
-
64
+
65
65
  def run_link r
66
66
  "<a class=\"smallgreytext\" href=\"#{run_url(r)}\">Run #{r.id}</a>"
67
67
  end
@@ -112,29 +112,6 @@ module RutemaWeb
112
112
 
113
113
  end
114
114
 
115
- #Contains all the settings that control the display of information for RutemaWeb's controllers
116
- module Settings
117
- DEFAULT_PAGE_SIZE=10
118
- @@rutemaweb_settings||=Hash.new
119
- #Set to true to show all setup and teardown scenarios
120
- def show_setup_teardown= v
121
- @@rutemaweb_settings[:show_setup_teardown]= v
122
- end
123
-
124
- def show_setup_teardown?
125
- return @@rutemaweb_settings[:show_setup_teardown]
126
- end
127
-
128
- def page_size= v
129
- @@rutemaweb_settings[:page_size]=v
130
- end
131
-
132
- def page_size
133
- @@rutemaweb_settings[:page_size]||=DEFAULT_PAGE_SIZE
134
- return @@rutemaweb_settings[:page_size]
135
- end
136
- end
137
-
138
115
  module Statistics
139
116
  private
140
117
  #extract all the configuration names
@@ -142,31 +119,53 @@ module RutemaWeb
142
119
  runs=Rutema::Model::Run.find(:all)
143
120
  return runs.map{|r| r.context[:config_file] if r.context.is_a?(Hash)}.compact.uniq
144
121
  end
145
- def panel_configurations
146
- panel=""
122
+ def panel_configurations type,action=nil
123
+ panel="<form name=\"configurations_form\" action=\"#{action}\" method=\"post\"><select name=\"configurations_list\">"
124
+
147
125
  configurations.each do |cfg|
148
- panel<<"<input class=\"fetchSeries\" type=\"button\" value=\"#{cfg}\">"
149
- panel<<"<br/>"
126
+ panel<<"<option value=\"#{cfg}\">#{cfg}</option>"
150
127
  end
128
+ panel<<"</select><input class=\"fetchSeries\" type=\"#{type}\" value=\"Go\"></form>"
151
129
  return panel
152
130
  end
153
131
  end
154
-
132
+
133
+ module Timeline
134
+ #Collects the timeline information from a set of runs.
135
+ #Essentially this lists the status for all scenarios in each run
136
+ #filling in not_executed status for any missing entries
137
+ def timeline_data runs
138
+ # {:scenario=>{"run_id"=>status}}
139
+ data=Hash.new
140
+ runs.each do |run|
141
+ run.scenarios.each do |scenario|
142
+ unless scenario.name=~/_setup$/ || scenario.name=~/_teardown$/
143
+ data[scenario.name]||={}
144
+ data[scenario.name][run.id]=[scenario.status,scenario.id]
145
+ end
146
+ end
147
+ end
148
+ #fill in the blanks
149
+ data.each do |k,v|
150
+ runs.each do |run|
151
+ data[k][run.id]=["not_executed",nil] unless data[k][run.id]
152
+ end
153
+ end
154
+ return data
155
+ end
156
+ end
157
+
155
158
  class SinatraApp<Sinatra::Base
156
159
  include ViewUtilities
157
- include Settings
158
160
  include Statistics
161
+ include Timeline
159
162
  attr_accessor :title,:panel_content,:content_title,:content
160
- enable :logging
161
- enable :run
162
- enable :static
163
- set :server, %w[thin mongrel webrick]
164
- set :port, 7000
165
- set :root, File.dirname(__FILE__)
166
- set :public, File.dirname(__FILE__) + '/public'
167
163
 
164
+ DEFAULT_SETTINGS = {:show_setup_teardown=>true,:page_size=>10,:last_n_runs=>20,:sorting_order=>"start_time",:port=>7000}
165
+
168
166
  @@logger = Patir.setup_logger
169
167
  @@cache = {}
168
+
170
169
  get '/' do
171
170
  page_setup "Rutema",panel_runs,"Welcome to Rutema","<p>This is the rutema web interface.<br/>It allows you to browse the contents of the test results database.</p><p>Currently you can view the results for each separate run, the results for a specific scenario (a complete list of all steps executed in the scenario with standard and error output logs) or the complete execution history of a scenario.</p><p>The panel on the left shows a list of the ten most recent runs.</p>"
172
171
  erb :main
@@ -178,17 +177,17 @@ module RutemaWeb
178
177
  page_setup "Run #{run_id}",panel_runs,"Summary of run #{run_id}",single_run(run_id)
179
178
  erb :main
180
179
  end
181
-
180
+
182
181
  get '/run/?' do
183
182
  runs(0)
184
183
  erb :main
185
184
  end
186
-
185
+
187
186
  get '/runs/?' do
188
187
  runs(0)
189
188
  erb :main
190
189
  end
191
-
190
+
192
191
  get '/runs/:page' do |page|
193
192
  runs(page)
194
193
  erb :main
@@ -207,19 +206,19 @@ module RutemaWeb
207
206
  end
208
207
  erb :main
209
208
  end
210
-
209
+
211
210
  get '/scenario/?' do
212
211
  scenarios(0)
213
212
  erb :main
214
213
  end
215
-
214
+
216
215
  get '/scenarios/?' do
217
216
  scenarios(0)
218
217
  erb :main
219
218
  end
220
-
219
+
221
220
  get '/statistics/?' do
222
- page_setup "Rutema",panel_configurations,"Statistics"
221
+ page_setup "Rutema",panel_configurations("button"),"Statistics"
223
222
  @content="<p>rutema statistics provide reports that present the results on a time axis<br/>At present you can see the ratio of successful vs. failed test cases over time grouped per configuration file.</p>"
224
223
  erb :flot
225
224
  end
@@ -229,24 +228,86 @@ module RutemaWeb
229
228
  successful,failed,not_executed=*dt
230
229
  content_type "text/json"
231
230
  return ActiveSupport::JSON.encode([{:data=>successful,:label=>"successful",:color=>"green"},
232
- {:data=>failed,:label=>"failed",:color=>"red"},
233
- {:data=>not_executed,:label=>"not_executed",:color=>"yellow"}
231
+ {:data=>failed,:label=>"failed",:color=>"red"},
232
+ {:data=>not_executed,:label=>"not_executed",:color=>"yellow"}
234
233
  ])
235
234
  end
235
+
236
+ get '/timeline/?' do
237
+ page_setup "Rutema",panel_configurations("submit","/timeline"),"Timeline"
238
+ @content="<p>rutema timelines show the status of executed scenarios for the last N runs.</p>"
239
+ erb :timeline
240
+ end
241
+
242
+ post '/timeline' do
243
+ configuration = params["configurations_list"]
244
+ timeline(configuration)
245
+ erb :timeline
246
+ end
247
+
248
+ get '/timeline/:configuration' do |configuration|
249
+ timeline(configuration)
250
+ erb :timeline
251
+ end
252
+
253
+
254
+ def self.define_settings cfg
255
+ #the settings that are not public
256
+ enable :logging
257
+ enable :run
258
+ enable :static
259
+ set :server, %w[thin mongrel webrick]
260
+ set :root, File.dirname(__FILE__)
261
+ set :public, File.dirname(__FILE__) + '/public'
262
+ #the settings that can be changed
263
+ #set any missing values with the default
264
+ cfg[:show_setup_teardown] ||= DEFAULT_SETTINGS[:show_setup_teardown]
265
+ cfg[:page_size] ||= DEFAULT_SETTINGS[:page_size]
266
+ cfg[:last_n_runs] ||= DEFAULT_SETTINGS[:last_n_runs]
267
+ cfg[:port] ||= DEFAULT_SETTINGS[:port]
268
+ #set them
269
+ set :show_setup_teardown, cfg[:show_setup_teardown]
270
+ set :page_size, cfg[:page_size]
271
+ set :last_n_runs, cfg[:last_n_runs]
272
+ set :port, cfg[:port]
273
+ end
236
274
  private
275
+ def timeline configuration
276
+ page_setup "Rutema",panel_configurations("submit","/timeline"),"Timeline for #{configuration}"
277
+ data=timeline_data(last_n_runs_in_configuration(configuration,settings.last_n_runs))
278
+
279
+ @content="<table class=\"timeline\">"
280
+ data.each do |sc_name,run_data|
281
+ @content<<"<tr><td>#{sc_name}</td>"
282
+ run_data.keys.sort.each do |key|
283
+ sc_data=run_data[key]
284
+ @content<<"<td class=\"#{sc_data[0]}\">"
285
+ if sc_data[1]
286
+ @content<<"<a class=\"timeline\" href=\"/scenario/#{sc_data[1]}\">#{key}</a>"
287
+ else
288
+ @content<<"<span class=\"timeline\">#{key}</span>"
289
+ end
290
+ @content<<"</td>"
291
+ end
292
+ @content<<"</tr>"
293
+ end
294
+ @content<<"</table>"
295
+ end
237
296
 
238
297
  def get_data_from_cache configuration
239
298
  cache = @@cache[configuration]
240
299
  return cache[:data] if cache && cache[:index] == all_runs_in_configuration(configuration).size
241
300
  calculate_data(configuration)
242
301
  end
302
+
243
303
  def calculate_data configuration
244
- runs=all_runs_in_configuration(configuration)
304
+ runs=last_n_runs_in_configuration(configuration,50)
305
+ #runs=all_runs_in_configuration(configuration)
245
306
  successful=[]
246
307
  failed=[]
247
308
  not_executed=[]
248
309
  counter = 0
249
- runs.each do |r|
310
+ runs.reverse.each do |r|
250
311
  fails=r.number_of_failed
251
312
  no_exec = r.number_of_not_executed
252
313
  #the scenarios array includes setup and teardown scripts as well - we want only the actual testcases
@@ -261,7 +322,7 @@ module RutemaWeb
261
322
  end
262
323
  #finds all the runs belonging to a specific configuration
263
324
  def all_runs_in_configuration configuration
264
- runs=Rutema::Model::Run.find(:all,:order=>"id DESC")
325
+ runs=Rutema::Model::Run.find(:all,:order=>"id ASC")
265
326
  #find all runs beloging to this configuration
266
327
  runs.select{|r| r.context[:config_file]==configuration if r.context.is_a?(Hash)} if configuration
267
328
  end
@@ -272,15 +333,15 @@ module RutemaWeb
272
333
  @content_title=content_title
273
334
  @content=content
274
335
  end
275
-
336
+
276
337
  def runs page
277
338
  page_setup "All runs",nil,"All runs"
278
339
 
279
340
  dt=[]
280
- total_pages=(Rutema::Model::Run.count/page_size)+1
341
+ total_pages=(Rutema::Model::Run.count/settings.page_size)+1
281
342
  page_number=validated_page_number(page,total_pages)
282
343
 
283
- runs=Rutema::Model::Run.find_on_page(page_number,page_size)
344
+ runs=Rutema::Model::Run.find_on_page(page_number,settings.page_size)
284
345
  runs.each do |r|
285
346
  dt<<[status_icon(r.status),run_summary(r),r.config_file]
286
347
  end
@@ -288,7 +349,7 @@ module RutemaWeb
288
349
  @content<<"<br/>"
289
350
  @content<<run_page_link(page_number,total_pages)
290
351
  end
291
-
352
+
292
353
  def scenarios page
293
354
  page_setup "All scenarios",panel_runs,"All scenarios"
294
355
  runs=Hash.new
@@ -301,10 +362,10 @@ module RutemaWeb
301
362
  runs[nm]<<sc.run.id
302
363
  end
303
364
  #the size of the hash is also the number of unique scenario names
304
- total_pages=(runs.size / page_size)+1
365
+ total_pages=(runs.size / settings.page_size)+1
305
366
  page_number=validated_page_number(page,total_pages)
306
367
  #Ramaze::Log.debug("Getting scenarios for page #{page_number}")
307
- scens=Rutema::Model::Scenario.find_on_page(page_number,page_size,conditions)
368
+ scens=Rutema::Model::Scenario.find_on_page(page_number,settings.page_size,conditions)
308
369
  #and now build the table data
309
370
  dt=Array.new
310
371
  scens.each do |sc|
@@ -396,7 +457,7 @@ module RutemaWeb
396
457
  conditions="run_id = :run_id AND name NOT LIKE '%_teardown' AND name NOT LIKE '%_setup'"
397
458
  table=Rutema::Model::Scenario.report_table(:all,
398
459
  :conditions=>[conditions,{:run_id=>run_id}],:except=>["run_id"],
399
- :order=>"name ASC")
460
+ :order=>"start_time ASC")
400
461
  if table.empty?
401
462
  ret<<"No scenarios for run #{run_id}"
402
463
  else
@@ -425,7 +486,16 @@ module RutemaWeb
425
486
  scenarios.each{|sc| failures+=1 unless sc.status=="success" }
426
487
  return ((failures.to_f/scenarios.size)*100).round
427
488
  end
428
-
489
+
490
+ def last_n_runs_in_configuration configuration,n
491
+ runs=all_runs_in_configuration(configuration)
492
+ runs.reverse!
493
+ if n<runs.size
494
+ return runs[-0,n]
495
+ else
496
+ return runs
497
+ end
498
+ end
429
499
  end#SinatraApp
430
500
  end#UI module
431
501
  end
@@ -24,7 +24,7 @@
24
24
  </div>
25
25
  <div id="menu">
26
26
  <div align="right" class="smallwhitetext" style="padding:9px;">
27
- <a href="/">Home</a> | <a href="/run">Runs</a> | <a href="/scenario">Scenarios</a> | <a href="/statistics">Statistics</a>
27
+ <a href="/">Home</a> | <a href="/run">Runs</a> | <a href="/scenario">Scenarios</a> | <a href="/statistics">Statistics</a> | <a href="/timeline">Timeline</a>
28
28
  </div>
29
29
  </div>
30
30
  <div id="submenu">
@@ -46,7 +46,7 @@
46
46
  </div>
47
47
  <div id="footer" class="smallgraytext">
48
48
  rutemaweb v<%= RutemaWeb::Version::STRING %> | <a href="/">Home</a> | <a href="http://patir.rubyforge.org/rutema">about rutema</a> |
49
- &copy; 2008 - 2009 <a href="http://www.braveworld.net/riva" target="_blank">Vassilis Rizopoulos</a>
49
+ &copy; 2008 - 2010 <a href="http://www.braveworld.net/riva" target="_blank">Vassilis Rizopoulos</a>
50
50
  </div>
51
51
  </div>
52
52
  </div>
@@ -25,7 +25,7 @@
25
25
  </div>
26
26
  <div id="menu">
27
27
  <div align="right" class="smallwhitetext" style="padding:9px;">
28
- <a href="/">Home</a> | <a href="/run">Runs</a> | <a href="/scenario">Scenarios</a> | <a href="/statistics">Statistics</a>
28
+ <a href="/">Home</a> | <a href="/run">Runs</a> | <a href="/scenario">Scenarios</a> | <a href="/statistics">Statistics</a> | <a href="/timeline">Timeline</a>
29
29
  </div>
30
30
  </div>
31
31
  <div id="submenu">
@@ -46,7 +46,7 @@
46
46
  </div>
47
47
  <div id="footer" class="smallgraytext">
48
48
  rutemaweb v<%= RutemaWeb::Version::STRING %> | <a href="/">Home</a> | <a href="http://patir.rubyforge.org/rutema">about rutema</a> |
49
- &copy; 2008 - 2009 <a href="http://www.braveworld.net/riva" target="_blank">Vassilis Rizopoulos</a>
49
+ &copy; 2008 - 2010 <a href="http://www.braveworld.net/riva" target="_blank">Vassilis Rizopoulos</a>
50
50
  </div>
51
51
  </div>
52
52
  </div>
@@ -0,0 +1,49 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta name="author" content="Vassilis Rizopoulos" />
5
+ <meta http-equiv="Content-Type" content="text/html; charset=utf8" />
6
+ <link rel="stylesheet" href="/css/style.css" type="text/css" />
7
+ <title><%=@title%></title>
8
+ </head>
9
+ <body>
10
+ <div id="page" align="center">
11
+ <div id="content" style="width:800px">
12
+ <div id="logo">
13
+ <div style="margin-top:70px" class="whitetitle">rutema</div>
14
+ </div>
15
+ <div id="topheader">
16
+ <div align="left" class="bodytext">
17
+ </div>
18
+ <div id="toplinks" class="smallgraytext">
19
+ </div>
20
+ </div>
21
+ <div id="menu">
22
+ <div align="right" class="smallwhitetext" style="padding:9px;">
23
+ <a href="/">Home</a> | <a href="/run">Runs</a> | <a href="/scenario">Scenarios</a> | <a href="/statistics">Statistics</a> | <a href="/timeline">Timeline</a>
24
+ </div>
25
+ </div>
26
+ <div id="submenu">
27
+ <div align="right" class="smallgraytext" style="padding:9px;"></div>
28
+ </div>
29
+ <div id="contenttext">
30
+ <div style="padding:10px">
31
+ <span class="titletext"><%=@content_title%></span>
32
+ </div>
33
+ <div class="bodytext" style="padding:12px;" align="justify"><%=@content%></div>
34
+ </div>
35
+ <div id="leftpanel">
36
+ <% if @panel_content && !@panel_content.empty? %>
37
+ <div align="justify" class="graypanel">
38
+ <%=@panel_content%>
39
+ </div>
40
+ <% end %>
41
+ </div>
42
+ <div id="footer" class="smallgraytext">
43
+ rutemaweb v<%= RutemaWeb::Version::STRING %> | <a href="/">Home</a> | <a href="http://patir.rubyforge.org/rutema">about rutema</a> |
44
+ &copy; 2008 - 2010 <a href="http://www.braveworld.net/riva" target="_blank">Vassilis Rizopoulos</a>
45
+ </div>
46
+ </div>
47
+ </div>
48
+ </body>
49
+ </html>
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rutema_web
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ prerelease: false
5
+ segments:
6
+ - 1
7
+ - 0
8
+ - 4
9
+ version: 1.0.4
5
10
  platform: ruby
6
11
  authors:
7
12
  - Vassilis Rizopoulos
@@ -9,49 +14,79 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2009-12-17 00:00:00 +01:00
17
+ date: 2010-04-23 00:00:00 +03:00
13
18
  default_executable: rutema_web
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: rutema
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
20
24
  requirements:
21
25
  - - "="
22
26
  - !ruby/object:Gem::Version
23
- version: 1.0.7
24
- version:
27
+ segments:
28
+ - 1
29
+ - 0
30
+ - 9
31
+ version: 1.0.9
32
+ type: :runtime
33
+ version_requirements: *id001
25
34
  - !ruby/object:Gem::Dependency
26
35
  name: sinatra
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
30
38
  requirements:
31
39
  - - "="
32
40
  - !ruby/object:Gem::Version
33
- version: 0.9.4
34
- version:
41
+ segments:
42
+ - 1
43
+ - 0
44
+ - 0
45
+ version: 1.0.0
46
+ type: :runtime
47
+ version_requirements: *id002
35
48
  - !ruby/object:Gem::Dependency
36
49
  name: ruport
37
- type: :runtime
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
40
52
  requirements:
41
53
  - - ">="
42
54
  - !ruby/object:Gem::Version
55
+ segments:
56
+ - 1
57
+ - 6
58
+ - 1
43
59
  version: 1.6.1
44
- version:
60
+ type: :runtime
61
+ version_requirements: *id003
45
62
  - !ruby/object:Gem::Dependency
46
- name: hoe
63
+ name: rubyforge
64
+ prerelease: false
65
+ requirement: &id004 !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ segments:
70
+ - 2
71
+ - 0
72
+ - 4
73
+ version: 2.0.4
47
74
  type: :development
48
- version_requirement:
49
- version_requirements: !ruby/object:Gem::Requirement
75
+ version_requirements: *id004
76
+ - !ruby/object:Gem::Dependency
77
+ name: hoe
78
+ prerelease: false
79
+ requirement: &id005 !ruby/object:Gem::Requirement
50
80
  requirements:
51
81
  - - ">="
52
82
  - !ruby/object:Gem::Version
53
- version: 2.3.3
54
- version:
83
+ segments:
84
+ - 2
85
+ - 6
86
+ - 0
87
+ version: 2.6.0
88
+ type: :development
89
+ version_requirements: *id005
55
90
  description: |-
56
91
  == DESCRIPTION:
57
92
  rutema_web is the web frontend for rutema.
@@ -63,17 +98,12 @@ description: |-
63
98
  == FEATURES/PROBLEMS:
64
99
 
65
100
  == SYNOPSIS:
66
- rutema_web [results.db] and browse to http://localhost:7000 for the glorious view
101
+ rutema_web config.yaml and browse to http://localhost:7000 for the glorious view
67
102
 
68
103
  == REQUIREMENTS:
69
- * patir (http://patir.rubyforge.org)
70
104
  * rutema (http://patir.rubyforge.org/rutema)
71
- * activerecord (http://ar.rubyonrails.com/)
72
- * sqlite3 (http://rubyforge.org/projects/sqlite-ruby/)
73
105
  * sinatra (http://www.sinatrarb.com/)
74
106
  * ruport (http://rubyreports.org/)
75
- * acts_as_reportable
76
- * gruff/RMagick (optional, but needed if you want to see the statistics graphs)
77
107
  email: riva@braveworld.net
78
108
  executables:
79
109
  - rutema_web
@@ -94,11 +124,11 @@ files:
94
124
  - lib/rutema_web/gems.rb
95
125
  - lib/rutema_web/main.rb
96
126
  - lib/rutema_web/model.rb
97
- - lib/rutema_web/ruport_formatter.rb
98
- - lib/rutema_web/sinatra.rb
99
127
  - lib/rutema_web/public/css/style.css
100
128
  - lib/rutema_web/public/images/bg_menu.gif
101
129
  - lib/rutema_web/public/images/bg_submenu.gif
130
+ - lib/rutema_web/public/images/left.png
131
+ - lib/rutema_web/public/images/right.png
102
132
  - lib/rutema_web/public/images/run_error.png
103
133
  - lib/rutema_web/public/images/run_ok.png
104
134
  - lib/rutema_web/public/images/run_warn.png
@@ -106,14 +136,17 @@ files:
106
136
  - lib/rutema_web/public/images/step_ok.png
107
137
  - lib/rutema_web/public/images/step_warn.png
108
138
  - lib/rutema_web/public/images/tie_logo.gif
109
- - lib/rutema_web/public/images/left.png
110
- - lib/rutema_web/public/images/right.png
111
139
  - lib/rutema_web/public/js/folding.js
140
+ - lib/rutema_web/public/js/graph.js
112
141
  - lib/rutema_web/public/js/jquery-1.3.2.min.js
113
142
  - lib/rutema_web/public/js/jquery.flot.min.js
114
143
  - lib/rutema_web/public/js/jquery.flot.stack.min.js
144
+ - lib/rutema_web/ruport_formatter.rb
145
+ - lib/rutema_web/sinatra.rb
115
146
  - lib/rutema_web/views/flot.erb
116
147
  - lib/rutema_web/views/main.erb
148
+ - lib/rutema_web/views/timeline.erb
149
+ - test/test_model.rb
117
150
  has_rdoc: true
118
151
  homepage:
119
152
  licenses: []
@@ -128,18 +161,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
128
161
  requirements:
129
162
  - - ">="
130
163
  - !ruby/object:Gem::Version
164
+ segments:
165
+ - 0
131
166
  version: "0"
132
- version:
133
167
  required_rubygems_version: !ruby/object:Gem::Requirement
134
168
  requirements:
135
169
  - - ">="
136
170
  - !ruby/object:Gem::Version
171
+ segments:
172
+ - 0
137
173
  version: "0"
138
- version:
139
174
  requirements: []
140
175
 
141
176
  rubyforge_project: patir
142
- rubygems_version: 1.3.5
177
+ rubygems_version: 1.3.6
143
178
  signing_key:
144
179
  specification_version: 3
145
180
  summary: rutema_web is the web frontend for rutema