ruport 0.8.14 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +42 -107
- data/Rakefile +29 -32
- data/examples/centered_pdf_text_box.rb +13 -19
- data/examples/example.csv +3 -0
- data/examples/line_plotter.rb +15 -15
- data/examples/pdf_complex_report.rb +10 -23
- data/examples/pdf_table_with_title.rb +12 -12
- data/examples/rope_examples/itunes/Rakefile +22 -1
- data/examples/rope_examples/itunes/config/environment.rb +4 -0
- data/examples/rope_examples/itunes/lib/init.rb +32 -2
- data/examples/rope_examples/itunes/util/build +50 -16
- data/examples/rope_examples/sales_report/README +1 -1
- data/examples/rope_examples/sales_report/Rakefile +22 -1
- data/examples/rope_examples/sales_report/config/environment.rb +4 -0
- data/examples/rope_examples/sales_report/lib/init.rb +32 -2
- data/examples/rope_examples/sales_report/lib/reports/sales.rb +10 -16
- data/examples/rope_examples/sales_report/util/build +50 -16
- data/examples/row_renderer.rb +39 -0
- data/examples/ruport_list/png_embed.rb +61 -0
- data/examples/ruport_list/roadmap.png +0 -0
- data/examples/sample.rb +16 -0
- data/examples/simple_pdf_lines.rb +24 -0
- data/lib/ruport.rb +143 -57
- data/lib/ruport/acts_as_reportable.rb +246 -0
- data/lib/ruport/data.rb +1 -2
- data/lib/ruport/data/grouping.rb +311 -0
- data/lib/ruport/data/record.rb +113 -84
- data/lib/ruport/data/table.rb +275 -174
- data/lib/ruport/formatter.rb +149 -0
- data/lib/ruport/formatter/csv.rb +87 -0
- data/lib/ruport/formatter/html.rb +89 -0
- data/lib/ruport/formatter/pdf.rb +357 -0
- data/lib/ruport/formatter/text.rb +151 -0
- data/lib/ruport/generator.rb +127 -30
- data/lib/ruport/query.rb +46 -99
- data/lib/ruport/renderer.rb +238 -194
- data/lib/ruport/renderer/grouping.rb +67 -0
- data/lib/ruport/renderer/table.rb +25 -98
- data/lib/ruport/report.rb +45 -96
- data/test/acts_as_reportable_test.rb +229 -0
- data/test/csv_formatter_test.rb +97 -0
- data/test/{_test_database.rb → database_test_.rb} +0 -0
- data/test/grouping_test.rb +305 -0
- data/test/html_formatter_test.rb +104 -0
- data/test/pdf_formatter_test.rb +25 -0
- data/test/{test_query.rb → query_test.rb} +32 -121
- data/test/{test_record.rb → record_test.rb} +40 -23
- data/test/renderer_test.rb +344 -0
- data/test/{test_report.rb → report_test.rb} +74 -44
- data/test/samples/ticket_count.csv +124 -0
- data/test/{test_sql_split.rb → sql_split_test.rb} +0 -0
- data/test/{test_table.rb → table_test.rb} +255 -44
- data/test/text_formatter_test.rb +144 -0
- data/util/bench/data/record/bench_as_vs_to.rb +17 -0
- data/util/bench/data/record/bench_constructor.rb +46 -0
- data/util/bench/data/record/bench_indexing.rb +65 -0
- data/util/bench/data/record/bench_reorder.rb +35 -0
- data/util/bench/data/record/bench_to_a.rb +19 -0
- data/util/bench/data/table/bench_column_manip.rb +103 -0
- data/util/bench/data/table/bench_dup.rb +24 -0
- data/util/bench/data/table/bench_init.rb +67 -0
- data/util/bench/data/table/bench_manip.rb +125 -0
- data/util/bench/formatter/bench_csv.rb +14 -0
- data/util/bench/formatter/bench_html.rb +14 -0
- data/util/bench/formatter/bench_pdf.rb +14 -0
- data/util/bench/formatter/bench_text.rb +14 -0
- data/util/bench/samples/tattle.csv +1237 -0
- metadata +121 -143
- data/TODO +0 -21
- data/examples/invoice.rb +0 -142
- data/examples/invoice_report.rb +0 -29
- data/examples/line_graph.rb +0 -38
- data/examples/rope_examples/itunes/config/ruport_config.rb +0 -8
- data/examples/rope_examples/sales_report/config/ruport_config.rb +0 -8
- data/lib/ruport/attempt.rb +0 -63
- data/lib/ruport/config.rb +0 -204
- data/lib/ruport/data/groupable.rb +0 -93
- data/lib/ruport/data/taggable.rb +0 -80
- data/lib/ruport/format.rb +0 -1
- data/lib/ruport/format/csv.rb +0 -29
- data/lib/ruport/format/html.rb +0 -42
- data/lib/ruport/format/latex.rb +0 -47
- data/lib/ruport/format/pdf.rb +0 -233
- data/lib/ruport/format/plugin.rb +0 -31
- data/lib/ruport/format/svg.rb +0 -60
- data/lib/ruport/format/text.rb +0 -103
- data/lib/ruport/format/xml.rb +0 -32
- data/lib/ruport/layout.rb +0 -1
- data/lib/ruport/layout/component.rb +0 -7
- data/lib/ruport/mailer.rb +0 -99
- data/lib/ruport/renderer/graph.rb +0 -46
- data/lib/ruport/report/graph.rb +0 -14
- data/lib/ruport/system_extensions.rb +0 -71
- data/test/test_config.rb +0 -88
- data/test/test_format_text.rb +0 -63
- data/test/test_graph_renderer.rb +0 -97
- data/test/test_groupable.rb +0 -56
- data/test/test_mailer.rb +0 -170
- data/test/test_renderer.rb +0 -151
- data/test/test_ruport.rb +0 -58
- data/test/test_table_renderer.rb +0 -141
- data/test/test_taggable.rb +0 -52
@@ -15,15 +15,35 @@ rescue LoadError
|
|
15
15
|
$stderr.puts "Warning: Mocha not found -- skipping some Report tests"
|
16
16
|
end
|
17
17
|
|
18
|
+
class SampleReport < Ruport::Report
|
19
|
+
renders_with Ruport::Renderer::Table
|
20
|
+
|
21
|
+
def generate
|
22
|
+
Table(%w[not abc]) << %w[o r] << %w[one two] << %w[thr ee]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
18
26
|
class TestReport < Test::Unit::TestCase
|
19
27
|
include Ruport
|
20
28
|
|
21
29
|
def setup
|
22
30
|
@report = Report.new
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_renders_with_shortcuts
|
34
|
+
a = SampleReport.new(:csv)
|
35
|
+
assert_equal("not,abc\no,r\none,two\nthr,ee\n",a.run)
|
36
|
+
assert_equal("not,abc\no,r\none,two\nthr,ee\n",SampleReport.as(:csv))
|
37
|
+
assert_equal("not,abc\no,r\none,two\nthr,ee\n",SampleReport.to_csv)
|
38
|
+
assert_equal("not,abc\no,r\none,two\nthr,ee\n",a.to_csv)
|
39
|
+
a = SampleReport.new
|
40
|
+
assert_equal("not,abc\no,r\none,two\nthr,ee\n",a.to_csv)
|
41
|
+
|
42
|
+
#not sure if this is 'good behaviour'
|
43
|
+
assert_equal :csv, a.format
|
44
|
+
a.to_text
|
45
|
+
|
46
|
+
assert_equal :text, a.format
|
27
47
|
end
|
28
48
|
|
29
49
|
def test_erb
|
@@ -33,23 +53,6 @@ class TestReport < Test::Unit::TestCase
|
|
33
53
|
assert_equal "foo\n4\n---\n", @report.erb("test/samples/foo.rtxt")
|
34
54
|
end
|
35
55
|
|
36
|
-
def test_textile
|
37
|
-
@report = Report.new
|
38
|
-
assert_equal "<p><strong>foo</strong></p>", @report.textile("*foo*")
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_query
|
42
|
-
assert_kind_of Ruport::Data::Table,
|
43
|
-
@report.query("blah",:query_obj => @query1)
|
44
|
-
expected = [[1,2,3],[4,5,6],[7,8,9]]
|
45
|
-
@report.query("blah",:query_obj => @query1, :yield_type => :by_row) { |r|
|
46
|
-
assert_equal expected.shift, r.to_a
|
47
|
-
assert_equal %w[a b c], r.attributes
|
48
|
-
}
|
49
|
-
assert_equal "a,b,c\n1,2,3\n4,5,6\n7,8,9\n",
|
50
|
-
@report.query("blah",:query_obj => @query1, :as => :csv)
|
51
|
-
end
|
52
|
-
|
53
56
|
class MyReport < Report; end
|
54
57
|
|
55
58
|
def test_klass_methods
|
@@ -91,7 +94,7 @@ class TestReport < Test::Unit::TestCase
|
|
91
94
|
rep_klass.send(:generate) { raise }
|
92
95
|
|
93
96
|
assert_raises(RuntimeError){
|
94
|
-
rep_klass.run(:tries => 3, :interval => 1
|
97
|
+
rep_klass.run(:tries => 3, :interval => 1)
|
95
98
|
}
|
96
99
|
|
97
100
|
rep_klass.send(:generate) { sleep 1.1 }
|
@@ -116,17 +119,7 @@ class TestReport < Test::Unit::TestCase
|
|
116
119
|
assert_equal ["hello dolly", "hello dolly"],
|
117
120
|
rep_klass.run(:reports => [rep_klass.new,rep_klass.new])
|
118
121
|
end
|
119
|
-
|
120
|
-
def test_send_to
|
121
|
-
return unless Object.const_defined? :Mocha
|
122
|
-
setup_mock_mailer
|
123
|
-
@report = Report.new
|
124
|
-
assert_equal "250 ok", @report.send_to("clyde@example.com") { |mail|
|
125
|
-
mail.subject = "Test Report"
|
126
|
-
mail.text = "Test"
|
127
|
-
}
|
128
|
-
end
|
129
|
-
|
122
|
+
|
130
123
|
def test_write_to_file
|
131
124
|
return unless Object.const_defined? :Mocha
|
132
125
|
file = mock("file")
|
@@ -172,17 +165,54 @@ class TestReport < Test::Unit::TestCase
|
|
172
165
|
|
173
166
|
assert_equal expected, array
|
174
167
|
end
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
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
|
+
|
186
182
|
end
|
187
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
|
+
|
188
218
|
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
title,date
|
2
|
+
Ticket #238 (enhancement closed): Table#sort_rows_by!,2007-04-17
|
3
|
+
Ticket #225 (task closed): corner bottlenecks with focused benchmarks,2007-04-17
|
4
|
+
Ticket #223 (task closed): Identify a small set of key benchmarks,2007-04-17
|
5
|
+
Ticket #209 (task closed): Refactor Formatters,2007-04-15
|
6
|
+
Ticket #236 (task closed): api.rubyreports.org/edge,2007-04-13
|
7
|
+
Ticket #212 (task closed): Users Field Guide,2007-04-13
|
8
|
+
Ticket #186 (enhancement closed): simple_html_table,2007-04-13
|
9
|
+
Ticket #235 (task closed): Get a big list of all the methods in Ruport. Stare at them. Identify their interface. Cry.,2007-04-13
|
10
|
+
Ticket #196 (defect closed): as() returns unintelligible error for non-registered formats,2007-04-13
|
11
|
+
Ticket #244 (defect closed): Allow proper copying of Grouping,2007-04-12
|
12
|
+
Ticket #249 (enhancement closed): Table#rename_columns should accept a block,2007-04-11
|
13
|
+
Ticket #249 (enhancement created): Table#rename_columns should accept a block,2007-04-11
|
14
|
+
Ticket #188 (defect closed): class_str broken in 0.9.2,2007-04-11
|
15
|
+
Ticket #224 (task closed): Build ruport_bench which will run benchmarks and generate reports,2007-04-11
|
16
|
+
Ticket #241 (task closed): rewrite Table/Group dup methods to use initialize_copy instead,2007-04-11
|
17
|
+
Ticket #220 (enhancement closed): rope rake tasks for ruport-util,2007-04-10
|
18
|
+
Ticket #219 (task closed): XML/FO Formatter,2007-04-07
|
19
|
+
Ticket #211 (task closed): Remove Multilevel Grouping Formatters,2007-04-06
|
20
|
+
Ticket #248 (task created): AAR Name,2007-04-05
|
21
|
+
Ticket #204 (task closed): Merge AAR to Trunk,2007-04-05
|
22
|
+
Ticket #203 (task closed): AAR Tests,2007-04-05
|
23
|
+
Ticket #226 (task closed): investigate Ara's xx for html helpers.,2007-04-04
|
24
|
+
"Ticket #247 (task created): Ruport Utils wiki page, and update of deprecated plugin pages",2007-04-04
|
25
|
+
Ticket #245 (task closed): Make initial RubyForge release,2007-04-04
|
26
|
+
Ticket #246 (enhancement created): Grouping#summary,2007-04-04
|
27
|
+
Ticket #245 (task created): Make initial RubyForge release,2007-04-04
|
28
|
+
Ticket #229 (enhancement closed): Add tests for invoice,2007-04-04
|
29
|
+
Ticket #231 (enhancement closed): ReportManager tests,2007-04-04
|
30
|
+
Ticket #221 (task closed): improve invoice interface,2007-04-04
|
31
|
+
Ticket #233 (task closed): ReportManager example,2007-04-04
|
32
|
+
Ticket #230 (enhancement closed): Add support for line labels in graph,2007-04-04
|
33
|
+
Ticket #242 (task closed): set mike up with stats access,2007-04-04
|
34
|
+
Ticket #202 (task closed): AAR Branch,2007-04-04
|
35
|
+
Ticket #234 (defect closed): options should not be used as an argument name anywhere in Renderers or Formatters,2007-04-04
|
36
|
+
Ticket #244 (defect created): Allow proper copying of Grouping,2007-04-04
|
37
|
+
Ticket #240 (task closed): use self.class.new where appropriate,2007-04-04
|
38
|
+
Ticket #243 (task closed): fix circular dependency issue in rope,2007-04-04
|
39
|
+
Ticket #243 (task created): fix circular dependency issue in rope,2007-04-04
|
40
|
+
Ticket #242 (task created): set mike up with stats access,2007-04-03
|
41
|
+
Ticket #241 (task created): rewrite Table/Group dup methods to use initialize_copy instead,2007-04-03
|
42
|
+
Ticket #237 (task closed): set mike up with all the necessary resource permissions for releases,2007-04-02
|
43
|
+
Ticket #227 (task closed): packaging rake task for Release,2007-04-02
|
44
|
+
Ticket #240 (task created): use self.class.new where appropriate,2007-04-02
|
45
|
+
Ticket #191 (enhancement closed): render_grouping,2007-04-01
|
46
|
+
Ticket #239 (enhancement created): Table#sort_rows_by should accept non-array single arg.,2007-04-01
|
47
|
+
Ticket #238 (enhancement created): Table#sort_rows_by!,2007-04-01
|
48
|
+
Ticket #237 (task created): set mike up with all the necessary resource permissions for releases,2007-04-01
|
49
|
+
Ticket #78 (enhancement closed): Do we need to bring back a SQL generator?,2007-03-31
|
50
|
+
Ticket #236 (task created): api.rubyreports.org/edge,2007-03-31
|
51
|
+
Ticket #235 (task created): Get a big list of all the methods in Ruport. Stare at them. Identify their interface. Cry.,2007-03-31
|
52
|
+
Ticket #228 (enhancement closed): Layout method,2007-03-31
|
53
|
+
Ticket #234 (defect created): options should not be used as an argument name anywhere in Renderers or Formatters,2007-03-31
|
54
|
+
Ticket #217 (task closed): Depluginize initial set of utils,2007-03-31
|
55
|
+
Ticket #232 (task closed): ReportManager example,2007-03-31
|
56
|
+
Ticket #233 (task created): ReportManager example,2007-03-31
|
57
|
+
Ticket #232 (task created): ReportManager example,2007-03-31
|
58
|
+
Ticket #231 (enhancement created): ReportManager tests,2007-03-31
|
59
|
+
Ticket #230 (enhancement created): Add support for line labels in graph,2007-03-31
|
60
|
+
Ticket #216 (task closed): Fix Graphing,2007-03-31
|
61
|
+
Ticket #229 (enhancement created): Add tests for invoice,2007-03-31
|
62
|
+
Ticket #228 (enhancement created): Layout method,2007-03-31
|
63
|
+
Ticket #222 (task closed): add ruport-util component in Trac,2007-03-31
|
64
|
+
Ticket #218 (task closed): move svn repository up one level,2007-03-31
|
65
|
+
Ticket #227 (task created): packaging rake task for Release,2007-03-31
|
66
|
+
Ticket #226 (task created): investigate Ara's xx for html helpers.,2007-03-30
|
67
|
+
Ticket #199 (task closed): Update License Information,2007-03-30
|
68
|
+
Ticket #178 (task closed): Grouping Renderer,2007-03-30
|
69
|
+
Ticket #225 (task created): corner bottlenecks with focused benchmarks,2007-03-30
|
70
|
+
Ticket #224 (task created): Build ruport_bench which will run benchmarks and generate reports,2007-03-30
|
71
|
+
Ticket #223 (task created): Identify a small set of key benchmarks,2007-03-30
|
72
|
+
Ticket #106 (task closed): standardize API documentation format and cleanup where needed,2007-03-30
|
73
|
+
Ticket #199 (task closed): Update License Information,2007-03-30
|
74
|
+
Ticket #184 (task closed): Consistent Errors,2007-03-30
|
75
|
+
Ticket #222 (task created): add ruport-util component in Trac,2007-03-30
|
76
|
+
Ticket #221 (task created): improve invoice interface,2007-03-30
|
77
|
+
Ticket #220 (enhancement created): rope rake tasks for ruport-util,2007-03-30
|
78
|
+
Ticket #219 (task created): XML/FO Formatter,2007-03-30
|
79
|
+
Ticket #218 (task created): move svn repository up one level,2007-03-30
|
80
|
+
Ticket #217 (task created): Depluginize initial set of utils,2007-03-30
|
81
|
+
Ticket #216 (task created): Fix Graphing,2007-03-30
|
82
|
+
Ticket #215 (task closed): apply for RubyForge project,2007-03-30
|
83
|
+
Ticket #215 (task created): apply for RubyForge project,2007-03-30
|
84
|
+
Ticket #214 (task created): Determine if cheatsheets can be released,2007-03-30
|
85
|
+
Ticket #213 (task created): Contributors Field Guide,2007-03-30
|
86
|
+
Ticket #212 (task created): Users Field Guide,2007-03-30
|
87
|
+
Ticket #211 (task created): Remove Multilevel Grouping Formatters,2007-03-30
|
88
|
+
Ticket #210 (task created): Formatting Helpers,2007-03-30
|
89
|
+
Ticket #209 (task created): Refactor Formatters,2007-03-30
|
90
|
+
Ticket #208 (task created): API Stability,2007-03-30
|
91
|
+
Ticket #207 (task created): Refactor Unit Tests,2007-03-30
|
92
|
+
Ticket #206 (task created): Testing Audit,2007-03-30
|
93
|
+
Ticket #205 (task created): Custom Exceptions,2007-03-30
|
94
|
+
Ticket #204 (task created): Merge AAR to Trunk,2007-03-30
|
95
|
+
Ticket #203 (task created): AAR Tests,2007-03-30
|
96
|
+
Ticket #202 (task created): AAR Branch,2007-03-30
|
97
|
+
Ticket #201 (task created): Standardize API Docs,2007-03-30
|
98
|
+
Ticket #200 (task created): Remove Deprecated Docs,2007-03-30
|
99
|
+
Ticket #199 (task created): Update License Information,2007-03-30
|
100
|
+
Ticket #198 (task created): rubyreports.org webpage,2007-03-30
|
101
|
+
Ticket #197 (task created): Proper Licensing Statements,2007-03-28
|
102
|
+
Ticket #196 (defect created): as() returns unintelligible error for non-registered formats,2007-03-28
|
103
|
+
Ticket #195 (enhancement closed): Formatter::PDF#draw_table,2007-03-27
|
104
|
+
"Ticket #194 (enhancement closed): renders_for should take multiple formats, renderers.",2007-03-26
|
105
|
+
Ticket #193 (task closed): Make Renderer.add_format private and remove add_core_format,2007-03-26
|
106
|
+
Ticket #195 (enhancement created): Formatter::PDF#draw_table,2007-03-26
|
107
|
+
"Ticket #194 (enhancement created): renders_for should take multiple formats, renderers.",2007-03-26
|
108
|
+
Ticket #193 (task created): Make Renderer.add_format private and remove add_core_format,2007-03-26
|
109
|
+
Ticket #183 (task closed): Remove Shortcuts from Core,2007-03-26
|
110
|
+
Ticket #192 (enhancement created): renders_with should take default options,2007-03-26
|
111
|
+
Ticket #191 (enhancement created): render_grouping,2007-03-25
|
112
|
+
Ticket #190 (enhancement created): Report shortcuts for rendering,2007-03-25
|
113
|
+
Ticket #189 (enhancement created): sub_table / reduce should take single arg range,2007-03-25
|
114
|
+
Ticket #187 (enhancement closed): Ruport::Format::Plugin becomes Ruport::Formatter,2007-03-24
|
115
|
+
Ticket #163 (task closed): Data::Group,2007-03-23
|
116
|
+
Ticket #144 (enhancement closed): SQL Formatter?,2007-03-23
|
117
|
+
Ticket #188 (defect created): class_str broken in 0.9.2,2007-03-23
|
118
|
+
Ticket #187 (enhancement created): Ruport::Format::Plugin becomes Ruport::Formatter,2007-03-23
|
119
|
+
Ticket #174 (enhancement closed): Grouping & Group data structures,2007-03-23
|
120
|
+
Ticket #186 (enhancement created): simple_html_table,2007-03-23
|
121
|
+
Ticket #185 (task created): Sanitize,2007-03-22
|
122
|
+
Ticket #184 (task created): Consistent Errors,2007-03-22
|
123
|
+
Ticket #183 (task created): Remove Shortcuts from Core,2007-03-22
|
124
|
+
Ticket #182 (defect closed): rope does not regenerate deleted test_files when using 'rake build',2007-03-19
|
File without changes
|
@@ -26,11 +26,7 @@ class TestTable < Test::Unit::TestCase
|
|
26
26
|
assert_equal n, t.column_names
|
27
27
|
|
28
28
|
t = [[1,2,3],[4,5,6]].to_table(%w[a b c])
|
29
|
-
t[0].tag :foo
|
30
|
-
t[1].tag :bar
|
31
29
|
table_from_records = t.data.to_table(t.column_names)
|
32
|
-
assert_equal Set.new([:foo]), table_from_records[0].tags
|
33
|
-
assert_equal Set.new([:bar]), table_from_records[1].tags
|
34
30
|
end
|
35
31
|
|
36
32
|
a = Ruport::Data::Record.new [1,2,3]
|
@@ -51,6 +47,14 @@ class TestTable < Test::Unit::TestCase
|
|
51
47
|
assert_equal [1,2,3,4], a.column(0)
|
52
48
|
|
53
49
|
end
|
50
|
+
|
51
|
+
def test_to_group
|
52
|
+
a =[[1,2,3],[4,5,6]].to_table(%w[a b c]).to_group("Packrats")
|
53
|
+
b = Ruport::Data::Group.new( :data => [[1,2,3],[4,5,6]],
|
54
|
+
:column_names => %w[a b c],
|
55
|
+
:name => "Packrats" )
|
56
|
+
assert_equal a,b
|
57
|
+
end
|
54
58
|
|
55
59
|
def test_set_column_names
|
56
60
|
a = [[1,2,3],[4,5,6]].to_table
|
@@ -78,7 +82,7 @@ class TestTable < Test::Unit::TestCase
|
|
78
82
|
assert_equal([table[2]], table.rows_with_b(8))
|
79
83
|
assert_equal [table[1]], table.rows_with(%w[a b]) { |a,b| [a,b] == [1,3] }
|
80
84
|
end
|
81
|
-
|
85
|
+
|
82
86
|
def test_append_record
|
83
87
|
table = Ruport::Data::Table.new :column_names => %w[a b c]
|
84
88
|
table << Ruport::Data::Record.new([1,2,3], :attributes => %w[a b c])
|
@@ -86,8 +90,7 @@ class TestTable < Test::Unit::TestCase
|
|
86
90
|
assert_equal(%w[a b c],table[0].attributes)
|
87
91
|
rec = table[0].dup
|
88
92
|
rec.attributes = %w[a b c d]
|
89
|
-
assert_raise(
|
90
|
-
assert_raise(ArgumentError) { table << [].to_table }
|
93
|
+
assert_raise(NoMethodError) { table << Object.new }
|
91
94
|
end
|
92
95
|
|
93
96
|
def test_append_hash
|
@@ -133,10 +136,30 @@ class TestTable < Test::Unit::TestCase
|
|
133
136
|
table.sub_table(%w[a c])
|
134
137
|
|
135
138
|
assert_equal [[10,11,12,13],[14,15,16,17]].to_table(%w[a b c d]),
|
136
|
-
table.sub_table { |r| r.c > 10 }
|
139
|
+
table.sub_table { |r| r.c > 10 }
|
140
|
+
|
141
|
+
assert_equal [[10,11,12,13],[14,15,16,17]].to_table(%w[a b c d]),
|
142
|
+
table.sub_table(2..-1)
|
137
143
|
|
138
144
|
end
|
139
145
|
|
146
|
+
def test_reduce
|
147
|
+
|
148
|
+
table = [ [1,2,3,4],[5,6,7,9],
|
149
|
+
[10,11,12,13],[14,15,16,17] ].to_table(%w[a b c d])
|
150
|
+
|
151
|
+
table.reduce(%w[b c],1..-2)
|
152
|
+
assert_equal [[6,7],[11,12]].to_table(%w[b c]), table
|
153
|
+
|
154
|
+
table = [ [1,2,3,4],[5,6,7,9],
|
155
|
+
[10,11,12,13],[14,15,16,17] ].to_table(%w[a b c d])
|
156
|
+
table.reduce(%w[c d a]) { |r| r.a < 10 }
|
157
|
+
|
158
|
+
assert_equal [[3,4,1],[7,9,5]].to_table(%w[c d a]),
|
159
|
+
table
|
160
|
+
|
161
|
+
end
|
162
|
+
|
140
163
|
def test_csv_load
|
141
164
|
table = Ruport::Data::Table.load("test/samples/data.csv")
|
142
165
|
assert_equal %w[col1 col2 col3], table.column_names
|
@@ -149,7 +172,26 @@ class TestTable < Test::Unit::TestCase
|
|
149
172
|
table = Ruport::Data::Table.load( "test/samples/data.tsv",
|
150
173
|
:csv_options => { :col_sep => "\t" } )
|
151
174
|
assert_equal expected, table
|
152
|
-
|
175
|
+
|
176
|
+
|
177
|
+
expected = ['c','e']
|
178
|
+
|
179
|
+
table = Ruport::Data::Table.load( "test/samples/data.csv", :csv_options =>
|
180
|
+
{ :headers => true, :header_converters => :symbol } ) do |s,r|
|
181
|
+
assert_equal expected.shift, r[:col3]
|
182
|
+
end
|
183
|
+
|
184
|
+
assert_equal [:col1,:col2,:col3], table.column_names
|
185
|
+
|
186
|
+
|
187
|
+
expected = ['c','e']
|
188
|
+
|
189
|
+
Ruport::Data::Table.load( "test/samples/data.csv",
|
190
|
+
:records => true ) do |s,r|
|
191
|
+
assert_equal expected.shift, r.col3
|
192
|
+
assert_kind_of Ruport::Data::Record, r
|
193
|
+
end
|
194
|
+
|
153
195
|
table = Ruport::Data::Table.load("test/samples/data.csv", :has_names => false)
|
154
196
|
assert_equal([],table.column_names)
|
155
197
|
assert_equal([%w[col1 col2 col3],%w[a b c],["d",nil,"e"]].to_table, table)
|
@@ -174,6 +216,7 @@ class TestTable < Test::Unit::TestCase
|
|
174
216
|
:has_names => false)
|
175
217
|
assert_equal([],table.column_names)
|
176
218
|
assert_equal([%w[a b c],%w[1 2 3], %w[4 5 6]].to_table, table)
|
219
|
+
|
177
220
|
|
178
221
|
end
|
179
222
|
|
@@ -246,6 +289,55 @@ class TestTable < Test::Unit::TestCase
|
|
246
289
|
[3,nil,4,'x',7],
|
247
290
|
[5,nil,6,'x',11] ].to_table(%w[a x b c d]), a)
|
248
291
|
|
292
|
+
end
|
293
|
+
|
294
|
+
def test_add_columns
|
295
|
+
a = [[1,2],[3,4],[5,6]].to_table(%w[a b])
|
296
|
+
a.add_columns(%w[c d])
|
297
|
+
expected = [ [1,2,nil,nil],
|
298
|
+
[3,4,nil,nil],
|
299
|
+
[5,6,nil,nil] ].to_table(%w[a b c d])
|
300
|
+
|
301
|
+
assert_equal expected, a
|
302
|
+
|
303
|
+
a = [[1,2],[3,4],[5,6]].to_table(%w[a b])
|
304
|
+
|
305
|
+
a.add_columns(%w[c d],:after => "a")
|
306
|
+
|
307
|
+
expected = [ [1,nil,nil,2],
|
308
|
+
[3,nil,nil,4],
|
309
|
+
[5,nil,nil,6], ].to_table(%w[a c d b])
|
310
|
+
|
311
|
+
assert_equal expected, a
|
312
|
+
|
313
|
+
a.add_columns(%w[x f],:before => "a")
|
314
|
+
|
315
|
+
expected = [ [nil,nil,1,nil,nil,2],
|
316
|
+
[nil,nil,3,nil,nil,4],
|
317
|
+
[nil,nil,5,nil,nil,6] ].to_table(%w[x f a c d b])
|
318
|
+
|
319
|
+
assert_equal expected, a
|
320
|
+
|
321
|
+
a = [[1,2,0],[3,4,0],[5,6,0]].to_table(%w[a b c])
|
322
|
+
|
323
|
+
a.add_columns(%w[x y],:default => 9, :position => 1)
|
324
|
+
|
325
|
+
expected = [[1,9,9,2,0],[3,9,9,4,0],[5,9,9,6,0]].to_table(%w[a x y b c])
|
326
|
+
|
327
|
+
assert_equal expected, a
|
328
|
+
|
329
|
+
a = [[1,2],[3,4],[5,6]].to_table(%w[a b])
|
330
|
+
a.add_columns(%w[f x],:default => 0)
|
331
|
+
|
332
|
+
expected = [[1,2,0,0],[3,4,0,0],[5,6,0,0]].to_table(%w[a b f x])
|
333
|
+
assert_equal expected, a
|
334
|
+
|
335
|
+
assert_raises(RuntimeError) do
|
336
|
+
a.add_columns(%w[a b]) { }
|
337
|
+
end
|
338
|
+
|
339
|
+
|
340
|
+
|
249
341
|
end
|
250
342
|
|
251
343
|
def test_remove_column
|
@@ -273,6 +365,28 @@ class TestTable < Test::Unit::TestCase
|
|
273
365
|
a.rename_column("b","x")
|
274
366
|
assert_equal Table(%w[a x]) { |t| t << [1,2] << [3,4] }, a
|
275
367
|
end
|
368
|
+
|
369
|
+
|
370
|
+
def test_rename_columns
|
371
|
+
a = Table(%w[a b]) { |t| t << [1,2] << [3,4] }
|
372
|
+
a.rename_columns(%w[a b], %w[x y])
|
373
|
+
assert_equal Table(%w[x y]) { |t| t << [1,2] << [3,4] }, a
|
374
|
+
|
375
|
+
a = Table(%w[a b]) { |t| t << [1,2] << [3,4] }
|
376
|
+
a.rename_columns("a"=>"x","b"=>"y")
|
377
|
+
assert_equal Table(%w[x y]) { |t| t << [1,2] << [3,4] }, a
|
378
|
+
|
379
|
+
a = Table(%w[a b]) { |t| t << [1,2] << [3,4] }
|
380
|
+
assert_raise(ArgumentError) { a.rename_columns(%w[a b], %w[x]) }
|
381
|
+
|
382
|
+
a = Table(%w[a b c]) { |t| t << [1,2,3] << [4,5,6] }
|
383
|
+
a.rename_columns { |r| r.to_sym }
|
384
|
+
assert_equal(a, Table(:a,:b,:c) { |t| t << [1,2,3] << [4,5,6] })
|
385
|
+
|
386
|
+
a = Table(%w[a b c]) { |t| t << [1,2,3] << [4,5,6] }
|
387
|
+
a.rename_columns(%w[a c]) { |r| r.to_sym }
|
388
|
+
assert_equal(a, Table(:a,"b",:c) { |t| t << [1,2,3] << [4,5,6] })
|
389
|
+
end
|
276
390
|
|
277
391
|
def test_swap_column
|
278
392
|
a = Table(%w[a b]) { |t| t << [1,2] << [3,4] }
|
@@ -286,6 +400,8 @@ class TestTable < Test::Unit::TestCase
|
|
286
400
|
a = Table(%w[a b c]) { |t| t << [1,2,3] << [4,5,6] }
|
287
401
|
a.replace_column("b","d") { |r| r.b.to_s }
|
288
402
|
assert_equal Table(%w[a d c]) { |t| t << [1,"2",3] << [4,"5",6] }, a
|
403
|
+
a.replace_column("d") { |r| r.d.to_i }
|
404
|
+
assert_equal Table(%w[a d c]) { |t| t << [1,2,3] << [4,5,6] }, a
|
289
405
|
end
|
290
406
|
|
291
407
|
def test_append_chain
|
@@ -299,12 +415,16 @@ class TestTable < Test::Unit::TestCase
|
|
299
415
|
table = Ruport::Data::Table.new :column_names => %w[a b],
|
300
416
|
:data => [[1,2],[3,4],[5,6]]
|
301
417
|
assert_equal("a,b\n1,2\n3,4\n5,6\n",table.to_csv)
|
418
|
+
assert_raises(Ruport::Renderer::UnknownFormatError) { table.to_nothing }
|
302
419
|
end
|
303
420
|
|
304
421
|
|
305
422
|
def test_sort_rows_by
|
306
423
|
table = Ruport::Data::Table.new :column_names => %w[a b c]
|
307
|
-
table << [1,2,3] << [6,1,8] << [9,1,4]
|
424
|
+
table << [1,2,3] << [6,1,8] << [9,1,4]
|
425
|
+
|
426
|
+
table2 = Ruport::Data::Table.new :column_names => [:a, :b, :c]
|
427
|
+
table2 << [1,2,3] << [6,1,8] << [9,1,4]
|
308
428
|
|
309
429
|
sorted_table_a = Ruport::Data::Table.new :column_names => %w[a b c]
|
310
430
|
sorted_table_a << [1,2,3] << [6,1,8] << [9,1,4]
|
@@ -313,11 +433,42 @@ class TestTable < Test::Unit::TestCase
|
|
313
433
|
sorted_table_b << [6,1,8] << [9,1,4] << [1,2,3]
|
314
434
|
|
315
435
|
sorted_table_bc = Ruport::Data::Table.new :column_names => %w[a b c]
|
316
|
-
sorted_table_bc << [9,1,4] << [6,1,8] << [1,2,3]
|
436
|
+
sorted_table_bc << [9,1,4] << [6,1,8] << [1,2,3]
|
437
|
+
|
438
|
+
sorted_table_bs = Ruport::Data::Table.new :column_names => [:a, :b, :c]
|
439
|
+
sorted_table_bs << [6,1,8] << [9,1,4] << [1,2,3]
|
317
440
|
|
318
441
|
assert_equal sorted_table_a, table.sort_rows_by {|r| r['a']}
|
319
442
|
assert_equal sorted_table_b, table.sort_rows_by(['b'])
|
320
443
|
assert_equal sorted_table_bc, table.sort_rows_by(['b', 'c'])
|
444
|
+
assert_equal sorted_table_bs, table2.sort_rows_by(:b)
|
445
|
+
end
|
446
|
+
|
447
|
+
def test_sort_rows_by!
|
448
|
+
table = Ruport::Data::Table.new :column_names => %w[a b c]
|
449
|
+
table << [1,2,3] << [6,1,8] << [9,1,4]
|
450
|
+
|
451
|
+
sorted_table_a = Ruport::Data::Table.new :column_names => %w[a b c]
|
452
|
+
sorted_table_a << [1,2,3] << [6,1,8] << [9,1,4]
|
453
|
+
|
454
|
+
sorted_table_b = Ruport::Data::Table.new :column_names => %w[a b c]
|
455
|
+
sorted_table_b << [6,1,8] << [9,1,4] << [1,2,3]
|
456
|
+
|
457
|
+
sorted_table_bc = Ruport::Data::Table.new :column_names => %w[a b c]
|
458
|
+
sorted_table_bc << [9,1,4] << [6,1,8] << [1,2,3]
|
459
|
+
|
460
|
+
table_a = table.dup
|
461
|
+
table_a.sort_rows_by! { |r| r['a'] }
|
462
|
+
|
463
|
+
table_b = table.dup
|
464
|
+
table_b.sort_rows_by!("b")
|
465
|
+
|
466
|
+
table_bc = table.dup
|
467
|
+
table_bc.sort_rows_by!(['b', 'c'])
|
468
|
+
|
469
|
+
assert_equal sorted_table_a, table_a
|
470
|
+
assert_equal sorted_table_b, table_b
|
471
|
+
assert_equal sorted_table_bc, table_bc
|
321
472
|
end
|
322
473
|
|
323
474
|
def test_array_hack
|
@@ -332,14 +483,6 @@ class TestTable < Test::Unit::TestCase
|
|
332
483
|
assert_equal table, table2
|
333
484
|
|
334
485
|
end
|
335
|
-
|
336
|
-
# for those in a meta-mood (mostly just a collection coverage )
|
337
|
-
def test_table_to_table
|
338
|
-
a = [[1,2,3]].to_table
|
339
|
-
assert_kind_of Ruport::Data::Table, a
|
340
|
-
assert_equal [[1,2,3]].to_table(%w[a b c]),
|
341
|
-
a.to_table(:column_names => %w[a b c])
|
342
|
-
end
|
343
486
|
|
344
487
|
def test_record_class
|
345
488
|
a = Ruport::Data::Table.new( :column_names => %w[first_name last_name c],
|
@@ -362,6 +505,30 @@ class TestTable < Test::Unit::TestCase
|
|
362
505
|
assert_equal ['joe frasier', 'brian black'],
|
363
506
|
b.map { |r| r.name }
|
364
507
|
|
508
|
+
end
|
509
|
+
|
510
|
+
def test_to_hack_takes_args
|
511
|
+
a = Table(%w[hello mr crowley]) << %w[would you like] << %w[one red cat]
|
512
|
+
|
513
|
+
assert_equal "would,you,like\none,red,cat\n",
|
514
|
+
a.to_csv(:show_table_headers => false)
|
515
|
+
|
516
|
+
assert_equal "would,you,like\none,red,cat\n",
|
517
|
+
a.to_csv { |r| r.show_table_headers = false }
|
518
|
+
|
519
|
+
assert_equal "would\tyou\tlike\none\tred\tcat\n",
|
520
|
+
a.to_csv(:show_table_headers => false) { |r|
|
521
|
+
r.format_options = { :col_sep => "\t" }
|
522
|
+
}
|
523
|
+
|
524
|
+
end
|
525
|
+
|
526
|
+
def test_as_throws_proper_errors
|
527
|
+
a = [[1,2,3],[4,5,6]].to_table(%w[a b c])
|
528
|
+
assert_nothing_raised { a.as(:csv) }
|
529
|
+
assert_nothing_raised { a.to_csv }
|
530
|
+
assert_raises(Ruport::Renderer::UnknownFormatError) { a.as(:nothing) }
|
531
|
+
assert_raises(Ruport::Renderer::UnknownFormatError) { a.to_nothing }
|
365
532
|
end
|
366
533
|
|
367
534
|
|
@@ -428,15 +595,6 @@ class TestTable < Test::Unit::TestCase
|
|
428
595
|
assert_equal 4, x.length
|
429
596
|
end
|
430
597
|
|
431
|
-
# bug found with paul novak 2007.01.17
|
432
|
-
def test_ensure_tags_preserved_in_subtable
|
433
|
-
a = [[1,2,3],[4,5,6],[7,8,9]].to_table(%w[a b c])
|
434
|
-
a[1].tag(:foo)
|
435
|
-
a.create_group("bar") { |r| r.b < 6 }
|
436
|
-
assert_equal Set.new(["grp_bar"]), a.group("bar")[0].tags
|
437
|
-
assert_equal Set.new([:foo,"grp_bar"]), a.group("bar")[1].tags
|
438
|
-
end
|
439
|
-
|
440
598
|
def test_ensure_coerce_sum
|
441
599
|
s = [["1"],["3"],["5"] ].to_table
|
442
600
|
t = [["1.23"],["1.5"]].to_table
|
@@ -445,20 +603,6 @@ class TestTable < Test::Unit::TestCase
|
|
445
603
|
assert_equal(2.73,t.sum(0))
|
446
604
|
end
|
447
605
|
|
448
|
-
#Ticket #142
|
449
|
-
def test_ensure_constructor_dups_record_tags
|
450
|
-
a = [[1,2,3],[4,5,6],[7,8,9]].to_table(%w[a b c])
|
451
|
-
b = a.dup
|
452
|
-
|
453
|
-
a[0].tag :foo
|
454
|
-
assert_equal Set.new([]), b[0].tags
|
455
|
-
assert_equal Set.new([:foo]),a[0].tags
|
456
|
-
|
457
|
-
b[1].tag :bar
|
458
|
-
assert_equal Set.new([]), a[1].tags
|
459
|
-
assert_equal Set.new([:bar]), b[1].tags
|
460
|
-
end
|
461
|
-
|
462
606
|
def test_ensure_serializable
|
463
607
|
a = [].to_table
|
464
608
|
assert_nothing_raised { a.to_yaml }
|
@@ -489,21 +633,52 @@ class TestTable < Test::Unit::TestCase
|
|
489
633
|
|
490
634
|
a = [[1,2,3],[4,5,6]].to_table
|
491
635
|
|
636
|
+
a.replace_column(1) { |r| r[0] + r[2] }
|
637
|
+
|
638
|
+
a.column_names = %w[d e f]
|
639
|
+
assert_equal [[1,4,3],[4,10,6]].to_table(%w[d e f]), a
|
640
|
+
|
641
|
+
a = [[1,2,3],[4,5,6]].to_table
|
642
|
+
|
643
|
+
a.replace_column(2) { |r| r[0] + 5 }
|
644
|
+
|
492
645
|
a.column_names = %w[a b c]
|
493
646
|
|
647
|
+
a.replace_column("b") { |r| r.a + 4 }
|
494
648
|
a.replace_column("b","foo") { |r| r.b + 1 }
|
495
649
|
|
496
|
-
assert_equal [[1,
|
650
|
+
assert_equal [[1,6,6],[4,9,9]].to_table(%w[a foo c]), a
|
497
651
|
end
|
498
652
|
|
499
653
|
def test_ensure_propagate_record_class
|
500
|
-
a =
|
654
|
+
a = Table(:record_class => DuckRecord)
|
501
655
|
assert_equal DuckRecord, a.record_class
|
502
656
|
|
503
657
|
b = a.dup
|
504
658
|
assert_equal DuckRecord, b.record_class
|
505
659
|
end
|
506
660
|
|
661
|
+
def test_ensure_reorder_raises_on_bad_reorder_use
|
662
|
+
a = Table() << [1,2,3] << [4,5,6]
|
663
|
+
assert_raise(ArgumentError) { a.reorder("a","b","c") }
|
664
|
+
assert_raise(ArgumentError) { a.reorder(%w[a b c]) }
|
665
|
+
assert_raise(ArgumentError) { a.reorder(2,1,0) }
|
666
|
+
end
|
667
|
+
|
668
|
+
def test_ensure_csv_loading_accepts_table_options
|
669
|
+
a = Table("test/samples/addressbook.csv",:record_class => DuckRecord)
|
670
|
+
a.each { |r| assert_kind_of(DuckRecord,r) }
|
671
|
+
end
|
672
|
+
|
673
|
+
|
674
|
+
class MySubClass < Ruport::Data::Table; end
|
675
|
+
|
676
|
+
def test_ensure_table_subclasses_render_properly
|
677
|
+
a = MySubClass.new
|
678
|
+
a << [1,2,3] << [4,5,6]
|
679
|
+
assert_equal("1,2,3\n4,5,6\n",a.as(:csv))
|
680
|
+
end
|
681
|
+
|
507
682
|
end
|
508
683
|
|
509
684
|
class DuckRecord < Ruport::Data::Record; end
|
@@ -526,5 +701,41 @@ class TestTableKernelHack < Test::Unit::TestCase
|
|
526
701
|
assert_equal Table("a"), Table(%w[a])
|
527
702
|
assert_equal Table(:a), Table([:a])
|
528
703
|
end
|
704
|
+
|
705
|
+
def test_iterators
|
706
|
+
|
707
|
+
Table("test/samples/addressbook.csv") do |s,r|
|
708
|
+
assert_kind_of(Array,r)
|
709
|
+
assert_kind_of(Ruport::Data::Table,s)
|
710
|
+
end
|
711
|
+
|
712
|
+
n = 0
|
713
|
+
|
714
|
+
Table(:string => "a,b,c\n1,2,3\n4,5,6\n") do |s,r|
|
715
|
+
assert_kind_of(Array,r)
|
716
|
+
assert_kind_of(Ruport::Data::Table,s)
|
717
|
+
n += 1
|
718
|
+
end
|
719
|
+
|
720
|
+
assert_equal 2, n
|
721
|
+
|
722
|
+
end
|
723
|
+
|
724
|
+
def test_with_file_arg
|
725
|
+
assert_equal Table("test/samples/addressbook.csv"),
|
726
|
+
Table(:file => "test/samples/addressbook.csv")
|
727
|
+
end
|
728
|
+
|
729
|
+
def test_with_string_arg
|
730
|
+
csv_string = "id,name\n1,Inky\n2,Blinky\n3,Clyde"
|
731
|
+
|
732
|
+
assert_equal Ruport::Data::Table.parse(csv_string),
|
733
|
+
Table(:string => csv_string)
|
734
|
+
end
|
735
|
+
|
736
|
+
def test_ensure_table_hack_accepts_normal_constructor_args
|
737
|
+
assert_equal Ruport::Data::Table.new(:column_names => %w[a b c]),
|
738
|
+
Table(:column_names => %w[a b c])
|
739
|
+
end
|
529
740
|
|
530
741
|
end
|