ruport-util 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/INSTALL +8 -7
- data/Rakefile +66 -11
- data/bin/csv2ods +53 -0
- data/example/data/blank.ods +0 -0
- data/example/graph_report.rb +6 -2
- data/example/invoice_report.rb +2 -1
- data/example/mailer.rb +7 -7
- data/example/managed_report.rb +5 -5
- data/example/ods.rb +12 -0
- data/lib/ruport/util/generator.rb +2 -11
- data/lib/ruport/util/graph.rb +8 -0
- data/lib/ruport/util/ods.rb +80 -0
- data/lib/ruport/util/report.rb +33 -299
- data/lib/ruport/util/report_manager.rb +2 -3
- data/lib/ruport/util.rb +9 -1
- data/test/helper/layout.rb +55 -0
- data/test/helper/wrap.rb +190 -0
- data/test/helper.rb +27 -0
- data/test/test_format_ods.rb +46 -0
- data/test/test_graph_renderer.rb +21 -31
- data/test/test_invoice.rb +30 -28
- data/test/test_mailer.rb +116 -159
- data/test/test_report.rb +80 -183
- data/test/test_report_manager.rb +32 -29
- metadata +30 -22
- data/example/foo.svg +0 -83
- data/example/form.pdf +0 -160
- data/example/out.pdf +0 -229
- data/test/init.rb +0 -7
    
        data/test/test_report.rb
    CHANGED
    
    | @@ -1,20 +1,5 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
             | 
| 3 | 
            -
            #  Created by Gregory Thomas Brown on 2005-08-09
         | 
| 4 | 
            -
            #  Copyright 2005 (Gregory Brown) All rights reserved.
         | 
| 5 | 
            -
             | 
| 6 | 
            -
            require "test/unit"
         | 
| 7 | 
            -
            begin; require "rubygems"; rescue LoadError; nil; end
         | 
| 8 | 
            -
            require "ruport"
         | 
| 9 | 
            -
            require "ruport/util/report"
         | 
| 10 | 
            -
             | 
| 11 | 
            -
            begin
         | 
| 12 | 
            -
              require 'mocha'
         | 
| 13 | 
            -
              require 'stubba'
         | 
| 14 | 
            -
              require 'net/smtp'
         | 
| 15 | 
            -
            rescue LoadError
         | 
| 16 | 
            -
              $stderr.puts "Warning: Mocha not found -- skipping some Report tests"
         | 
| 17 | 
            -
            end
         | 
| 1 | 
            +
            require 'test/helper'
         | 
| 2 | 
            +
            require 'net/smtp'
         | 
| 18 3 |  | 
| 19 4 | 
             
            class SampleReport < Ruport::Report
         | 
| 20 5 | 
             
              renders_with Ruport::Renderer::Table
         | 
| @@ -24,195 +9,107 @@ class SampleReport < Ruport::Report | |
| 24 9 | 
             
              end
         | 
| 25 10 | 
             
            end
         | 
| 26 11 |  | 
| 27 | 
            -
            class  | 
| 28 | 
            -
             | 
| 12 | 
            +
            class MyReport < Ruport::Report
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              attr_accessor :data
         | 
| 15 | 
            +
              
         | 
| 16 | 
            +
              def generate
         | 
| 17 | 
            +
                data
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            end
         | 
| 29 21 |  | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 22 | 
            +
            describe 'Report essentials' do
         | 
| 23 | 
            +
              before :each do
         | 
| 24 | 
            +
                @report = Ruport::Report.new
         | 
| 32 25 | 
             
              end
         | 
| 33 26 |  | 
| 34 | 
            -
               | 
| 35 | 
            -
                a = SampleReport.new(:csv)
         | 
| 36 | 
            -
                assert_equal("not,abc\no,r\none,two\nthr,ee\n",a.run)
         | 
| 37 | 
            -
                assert_equal("not,abc\no,r\none,two\nthr,ee\n",SampleReport.as(:csv))
         | 
| 38 | 
            -
                assert_equal("not,abc\no,r\none,two\nthr,ee\n",SampleReport.to_csv)
         | 
| 39 | 
            -
                assert_equal("not,abc\no,r\none,two\nthr,ee\n",a.to_csv)
         | 
| 27 | 
            +
              it 'should render with shortcuts' do
         | 
| 40 28 | 
             
                a = SampleReport.new
         | 
| 41 | 
            -
                 | 
| 29 | 
            +
                csv = "not,abc\no,r\none,two\nthr,ee\n"
         | 
| 42 30 |  | 
| 43 | 
            -
                 | 
| 44 | 
            -
                a.to_text
         | 
| 31 | 
            +
                a.to_csv.should == csv
         | 
| 45 32 |  | 
| 46 | 
            -
                 | 
| 33 | 
            +
                SampleReport.generate { |r| r.to_csv.should == csv }
         | 
| 47 34 | 
             
              end
         | 
