rutemaweb 0.9.3 → 0.9.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 +5 -0
 - data/README.txt +4 -1
 - data/Rakefile +1 -0
 - data/lib/rutemaweb/gems.rb +2 -2
 - data/lib/rutemaweb/main.rb +1 -1
 - data/lib/rutemaweb/model.rb +14 -2
 - data/lib/rutemaweb/ramaze_controller.rb +121 -55
 - data/lib/rutemaweb/view/layout.rhtml +3 -3
 - data/test/test_model.rb +48 -0
 - data/test/test_rutemaweb.rb +13 -13
 - metadata +14 -3
 
    
        data/History.txt
    CHANGED
    
    | 
         @@ -1,3 +1,8 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            === 0.9.4 / 2008-11-28
         
     | 
| 
      
 2 
     | 
    
         
            +
            * Configuration file column added to run overview
         
     | 
| 
      
 3 
     | 
    
         
            +
            * More code to check for old OpenStruct instances of context
         
     | 
| 
      
 4 
     | 
    
         
            +
            * statistics graphs
         
     | 
| 
      
 5 
     | 
    
         
            +
            * rutemaweb now depends on gruff (and consequently on RMagick/ImageMagick) for the generation of graphs - It will work without but if you want the pretty colors you need gruff.
         
     | 
| 
       1 
6 
     | 
    
         
             
            === 0.9.3 / 2008-11-07
         
     | 
| 
       2 
7 
     | 
    
         
             
            * Fixed bug in display of run list (context incorrectly used)
         
     | 
| 
       3 
8 
     | 
    
         
             
            === 0.9.2 / 2008-11-05
         
     | 
    
        data/README.txt
    CHANGED
    
    | 
         @@ -3,7 +3,9 @@ rutemaweb http://patir.rubyforge.org/rutema 
     | 
|
| 
       3 
3 
     | 
    
         
             
            == DESCRIPTION:
         
     | 
| 
       4 
4 
     | 
    
         
             
            rutemaweb is the web frontend for rutema. 
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
     | 
    
         
            -
            It can be used as a viewer for database files created with the ActiveRecord reporter.
         
     | 
| 
      
 6 
     | 
    
         
            +
            It can be used as a viewer for database files created with the rutema ActiveRecord reporter.
         
     | 
| 
      
 7 
     | 
    
         
            +
            It also provides you with some basic statistics about the tests in your database in the form of 
         
     | 
| 
      
 8 
     | 
    
         
            +
            diagrams of debatable aesthetics but undoubtable value!
         
     | 
| 
       7 
9 
     | 
    
         | 
| 
       8 
10 
     | 
    
         
             
            == FEATURES/PROBLEMS:
         
     | 
| 
       9 
11 
     | 
    
         | 
| 
         @@ -18,6 +20,7 @@ rutemaweb [results.db] and browse to http://localhost:7000 for the glorious view 
     | 
|
| 
       18 
20 
     | 
    
         
             
            * ruport (http://rubyreports.org/)
         
     | 
| 
       19 
21 
     | 
    
         
             
            * acts_as_reportable
         
     | 
| 
       20 
22 
     | 
    
         
             
            * erubis
         
     | 
| 
      
 23 
     | 
    
         
            +
            * gruff/RMagick (optional, but needed if you want to see the statistics graphs)
         
     | 
| 
       21 
24 
     | 
    
         | 
| 
       22 
25 
     | 
    
         
             
            == INSTALL:
         
     | 
| 
       23 
26 
     | 
    
         
             
            * sudo gem install rutemaweb
         
     | 
    
        data/Rakefile
    CHANGED
    
    | 
         @@ -20,6 +20,7 @@ Hoe.new('rutemaweb', "#{RutemaWeb::Version::STRING}") do |p| 
     | 
|
| 
       20 
20 
     | 
    
         
             
              p.extra_deps<<['ramaze','=2008.06']
         
     | 
| 
       21 
21 
     | 
    
         
             
              p.extra_deps<<['erubis']
         
     | 
| 
       22 
22 
     | 
    
         
             
              p.extra_deps<<['acts_as_reportable']
         
     | 
| 
      
 23 
     | 
    
         
            +
              p.extra_deps<<['gruff','0.3.4']
         
     | 
| 
       23 
24 
     | 
    
         
             
              p.spec_extras={:executables=>["rutemaweb"],
         
     | 
| 
       24 
25 
     | 
    
         
             
                :default_executable=>"rutemaweb"}
         
     | 
| 
       25 
26 
     | 
    
         
             
            end
         
     | 
    
        data/lib/rutemaweb/gems.rb
    CHANGED
    
    | 
         @@ -2,7 +2,7 @@ require 'rubygems' 
     | 
|
| 
       2 
2 
     | 
    
         
             
            gem 'ramaze','=2008.06'
         
     | 
| 
       3 
3 
     | 
    
         
             
            require 'ramaze'
         
     | 
| 
       4 
4 
     | 
    
         
             
            #this fixes a clash with activesupport 2.1.1 (because it checks start_with? but not end_with?)
         
     | 
| 
       5 
     | 
    
         
            -
            # 
     | 
| 
      
 5 
     | 
    
         
            +
            #and Ramaze on 1.8.6 only creates a start_with? method
         
     | 
| 
       6 
6 
     | 
    
         
             
            class String; undef_method :start_with? end
         
     | 
| 
       7 
7 
     | 
    
         
             
            gem 'activerecord','=2.1.1'
         
     | 
| 
       8 
8 
     | 
    
         
             
            require 'active_record'
         
     | 
| 
         @@ -10,4 +10,4 @@ gem 'rutema',">=1.0.0" 
     | 
|
| 
       10 
10 
     | 
    
         
             
            require 'patir/configuration'
         
     | 
| 
       11 
11 
     | 
    
         
             
            require 'patir/command'
         
     | 
| 
       12 
12 
     | 
    
         
             
            require 'patir/base'
         
     | 
| 
       13 
     | 
    
         
            -
            require 'ruport/acts_as_reportable'
         
     | 
| 
      
 13 
     | 
    
         
            +
            require 'ruport/acts_as_reportable'
         
     | 
    
        data/lib/rutemaweb/main.rb
    CHANGED
    
    
    
        data/lib/rutemaweb/model.rb
    CHANGED
    
    | 
         @@ -35,8 +35,17 @@ module Rutema 
     | 
|
| 
       35 
35 
     | 
    
         
             
                    end
         
     | 
| 
       36 
36 
     | 
    
         
             
                    return st
         
     | 
| 
       37 
37 
     | 
    
         
             
                  end
         
     | 
| 
      
 38 
     | 
    
         
            +
                  #number of unsuccessful scenarios (does not count setup or teardown scripts)
         
     | 
| 
       38 
39 
     | 
    
         
             
                  def number_of_failed
         
     | 
| 
       39 
     | 
    
         
            -
                    self.scenarios.select{|sc| !sc.success?}.size
         
     | 
| 
      
 40 
     | 
    
         
            +
                    self.scenarios.select{|sc| !sc.success? && sc.is_test? }.size
         
     | 
| 
      
 41 
     | 
    
         
            +
                  end
         
     | 
| 
      
 42 
     | 
    
         
            +
                  #returns the number of actual tests (so, don't take into account setup or teardown tests)
         
     | 
| 
      
 43 
     | 
    
         
            +
                  def number_of_tests
         
     | 
| 
      
 44 
     | 
    
         
            +
                     self.scenarios.select{|sc| sc.is_test? }.size
         
     | 
| 
      
 45 
     | 
    
         
            +
                  end
         
     | 
| 
      
 46 
     | 
    
         
            +
                  def config_file
         
     | 
| 
      
 47 
     | 
    
         
            +
                    return nil if self.context.is_a?(OpenStruct)
         
     | 
| 
      
 48 
     | 
    
         
            +
                    return context[:config_file]
         
     | 
| 
       40 
49 
     | 
    
         
             
                  end
         
     | 
| 
       41 
50 
     | 
    
         
             
                end
         
     | 
| 
       42 
51 
     | 
    
         | 
| 
         @@ -53,7 +62,10 @@ module Rutema 
     | 
|
| 
       53 
62 
     | 
    
         
             
                    :conditions=>conditions,
         
     | 
| 
       54 
63 
     | 
    
         
             
                    :offset => page_num*page_size) 
         
     | 
