rutema_web 1.0.0 → 1.0.2

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,8 @@
1
+ === 1.0.2 / 2009-09-10
2
+ * Cleared up the gem dependencies
3
+ * Upgraded gruff
4
+ === 1.0.1 / 2009-07-31
5
+ * not executed test cases now show up in the statistics graphs in yellow. This gives us the trend in test case numbers
1
6
  === 1.0.0 / 2009-07-17
2
7
  * updated gem dependencies for active_record (2.3.2)
3
8
  * renamed gem to rutema_web for consistency
@@ -6,6 +11,7 @@
6
11
  * gem dependencies are enforced in a separate file
7
12
  * fixed the folding javascript - now using jQuery
8
13
  * updated the project infrastructure (hoe etc.)
14
+
9
15
  === 0.9.5 / 2008-11-28
10
16
  * Overlooked conditional in Statistics index action fixed
11
17
  === 0.9.4 / 2008-11-28
data/README.txt CHANGED
@@ -1,7 +1,7 @@
1
- rutemaweb http://patir.rubyforge.org/rutema
1
+ rutema_web http://patir.rubyforge.org/rutema
2
2
 
3
3
  == DESCRIPTION:
4
- rutemaweb is the web frontend for rutema.
4
+ rutema_web is the web frontend for rutema.
5
5
 
6
6
  It can be used as a viewer for database files created with the rutema ActiveRecord reporter.
7
7
  It also provides you with some basic statistics about the tests in your database in the form of
@@ -10,25 +10,25 @@ diagrams of debatable aesthetics but undoubtable value!
10
10
  == FEATURES/PROBLEMS:
11
11
 
12
12
  == SYNOPSIS:
13
- rutemaweb [results.db] and browse to http://localhost:7000 for the glorious view
13
+ rutema_web [results.db] and browse to http://localhost:7000 for the glorious view
14
14
 
15
15
  == REQUIREMENTS:
16
16
  * patir (http://patir.rubyforge.org)
17
+ * rutema (http://patir.rubyforge.org/rutema)
17
18
  * activerecord (http://ar.rubyonrails.com/)
18
19
  * sqlite3 (http://rubyforge.org/projects/sqlite-ruby/)
19
- * ramaze (http://www.ramaze.net/)
20
+ * sinatra (http://www.sinatrarb.com/)
20
21
  * ruport (http://rubyreports.org/)
21
22
  * acts_as_reportable
22
- * erubis
23
23
  * gruff/RMagick (optional, but needed if you want to see the statistics graphs)
24
24
 
25
25
  == INSTALL:
26
- * sudo gem install rutemaweb
26
+ * sudo gem install rutema_web
27
27
 
28
28
  == LICENSE:
29
29
  (The Ruby License)
30
30
 
31
- rutema is copyright (c) 2007 Vassilis Rizopoulos
31
+ rutema is copyright (c) 2007 - 2009 Vassilis Rizopoulos
32
32
 
33
33
  You can redistribute it and/or modify it under either the terms of the GPL
34
34
  (see COPYING.txt file), or the conditions below:
data/Rakefile CHANGED
@@ -14,13 +14,10 @@ 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<<['patir',">=0.6.0"]
18
- p.extra_deps<<['rutema',"=1.0.5"]
19
- p.extra_deps<<['activerecord','=2.3.2']
20
- p.extra_deps<<['sinatra','=0.9.2']
17
+ p.extra_deps<<['rutema',"1.0.7"]
18
+ p.extra_deps<<['sinatra','0.9.2']
21
19
  p.extra_deps<<['ruport','1.6.1']
22
- p.extra_deps<<['acts_as_reportable','=1.1.1']
23
- p.extra_deps<<['gruff','0.3.4']
20
+ p.extra_deps<<['gruff','0.3.6']
24
21
  p.spec_extras={:executables=>["rutema_web"],
25
22
  :default_executable=>"rutema_web"}
26
23
  end
@@ -1,10 +1,4 @@
1
- gem 'sinatra','=0.9.2'
2
- gem 'activerecord','=2.3.2'
3
- gem 'rutema',"=1.0.5"
4
- gem 'patir',"=0.6.1"
5
- gem 'ruport','=1.6.1'
6
- gem 'acts_as_reportable','=1.1.1'
7
- begin
8
- gem 'gruff',"=0.3.4"
9
- rescue
10
- end
1
+ gem 'sinatra','0.9.2'
2
+ gem 'rutema',"1.0.7"
3
+ gem 'ruport','1.6.1'
4
+ gem 'gruff',"0.3.6"
@@ -8,7 +8,7 @@ module RutemaWeb
8
8
  module Version
9
9
  MAJOR=1
10
10
  MINOR=0
11
- TINY=0
11
+ TINY=2
12
12
  STRING=[ MAJOR, MINOR, TINY ].join( "." )
13
13
  end
14
14
  #Starts App
@@ -36,7 +36,11 @@ module Rutema
36
36
  end
37
37
  #number of unsuccessful scenarios (does not count setup or teardown scripts)
38
38
  def number_of_failed
39
- self.scenarios.select{|sc| !sc.success? && sc.is_test? }.size
39
+ self.scenarios.select{|sc| !sc.success? && !sc.not_executed? && sc.is_test? }.size
40
+ end
41
+ #number of scenarios that did not run (does not count setup or teardown scripts)
42
+ def number_of_not_executed
43
+ self.scenarios.select{|sc| sc.not_executed? && sc.is_test? }.size
40
44
  end
41
45
  #returns the number of actual tests (so, don't take into account setup or teardown tests)
42
46
  def number_of_tests
@@ -69,6 +73,12 @@ module Rutema
69
73
  def success?
70
74
  return self.status=="success"
71
75
  end
76
+ def not_executed?
77
+ return self.status=="not_executed"
78
+ end
79
+ def fail?
80
+ return self.status=="error"
81
+ end
72
82
  end
73
83
  end
74
84
  end
@@ -10,8 +10,7 @@ body {
10
10
  table {
11
11
  font: 0.9em Tahoma, sans-serif;
12
12
  color: #666666;
13
- text-align: left;
14
-
13
+ text-align: left;
15
14
  }
16
15
  #logo{float:left; background-image:url(/images/tie_logo.gif); width:234px; height:213px;}
17
16
  #topheader{float:right; width:566px; height:97px; background-color:#F0F0F0; position:relative}
@@ -102,4 +101,34 @@ table {
102
101
  }
103
102
  .vtable tr td {
104
103
  text-align: left;
104
+ }
105
+ td.success{
106
+ background-color:#00FF00;
107
+ }
108
+ td.error{
109
+ background-color:#FF0000;
110
+ }
111
+ td.not_executed{
112
+ background-color:#FFFF00;
113
+ }
114
+ table.timeline{
115
+ font: 0.9em Tahoma, sans-serif;
116
+ color: #666666;
117
+ text-align: center;
118
+ }
119
+ span.timeline{
120
+ text-align: center;
121
+ }
122
+ a.timeline{
123
+ font: 0.5em Tahoma, sans-serif;
124
+ font-size: 10px;
125
+ font-weight:bold;
126
+ color:#000000;
127
+ text-decoration:none;
128
+ }
129
+ .timeline {
130
+ font: 0.5em Tahoma, sans-serif;
131
+ font-size: 10px;
132
+ font-weight:bold;
133
+ color:#999999;
105
134
  }
@@ -1,16 +1,16 @@
1
- function toggleFolding(){
2
- $(".scenario_output").hide();
3
- $(".scenario_error").hide();
4
- $(".scenario_output").parents("td").prepend("<a class=\"output_link\" href='' title='read the output log'>output</a>");
5
- $(".scenario_error").parents("td").prepend("<a class=\"error_link\" href='' title='read the error log'>errors</a>");
6
- $("a.output_link").click(function(event){
7
- $(this).parents("td").children(".scenario_output").toggle();
1
+ function toggleFolding(container,container_parent,prepend_txt,link){
2
+ $(container).hide();
3
+ $(container).parents(container_parent).prepend(prepend_txt);
4
+ $(link).click(function(event){
5
+ $(this).parents(container_parent).children(container).toggle();
8
6
  // Stop the link click from doing its normal thing
9
7
  event.preventDefault();
10
8
  });
11
- $("a.error_link").click(function(event){
12
- $(this).parents("td").children(".scenario_error").toggle();
13
- // Stop the link click from doing its normal thing
14
- event.preventDefault();
15
- });
16
- };
9
+ };
10
+
11
+ function setupFolding()
12
+ {
13
+ toggleFolding(".scenario_output","td","<a class=\"output_link\" href='' title='read the output log'>output</a>","a.output_link");
14
+ toggleFolding(".scenario_error","td","<a class=\"error_link\" href='' title='read the error log'>errors</a>","a.error_link");
15
+
16
+ };
@@ -60,7 +60,7 @@ module RutemaWeb
60
60
  end
61
61
  return msg
62
62
  end
63
-
63
+
64
64
  def run_link r
65
65
  "<a class=\"smallgreytext\" href=\"#{run_url(r)}\">Run #{r.id}</a>"
66
66
  end
@@ -147,10 +147,10 @@ module RutemaWeb
147
147
  rescue LoadError
148
148
  self.gruff_working=false
149
149
  end
150
-
150
+
151
151
  private
152
152
  #returns a jpg blob
153
- def runs_graph_jpg successful,failed,labels
153
+ def runs_graph_jpg successful,failed,not_executed,labels
154
154
  graph=Gruff::StackedBar.new(640)
155
155
  graph.theme = {
156
156
  :colors => %w(green red yellow blue),
@@ -160,6 +160,7 @@ module RutemaWeb
160
160
  graph.x_axis_label="#{successful.size} runs"
161
161
  graph.data("successful",successful)
162
162
  graph.data("failed",failed)
163
+ graph.data("not executed",not_executed)
163
164
  graph.labels=labels
164
165
  graph.marker_font_size=12
165
166
  return graph.to_blob("PNG")
@@ -178,11 +179,12 @@ module RutemaWeb
178
179
  return ret
179
180
  end
180
181
  end
181
-
182
+
182
183
  class SinatraApp<Sinatra::Base
183
184
  include ViewUtilities
184
185
  include Settings
185
186
  include Statistics
187
+ attr_accessor :title,:panel_content,:content_title,:content
186
188
  enable :logging
187
189
  enable :run
188
190
  enable :static
@@ -194,28 +196,14 @@ module RutemaWeb
194
196
  @@logger = Patir.setup_logger
195
197
 
196
198
  get '/' do
197
- @title="Rutema"
198
- @panel_content=panel_runs
199
- @content_title="Welcome to Rutema"
200
- @content="<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>"
199
+ 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>"
201
200
  erb :layout
202
201
  end
203
-
204
- get '/runs/:page' do |page|
205
- runs(page)
206
- erb :layout
207
- end
208
202
  #Displays the details of a run
209
203
  #
210
204
  #Routes to /runs if no id is provided
211
205
  get '/run/:run_id' do |run_id|
212
- @panel_content=nil
213
- if !run_id.empty?
214
- @panel_content=panel_runs
215
- @title="Run #{run_id}"
216
- @content_title="Summary of run #{run_id}"
217
- @content=single_run(run_id)
218
- end
206
+ page_setup "Run #{run_id}",panel_runs,"Summary of run #{run_id}",single_run(run_id)
219
207
  erb :layout
220
208
  end
221
209
 
@@ -228,6 +216,11 @@ module RutemaWeb
228
216
  runs(0)
229
217
  erb :layout
230
218
  end
219
+
220
+ get '/runs/:page' do |page|
221
+ runs(page)
222
+ erb :layout
223
+ end
231
224
  #Displays a paginated list of scenarios
232
225
  get '/scenarios/:page' do |page|
233
226
  scenarios(page)
@@ -235,13 +228,10 @@ module RutemaWeb
235
228
  end
236
229
  #Displays the details of a scenario
237
230
  get '/scenario/:scenario_id' do |scenario_id|
238
- @panel_content=""
239
- if !scenario_id.empty?
240
- if scenario_id.to_i==0
241
- @content=scenario_by_name(scenario_id)
242
- else
243
- @content=scenario_in_a_run(scenario_id.to_i)
244
- end
231
+ if scenario_id.to_i==0
232
+ @content=scenario_by_name(scenario_id)
233
+ else
234
+ @content=scenario_in_a_run(scenario_id.to_i)
245
235
  end
246
236
  erb :layout
247
237
  end
@@ -255,20 +245,18 @@ module RutemaWeb
255
245
  scenarios(0)
256
246
  erb :layout
257
247
  end
258
-
248
+
259
249
  get '/statistics/?' do
260
- @title="Rutema"
261
- @panel_content=panel_configurations
262
- @content_title="Statistics"
250
+ page_setup "Rutema",panel_configurations,"Statistics"
263
251
  @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>"
264
252
  @content<<"statistics reports require the gruff gem which in turn depends on RMagick. gruff does not appear to be available!<br/>rutemaweb will not be able to produce statistics reports" unless Statistics.gruff_working?
265
253
  erb :layout
266
254
  end
267
-
255
+
268
256
  get '/statistics/config_report/:configuration' do |configuration|
269
- @title=configuration || "All configurations"
270
- @panel_content=panel_configurations
271
- @content_title= configuration || "All configurations"
257
+ tt=configuration || "All configurations"
258
+ page_setup(tt,panel_configurations,tt)
259
+
272
260
  if Statistics.gruff_working?
273
261
  @content="<img src=\"/statistics/graph/#{configuration}\"/>"
274
262
  else
@@ -276,37 +264,56 @@ module RutemaWeb
276
264
  end
277
265
  erb :layout
278
266
  end
279
-
267
+
280
268
  get '/statistics/graph/:configuration' do |configuration|
281
269
  content_type "image/png"
282
270
  successful=[]
283
271
  failed=[]
272
+ not_executed=[]
284
273
  labels=Hash.new
285
- runs=Rutema::Model::Run.find(:all)
286
- #find all runs beloging to this configuration
287
- runs=runs.select{|r| r.context[:config_file]==configuration if r.context.is_a?(Hash)} if configuration
274
+ runs=all_runs_in_configuration(configuration)
288
275
  #now extract the data
289
276
  counter=0
290
277
  #the normalizer thins out the labels on the x axis so that they won't overlap
291
- normalizer = 1
292
- normalizer=runs.size/11 unless runs.size<=11
278
+ normalizer = calculate_normalizer(runs.size)
293
279
  runs.each do |r|
294
280
  fails=r.number_of_failed
281
+ no_exec = r.number_of_not_executed
295
282
  #the scenarios array includes setup and teardown scripts as well - we want only the actual testcases
296
283
  #so we use the added number_of_tests method that filters setup and test scripts
297
- successful<<r.number_of_tests-fails
284
+ successful<<r.number_of_tests-fails-no_exec
298
285
  failed<<fails
286
+ not_executed<<no_exec
299
287
  #every Nth label
300
288
  labels[counter]="R#{r.id}" if counter%normalizer==0
301
289
  counter+=1
302
290
  end
303
- runs_graph_jpg(successful,failed,labels)
291
+ runs_graph_jpg(successful,failed,not_executed,labels)
304
292
  end
293
+
305
294
  private
295
+ #calculates a divider to sparse out the laels in statistics graphs
296
+ def calculate_normalizer siz
297
+ #the normalizer thins out the labels on the x axis so that they won't overlap
298
+ return siz<=11 ? 1 : siz/11
299
+ end
300
+ #finds all the runs belonging to a specific configuration
301
+ def all_runs_in_configuration configuration
302
+ runs=Rutema::Model::Run.find(:all)
303
+ #find all runs beloging to this configuration
304
+ runs.select{|r| r.context[:config_file]==configuration if r.context.is_a?(Hash)} if configuration
305
+ end
306
+ #sets the variables used in the layout template
307
+ def page_setup title,panel_content,content_title,content=""
308
+ @title=title
309
+ @panel_content=panel_content
310
+ @content_title=content_title
311
+ @content=content
312
+ end
313
+
306
314
  def runs page
307
- @title="All runs"
308
- @content_title="Runs"
309
- @content=""
315
+ page_setup "All runs",nil,"All runs"
316
+
310
317
  dt=[]
311
318
  total_pages=(Rutema::Model::Run.count/page_size)+1
312
319
  page_number=validated_page_number(page,total_pages)
@@ -321,10 +328,7 @@ module RutemaWeb
321
328
  end
322
329
 
323
330
  def scenarios page
324
- @title="All scenarios"
325
- @content_title="Scenarios"
326
- @content=""
327
- @panel_content=panel_runs
331
+ page_setup "All scenarios",panel_runs,"All scenarios"
328
332
  runs=Hash.new
329
333
  #find which runs contain each scenario with the same name
330
334
  #Ramaze::Log.debug("Getting the runs for each scenario")
@@ -366,8 +370,7 @@ module RutemaWeb
366
370
  #Renders the summary of all runs for a single scenario
367
371
  def scenario_by_name scenario_id
368
372
  ret=""
369
- @title="Runs for #{scenario_id}"
370
- @content_title="Scenario #{scenario_id} runs"
373
+ page_setup "Runs for #{scenario_id}",nil,"Scenario #{scenario_id} runs"
371
374
  begin
372
375
  table=Rutema::Model::Scenario.report_table(:all,:conditions=>["name = :spec_name",{:spec_name=>scenario_id}],
373
376
  :order=>"run_id DESC")
@@ -384,8 +387,8 @@ module RutemaWeb
384
387
  ret<<table.to_html
385
388
  end
386
389
  rescue
387
- @content_title="Error"
388
- @title=@content_title
390
+ content_title="Error"
391
+ title=content_title
389
392
  #Ramaze::Log.error("Could not retrieve data for the scenario name '#{scenario_id}'")
390
393
  #Ramaze::Log.debug("#{$!.message}:\n#{$!.backtrace}")
391
394
  ret="<p>could not retrieve data for the given scenario name</p>"
@@ -395,11 +398,9 @@ module RutemaWeb
395
398
  #Renders the information for a specific executed scenario
396
399
  #giving a detailed list of the steps, with status and output
397
400
  def scenario_in_a_run scenario_id
398
- @panel_content=panel_runs
399
401
  begin
400
402
  scenario=Rutema::Model::Scenario.find(scenario_id)
401
- @content_title="Summary for #{scenario.name} in run #{scenario.run_id}"
402
- @title=@content_title
403
+ page_setup "Summary for #{scenario.name} in run #{scenario.run_id}",panel_runs,"Summary for #{scenario.name} in run #{scenario.run_id}"
403
404
  table=Rutema::Model::Step.report_table(:all,
404
405
  :conditions=>["scenario_id = :scenario_id",{:scenario_id=>scenario_id}],
405
406
  :order=>"number ASC")
@@ -410,8 +411,8 @@ module RutemaWeb
410
411
  ret=table.to_vhtml
411
412
  end
412
413
  rescue
413
- @content_title="Error"
414
- @title=@content_title
414
+ content_title="Error"
415
+ title=content_title
415
416
  #Ramaze::Log.error("Could not find scenario with the id '#{scenario_id}'")
416
417
  @@logger.warn("#{$!.message}:\n#{$!.backtrace}")
417
418
  ret="<p>Could not find scenario with the given id.</p>"
@@ -7,7 +7,7 @@
7
7
  <script src="/js/jquery.js"></script>
8
8
  <script src="/js/folding.js"></script>
9
9
  <script type="text/javascript">
10
- $(document).ready(toggleFolding);
10
+ $(document).ready(setupFolding);
11
11
  </script>
12
12
  <title><%=@title%></title>
13
13
  </head>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rutema_web
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vassilis Rizopoulos
@@ -9,19 +9,9 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-07-16 00:00:00 +02:00
12
+ date: 2009-09-11 00:00:00 +02:00
13
13
  default_executable: rutema_web
14
14
  dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: patir
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
20
- requirements:
21
- - - ">="
22
- - !ruby/object:Gem::Version
23
- version: 0.6.0
24
- version:
25
15
  - !ruby/object:Gem::Dependency
26
16
  name: rutema
27
17
  type: :runtime
@@ -30,17 +20,7 @@ dependencies:
30
20
  requirements:
31
21
  - - "="
32
22
  - !ruby/object:Gem::Version
33
- version: 1.0.5
34
- version:
35
- - !ruby/object:Gem::Dependency
36
- name: activerecord
37
- type: :runtime
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
40
- requirements:
41
- - - "="
42
- - !ruby/object:Gem::Version
43
- version: 2.3.2
23
+ version: 1.0.7
44
24
  version:
45
25
  - !ruby/object:Gem::Dependency
46
26
  name: sinatra
@@ -62,16 +42,6 @@ dependencies:
62
42
  - !ruby/object:Gem::Version
63
43
  version: 1.6.1
64
44
  version:
65
- - !ruby/object:Gem::Dependency
66
- name: acts_as_reportable
67
- type: :runtime
68
- version_requirement:
69
- version_requirements: !ruby/object:Gem::Requirement
70
- requirements:
71
- - - "="
72
- - !ruby/object:Gem::Version
73
- version: 1.1.1
74
- version:
75
45
  - !ruby/object:Gem::Dependency
76
46
  name: gruff
77
47
  type: :runtime
@@ -80,7 +50,7 @@ dependencies:
80
50
  requirements:
81
51
  - - "="
82
52
  - !ruby/object:Gem::Version
83
- version: 0.3.4
53
+ version: 0.3.6
84
54
  version:
85
55
  - !ruby/object:Gem::Dependency
86
56
  name: hoe
@@ -90,11 +60,11 @@ dependencies:
90
60
  requirements:
91
61
  - - ">="
92
62
  - !ruby/object:Gem::Version
93
- version: 2.3.2
63
+ version: 2.3.3
94
64
  version:
95
65
  description: |-
96
66
  == DESCRIPTION:
97
- rutemaweb is the web frontend for rutema.
67
+ rutema_web is the web frontend for rutema.
98
68
 
99
69
  It can be used as a viewer for database files created with the rutema ActiveRecord reporter.
100
70
  It also provides you with some basic statistics about the tests in your database in the form of
@@ -103,16 +73,16 @@ description: |-
103
73
  == FEATURES/PROBLEMS:
104
74
 
105
75
  == SYNOPSIS:
106
- rutemaweb [results.db] and browse to http://localhost:7000 for the glorious view
76
+ rutema_web [results.db] and browse to http://localhost:7000 for the glorious view
107
77
 
108
78
  == REQUIREMENTS:
109
79
  * patir (http://patir.rubyforge.org)
80
+ * rutema (http://patir.rubyforge.org/rutema)
110
81
  * activerecord (http://ar.rubyonrails.com/)
111
82
  * sqlite3 (http://rubyforge.org/projects/sqlite-ruby/)
112
- * ramaze (http://www.ramaze.net/)
83
+ * sinatra (http://www.sinatrarb.com/)
113
84
  * ruport (http://rubyreports.org/)
114
85
  * acts_as_reportable
115
- * erubis
116
86
  * gruff/RMagick (optional, but needed if you want to see the statistics graphs)
117
87
  email: riva@braveworld.net
118
88
  executables:
@@ -176,7 +146,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
176
146
  requirements: []
177
147
 
178
148
  rubyforge_project: patir
179
- rubygems_version: 1.3.4
149
+ rubygems_version: 1.3.5
180
150
  signing_key:
181
151
  specification_version: 3
182
152
  summary: rutema_web is the web frontend for rutema