| 48 35 |  | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 53 | 
            -
                 | 
| 36 | 
            +
            end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            describe 'Writing Report to files' do
         | 
| 39 | 
            +
              def file_mock(mode, filename, content)
         | 
| 40 | 
            +
                file = mock("File #{filename}")
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                file.should_receive(:<<).
         | 
| 43 | 
            +
                  with(content).and_return(file)
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                File.should_receive(:open).
         | 
| 46 | 
            +
                  with(filename, mode).once.
         | 
| 47 | 
            +
                  and_yield(file)
         | 
| 54 48 | 
             
              end
         | 
| 55 49 |  | 
| 56 | 
            -
               | 
| 57 | 
            -
             | 
| 58 | 
            -
              def test_klass_methods
         | 
| 59 | 
            -
                rep_klass = MyReport.dup
         | 
| 60 | 
            -
                rep_klass.send(:prepare)  { self.file = "foo.csv" }
         | 
| 61 | 
            -
                rep_klass.send(:generate) { "hello dolly" }
         | 
| 62 | 
            -
                rep_klass.send(:cleanup) { @foo = "bar" }
         | 
| 63 | 
            -
                report = rep_klass.new
         | 
| 64 | 
            -
                report.run { |rep|  
         | 
| 65 | 
            -
                  assert_equal("foo.csv",rep.file)
         | 
| 66 | 
            -
                  assert_equal("hello dolly",rep.results)
         | 
| 67 | 
            -
                  assert_equal(nil,rep.instance_eval("@foo"))
         | 
| 68 | 
            -
                }
         | 
| 69 | 
            -
                assert_equal("bar",report.instance_eval("@foo"))
         | 
| 50 | 
            +
              before :each do
         | 
| 51 | 
            +
                @report = SampleReport.new
         | 
| 70 52 | 
             
              end
         | 
| 71 53 |  | 
| 72 | 
            -
               | 
| 73 | 
            -
                 | 
| 74 | 
            -
             | 
| 75 | 
            -
                 | 
| 76 | 
            -
             | 
| 54 | 
            +
              it 'should write correctly to files' do
         | 
| 55 | 
            +
                file_mock(mode = 'w', filename = 'foo.csv', 
         | 
| 56 | 
            +
                                      content = "not,abc\no,r\none,two\nthr,ee\n")
         | 
| 57 | 
            +
                @report.save_as(filename).should_not be_nil
         | 
| 58 | 
            +
              end
         | 
| 59 | 
            +
            end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
            describe 'MyReport rendering' do
         | 
| 62 | 
            +
              before :all do
         | 
| 63 | 
            +
                @table = [[1,2,3],[4,5,6]].to_table(%w[a b c])
         | 
| 64 | 
            +
              end
         | 
| 77 65 |  | 
| 78 | 
            -
             | 
| 79 | 
            -
                 | 
| 66 | 
            +
              before :each do
         | 
| 67 | 
            +
                @my_report = MyReport.new
         | 
| 68 | 
            +
              end
         | 
| 80 69 |  | 
| 81 | 
            -
             | 
| 70 | 
            +
              def generate(table)
         | 
| 71 | 
            +
                @my_report.data = table
         | 
| 72 | 
            +
              end
         | 
| 82 73 |  | 
| 83 | 
            -
             | 
| 74 | 
            +
              it 'should renders_with Renderer::Table' do
         | 
| 75 | 
            +
                MyReport.renders_with Ruport::Renderer::Table
         | 
| 76 | 
            +
                generate @table
         | 
| 77 | 
            +
                @my_report.to_csv.should == "a,b,c\n1,2,3\n4,5,6\n"
         | 
| 78 | 
            +
              end
         | 
| 84 79 |  | 
| 85 | 
            -
             | 
| 86 | 
            -
             | 
| 87 | 
            -
                 | 
| 80 | 
            +
              it 'should renders_with Renderer::Table and optional headers' do
         | 
| 81 | 
            +
                MyReport.renders_with Ruport::Renderer::Table, :show_table_headers => false
         | 
| 82 | 
            +
                generate @table
         | 
| 88 83 |  | 
| 84 | 
            +
                @my_report.to_csv.should == "1,2,3\n4,5,6\n"
         | 
| 85 | 
            +
                @my_report.to_csv(:show_table_headers => true).should == "a,b,c\n1,2,3\n4,5,6\n"
         | 
| 89 86 | 
             
              end
         | 
| 90 87 |  | 
| 88 | 
            +
              it 'should render as table' do
         | 
| 89 | 
            +
                MyReport.renders_as_table
         | 
| 90 | 
            +
                generate @table
         | 
| 91 91 |  | 
| 92 | 
            -
             | 
| 93 | 
            -
             | 
| 94 | 
            -
             | 
| 92 | 
            +
                @my_report.to_csv.should == "a,b,c\n1,2,3\n4,5,6\n"
         | 
