ruport 0.8.14 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. data/README +42 -107
  2. data/Rakefile +29 -32
  3. data/examples/centered_pdf_text_box.rb +13 -19
  4. data/examples/example.csv +3 -0
  5. data/examples/line_plotter.rb +15 -15
  6. data/examples/pdf_complex_report.rb +10 -23
  7. data/examples/pdf_table_with_title.rb +12 -12
  8. data/examples/rope_examples/itunes/Rakefile +22 -1
  9. data/examples/rope_examples/itunes/config/environment.rb +4 -0
  10. data/examples/rope_examples/itunes/lib/init.rb +32 -2
  11. data/examples/rope_examples/itunes/util/build +50 -16
  12. data/examples/rope_examples/sales_report/README +1 -1
  13. data/examples/rope_examples/sales_report/Rakefile +22 -1
  14. data/examples/rope_examples/sales_report/config/environment.rb +4 -0
  15. data/examples/rope_examples/sales_report/lib/init.rb +32 -2
  16. data/examples/rope_examples/sales_report/lib/reports/sales.rb +10 -16
  17. data/examples/rope_examples/sales_report/util/build +50 -16
  18. data/examples/row_renderer.rb +39 -0
  19. data/examples/ruport_list/png_embed.rb +61 -0
  20. data/examples/ruport_list/roadmap.png +0 -0
  21. data/examples/sample.rb +16 -0
  22. data/examples/simple_pdf_lines.rb +24 -0
  23. data/lib/ruport.rb +143 -57
  24. data/lib/ruport/acts_as_reportable.rb +246 -0
  25. data/lib/ruport/data.rb +1 -2
  26. data/lib/ruport/data/grouping.rb +311 -0
  27. data/lib/ruport/data/record.rb +113 -84
  28. data/lib/ruport/data/table.rb +275 -174
  29. data/lib/ruport/formatter.rb +149 -0
  30. data/lib/ruport/formatter/csv.rb +87 -0
  31. data/lib/ruport/formatter/html.rb +89 -0
  32. data/lib/ruport/formatter/pdf.rb +357 -0
  33. data/lib/ruport/formatter/text.rb +151 -0
  34. data/lib/ruport/generator.rb +127 -30
  35. data/lib/ruport/query.rb +46 -99
  36. data/lib/ruport/renderer.rb +238 -194
  37. data/lib/ruport/renderer/grouping.rb +67 -0
  38. data/lib/ruport/renderer/table.rb +25 -98
  39. data/lib/ruport/report.rb +45 -96
  40. data/test/acts_as_reportable_test.rb +229 -0
  41. data/test/csv_formatter_test.rb +97 -0
  42. data/test/{_test_database.rb → database_test_.rb} +0 -0
  43. data/test/grouping_test.rb +305 -0
  44. data/test/html_formatter_test.rb +104 -0
  45. data/test/pdf_formatter_test.rb +25 -0
  46. data/test/{test_query.rb → query_test.rb} +32 -121
  47. data/test/{test_record.rb → record_test.rb} +40 -23
  48. data/test/renderer_test.rb +344 -0
  49. data/test/{test_report.rb → report_test.rb} +74 -44
  50. data/test/samples/ticket_count.csv +124 -0
  51. data/test/{test_sql_split.rb → sql_split_test.rb} +0 -0
  52. data/test/{test_table.rb → table_test.rb} +255 -44
  53. data/test/text_formatter_test.rb +144 -0
  54. data/util/bench/data/record/bench_as_vs_to.rb +17 -0
  55. data/util/bench/data/record/bench_constructor.rb +46 -0
  56. data/util/bench/data/record/bench_indexing.rb +65 -0
  57. data/util/bench/data/record/bench_reorder.rb +35 -0
  58. data/util/bench/data/record/bench_to_a.rb +19 -0
  59. data/util/bench/data/table/bench_column_manip.rb +103 -0
  60. data/util/bench/data/table/bench_dup.rb +24 -0
  61. data/util/bench/data/table/bench_init.rb +67 -0
  62. data/util/bench/data/table/bench_manip.rb +125 -0
  63. data/util/bench/formatter/bench_csv.rb +14 -0
  64. data/util/bench/formatter/bench_html.rb +14 -0
  65. data/util/bench/formatter/bench_pdf.rb +14 -0
  66. data/util/bench/formatter/bench_text.rb +14 -0
  67. data/util/bench/samples/tattle.csv +1237 -0
  68. metadata +121 -143
  69. data/TODO +0 -21
  70. data/examples/invoice.rb +0 -142
  71. data/examples/invoice_report.rb +0 -29
  72. data/examples/line_graph.rb +0 -38
  73. data/examples/rope_examples/itunes/config/ruport_config.rb +0 -8
  74. data/examples/rope_examples/sales_report/config/ruport_config.rb +0 -8
  75. data/lib/ruport/attempt.rb +0 -63
  76. data/lib/ruport/config.rb +0 -204
  77. data/lib/ruport/data/groupable.rb +0 -93
  78. data/lib/ruport/data/taggable.rb +0 -80
  79. data/lib/ruport/format.rb +0 -1
  80. data/lib/ruport/format/csv.rb +0 -29
  81. data/lib/ruport/format/html.rb +0 -42
  82. data/lib/ruport/format/latex.rb +0 -47
  83. data/lib/ruport/format/pdf.rb +0 -233
  84. data/lib/ruport/format/plugin.rb +0 -31
  85. data/lib/ruport/format/svg.rb +0 -60
  86. data/lib/ruport/format/text.rb +0 -103
  87. data/lib/ruport/format/xml.rb +0 -32
  88. data/lib/ruport/layout.rb +0 -1
  89. data/lib/ruport/layout/component.rb +0 -7
  90. data/lib/ruport/mailer.rb +0 -99
  91. data/lib/ruport/renderer/graph.rb +0 -46
  92. data/lib/ruport/report/graph.rb +0 -14
  93. data/lib/ruport/system_extensions.rb +0 -71
  94. data/test/test_config.rb +0 -88
  95. data/test/test_format_text.rb +0 -63
  96. data/test/test_graph_renderer.rb +0 -97
  97. data/test/test_groupable.rb +0 -56
  98. data/test/test_mailer.rb +0 -170
  99. data/test/test_renderer.rb +0 -151
  100. data/test/test_ruport.rb +0 -58
  101. data/test/test_table_renderer.rb +0 -141
  102. data/test/test_taggable.rb +0 -52