| 
       55 
64 
     | 
    
         
             
                  end
         
     | 
| 
       56 
     | 
    
         
            -
                  
         
     | 
| 
      
 65 
     | 
    
         
            +
                  #returns true if the scenario does not belong to a setup or teardown script
         
     | 
| 
      
 66 
     | 
    
         
            +
                  def is_test?
         
     | 
| 
      
 67 
     | 
    
         
            +
                    return !(self.name=~/_setup$/ || self.name=~/_teardown$/)
         
     | 
| 
      
 68 
     | 
    
         
            +
                  end
         
     | 
| 
       57 
69 
     | 
    
         
             
                  def success?
         
     | 
| 
       58 
70 
     | 
    
         
             
                    return self.status=="success"
         
     | 
| 
       59 
71 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -51,12 +51,19 @@ module Rutema 
     | 
|
| 
       51 
51 
     | 
    
         | 
| 
       52 
52 
     | 
    
         
             
                  def run_summary r
         
     | 
| 
       53 
53 
     | 
    
         
             
                    Ramaze::Log.debug("Summary snippet for #{r}") if @logger
         
     | 
| 
       54 
     | 
    
         
            -
                    "#{run_link(r)} 
     | 
| 
      
 54 
     | 
    
         
            +
                    msg="#{run_link(r)}"
         
     | 
| 
      
 55 
     | 
    
         
            +
                    if r.context.is_a?(Hash)
         
     | 
| 
      
 56 
     | 
    
         
            +
                      msg<<" started at #{time_formatted(r.context[:start_time])}"
         
     | 
| 
      
 57 
     | 
    
         
            +
                    end
         
     | 
| 
      
 58 
     | 
    
         
            +
                    return msg
         
     | 
| 
       55 
59 
     | 
    
         
             
                  end
         
     | 
| 
       56 
60 
     | 
    
         | 
| 
       57 
61 
     | 
    
         
             
                  def run_link r
         
     | 
| 
       58 
62 
     | 
    
         
             
                    "<a class=\"smallgreytext\" href=\"#{run_url(r)}\">Run #{r.id}</a>"
         
     | 
| 
       59 
63 
     | 
    
         
             
                  end
         
     | 
| 
      
 64 
     | 
    
         
            +
                  def cfg_link cfg
         
     | 
| 
      
 65 
     | 
    
         
            +
                    "<a class=\"smallgreytext\" href=\"/statistics/config_report/#{cfg}\">#{cfg}</a>"
         
     | 
| 
      
 66 
     | 
    
         
            +
                  end
         
     | 
| 
       60 
67 
     | 
    
         
             
                  #will render a hash in a table of key||value rows 
         
     | 
| 
       61 
68 
     | 
    
         
             
                  def context_table context
         
     | 
| 
       62 
69 
     | 
    
         
             
                    ret=""
         
     | 
| 
         @@ -101,6 +108,18 @@ module Rutema 
     | 
|
| 
       101 
108 
     | 
    
         | 
| 
       102 
109 
     | 
    
         
             
                end
         
     | 
| 
       103 
110 
     | 
    
         | 
| 
      
 111 
     | 
    
         
            +
                #Contains all the settings that control the display of information for RutemaWeb's controllers 
         
     | 
| 
      
 112 
     | 
    
         
            +
                module Settings
         
     | 
| 
      
 113 
     | 
    
         
            +
                  @@rutemaweb_settings||=Hash.new
         
     | 
| 
      
 114 
     | 
    
         
            +
                  #Set to true to show all setup and teardown scenarios
         
     | 
| 
      
 115 
     | 
    
         
            +
                  def show_setup_teardown= v
         
     | 
| 
      
 116 
     | 
    
         
            +
                    @@rutemaweb_settings[:show_setup_teardown]= v
         
     | 
