ruport 1.2.3 → 1.4.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/Rakefile +2 -4
- data/examples/centered_pdf_text_box.rb +2 -6
- data/examples/pdf_report_with_common_base.rb +2 -5
- data/examples/png_embed.rb +3 -8
- data/examples/simple_templating_example.rb +7 -7
- data/examples/tattle_rubygems_version.rb +0 -3
- data/lib/ruport/data/grouping.rb +11 -10
- data/lib/ruport/data/record.rb +3 -1
- data/lib/ruport/data/table.rb +0 -14
- data/lib/ruport/formatter/csv.rb +10 -15
- data/lib/ruport/formatter/html.rb +4 -6
- data/lib/ruport/formatter/pdf.rb +50 -91
- data/lib/ruport/formatter/template.rb +33 -15
- data/lib/ruport/formatter/text.rb +22 -26
- data/lib/ruport/formatter.rb +27 -11
- data/lib/ruport/renderer/grouping.rb +0 -6
- data/lib/ruport/renderer/table.rb +0 -4
- data/lib/ruport/renderer.rb +64 -78
- data/lib/ruport.rb +7 -4
- data/test/csv_formatter_test.rb +8 -8
- data/test/grouping_test.rb +10 -10
- data/test/helpers.rb +2 -0
- data/test/html_formatter_test.rb +5 -5
- data/test/pdf_formatter_test.rb +23 -14
- data/test/record_test.rb +5 -0
- data/test/renderer_test.rb +103 -47
- data/test/table_test.rb +111 -138
- data/test/template_test.rb +12 -1
- data/test/text_formatter_test.rb +12 -14
- metadata +69 -88
- data/lib/ruport/acts_as_reportable.rb +0 -378
- data/lib/ruport/query/sql_split.rb +0 -33
- data/lib/ruport/query.rb +0 -232
- data/test/acts_as_reportable_test.rb +0 -272
- data/test/query_test.rb +0 -259
- data/test/sql_split_test.rb +0 -20
data/test/query_test.rb
DELETED
@@ -1,259 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby -w
|
2
|
-
require File.join(File.expand_path(File.dirname(__FILE__)), "helpers")
|
3
|
-
|
4
|
-
begin
|
5
|
-
require 'mocha'
|
6
|
-
require 'stubba'
|
7
|
-
rescue LoadError
|
8
|
-
$stderr.puts "Warning: Mocha not found -- skipping some Query tests"
|
9
|
-
end
|
10
|
-
|
11
|
-
begin
|
12
|
-
require 'dbi'
|
13
|
-
rescue LoadError
|
14
|
-
$stderr.puts "Warning: DBI not found -- skipping some Query tests"
|
15
|
-
end
|
16
|
-
|
17
|
-
class TestQuery < Test::Unit::TestCase
|
18
|
-
def setup
|
19
|
-
@sources = {
|
20
|
-
:default => {
|
21
|
-
:dsn => 'ruport:test', :user => 'greg', :password => 'apple' },
|
22
|
-
:alternative => {
|
23
|
-
:dsn => "ruport:test2", :user => "sandal", :password => "harmonix" },
|
24
|
-
}
|
25
|
-
Ruport::Query.add_source :default, @sources[:default]
|
26
|
-
Ruport::Query.add_source :alternative, @sources[:alternative]
|
27
|
-
|
28
|
-
@columns = %w(a b c)
|
29
|
-
@data = [ [[1,2,3],[4,5,6],[7,8,9]],
|
30
|
-
[[9,8,7],[6,5,4],[3,2,1]],
|
31
|
-
[[7,8,9],[4,5,6],[1,2,3]], ]
|
32
|
-
@datasets = @data.dup
|
33
|
-
|
34
|
-
@sql = [ "select * from foo", "create table foo ..." ]
|
35
|
-
@sql << @sql.values_at(0, 0).join(";\n")
|
36
|
-
@sql << @sql.values_at(1, 0).join(";\n")
|
37
|
-
@query = {
|
38
|
-
:plain => Ruport::Query.new(@sql[0]),
|
39
|
-
:sourced => Ruport::Query.new(@sql[0], :source => :alternative),
|
40
|
-
:paramed => Ruport::Query.new(@sql[0], :params => [ 42 ]),
|
41
|
-
:raw => Ruport::Query.new(@sql[0], :row_type => :raw),
|
42
|
-
:resultless => Ruport::Query.new(@sql[1]),
|
43
|
-
:multi => Ruport::Query.new(@sql[2]),
|
44
|
-
:mixed => Ruport::Query.new(@sql[3]),
|
45
|
-
}
|
46
|
-
end
|
47
|
-
|
48
|
-
if Object.const_defined? :Mocha and Object.const_defined? :DBI
|
49
|
-
|
50
|
-
def test_execute
|
51
|
-
query = @query[:plain]
|
52
|
-
setup_mock_dbi(1)
|
53
|
-
|
54
|
-
assert_equal nil, query.execute
|
55
|
-
end
|
56
|
-
|
57
|
-
def test_execute_sourced
|
58
|
-
query = @query[:sourced]
|
59
|
-
setup_mock_dbi(1, :source => :alternative)
|
60
|
-
|
61
|
-
assert_equal nil, query.execute
|
62
|
-
end
|
63
|
-
|
64
|
-
def test_execute_paramed
|
65
|
-
query = @query[:paramed]
|
66
|
-
setup_mock_dbi(1, :params => [ 42 ])
|
67
|
-
|
68
|
-
assert_equal nil, query.execute
|
69
|
-
end
|
70
|
-
|
71
|
-
def test_result_resultless
|
72
|
-
query = @query[:resultless]
|
73
|
-
setup_mock_dbi(1, :resultless => true, :sql => @sql[1])
|
74
|
-
|
75
|
-
assert_equal nil, query.result
|
76
|
-
end
|
77
|
-
|
78
|
-
def test_result_multi
|
79
|
-
query = @query[:multi]
|
80
|
-
setup_mock_dbi(2)
|
81
|
-
|
82
|
-
assert_equal @data[1], get_raw(query.result)
|
83
|
-
end
|
84
|
-
|
85
|
-
def test_result_raw_enabled
|
86
|
-
query = @query[:raw]
|
87
|
-
setup_mock_dbi(1)
|
88
|
-
|
89
|
-
assert_equal @data[0], query.result
|
90
|
-
end
|
91
|
-
|
92
|
-
def test_load_file
|
93
|
-
File.expects(:read).
|
94
|
-
with("query_test.sql").
|
95
|
-
returns("select * from foo\n")
|
96
|
-
|
97
|
-
query = Ruport::Query.new "query_test.sql"
|
98
|
-
assert_equal "select * from foo", query.sql
|
99
|
-
end
|
100
|
-
|
101
|
-
def test_explicit
|
102
|
-
File.expects(:read).
|
103
|
-
with("query_test").
|
104
|
-
returns("select * from foo\n")
|
105
|
-
|
106
|
-
query = Ruport::Query.new(:file => "query_test")
|
107
|
-
assert_equal "select * from foo", query.sql
|
108
|
-
|
109
|
-
query = Ruport::Query.new(:string => "query_test")
|
110
|
-
assert_equal "query_test", query.sql
|
111
|
-
end
|
112
|
-
|
113
|
-
def test_load_file_not_found
|
114
|
-
File.expects(:read).
|
115
|
-
with("query_test.sql").
|
116
|
-
raises(Errno::ENOENT)
|
117
|
-
|
118
|
-
assert_raises LoadError do
|
119
|
-
query = Ruport::Query.new "query_test.sql"
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
def test_each
|
124
|
-
query = @query[:plain]
|
125
|
-
setup_mock_dbi(2)
|
126
|
-
|
127
|
-
result = []; query.each { |r| result << r.to_a }
|
128
|
-
assert_equal @data[0], result
|
129
|
-
|
130
|
-
result = []; query.each { |r| result << r.to_a }
|
131
|
-
assert_equal @data[1], result
|
132
|
-
end
|
133
|
-
|
134
|
-
def test_each_multi
|
135
|
-
query = @query[:multi]
|
136
|
-
setup_mock_dbi(2)
|
137
|
-
|
138
|
-
result = []; query.each { |r| result << r.to_a }
|
139
|
-
assert_equal @data[1], result
|
140
|
-
end
|
141
|
-
|
142
|
-
end
|
143
|
-
|
144
|
-
def test_each_without_block
|
145
|
-
assert_raise(LocalJumpError) { @query[:plain].each }
|
146
|
-
end
|
147
|
-
|
148
|
-
def test_select_source
|
149
|
-
query = @query[:plain]
|
150
|
-
query.select_source :alternative
|
151
|
-
assert_equal @sources[:alternative], get_query_source(query)
|
152
|
-
|
153
|
-
query.select_source :default
|
154
|
-
assert_equal @sources[:default], get_query_source(query)
|
155
|
-
end
|
156
|
-
|
157
|
-
def test_initialize_source_temporary
|
158
|
-
query = Ruport::Query.new "<unused>", @sources[:alternative]
|
159
|
-
assert_equal @sources[:alternative], get_query_source(query)
|
160
|
-
end
|
161
|
-
|
162
|
-
def test_initialize_source_temporary_multiple
|
163
|
-
query1 = Ruport::Query.new "<unused>", @sources[:default]
|
164
|
-
query2 = Ruport::Query.new "<unused>", @sources[:alternative]
|
165
|
-
|
166
|
-
assert_equal @sources[:default], get_query_source(query1)
|
167
|
-
assert_equal @sources[:alternative], get_query_source(query2)
|
168
|
-
end
|
169
|
-
|
170
|
-
if Object.const_defined? :Mocha and Object.const_defined? :DBI
|
171
|
-
|
172
|
-
def test_to_table
|
173
|
-
query = @query[:raw]
|
174
|
-
setup_mock_dbi(3, :returns => @data[0])
|
175
|
-
|
176
|
-
assert_equal @data[0], query.result
|
177
|
-
assert_equal @data[0].to_table(@columns), query.to_table
|
178
|
-
assert_equal @data[0], query.result
|
179
|
-
end
|
180
|
-
|
181
|
-
def test_to_csv
|
182
|
-
query = @query[:plain]
|
183
|
-
setup_mock_dbi(1)
|
184
|
-
|
185
|
-
csv = @data[0].to_table(@columns).as(:csv)
|
186
|
-
assert_equal csv, query.to_csv
|
187
|
-
end
|
188
|
-
|
189
|
-
def test_missing_dsn
|
190
|
-
assert_raise(ArgumentError) {
|
191
|
-
Ruport::Query.add_source :foo, :user => "root", :password => "fff"
|
192
|
-
}
|
193
|
-
assert_nothing_raised { Ruport::Query.add_source :bar, :dsn => "..." }
|
194
|
-
end
|
195
|
-
|
196
|
-
def test_new_defaults
|
197
|
-
Ruport::Query.add_source :default, :dsn => "dbi:mysql:test",
|
198
|
-
:user => "root",
|
199
|
-
:password => ""
|
200
|
-
assert_equal("dbi:mysql:test", Ruport::Query.default_source.dsn)
|
201
|
-
assert_equal("root", Ruport::Query.default_source.user)
|
202
|
-
assert_equal("", Ruport::Query.default_source.password)
|
203
|
-
end
|
204
|
-
|
205
|
-
def test_multiple_sources
|
206
|
-
Ruport::Query.add_source :foo, :dsn => "dbi:mysql:test"
|
207
|
-
Ruport::Query.add_source :bar, :dsn => "dbi:mysql:test2"
|
208
|
-
assert_equal("dbi:mysql:test", Ruport::Query.sources[:foo].dsn)
|
209
|
-
assert_equal("dbi:mysql:test2", Ruport::Query.sources[:bar].dsn)
|
210
|
-
end
|
211
|
-
|
212
|
-
end
|
213
|
-
|
214
|
-
private
|
215
|
-
def setup_mock_dbi(count, options={})
|
216
|
-
sql = options[:sql] || @sql[0]
|
217
|
-
source = options[:source] || :default
|
218
|
-
resultless = options[:resultless]
|
219
|
-
params = options[:params] || []
|
220
|
-
|
221
|
-
@dbh = mock("database_handle")
|
222
|
-
@sth = mock("statement_handle")
|
223
|
-
def @dbh.execute(*a, &b); execute__(*a, &b); ensure; sth__.finish if b; end
|
224
|
-
def @sth.each; data__.each { |x| yield(x.dup) }; end
|
225
|
-
def @sth.fetch_all; data__; end
|
226
|
-
|
227
|
-
DBI.expects(:connect).
|
228
|
-
with(*@sources[source].values_at(:dsn, :user, :password)).
|
229
|
-
yields(@dbh).times(count)
|
230
|
-
@dbh.expects(:execute__).with(sql, *params).
|
231
|
-
yields(@sth).returns(@sth).times(count)
|
232
|
-
@dbh.stubs(:sth__).returns(@sth)
|
233
|
-
@sth.expects(:finish).with().times(count)
|
234
|
-
unless resultless
|
235
|
-
@sth.stubs(:fetchable?).returns(true)
|
236
|
-
@sth.stubs(:column_names).returns(@columns)
|
237
|
-
if options[:returns]
|
238
|
-
@sth.expects(:data__).returns(options[:returns]).times(count)
|
239
|
-
else
|
240
|
-
@sth.expects(:data__).returns(*@datasets).times(count)
|
241
|
-
end
|
242
|
-
else
|
243
|
-
@sth.stubs(:fetchable?).returns(false)
|
244
|
-
@sth.stubs(:column_names).returns([])
|
245
|
-
@sth.stubs(:cancel)
|
246
|
-
@sth.expects(:data__).times(0)
|
247
|
-
end
|
248
|
-
end
|
249
|
-
|
250
|
-
def get_query_source(query)
|
251
|
-
[ :dsn, :user, :password ].inject({}) do |memo, var|
|
252
|
-
memo.update var => query.instance_variable_get("@#{var}")
|
253
|
-
end
|
254
|
-
end
|
255
|
-
|
256
|
-
def get_raw(table)
|
257
|
-
table.map { |row| row.to_a }
|
258
|
-
end
|
259
|
-
end
|
data/test/sql_split_test.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby -w
|
2
|
-
require File.join(File.expand_path(File.dirname(__FILE__)), "helpers")
|
3
|
-
class TestSqlSplit < Test::Unit::TestCase
|
4
|
-
include Ruport
|
5
|
-
|
6
|
-
def test_sql_split_trivial
|
7
|
-
sql = "SELECT * FROM ruport_test"
|
8
|
-
split = Query::SqlSplit.new sql
|
9
|
-
assert_equal( 1, split.size )
|
10
|
-
assert_equal( sql, split.first )
|
11
|
-
end
|
12
|
-
|
13
|
-
def test_sql_split_complex
|
14
|
-
sql = File.read File.join(File.expand_path(File.dirname(__FILE__)),
|
15
|
-
*%w[samples ruport_test.sql])
|
16
|
-
split = Query::SqlSplit.new sql
|
17
|
-
assert_equal( 'SELECT * FROM ruport_test', split.last )
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|