@@ -1,151 +0,0 @@
1
- require 'test/unit'
2
- require 'ruport'
3
-
4
- class DummyText < Ruport::Format::Plugin
5
- def prepare_document
6
- output << "p"
7
- end
8
-
9
- def build_header
10
- output << "header\n"
11
- end
12
-
13
- def build_body
14
- output << "body\n"
15
- end
16
-
17
- def build_footer
18
- output << "footer\n"
19
- end
20
-
21
- def finalize_document
22
- output << "f"
23
- end
24
- end
25
-
26
-
27
- class TrivialRenderer < Ruport::Renderer
28
- add_format DummyText, :text
29
-
30
- def run
31
- plugin do
32
- build_header
33
- build_body
34
- build_footer
35
- end
36
- end
37
-
38
- end
39
-
40
- class RendererWithHelpers < Ruport::Renderer
41
- include Ruport::Renderer::Helpers
42
-
43
- add_format DummyText, :text
44
-
45
- prepare :document
46
-
47
- option :subtitle
48
-
49
- stage :header
50
- stage :body
51
- stage :footer
52
-
53
- finalize :document
54
- end
55
-
56
-
57
- class TestRenderer < Test::Unit::TestCase
58
-
59
- def test_trivial
60
- actual = TrivialRenderer.render(:text)
61
- assert_equal "header\nbody\nfooter\n", actual
62
- end
63
-
64
- def test_formats
65
- assert_equal( {}, Ruport::Renderer.formats )
66
- assert_equal( { :text => DummyText } , TrivialRenderer.formats )
67
- end
68
-
69
- def test_try_require
70
- assert_not_nil Ruport::Renderer.try_require(:csv)
71
- assert_nil Ruport::Renderer.try_require(:not_a_plugin)
72
- end
73
-
74
- def test_stage_helper
75
- assert RendererWithHelpers.stages.include?('body')
76
- end
77
-
78
- def test_finalize_helper
79
- assert_equal :document, RendererWithHelpers.final_stage
80
- end
81
-
82
- def test_prepare_helper
83
- assert_equal :document, RendererWithHelpers.first_stage
84
- end
85
-
86
- def test_finalize_again
87
- assert_raise(RuntimeError) { RendererWithHelpers.finalize :report }
88
- end
89
-
90
- def test_prepare_again
91
- assert_raise(RuntimeError) { RendererWithHelpers.prepare :foo }
92
- end
93
-
94
- def test_renderer_using_helpers
95
- actual = RendererWithHelpers.render(:text)
96
- assert_equal "pheader\nbody\nfooter\nf", actual
97
-
98
- actual = RendererWithHelpers.render_text
99
- assert_equal "pheader\nbody\nfooter\nf", actual
100
- end
101
-
102
- def test_option_helper
103
- RendererWithHelpers.render_text do |r|
104
- r.subtitle = "Test Report"
105
- assert_equal "Test Report", r.options.subtitle
106
- end
107
- end
108
-
109
- def test_required_option_helper
110
- RendererWithHelpers.required_option :title
111
-
112
- RendererWithHelpers.render_text do |r|
113
- r.title = "Test Report"
114
- assert_equal "Test Report", r.options.title
115
- end
116
- end
117
-
118
- def test_without_required_option
119
- RendererWithHelpers.required_option :title
120
-
121
- assert_raise(RuntimeError) { RendererWithHelpers.render(:text) }
122
- end
123
-
124
-
125
- def test_method_missing
126
- actual = TrivialRenderer.render_text
127
- assert_equal "header\nbody\nfooter\n", actual
128
- end
129
-
130
- def test_plugin
131
- # normal instance mode
132
-
133
- rend = TrivialRenderer.new
134
- rend.send(:use_plugin,:text)
135
-
136
- assert_kind_of Ruport::Format::Plugin, rend.plugin
137
- assert_kind_of DummyText, rend.plugin
138
-
139
- # render mode
140
- TrivialRenderer.render_text do |r|
141
- assert_kind_of Ruport::Format::Plugin, r.plugin
142
- assert_kind_of DummyText, r.plugin
143
- end
144
-
145
- assert_equal "body\n", rend.plugin { build_body }.output
146
-
147
- rend.plugin.clear_output
148
- assert_equal "", rend.plugin.output
149
- end
150
-
151
- end
data/test/test_ruport.rb DELETED
@@ -1,58 +0,0 @@
1
- require "test/unit"
2
- require "fileutils"
3
- require "stringio"
4
- require "ruport"
5
-
6
- class TestRuport < Test::Unit::TestCase
7
-
8
- def setup
9
- Ruport::Config.log_file = "test/complain.log"
10
- @output = StringIO.new
11
- end
12
-
13
- def test_file_created
14
- assert(File.exist?("test/complain.log"))
15
- end
16
-
17
- def test_fatal
18
- assert_raise(RuntimeError) {
19
- Ruport.log "Default problem", :status => :fatal,
20
- :output => @output
21
- }
22
- @output.rewind
23
- assert_equal("[!!] Default problem\n", @output.read)
24
- end
25
-
26
- def test_fatal_log_only
27
- assert_raise(RuntimeError) {
28
- Ruport.log "Default problem",
29
- :status => :fatal, :output => @output, :level => :log_only
30
- }
31
- @output.rewind
32
- assert_equal("",@output.read)
33
-
34
- end
35
-
36
- def test_warn
37
- assert_nothing_raised {
38
- Ruport.log "Default problem", :output => @output
39
- }
40
- @output.rewind
41
- assert_equal("[!!] Default problem\n",@output.read)
42
- end
43
-
44
- def test_warn_log_only
45
- assert_nothing_raised {
46
- Ruport.log "Default problem", :output => @output,
47
- :level => :log_only
48
- }
49
- @output.rewind
50
- assert_equal("",@output.read)
51
- end
52
-
53
- def teardown
54
- Ruport::Config.class_eval("@logger").close
55
- FileUtils.rm("test/complain.log")
56
- end
57
-
58
- end
@@ -1,141 +0,0 @@
1
- require "test/unit"
2
- require "ruport"
3
-
4
- begin
5
- require "rubygems"
6
- rescue LoadError
7
- nil
8
- end
9
-
10
- class TestTableRenderer < Test::Unit::TestCase
11
- def test_render_csv_basic
12
- actual = Ruport::Renderer::Table.render_csv { |r|
13
- r.data = [[1,2,3],[4,5,6]].to_table
14
- }
15
- assert_equal("1,2,3\n4,5,6\n",actual)
16
-
17
- actual = Ruport::Renderer::Table.render_csv { |r|
18
- r.data = [[1,2,3],[4,5,6]].to_table(%w[a b c])
19
- }
20
- assert_equal("a,b,c\n1,2,3\n4,5,6\n",actual)
21
- end
22
-
23
- def test_render_html_basic
24
-
25
- actual = Ruport::Renderer::Table.render_html { |r|
26
- r.data = [[1,2,3],[4,5,6]].to_table
27
- }
28
-
29
- assert_equal("\t<table>\n\t\t<tr>\n\t\t\t<td>1</td>\n\t\t\t<td>2"+
30
- "</td>\n\t\t\t<td>3</td>\n\t\t</tr>\n\t\t<tr>\n\t\t"+
31
- "\t<td>4</td>\n\t\t\t<td>5</td>\n\t\t\t<td>6</td>\n\t"+
32
- "\t</tr>\n\t</table>",actual)
33
-
34
- actual = Ruport::Renderer::Table.render_html { |r|
35
- r.data = [ [1,2,3],[4,5,6]].to_table(%w[a b c])
36
- }
37
-
38
- assert_equal("\t<table>\n\t\t<tr>\n\t\t\t<th>a</th>\n\t\t\t<th>b</th>"+
39
- "\n\t\t\t<th>c</th>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td>1</td>"+
40
- "\n\t\t\t<td>2</td>\n\t\t\t<td>3</td>\n\t\t</tr>\n\t\t<tr>"+
41
- "\n\t\t\t<td>4</td>\n\t\t\t<td>5</td>\n\t\t\t<td>6</td>\n\t"+
42
- "\t</tr>\n\t</table>",actual)
43
-
44
- end
45
-
46
- def test_render_html_with_tags
47
- actual = Ruport::Renderer::Table.render_html { |r|
48
- r.data = [[1,2,3],[4,5,6]].to_table(%w[a b c])
49
- r.data.create_group("foo") { |r| r.a < 3 }
50
- }
51
-
52
- expected =
53
- "\t<table>\n\t\t<tr>\n\t\t\t<th>a</th>\n\t\t\t<th>b</th>\n\t\t\t<th>"+
54
- "c</th>\n\t\t</tr>\n\t\t<tr class='grp_foo'>\n\t\t\t"+
55
- "<td class='grp_foo'>1</td>\n\t\t\t<td class='grp_foo'>2</td>"+
56
- "\n\t\t\t<td class='grp_foo'>3</td>\n\t\t</tr>"+
57
- "\n\t\t<tr>\n\t\t\t<td>4</td>\n\t\t\t<td>5</td>\n\t\t\t"+
58
- "<td>6</td>\n\t\t</tr>\n\t</table>"
59
-
60
- assert_equal(expected,actual)
61
- end
62
-
63
- def test_ensure_html_tags_joined
64
- actual = Ruport::Renderer::Table.render_html { |r|
65
- r.data =[[1,2],[3,4]].to_table(%w[a b])
66
- r.data.create_group("foo") { true }
67
- r.data.create_group("bar") { true }
68
- }
69
-
70
- expected =
71
- "\t<table>\n"+
72
- "\t\t<tr>\n" +
73
- "\t\t\t<th>a</th>\n" +
74
- "\t\t\t<th>b</th>\n" +
75
- "\t\t</tr>\n" +
76
- "\t\t<tr class='grp_foo grp_bar'>\n" +
77
- "\t\t\t<td class='grp_foo grp_bar'>1</td>\n" +
78
- "\t\t\t<td class='grp_foo grp_bar'>2</td>\n" +
79
- "\t\t</tr>\n" +
80
- "\t\t<tr class='grp_foo grp_bar'>\n"+
81
- "\t\t\t<td class='grp_foo grp_bar'>3</td>\n"+
82
- "\t\t\t<td class='grp_foo grp_bar'>4</td>\n"+
83
- "\t\t</tr>\n"+
84
- "\t</table>"
85
-
86
- assert_equal(expected,actual)
87
- end
88
-
89
- def test_render_latex_basic
90
- data = [[1,2,3,2],[3,4,5,6]].to_table(%w[a b c d])
91
- output = data.to_latex
92
- assert_equal "\\documentclass", output[/\\documentclass/]
93
- assert_equal "\\begin{document}", output[/\\begin\{document\}/]
94
- assert_equal "\\end{document}", output[/\\end\{document\}/]
95
- end
96
-
97
- def test_render_pdf_basic
98
- begin
99
- require "pdf/writer"
100
- rescue LoadError
101
- warn "skipping pdf test"; return
102
- end
103
- data = [[1,2],[3,4]].to_table
104
- assert_raise(RuntimeError) { data.to_pdf }
105
-
106
- data.column_names = %w[a b]
107
- assert_nothing_raised { data.to_pdf }
108
- end
109
-
110
- def test_prune
111
- actual = Ruport::Renderer::Table.render_csv { |r|
112
- r.data = [[1,2,3],[1,5,6]].to_table(%w[a b c])
113
- r.prune(1)
114
- }
115
- assert_equal("a,b,c\n1,2,3\n,5,6\n",actual)
116
- end
117
-
118
- def test_num_cols
119
- Ruport::Renderer::Table.render_csv { |r|
120
- r.data = [[1,2,3],[4,5,6]].to_table
121
- assert_equal 3, r.num_cols
122
- }
123
- end
124
-
125
- def test_rewrite_column
126
- actual = Ruport::Renderer::Table.render_csv { |r|
127
- r.data = [[1,2,3],[4,5,6]].to_table
128
- r.rewrite_column(0) { |r| r[0]+r[1] }
129
- }
130
- assert_equal("3,2,3\n9,5,6\n",actual)
131
- end
132
-
133
- def test_layout_header
134
- actual = Ruport::Renderer::Table.render_csv { |r|
135
- r.data = [[1,2,3],[4,5,6]].to_table(%w[a b c])
136
- r.layout { |l| l.show_table_headers = false }
137
- }
138
- assert_equal("1,2,3\n4,5,6\n",actual)
139
- end
140
-
141
- end
@@ -1,52 +0,0 @@
1
- #!/usr/local/bin/ruby -w
2
-
3
- require "test/unit"
4
- require "ruport"
5
-
6
- class TestTaggable < Test::Unit::TestCase
7
-
8
- include Ruport::Data
9
-
10
- def setup
11
- @obj = Object.new.extend(Taggable)
12
- end
13
-
14
- def test_tags_are_nil_initially
15
- assert_equal nil, @obj.instance_variable_get(:@ruport_tags)
16
- end
17
-
18
- def test_get_and_set_tags
19
- @obj.tags = [:orange, :yellow]
20
- assert_equal Set.new([:orange, :yellow]),
21
- @obj.instance_variable_get(:@ruport_tags)
22
- assert_equal Set.new([:orange, :yellow]), @obj.tags
23
- end
24
-
25
- def test_tag
26
- @obj.tag(:purple)
27
- assert_equal Set.new([:purple]),
28
- @obj.instance_variable_get(:@ruport_tags)
29
-
30
- end
31
-
32
- def test_has_tag
33
- @obj.tag(:maroon)
34
- assert @obj.has_tag?(:maroon)
35
- end
36
-
37
- def test_delete_tag
38
- @obj.tag(:scarlet)
39
- assert @obj.has_tag?(:scarlet)
40
- @obj.delete_tag(:scarlet)
41
- assert !@obj.has_tag?(:scarlet)
42
- end
43
-
44
- def test_avoid_duplication
45
- @obj.tag(:smelly)
46
- assert_equal 1, @obj.tags.select { |t| t.eql? :smelly }.length
47
- @obj.tag(:smelly)
48
- assert_equal 1, @obj.tags.select { |t| t.eql? :smelly }.length
49
- end
50
-
51
- end
52
-