| 
      
 117 
     | 
    
         
            +
                  end 
         
     | 
| 
      
 118 
     | 
    
         
            +
                  
         
     | 
| 
      
 119 
     | 
    
         
            +
                  def show_setup_teardown?
         
     | 
| 
      
 120 
     | 
    
         
            +
                    return @@rutemaweb_settings[:show_setup_teardown]
         
     | 
| 
      
 121 
     | 
    
         
            +
                  end
         
     | 
| 
      
 122 
     | 
    
         
            +
                end
         
     | 
| 
       104 
123 
     | 
    
         
             
                #Sets the values we need for public and view directories
         
     | 
| 
       105 
124 
     | 
    
         
             
                def self.ramaze_settings
         
     | 
| 
       106 
125 
     | 
    
         
             
                  Ramaze::Global.public_root = File.expand_path(File.join(File.dirname(__FILE__),"public"))
         
     | 
| 
         @@ -109,6 +128,7 @@ module Rutema 
     | 
|
| 
       109 
128 
     | 
    
         | 
| 
       110 
129 
     | 
    
         
             
                class MainController < Ramaze::Controller
         
     | 
| 
       111 
130 
     | 
    
         
             
                  include ViewUtilities
         
     | 
| 
      
 131 
     | 
    
         
            +
                  include Settings
         
     | 
| 
       112 
132 
     | 
    
         
             
                  map '/'
         
     | 
| 
       113 
133 
     | 
    
         
             
                  engine :Erubis
         
     | 
| 
       114 
134 
     | 
    
         
             
                  layout :layout
         
     | 
| 
         @@ -132,9 +152,9 @@ module Rutema 
     | 
|
| 
       132 
152 
     | 
    
         | 
| 
       133 
153 
     | 
    
         
             
                    runs=Rutema::Model::Run.find_on_page(page_number,PAGE_SIZE)
         
     | 
| 
       134 
154 
     | 
    
         
             
                    runs.each do |r| 
         
     | 
| 
       135 
     | 
    
         
            -
                      dt<<[status_icon(r.status),run_summary(r)]
         
     | 
| 
      
 155 
     | 
    
         
            +
                      dt<<[status_icon(r.status),run_summary(r),r.config_file]
         
     | 
| 
       136 
156 
     | 
    
         
             
                    end
         
     | 
| 
       137 
     | 
    
         
            -
                    @content<< Ruport::Data::Table.new(:data=>dt,:column_names=>["status","description"]).to_html
         
     | 
| 
      
 157 
     | 
    
         
            +
                    @content<< Ruport::Data::Table.new(:data=>dt,:column_names=>["status","description","configuration"]).to_html
         
     | 
| 
       138 
158 
     | 
    
         
             
                    @content<<"<br/>"
         
     | 
| 
       139 
159 
     | 
    
         
             
                    @content<<run_page_link(page_number,total_pages)
         
     | 
| 
       140 
160 
     | 
    
         
             
                    return @content
         
     | 
| 
         @@ -201,6 +221,7 @@ module Rutema 
     | 
|
| 
       201 
221 
     | 
    
         
             
                  end
         
     | 
| 
       202 
222 
     | 
    
         | 
| 
       203 
223 
     | 
    
         
             
                  def error
         
     | 
| 
      
 224 
     | 
    
         
            +
                    @content="There was an error"
         
     | 
| 
       204 
225 
     | 
    
         
             
                  end
         
     | 
| 
       205 
226 
     | 
    
         | 
| 
       206 
227 
     | 
    
         
             
                  def settings
         
     | 
| 
         @@ -324,57 +345,102 @@ module Rutema 
     | 
|
| 
       324 
345 
     | 
    
         
             
                    return ((failures.to_f/scenarios.size)*100).round
         
     | 
| 
       325 
346 
     | 
    
         
             
                  end
         
     | 
| 
       326 
347 
     | 
    
         
             
                end
         
     | 
| 
       327 
     | 
    
         
            -
             
     | 
| 
       328 
     | 
    
         
            -
                 
     | 
| 
       329 
     | 
    
         
            -
             
     | 
| 
       330 
     | 
    
         
            -
             
     | 
| 
       331 
     | 
    
         
            -
             
     | 
| 
       332 
     | 
    
         
            -
             
     | 
| 
       333 
     | 
    
         
            -
             
     | 
| 
       334 
     | 
    
         
            -
             
     | 
| 
       335 
     | 
    
         
            -
             
     | 
| 
       336 
     | 
    
         
            -
             
     | 
| 
       337 
     | 
    
         
            -
             
     | 
| 
       338 
     | 
    
         
            -
             
     | 
| 
       339 
     | 
    
         
            -
             
     | 
| 
       340 
     | 
    
         
            -
             
     | 
| 
       341 
     | 
    
         
            -
             
     | 
| 
       342 
     | 
    
         
            -
             
     | 
| 
       343 
     | 
    
         
            -
             
     | 
| 
       344 
     | 
    
         
            -
             
     | 
| 
       345 
     | 
    
         
            -
             
     | 
| 
       346 
     | 
    
         
            -
             
     | 
| 
       347 
     | 
    
         
            -
             
     | 
| 
       348 
     | 
    
         
            -
             
     | 
| 
       349 
     | 
    
         
            -
             
     | 
| 
       350 
     | 
    
         
            -
             
     | 
| 
       351 
     | 
    
         
            -
             
     | 
| 
       352 
     | 
    
         
            -
             
     | 
| 
       353 
     | 
    
         
            -
             
     | 
| 
       354 
     | 
    
         
            -
             
     | 
| 
       355 
     | 
    
         
            -
             
     | 
| 
       356 
     | 
    
         
            -
             
     | 
| 
       357 
     | 
    
         
            -
             
     | 
| 
       358 
     | 
    
         
            -
             
     | 
| 
       359 
     | 
    
         
            -
             
     | 
| 
       360 
     | 
    
         
            -
             
     | 
| 
       361 
     | 
    
         
            -
             
     | 
| 
       362 
     | 
    
         
            -
             
     | 