| 93 | 
            +
              end
         | 
| 94 | 
            +
             | 
| 95 | 
            +
              it 'should render as row' do
         | 
| 96 | 
            +
                MyReport.renders_as_row
         | 
| 97 | 
            +
                generate @table[0]
         | 
| 95 98 |  | 
| 96 | 
            -
                 | 
| 97 | 
            -
             | 
| 98 | 
            -
                }
         | 
| 99 | 
            -
                
         | 
| 100 | 
            -
                rep_klass.send(:generate) { sleep 1.1 }
         | 
| 99 | 
            +
                @my_report.to_csv.should == "1,2,3\n"
         | 
| 100 | 
            +
              end
         | 
| 101 101 |  | 
| 102 | 
            -
             | 
| 103 | 
            -
             | 
| 104 | 
            -
             | 
| 105 | 
            -
                                 :interval => 1,
         | 
| 106 | 
            -
                                 :log_level => :log_only)
         | 
| 107 | 
            -
                }
         | 
| 102 | 
            +
              it 'should render as group' do
         | 
| 103 | 
            +
                MyReport.renders_as_group
         | 
| 104 | 
            +
                generate @table.to_group('foo')
         | 
| 108 105 |  | 
| 106 | 
            +
                @my_report.to_csv.should == "foo\n\na,b,c\n1,2,3\n4,5,6\n"
         | 
| 109 107 | 
             
              end
         | 
| 110 | 
            -
              
         | 
| 111 | 
            -
              def test_return_value
         | 
| 112 | 
            -
                rep_klass = MyReport.dup
         | 
| 113 | 
            -
                rep_klass.send(:generate) { "hello dolly" }
         | 
| 114 | 
            -
             | 
| 115 | 
            -
                # single report
         | 
| 116 | 
            -
                assert_equal "hello dolly", rep_klass.run 
         | 
| 117 | 
            -
             | 
| 118 | 
            -
                # multiple reports
         | 
| 119 | 
            -
                assert_equal ["hello dolly", "hello dolly"],
         | 
| 120 | 
            -
                  rep_klass.run(:reports => [rep_klass.new,rep_klass.new])
         | 
| 121 | 
            -
              end
         | 
| 122 | 
            -
             | 
| 123 | 
            -
               def test_write_to_file
         | 
| 124 | 
            -
                 return unless Object.const_defined? :Mocha
         | 
| 125 | 
            -
                 file = mock("file")
         | 
| 126 | 
            -
             
         | 
| 127 | 
            -
                 File.expects(:open).
         | 
| 128 | 
            -
                   with("foo.csv","w").yields(file).returns(file).at_least_once
         | 
| 129 | 
            -
             | 
| 130 | 
            -
                 file.expects(:<<).
         | 
| 131 | 
            -
                   with("results").returns(file).at_least_once
         | 
| 132 | 
            -
                 
         | 
| 133 | 
            -
                 @report = Report.new
         | 
| 134 | 
            -
                 assert @report.write("foo.csv", "results")
         | 
| 135 | 
            -
               end
         | 
| 136 | 
            -
             
         | 
| 137 | 
            -
               def test_append_to_file
         | 
| 138 | 
            -
                 return unless Object.const_defined? :Mocha
         | 
| 139 | 
            -
                 file = mock("file")
         | 
| 140 | 
            -
                 
         | 
| 141 | 
            -
                 File.expects(:open).
         | 
| 142 | 
            -
                   with("foo.csv","a").yields(file).returns(file).at_least_once
         | 
| 143 | 
            -
             | 
| 144 | 
            -
                 file.expects(:<<).
         | 
| 145 | 
            -
                   with("results").returns(file).at_least_once
         | 
| 146 | 
            -
             
         | 
| 147 | 
            -
                 @report = Report.new
         | 
| 148 | 
            -
                 assert @report.append("foo.csv", "results")
         | 
| 149 | 
            -
               end
         | 
| 150 | 
            -
             
         | 
| 151 | 
            -
               def test_load_csv
         | 
| 152 | 
            -
                 expected = [%w[a b c],['d', nil, 'e']].to_table(%w[col1 col2 col3])
         | 
| 153 | 
            -
             
         | 
| 154 | 
            -
                 @report = Report.new
         | 
| 155 | 
            -
                 table = @report.load_csv("test/samples/data.csv")
         | 
| 156 | 
            -
             
         | 
| 157 | 
            -
                 assert_equal expected, table
         | 
| 158 | 
            -
               end
         | 
| 159 | 
            -
             
         | 
| 160 | 
            -
               def test_load_csv_as_array
         | 
| 161 | 
            -
                 expected = [%w[a b c],['d', nil, 'e']]
         | 
| 162 | 
            -
             
         | 
| 163 | 
            -
                 @report = Report.new
         | 
| 164 | 
            -
                 array = @report.load_csv("test/samples/data.csv", :as => :array)
         | 