| 
       363 
     | 
    
         
            -
             
     | 
| 
       364 
     | 
    
         
            -
             
     | 
| 
       365 
     | 
    
         
            -
             
     | 
| 
       366 
     | 
    
         
            -
             
     | 
| 
       367 
     | 
    
         
            -
             
     | 
| 
       368 
     | 
    
         
            -
             
     | 
| 
       369 
     | 
    
         
            -
             
     | 
| 
       370 
     | 
    
         
            -
             
     | 
| 
       371 
     | 
    
         
            -
             
     | 
| 
       372 
     | 
    
         
            -
             
     | 
| 
       373 
     | 
    
         
            -
             
     | 
| 
       374 
     | 
    
         
            -
             
     | 
| 
       375 
     | 
    
         
            -
             
     | 
| 
       376 
     | 
    
         
            -
             
     | 
| 
       377 
     | 
    
         
            -
             
     | 
| 
       378 
     | 
    
         
            -
             
     | 
| 
      
 348 
     | 
    
         
            +
             
     | 
| 
      
 349 
     | 
    
         
            +
                class StatisticsController < Ramaze::Controller
         
     | 
| 
      
 350 
     | 
    
         
            +
                  include ViewUtilities
         
     | 
| 
      
 351 
     | 
    
         
            +
                  include Settings
         
     | 
| 
      
 352 
     | 
    
         
            +
                  def self.gruff_working= v
         
     | 
| 
      
 353 
     | 
    
         
            +
                    @@gruff_working= v
         
     | 
| 
      
 354 
     | 
    
         
            +
                  end
         
     | 
| 
      
 355 
     | 
    
         
            +
                  def self.gruff_working?
         
     | 
| 
      
 356 
     | 
    
         
            +
                    return @@gruff_working
         
     | 
| 
      
 357 
     | 
    
         
            +
                  end
         
     | 
| 
      
 358 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 359 
     | 
    
         
            +
                    gem 'gruff',"=0.3.4"
         
     | 
| 
      
 360 
     | 
    
         
            +
                    require 'gruff'
         
     | 
| 
      
 361 
     | 
    
         
            +
                    self.gruff_working=true
         
     | 
| 
      
 362 
     | 
    
         
            +
                  rescue LoadError
         
     | 
| 
      
 363 
     | 
    
         
            +
                    self.gruff_working=false
         
     | 
| 
      
 364 
     | 
    
         
            +
                  end
         
     | 
| 
      
 365 
     | 
    
         
            +
                  map '/statistics'
         
     | 
| 
      
 366 
     | 
    
         
            +
                  engine :Erubis
         
     | 
| 
      
 367 
     | 
    
         
            +
                  layout :layout
         
     | 
| 
      
 368 
     | 
    
         
            +
                  deny_layout :graph
         
     | 
| 
      
 369 
     | 
    
         
            +
                  view_root(File.expand_path(File.join(File.dirname(__FILE__),"view")))
         
     | 
| 
      
 370 
     | 
    
         
            +
                  def index
         
     | 
| 
      
 371 
     | 
    
         
            +
                    @title="Rutema"
         
     | 
| 
      
 372 
     | 
    
         
            +
                    @panel_content=panel_configurations
         
     | 
| 
      
 373 
     | 
    
         
            +
                    @content_title="Statistics"
         
     | 
| 
      
 374 
     | 
    
         
            +
                    @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>"
         
     | 
| 
      
 375 
     | 
    
         
            +
                    @content<<"statistics reports require the <a href=\"\">gruff</a> gem. gruff does not appear to be available!<br/>rutemaweb will not be able to produce statistics reports" unless false
         
     | 
| 
      
 376 
     | 
    
         
            +
                    @content
         
     | 
| 
      
 377 
     | 
    
         
            +
                  end
         
     | 
| 
      
 378 
     | 
    
         
            +
                  def config_report configuration=nil
         
     | 
| 
      
 379 
     | 
    
         
            +
                    @title=configuration || "All configurations" 
         
     | 
| 
      
 380 
     | 
    
         
            +
                    @panel_content=panel_configurations
         
     | 
| 
      
 381 
     | 
    
         
            +
                    @content_title= configuration || "All configurations"
         
     | 
| 
      
 382 
     | 
    
         
            +
                    if StatisticsController.gruff_working?
         
     | 
| 
      
 383 
     | 
    
         
            +
                      @content="<img src=\"/statistics/graph/#{configuration}\"/>"
         
     | 
| 
      
 384 
     | 
    
         
            +
                    else
         
     | 
| 
      
 385 
     | 
    
         
            +
                      @content="Could not generate graph.<p>This is probably due to a missing gruff/RMagick installation.</p><p>You will need to restart rutemaweb once the issue is resolved.</p>"
         
     | 
| 
      
 386 
     | 
    
         
            +
                    end
         
     | 
| 
      
 387 
     | 
    
         
            +
                    return @content
         
     | 
| 
      
 388 
     | 
    
         
            +
                  end
         
     | 
| 
      
 389 
     | 
    
         
            +
                  def graph configuration=nil
         
     | 
| 
      
 390 
     | 
    
         
            +
                    response.header['Content-type'] = "image/png"
         
     | 
| 
      
 391 
     | 
    
         
            +
                    successful=[]
         
     | 
| 
      
 392 
     | 
    
         
            +
                    failed=[]
         
     | 
| 
      
 393 
     | 
    
         
            +
                    labels=Hash.new
         
     | 
| 
      
 394 
     | 
    
         
            +
                    runs=Rutema::Model::Run.find(:all)
         
     | 
| 
      
 395 
     | 
    
         
            +
                    #find all runs beloging to this configuration
         
     | 
| 
      
 396 
     | 
    
         
            +
                    runs=runs.select{|r| r.context[:config_file]==configuration if r.context.is_a?(Hash)} if configuration
         
     | 
| 
      
 397 
     | 
    
         
            +
                    #now extract the data
         
     | 
| 
      
 398 
     | 
    
         
            +
                    counter=0
         
     | 
| 
      
 399 
     | 
    
         
            +
                    #the normalizer thins out the labels on the x axis so that they won't overlap
         
     | 
| 
      
 400 
     | 
    
         
            +
                    normalizer = 1
         
     | 
| 
      
 401 
     | 
    
         
            +
                    normalizer=runs.size/11 unless runs.size<=11
         
     | 
| 
      
 402 
     | 
    
         
            +
                    runs.each do |r|
         
     | 
| 
      
 403 
     | 
    
         
            +
                      fails=r.number_of_failed
         
     | 
| 
      
 404 
     | 
    
         
            +
                      #the scenarios array includes setup and teardown scripts as well - we want only the actual testcases
         
     | 
| 
      
 405 
     | 
    
         
            +
                      #so we use the added number_of_tests method that filters setup and test scripts
         
     | 
| 
      
 406 
     | 
    
         
            +
                      successful<<r.number_of_tests-fails
         
     | 
| 
      
 407 
     | 
    
         
            +
                      failed<<fails
         
     | 
| 
      
 408 
     | 
    
         
            +
                      #every Nth label
         
     | 
| 
      
 409 
     | 
    
         
            +
                      labels[counter]="R#{r.id}" if counter%normalizer==0
         
     | 
| 
      
 410 
     | 
    
         
            +
                      counter+=1
         
     | 
| 
      
 411 
     | 
    
         
            +
                    end
         
     | 
| 
      
 412 
     | 
    
         
            +
                    respond runs_graph_jpg(successful,failed,labels)
         
     | 
| 
      
 413 
     | 
    
         
            +
                  end
         
     | 
| 
      
 414 
     | 
    
         
            +
             
     | 
| 
      
 415 
     | 
    
         
            +
                  private
         
     | 
| 
      
 416 
     | 
    
         
            +
                  #returns a jpg blob
         
     | 
| 
      
 417 
     | 
    
         
            +
                  def runs_graph_jpg successful,failed,labels
         
     | 
| 
      
 418 
     | 
    
         
            +
                    graph=Gruff::StackedBar.new(640)
         
     | 
| 
      
 419 
     | 
    
         
            +
                    graph.theme = {
         
     | 
| 
      
 420 
     | 
    
         
            +
                      :colors => %w(green red yellow blue),
         
     | 
| 
      
 421 
     | 
    
         
            +
                      :marker_color => 'black',
         
     | 
| 
      
 422 
     | 
    
         
            +
                      :background_colors => %w(white grey)
         
     | 
| 
      
 423 
     | 
    
         
            +
                    }
         
     | 
| 
      
 424 
     | 
    
         
            +
                    graph.x_axis_label="#{successful.size} runs"
         
     | 
| 
      
 425 
     | 
    
         
            +
                    graph.data("successful",successful)
         
     | 
| 
      
 426 
     | 
    
         
            +
                    graph.data("failed",failed)
         
     | 
| 
      
 427 
     | 
    
         
            +
                    graph.labels=labels 
         
     | 
| 
      
 428 
     | 
    
         
            +
                    graph.marker_font_size=12
         
     | 
| 
      
 429 
     | 
    
         
            +
                    return graph.to_blob("PNG")
         
     | 
| 
      
 430 
     | 
    
         
            +
                  end
         
     | 
| 
      
 431 
     | 
    
         
            +
                  #extract all the configuration names
         
     | 
| 
      
 432 
     | 
    
         
            +
                  def configurations
         
     | 
| 
      
 433 
     | 
    
         
            +
                    runs=Rutema::Model::Run.find(:all)
         
     | 
| 
      
 434 
     | 
    
         
            +
                    return runs.map{|r| r.context[:config_file] if r.context.is_a?(Hash)}.compact.uniq
         
     | 
| 
      
 435 
     | 
    
         
            +
                  end
         
     | 
| 
      
 436 
     | 
    
         
            +
                  def panel_configurations
         
     | 
| 
      
 437 
     | 
    
         
            +
                    ret="<a href=\"/statistics/config_report\">all</a><br/>"
         
     | 
| 
      
 438 
     | 
    
         
            +
                    configurations.each do |cfg|
         
     | 
| 
      
 439 
     | 
    
         
            +
                      ret<<cfg_link(cfg)
         
     | 
| 
      
 440 
     | 
    
         
            +
                      ret<<"<br/>"
         
     | 
| 
      
 441 
     | 
    
         
            +
                    end
         
     | 
| 
      
 442 
     | 
    
         
            +
                    return ret
         
     | 
| 
      
 443 
     | 
    
         
            +
                  end
         
     | 
| 
      
 444 
     | 
    
         
            +
                end
         
     | 
| 
       379 
445 
     | 
    
         
             
              end
         
     | 
| 
       380 
446 
     | 
    
         
             
            end
         
     | 
| 
         @@ -2,7 +2,7 @@ 
     | 
|
| 
       2 
2 
     | 
    
         
             
            <html xmlns="http://www.w3.org/1999/xhtml">
         
     | 
| 
       3 
3 
     | 
    
         
             
            <head>
         
     | 
| 
       4 
4 
     | 
    
         
             
            	<meta name="author" content="Vassilis Rizopoulos" />
         
     | 
| 
       5 
     | 
    
         
            -
            	<meta http-equiv="Content-Type" content="text/html; charset= 
     | 
| 
      
 5 
     | 
    
         
            +
            	<meta http-equiv="Content-Type" content="text/html; charset=utf8" />
         
     | 
| 
       6 
6 
     | 
    
         
             
            	<link rel="stylesheet" href="/css/style.css" type="text/css" />
         
     | 
| 
       7 
7 
     | 
    
         
             
            	<script src="/js/folding.js" type="text/javascript"></script>
         
     | 
| 
       8 
8 
     | 
    
         
             
            	<title><%=@title%></title>
         
     | 
| 
         @@ -21,7 +21,7 @@ 
     | 
|
| 
       21 
21 
     | 
    
         
             
            			</div>
         
     | 
| 
       22 
22 
     | 
    
         
             
            			<div id="menu">
         
     | 
| 
       23 