| 165 | 
            -
             
         | 
| 166 | 
            -
                 assert_equal expected, array
         | 
| 167 | 
            -
               end
         | 
| 168 | 
            -
             | 
| 169 | 
            -
               def test_renders_with
         | 
| 170 | 
            -
                klass = MyReport.dup
         | 
| 171 | 
            -
                klass.renders_with Ruport::Renderer::Table
         | 
| 172 | 
            -
                klass.send(:generate) { [[1,2,3],[4,5,6]].to_table(%w[a b c]) }
         | 
| 173 | 
            -
                a = klass.new(:csv)
         | 
| 174 | 
            -
                assert_equal "a,b,c\n1,2,3\n4,5,6\n", a.run
         | 
| 175 | 
            -
             | 
| 176 | 
            -
                klass.renders_with Ruport::Renderer::Table, :show_table_headers => false
         | 
| 177 | 
            -
                a = klass.new(:csv)
         | 
| 178 | 
            -
                assert_equal "1,2,3\n4,5,6\n", a.run
         | 
| 179 | 
            -
                assert_equal "a,b,c\n1,2,3\n4,5,6\n", a.run(:show_table_headers => true)
         | 
| 180 | 
            -
             | 
| 181 | 
            -
             | 
| 182 | 
            -
               end
         | 
| 183 | 
            -
             
         | 
| 184 | 
            -
               def test_renders_as_table
         | 
| 185 | 
            -
                 klass = MyReport.dup
         | 
| 186 | 
            -
                 klass.renders_as_table
         | 
| 187 | 
            -
                 klass.send(:generate) { [[1,2,3],[4,5,6]].to_table(%w[a b c]) }
         | 
| 188 | 
            -
                 a = klass.new(:csv)
         | 
| 189 | 
            -
                 assert_equal "a,b,c\n1,2,3\n4,5,6\n", a.run
         | 
| 190 | 
            -
               end      
         | 
| 191 | 
            -
               
         | 
| 192 | 
            -
               def test_renders_as_row
         | 
| 193 | 
            -
                 klass = MyReport.dup
         | 
| 194 | 
            -
                 klass.renders_as_row
         | 
| 195 | 
            -
                 klass.send(:generate) { [[1,2,3]].to_table(%w[a b c])[0] }
         | 
| 196 | 
            -
                 a = klass.new(:csv)
         | 
| 197 | 
            -
                 assert_equal "1,2,3\n", a.run
         | 
| 198 | 
            -
               end      
         | 
| 199 | 
            -
               
         | 
| 200 | 
            -
               def test_renders_as_group
         | 
| 201 | 
            -
                 klass = MyReport.dup
         | 
| 202 | 
            -
                 klass.renders_as_group
         | 
| 203 | 
            -
                 klass.send(:generate) { [[1,2,3]].to_table(%w[a b c]).to_group("foo") }
         | 
| 204 | 
            -
                 a = klass.new(:csv)
         | 
| 205 | 
            -
                 assert_equal "foo\n\na,b,c\n1,2,3\n", a.run
         | 
| 206 | 
            -
               end    
         | 
| 207 | 
            -
               
         | 
| 208 | 
            -
               def test_renders_as_grouping
         | 
| 209 | 
            -
                 klass = MyReport.dup
         | 
| 210 | 
            -
                 klass.renders_as_grouping
         | 
| 211 | 
            -
                 klass.send(:generate) { 
         | 
| 212 | 
            -
                   Grouping([[1,2,3],[4,5,6]].to_table(%w[a b c]),:by => "a")
         | 
| 213 | 
            -
                 }
         | 
| 214 | 
            -
                 a = klass.new(:csv)
         | 
| 215 | 
            -
                 assert_equal "1\n\nb,c\n2,3\n\n4\n\nb,c\n5,6\n\n", a.run
         | 
| 216 | 
            -
               end
         | 
| 217 108 |  | 
| 109 | 
            +
              it 'should render as grouping' do
         | 
| 110 | 
            +
                MyReport.renders_as_grouping
         | 
| 111 | 
            +
                generate Grouping(@table, :by => 'a')
         | 
| 112 | 
            +
             | 
| 113 | 
            +
                @my_report.to_csv.should == "1\n\nb,c\n2,3\n\n4\n\nb,c\n5,6\n\n"
         | 
| 114 | 
            +
              end
         | 
| 218 115 | 
             
            end
         | 
    
        data/test/test_report_manager.rb
    CHANGED
    
    | @@ -1,38 +1,41 @@ | |
| 1 | 
            -
            require  | 
| 2 | 
            -
            require "ruport/util/report_manager"
         | 
| 1 | 
            +
            require 'test/helper'
         | 
| 3 2 |  | 
| 4 | 
            -
            class  | 
| 5 | 
            -
            class  | 
| 6 | 
            -
            Sample.acts_as_managed_report
         | 