23 
     | 
    
         
             
            				<div align="right" class="smallwhitetext" style="padding:9px;">
         
     | 
| 
       24 
     | 
    
         
            -
            					<a href="/">Home</a> | <a href="/run">Runs</a> | <a href="/scenario">Scenarios</a>
         
     | 
| 
      
 24 
     | 
    
         
            +
            					<a href="/">Home</a> | <a href="/run">Runs</a> | <a href="/scenario">Scenarios</a> | <a href="/statistics">Statistics</a>
         
     | 
| 
       25 
25 
     | 
    
         
             
            				</div>
         
     | 
| 
       26 
26 
     | 
    
         
             
            			</div>
         
     | 
| 
       27 
27 
     | 
    
         
             
            			<div id="submenu">
         
     | 
| 
         @@ -41,7 +41,7 @@ 
     | 
|
| 
       41 
41 
     | 
    
         
             
            				<% end %>
         
     | 
| 
       42 
42 
     | 
    
         
             
            			</div>
         
     | 
| 
       43 
43 
     | 
    
         
             
            			<div id="footer" class="smallgraytext">
         
     | 
| 
       44 
     | 
    
         
            -
            				<a href="/">Home</a> | <a href="http://patir.rubyforge.org/rutema">about rutema</a> | 
         
     | 
| 
      
 44 
     | 
    
         
            +
            				rutemaweb v<%= RutemaWeb::Version::STRING %> | <a href="/">Home</a> | <a href="http://patir.rubyforge.org/rutema">about rutema</a> | 
         
     | 
| 
       45 
45 
     | 
    
         
             
            				© 2008 <a href="http://www.braveworld.net/riva" target="_blank">Vassilis Rizopoulos</a> 
         
     | 
| 
       46 
46 
     | 
    
         
             
            			</div>
         
     | 
| 
       47 
47 
     | 
    
         
             
            		</div>
         
     | 
    
        data/test/test_model.rb
    ADDED
    
    | 
         @@ -0,0 +1,48 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'test/unit'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'ostruct'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'rutemaweb/ramaze_controller'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'rubygems'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'mocha'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            class TestModel <Test::Unit::TestCase
         
     | 
| 
      
 8 
     | 
    
         
            +
              ActiveRecord::Base.establish_connection(:adapter  => "sqlite3",:database =>":memory:")
         
     | 
| 
      
 9 
     | 
    
         
            +
              Rutema::Model::Schema.up
         
     | 
| 
      
 10 
     | 
    
         
            +
              def setup
         
     | 
| 
      
 11 
     | 
    
         
            +
                @stp=Rutema::Model::Scenario.new
         
     | 
| 
      
 12 
     | 
    
         
            +
                @stp.name="test_setup"
         
     | 
| 
      
 13 
     | 
    
         
            +
                @trd=Rutema::Model::Scenario.new
         
     | 
| 
      
 14 
     | 
    
         
            +
                @trd.name="test_teardown"
         
     | 
| 
      
 15 
     | 
    
         
            +
                @tst=Rutema::Model::Scenario.new
         
     | 
| 
      
 16 
     | 
    
         
            +
                @tst.name="test"
         
     | 
| 
      
 17 
     | 
    
         
            +
                @r=Rutema::Model::Run.new
         
     | 
| 
      
 18 
     | 
    
         
            +
                @r.scenarios=[@stp,@tst,@trd]
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
              def test_status
         
     | 
| 
      
 21 
     | 
    
         
            +
                assert_equal(:success,@r.status)
         
     | 
| 
      
 22 
     | 
    
         
            +
                t1=Rutema::Model::Scenario.new
         
     | 
| 
      
 23 
     | 
    
         
            +
                t1.name="failed"
         
     | 
| 
      
 24 
     | 
    
         
            +
                t1.stubs(:status).returns("error")
         
     | 
| 
      
 25 
     | 
    
         
            +
                @r.scenarios<<t1
         
     | 
| 
      
 26 
     | 
    
         
            +
                assert_equal(:error,@r.status)
         
     | 
| 
      
 27 
     | 
    
         
            +
              end
         
     | 
| 
      
 28 
     | 
    
         
            +
              def test_is_test?
         
     | 
| 
      
 29 
     | 
    
         
            +
                assert(!@stp.is_test?, "Setup as test")
         
     | 
| 
      
 30 
     | 
    
         
            +
                assert(!@trd.is_test?, "Teardown as test")
         
     | 
| 
      
 31 
     | 
    
         
            +
                assert(@tst.is_test?, "Test not a test")
         
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
              def test_number_of_tests
         
     | 
| 
      
 34 
     | 
    
         
            +
                assert_equal(1, @r.number_of_tests)
         
     | 
| 
      
 35 
     | 
    
         
            +
              end
         
     | 
| 
      
 36 
     | 
    
         
            +
              def test_number_of_failed
         
     | 
| 
      
 37 
     | 
    
         
            +
                t1=Rutema::Model::Scenario.new
         
     | 
| 
      
 38 
     | 
    
         
            +
                t1.name="failed"
         
     | 
| 
      
 39 
     | 
    
         
            +
                t1.stubs(:status).returns("error")
         
     | 
| 
      
 40 
     | 
    
         
            +
                t2=Rutema::Model::Scenario.new
         
     | 
| 
      
 41 
     | 
    
         
            +
                t2.name="not executed"
         
     | 
| 
      
 42 
     | 
    
         
            +
                t2.stubs(:status).returns("not_executed")
         
     | 
| 
      
 43 
     | 
    
         
            +
                @tst.stubs(:status).returns("success")
         
     | 
| 
      
 44 
     | 
    
         
            +
                @r.scenarios<<t1
         
     | 
| 
      
 45 
     | 
    
         
            +
                @r.scenarios<<t2
         
     | 
| 
      
 46 
     | 
    
         
            +
                assert_equal(2,@r.number_of_failed)
         
     | 
| 
      
 47 
     | 
    
         
            +
              end
         
     | 
| 
      
 48 
     | 
    
         
            +
            end
         
     | 
    
        data/test/test_rutemaweb.rb
    CHANGED
    
    | 
         @@ -7,9 +7,7 @@ require 'mocha' 
     | 
|
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
            class TestRutemaWeb <Test::Unit::TestCase
         
     | 
| 
       9 
9 
     | 
    
         
             
              ActiveRecord::Base.establish_connection(:adapter  => "sqlite3",:database =>":memory:")
         
     | 
| 
       10 
     | 
    
         
            -
              def setup
         
     | 
| 
       11 
10 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
              end
         
     | 
| 
       13 
11 
     | 
    
         
             
              def test_loading
         
     | 
| 
       14 
12 
     | 
    
         
             
                controller=nil
         
     | 
| 
       15 
13 
     | 
    
         
             
                assert_nothing_raised() { controller = Rutema::UI::MainController.new }
         
     | 
| 
         @@ -19,8 +17,9 @@ class TestRutemaWeb <Test::Unit::TestCase 
     | 
|
| 
       19 
17 
     | 
    
         
             
                cntlr=test_loading
         
     | 
| 
       20 
18 
     | 
    
         
             
                r=mock()
         
     | 
| 
       21 
19 
     | 
    
         
             
                r.expects(:id).returns(5).times(2)
         
     | 
| 
       22 
     | 
    
         
            -
                r. 
     | 
| 
       23 
     | 
    
         
            -
                r. 
     | 
| 
      
 20 
     | 
    
         
            +
                r.stubs(:context).returns({:start_time=>Time.now,:config_file=>"test"})
         
     | 
| 
      
 21 
     | 
    
         
            +
                r.stubs(:config_file).returns("test")
         
     | 
| 
      
 22 
     | 
    
         
            +
                r.stubs(:status).returns(:success)
         
     | 
| 
       24 
23 
     | 
    
         
             
                t=mock()
         
     | 
| 
       25 
24 
     | 
    
         
             
                t.expects(:to_html).returns("mocked")
         
     | 
| 
       26 
25 
     | 
    
         
             
                Rutema::Model::Run.expects(:find).returns([r])
         
     | 
| 
         @@ -29,7 +28,7 @@ class TestRutemaWeb <Test::Unit::TestCase 
     | 
|
| 
       29 
28 
     | 
    
         
             
                #Check nothing is raised when calling run (with everything mocked)
         
     | 
| 
       30 
29 
     | 
    
         
             
                assert_nothing_raised(){ cntlr.run}
         
     | 
| 
       31 
30 
     | 
    
         
             
              end
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
       33 
32 
     | 
    
         
             
              def test_runs
         
     | 
| 
       34 
33 
     | 
    
         
             
                cntlr=test_loading
         
     | 
| 
       35 
34 
     | 
    
         
             
                mock_12_runs
         
     | 
| 
         @@ -63,7 +62,7 @@ class TestRutemaWeb <Test::Unit::TestCase 
     | 
|
| 
       63 
62 
     | 
    
         
             
                #Check nothing is raised when calling run with a page number that is not a number
         
     | 
| 
       64 
63 
     | 
    
         
             
                assert_nothing_raised(){ cntlr.runs("atttaaaaack!!")}
         
     | 
| 
       65 
64 
     | 
    
         
             
              end
         
     | 
| 
       66 
     | 
    
         
            -
             
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
       67 
66 
     | 
    
         
             
              #unit tests for scenarios
         
     | 
| 
       68 
67 
     | 
    
         
             
              def test_scenarios
         
     | 
| 
       69 
68 
     | 
    
         
             
                ctlr=test_loading
         
     | 
| 
         @@ -71,10 +70,9 @@ class TestRutemaWeb <Test::Unit::TestCase 
     | 
|
| 
       71 
70 
     | 
    
         
             
                Rutema::Model::Run.expects(:find).returns("")
         
     | 
| 
       72 
71 
     | 
    
         
             
                assert_nothing_raised() { ctlr.scenarios }
         
     | 
| 
       73 
72 
     | 
    
         
             
              end
         
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
       75 
74 
     | 
    
         
             
              def test_scenario_wrong_arguments
         
     | 
| 
       76 
75 
     | 
    
         
             
                ctlr=test_loading
         
     | 
| 
       77 
     | 
    
         
            -
                ctlr.expects(:error).returns("super")
         
     | 
| 
       78 
76 
     | 
    
         
             
                assert_raise(ArgumentError) { ctlr.scenario("bla","blu")  }
         
     | 
| 
       79 
77 
     | 
    
         
             
              end
         
     | 
| 
       80 
78 
     | 
    
         
             
              private 
         
     | 
| 
         @@ -84,9 +82,10 @@ class TestRutemaWeb <Test::Unit::TestCase 
     | 
|
| 
       84 
82 
     | 
    
         
             
                Ruport::Data::Table.expects(:new).returns(t)
         
     | 
| 
       85 
83 
     | 
    
         
             
                runs=[mock(),mock(),mock(),mock(),mock(),mock(),mock(),mock(),mock(),mock(),mock(),mock()]
         
     | 
| 
       86 
84 
     | 
    
         
             
                runs.each do |r|
         
     | 
| 
       87 
     | 
    
         
            -
                  r. 
     | 
| 
       88 
     | 
    
         
            -
                  r. 
     | 
| 
       89 
     | 
    
         
            -
                  r. 
     | 
| 
      
 85 
     | 
    
         
            +
                  r.stubs(:id).returns(5)
         
     | 
| 
      
 86 
     | 
    
         
            +
                  r.stubs(:context).returns({:start_time=>Time.now,:config_file=>"test"})
         
     | 
| 
      
 87 
     | 
    
         
            +
                  r.stubs(:status).returns(:success)
         
     | 
| 
      
 88 
     | 
    
         
            +
                  r.stubs(:config_file).returns("test")
         
     | 
| 
       90 
89 
     | 
    
         
             
                end
         
     | 
| 
       91 
90 
     | 
    
         
             
                Rutema::Model::Run.expects(:find).returns(runs)
         
     | 
| 
       92 
91 
     | 
    
         
             
                Rutema::Model::Run.expects(:count).returns(12)
         
     | 