| 7 | 
            -
            Sample2.acts_as_managed_report  
         | 
| 3 | 
            +
            class MikeSample < Ruport::Report; def generate; "Hello Mike"; end; end
         | 
| 4 | 
            +
            class JoeSample < Ruport::Report; def generate; "Hello Joe"; end; end
         | 
| 8 5 |  | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 6 | 
            +
            MikeSample.acts_as_managed_report
         | 
| 7 | 
            +
            JoeSample.acts_as_managed_report  
         | 
| 11 8 |  | 
| 12 | 
            -
            class  | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
                 | 
| 18 | 
            -
              end | 
| 19 | 
            -
             | 
| 20 | 
            -
               | 
| 21 | 
            -
                 | 
| 22 | 
            -
                 | 
| 9 | 
            +
            class FakeModel2; end
         | 
| 10 | 
            +
            class FakeModel3; end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            describe 'ReportManager' do
         | 
| 13 | 
            +
              before :all do
         | 
| 14 | 
            +
                @manager = Ruport::ReportManager
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              it 'should handle reports' do
         | 
| 18 | 
            +
                @manager['MikeSample'].should == MikeSample
         | 
| 19 | 
            +
                @manager['JoeSample'].should == JoeSample
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                [ MikeSample, JoeSample ].should == @manager.reports
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              it 'should add models' do
         | 
| 25 | 
            +
                # only for testing, no need for it in production code
         | 
| 26 | 
            +
                manager = @manager.dup
         | 
| 23 27 |  | 
| 24 | 
            -
                 | 
| 28 | 
            +
                manager.models.should be_empty
         | 
| 25 29 |  | 
| 26 | 
            -
                 | 
| 27 | 
            -
                 | 
| 30 | 
            +
                manager.add_model FakeModel2
         | 
| 31 | 
            +
                manager.models.should have(1).model
         | 
| 28 32 |  | 
| 29 | 
            -
                 | 
| 30 | 
            -
                 | 
| 33 | 
            +
                manager.add_model FakeModel3
         | 
| 34 | 
            +
                manager.models.should have(2).models
         | 
| 31 35 |  | 
| 32 36 | 
             
                # let's make sure we can still grab these by name (a string)
         | 