| 
         @@ -98,10 +97,11 @@ class TestRutemaWeb <Test::Unit::TestCase 
     | 
|
| 
       98 
97 
     | 
    
         
             
                Ruport::Data::Table.expects(:new).returns(t)
         
     | 
| 
       99 
98 
     | 
    
         
             
                scenarios=[mock(),mock(),mock(),mock(),mock(),mock(),mock(),mock(),mock(),mock(),mock(),mock()]
         
     | 
| 
       100 
99 
     | 
    
         
             
                scenarios.each do |sc|
         
     | 
| 
       101 
     | 
    
         
            -
                  sc. 
     | 
| 
      
 100 
     | 
    
         
            +
                  sc.stubs(:name).returns(scenarios.index(sc).to_s)
         
     | 
| 
      
 101 
     | 
    
         
            +
                  sc.stubs(:status).returns(:success)
         
     | 
| 
       102 
102 
     | 
    
         
             
                  sc.expects(:title).returns(scenarios.index(sc).to_s)
         
     | 
| 
       103 
103 
     | 
    
         
             
                  sc.expects(:run).returns(scenarios.index(sc))
         
     | 
| 
       104 
104 
     | 
    
         
             
                end
         
     | 
| 
       105 
     | 
    
         
            -
                Rutema::Model::Scenario. 
     | 
| 
      
 105 
     | 
    
         
            +
                Rutema::Model::Scenario.stubs(:find).returns(scenarios)
         
     | 
| 
       106 
106 
     | 
    
         
             
              end
         
     | 
| 
       107 
107 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification 
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: rutemaweb
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.9. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.9.4
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors: 
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Vassilis Rizopoulos
         
     | 
| 
         @@ -9,7 +9,7 @@ autorequire: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
            date: 2008-11- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2008-11-28 00:00:00 +01:00
         
     | 
| 
       13 
13 
     | 
    
         
             
            default_executable: rutemaweb
         
     | 
| 
       14 
14 
     | 
    
         
             
            dependencies: 
         
     | 
| 
       15 
15 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
         @@ -82,6 +82,16 @@ dependencies: 
     | 
|
| 
       82 
82 
     | 
    
         
             
                  - !ruby/object:Gem::Version 
         
     | 
| 
       83 
83 
     | 
    
         
             
                    version: "0"
         
     | 
| 
       84 
84 
     | 
    
         
             
                version: 
         
     | 
| 
      
 85 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency 
         
     | 
| 
      
 86 
     | 
    
         
            +
              name: gruff
         
     | 
| 
      
 87 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 88 
     | 
    
         
            +
              version_requirement: 
         
     | 
| 
      
 89 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement 
         
     | 
| 
      
 90 
     | 
    
         
            +
                requirements: 
         
     | 
| 
      
 91 
     | 
    
         
            +
                - - "="
         
     | 
| 
      
 92 
     | 
    
         
            +
                  - !ruby/object:Gem::Version 
         
     | 
| 
      
 93 
     | 
    
         
            +
                    version: 0.3.4
         
     | 
| 
      
 94 
     | 
    
         
            +
                version: 
         
     | 
| 
       85 
95 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
       86 
96 
     | 
    
         
             
              name: hoe
         
     | 
| 
       87 
97 
     | 
    
         
             
              type: :development
         
     | 
| 
         @@ -92,7 +102,7 @@ dependencies: 
     | 
|
| 
       92 
102 
     | 
    
         
             
                  - !ruby/object:Gem::Version 
         
     | 
| 
       93 
103 
     | 
    
         
             
                    version: 1.8.2
         
     | 
| 
       94 
104 
     | 
    
         
             
                version: 
         
     | 
| 
       95 
     | 
    
         
            -
            description: "== DESCRIPTION: rutemaweb is the web frontend for rutema.   It can be used as a viewer for database files created with the ActiveRecord reporter.  == FEATURES/PROBLEMS:  == SYNOPSIS: rutemaweb [results.db] and browse to http://localhost:7000 for the glorious view  == REQUIREMENTS: * patir (http://patir.rubyforge.org) * activerecord (http://ar.rubyonrails.com/) * sqlite3 (http://rubyforge.org/projects/sqlite-ruby/) * ramaze (http://www.ramaze.net/) * ruport (http://rubyreports.org/) * acts_as_reportable * erubis"
         
     | 
| 
      
 105 
     | 
    
         
            +
            description: "== DESCRIPTION: rutemaweb is the web frontend for rutema.   It can be used as a viewer for database files created with the rutema ActiveRecord reporter. It also provides you with some basic statistics about the tests in your database in the form of  diagrams of debatable aesthetics but undoubtable value!  == FEATURES/PROBLEMS:  == SYNOPSIS: rutemaweb [results.db] and browse to http://localhost:7000 for the glorious view  == REQUIREMENTS: * patir (http://patir.rubyforge.org) * activerecord (http://ar.rubyonrails.com/) * sqlite3 (http://rubyforge.org/projects/sqlite-ruby/) * ramaze (http://www.ramaze.net/) * ruport (http://rubyreports.org/) * acts_as_reportable * erubis * gruff/RMagick (optional, but needed if you want to see the statistics graphs)"
         
     | 
| 
       96 
106 
     | 
    
         
             
            email: riva@braveworld.net
         
     | 
| 
       97 
107 
     | 
    
         
             
            executables: 
         
     | 
| 
       98 
108 
     | 
    
         
             
            - rutemaweb
         
     | 
| 
         @@ -158,4 +168,5 @@ signing_key: 
     | 
|
| 
       158 
168 
     | 
    
         
             
            specification_version: 2
         
     | 
| 
       159 
169 
     | 
    
         
             
            summary: rutemaweb is the web frontend for rutema
         
     | 
| 
       160 
170 
     | 
    
         
             
            test_files: 
         
     | 
| 
      
 171 
     | 
    
         
            +
            - test/test_model.rb
         
     | 
| 
       161 
172 
     | 
    
         
             
            - test/test_rutemaweb.rb
         
     |