| 33 | 
            -
                [FakeModel2, | 
| 34 | 
            -
                   | 
| 37 | 
            +
                [ FakeModel2, FakeModel2 ].each do |model|
         | 
| 38 | 
            +
                  manager[model.name].should == model
         | 
| 35 39 | 
             
                end
         | 
| 36 | 
            -
              end | 
| 37 | 
            -
             | 
| 38 | 
            -
            end
         | 
| 40 | 
            +
              end
         | 
| 41 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -3,8 +3,8 @@ rubygems_version: 0.9.2 | |
| 3 3 | 
             
            specification_version: 1
         | 
| 4 4 | 
             
            name: ruport-util
         | 
| 5 5 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 6 | 
            -
              version: 0. | 
| 7 | 
            -
            date: 2007- | 
| 6 | 
            +
              version: 0.7.0
         | 
| 7 | 
            +
            date: 2007-06-07 00:00:00 -04:00
         | 
| 8 8 | 
             
            summary: A set of tools and helper libs for Ruby Reports
         | 
| 9 9 | 
             
            require_paths: 
         | 
| 10 10 | 
             
            - lib
         | 
| @@ -29,44 +29,51 @@ post_install_message: | |
| 29 29 | 
             
            authors: 
         | 
| 30 30 | 
             
            - Gregory Brown
         | 
| 31 31 | 
             
            files: 
         | 
| 32 | 
            -
            - example/ | 
| 33 | 
            -
            - example/ | 
| 32 | 
            +
            - example/data
         | 
| 33 | 
            +
            - example/data/blank.ods
         | 
| 34 | 
            +
            - example/mailer.rb
         | 
| 34 35 | 
             
            - example/form.rb
         | 
| 35 | 
            -
            - example/ | 
| 36 | 
            +
            - example/ods.rb
         | 
| 36 37 | 
             
            - example/invoice_report.rb
         | 
| 37 | 
            -
            - example/mailer.rb
         | 
| 38 38 | 
             
            - example/managed_report.rb
         | 
| 39 | 
            -
            - example/ | 
| 39 | 
            +
            - example/graph_report.rb
         | 
| 40 40 | 
             
            - lib/ruport
         | 
| 41 41 | 
             
            - lib/ruport/util
         | 
| 42 | 
            -
            - lib/ruport/util | 
| 43 | 
            -
            - lib/ruport/util/ | 
| 42 | 
            +
            - lib/ruport/util/pdf
         | 
| 43 | 
            +
            - lib/ruport/util/pdf/form.rb
         | 
| 44 44 | 
             
            - lib/ruport/util/generator.rb
         | 
| 45 | 
            +
            - lib/ruport/util/bench.rb
         | 
| 45 46 | 
             
            - lib/ruport/util/graph.rb
         | 
| 46 | 
            -
            - lib/ruport/util/ | 
| 47 | 
            +
            - lib/ruport/util/ods.rb
         | 
| 48 | 
            +
            - lib/ruport/util/report_manager.rb
         | 
| 47 49 | 
             
            - lib/ruport/util/mailer.rb
         | 
| 48 | 
            -
            - lib/ruport/util/pdf
         | 
| 49 50 | 
             
            - lib/ruport/util/report.rb
         | 
| 50 | 
            -
            - lib/ruport/util/ | 
| 51 | 
            -
            - lib/ruport/util | 
| 52 | 
            -
            - test/ | 
| 51 | 
            +
            - lib/ruport/util/invoice.rb
         | 
| 52 | 
            +
            - lib/ruport/util.rb
         | 
| 53 | 
            +
            - test/helper
         | 
| 54 | 
            +
            - test/helper/layout.rb
         | 
| 55 | 
            +
            - test/helper/wrap.rb
         | 
| 53 56 | 
             
            - test/samples
         | 
| 54 | 
            -
            - test/test_graph_renderer.rb
         | 
| 55 | 
            -
            - test/test_invoice.rb
         | 
| 56 | 
            -
            - test/test_mailer.rb
         | 
| 57 | 
            -
            - test/test_report.rb
         | 
| 58 | 
            -
            - test/test_report_manager.rb
         | 
| 59 57 | 
             
            - test/samples/data.csv
         | 
| 60 58 | 
             
            - test/samples/foo.rtxt
         | 
| 59 | 
            +
            - test/test_mailer.rb
         | 
| 60 | 
            +
            - test/helper.rb
         | 
| 61 | 
            +
            - test/test_report_manager.rb
         | 
| 62 | 
            +
            - test/test_graph_renderer.rb
         | 
| 63 | 
            +
            - test/test_report.rb
         | 
| 64 | 
            +
            - test/test_invoice.rb
         | 
| 65 | 
            +
            - test/test_format_ods.rb
         | 
| 66 | 
            +
            - bin/csv2ods
         | 
| 61 67 | 
             
            - bin/rope
         | 
| 62 68 | 
             
            - Rakefile
         | 
| 63 69 | 
             
            - INSTALL
         | 
| 64 70 | 
             
            test_files: 
         | 
| 65 | 
            -
            - test/test_graph_renderer.rb
         | 
| 66 | 
            -
            - test/test_invoice.rb
         | 
| 67 71 | 
             
            - test/test_mailer.rb
         | 
| 68 | 
            -
            - test/test_report.rb
         | 
| 69 72 | 
             
            - test/test_report_manager.rb
         | 
| 73 | 
            +
            - test/test_graph_renderer.rb
         | 
| 74 | 
            +
            - test/test_report.rb
         | 
| 75 | 
            +
            - test/test_invoice.rb
         | 
| 76 | 
            +
            - test/test_format_ods.rb
         | 
| 70 77 | 
             
            rdoc_options: 
         | 
| 71 78 | 
             
            - --title
         | 
| 72 79 | 
             
            - ruport-util Documentation
         | 
| @@ -77,6 +84,7 @@ extra_rdoc_files: | |
| 77 84 | 
             
            - INSTALL
         | 
| 78 85 | 
             
            executables: 
         | 
| 79 86 | 
             
            - rope
         | 
| 87 | 
            +
            - csv2ods
         | 
| 80 88 | 
             
            extensions: []
         | 
| 81 89 |  | 
| 82 90 | 
             
            requirements: []
         | 
    
        data/example/foo.svg
    DELETED
    
    | @@ -1,83 +0,0 @@ | |
| 1 | 
            -
            <?xml version="1.0" encoding="UTF-8"?>
         | 
| 2 | 
            -
            <?DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"  type=""?>
         | 
| 3 | 
            -
            <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" height="300" width="500">
         | 
| 4 | 
            -
              <g id="scruffy_graph">
         | 
| 5 | 
            -
                <g transform="translate(0.0, 0.0)" id="background">
         | 
| 6 | 
            -
                  <defs>
         | 
| 7 | 
            -
                    <linearGradient y2="100%" x1="0%" x2="0%" id="BackgroundGradient" y1="0%">
         | 
| 8 | 
            -
                      <stop stop-color="black" offset="5%"/>
         | 
| 9 | 
            -
                      <stop stop-color="#4A465A" offset="95%"/>
         | 
| 10 | 
            -
                    </linearGradient>
         | 
| 11 | 
            -
                  </defs>
         | 
| 12 | 
            -
                  <rect x="0" y="0" height="300.0" width="500.0" fill="url(#BackgroundGradient)"/>
         | 
| 13 | 
            -
                </g>
         | 
| 14 | 
            -
                <g transform="translate(25.0, 6.0)" id="title">
         | 
| 15 | 
            -
                  <text x="225.0" font-size="21.0" text-anchor="middle" y="21.0" class="title" stroke-width="0" fill="white" stroke="none"></text>
         | 
| 16 | 
            -
                </g>
         | 
| 17 | 
            -
                <g transform="translate(10.0, 78.0)" id="view">
         | 
| 18 | 
            -
                  <g>
         | 
| 19 | 
            -
                    <g transform="translate(0.0, 3.96)" id="values">
         | 
| 20 | 
            -
                      <text x="80.1" font-size="14.0976" text-anchor="end" y="176.22" fill="white">0</text>
         | 
| 21 | 
            -
                      <text x="80.1" font-size="14.0976" text-anchor="end" y="132.165" fill="white">18</text>
         | 
| 22 | 
            -
                      <text x="80.1" font-size="14.0976" text-anchor="end" y="88.11" fill="white">35</text>
         | 
| 23 | 
            -
                      <text x="80.1" font-size="14.0976" text-anchor="end" y="44.055" fill="white">52</text>
         | 
| 24 | 
            -
                      <text x="80.1" font-size="14.0976" text-anchor="end" y="0.0" fill="white">70</text>
         | 
| 25 | 
            -
                    </g>
         | 
| 26 | 
            -
                    <g transform="translate(89.0, 0.0)" id="grid">
         | 
| 27 | 
            -
                      <line y2="0.0" x1="0" x2="356.0" style="stroke: white; stroke-width: 2;" y1="0.0"/>
         | 
| 28 | 
            -
                      <line y2="44.055" x1="0" x2="356.0" style="stroke: white; stroke-width: 2;" y1="44.055"/>
         | 
| 29 | 
            -
                      <line y2="88.11" x1="0" x2="356.0" style="stroke: white; stroke-width: 2;" y1="88.11"/>
         | 
| 30 | 
            -
                      <line y2="132.165" x1="0" x2="356.0" style="stroke: white; stroke-width: 2;" y1="132.165"/>
         | 
| 31 | 
            -
                      <line y2="176.22" x1="0" x2="356.0" style="stroke: white; stroke-width: 2;" y1="176.22"/>
         | 
| 32 | 
            -
                    </g>
         | 
| 33 | 
            -
                    <g transform="translate(89.0, 182.16)" id="labels">
         | 
| 34 | 
            -
                      <text x="0.0" font-size="14.256" text-anchor="middle" y="15.84" fill="white">a</text>
         | 
| 35 | 
            -
                      <text x="89.0" font-size="14.256" text-anchor="middle" y="15.84" fill="white">b</text>
         | 
| 36 | 
            -
                      <text x="178.0" font-size="14.256" text-anchor="middle" y="15.84" fill="white">c</text>
         | 
| 37 | 
            -
                      <text x="267.0" font-size="14.256" text-anchor="middle" y="15.84" fill="white">d</text>
         | 
| 38 | 
            -
                      <text x="356.0" font-size="14.256" text-anchor="middle" y="15.84" fill="white">e</text>
         | 
| 39 | 
            -
                    </g>
         | 
| 40 | 
            -
                    <g transform="translate(89.0, 0.0)" id="graphs">
         | 
| 41 | 
            -
                      <g class="graph_layer" id="component_graphs_graph_0">
         | 
| 42 | 
            -
                        <g class="shadow" transform="translate(0.8811, 0.8811)">
         | 
| 43 | 
            -
                          <polyline points="0.0,173.702571428571 89.0,171.185142857143 178.0,168.667714285714 267.0,166.150285714286 356.0,163.632857142857" stroke-width="3.5244" style="fill-opacity: 0; stroke-opacity: 0.35" fill="transparent" stroke="black"/>
         | 
| 44 | 
            -
                          <circle cx="0.0" cy="175.288551428571" style="stroke-width: 3.5244; stroke: black; opacity: 0.35;" r="3.5244"/>
         | 
| 45 | 
            -
                          <circle cx="89.0" cy="172.771122857143" style="stroke-width: 3.5244; stroke: black; opacity: 0.35;" r="3.5244"/>
         | 
| 46 | 
            -
                          <circle cx="178.0" cy="170.253694285714" style="stroke-width: 3.5244; stroke: black; opacity: 0.35;" r="3.5244"/>
         | 
| 47 | 
            -
                          <circle cx="267.0" cy="167.736265714286" style="stroke-width: 3.5244; stroke: black; opacity: 0.35;" r="3.5244"/>
         | 
| 48 | 
            -
                          <circle cx="356.0" cy="165.218837142857" style="stroke-width: 3.5244; stroke: black; opacity: 0.35;" r="3.5244"/>
         | 
| 49 | 
            -
                        </g>
         | 
| 50 | 
            -
                        <polyline points="0.0,173.702571428571 89.0,171.185142857143 178.0,168.667714285714 267.0,166.150285714286 356.0,163.632857142857" stroke-width="3.5244" fill="none" stroke="#6886B4"/>
         | 
| 51 | 
            -
                        <circle cx="0.0" cy="173.702571428571" style="stroke-width: 3.5244; stroke: #6886B4; fill: #6886B4" r="3.5244"/>
         | 
| 52 | 
            -
                        <circle cx="89.0" cy="171.185142857143" style="stroke-width: 3.5244; stroke: #6886B4; fill: #6886B4" r="3.5244"/>
         | 
| 53 | 
            -
                        <circle cx="178.0" cy="168.667714285714" style="stroke-width: 3.5244; stroke: #6886B4; fill: #6886B4" r="3.5244"/>
         | 
| 54 | 
            -
                        <circle cx="267.0" cy="166.150285714286" style="stroke-width: 3.5244; stroke: #6886B4; fill: #6886B4" r="3.5244"/>
         | 
| 55 | 
            -
                        <circle cx="356.0" cy="163.632857142857" style="stroke-width: 3.5244; stroke: #6886B4; fill: #6886B4" r="3.5244"/>
         | 
| 56 | 
            -
                      </g>
         | 
| 57 | 
            -
                      <g class="graph_layer" id="component_graphs_graph_1">
         | 
| 58 | 
            -
                        <g class="shadow" transform="translate(0.8811, 0.8811)">
         | 
| 59 | 
            -
                          <polyline points="0.0,148.528285714286 89.0,120.836571428571 178.0,0.0 267.0,171.185142857143 356.0,128.388857142857" stroke-width="3.5244" style="fill-opacity: 0; stroke-opacity: 0.35" fill="transparent" stroke="black"/>
         | 
| 60 | 
            -
                          <circle cx="0.0" cy="150.114265714286" style="stroke-width: 3.5244; stroke: black; opacity: 0.35;" r="3.5244"/>
         | 
| 61 | 
            -
                          <circle cx="89.0" cy="122.422551428571" style="stroke-width: 3.5244; stroke: black; opacity: 0.35;" r="3.5244"/>
         | 
| 62 | 
            -
                          <circle cx="178.0" cy="1.58598" style="stroke-width: 3.5244; stroke: black; opacity: 0.35;" r="3.5244"/>
         | 
| 63 | 
            -
                          <circle cx="267.0" cy="172.771122857143" style="stroke-width: 3.5244; stroke: black; opacity: 0.35;" r="3.5244"/>
         | 
| 64 | 
            -
                          <circle cx="356.0" cy="129.974837142857" style="stroke-width: 3.5244; stroke: black; opacity: 0.35;" r="3.5244"/>
         | 
| 65 | 
            -
                        </g>
         | 
| 66 | 
            -
                        <polyline points="0.0,148.528285714286 89.0,120.836571428571 178.0,0.0 267.0,171.185142857143 356.0,128.388857142857" stroke-width="3.5244" fill="none" stroke="#FDD84E"/>
         | 
| 67 | 
            -
                        <circle cx="0.0" cy="148.528285714286" style="stroke-width: 3.5244; stroke: #FDD84E; fill: #FDD84E" r="3.5244"/>
         | 
| 68 | 
            -
                        <circle cx="89.0" cy="120.836571428571" style="stroke-width: 3.5244; stroke: #FDD84E; fill: #FDD84E" r="3.5244"/>
         | 
| 69 | 
            -
                        <circle cx="178.0" cy="0.0" style="stroke-width: 3.5244; stroke: #FDD84E; fill: #FDD84E" r="3.5244"/>
         | 
| 70 | 
            -
                        <circle cx="267.0" cy="171.185142857143" style="stroke-width: 3.5244; stroke: #FDD84E; fill: #FDD84E" r="3.5244"/>
         | 
| 71 | 
            -
                        <circle cx="356.0" cy="128.388857142857" style="stroke-width: 3.5244; stroke: #FDD84E; fill: #FDD84E" r="3.5244"/>
         | 
| 72 | 
            -
                      </g>
         | 
| 73 | 
            -
                    </g>
         | 
| 74 | 
            -
                  </g>
         | 
| 75 | 
            -
                </g>
         | 
| 76 | 
            -
                <g transform="translate(25.0, 39.0)" id="legend">
         | 
| 77 | 
            -
                  <rect x="180.0" y="4.5" height="9.0" width="10.8" fill="#6886B4"/>
         | 
| 78 | 
            -
                  <text x="198.0" font-size="14.4" y="14.4" fill="white">foo</text>
         | 
| 79 | 
            -
                  <rect x="234.0" y="4.5" height="9.0" width="10.8" fill="#FDD84E"/>
         | 
| 80 | 
            -
                  <text x="252.0" font-size="14.4" y="14.4" fill="white">bar</text>
         | 
| 81 | 
            -
                </g>
         | 
| 82 | 
            -
              </g>
         | 
| 83 | 
            -
            </svg>
         |