ruport 1.6.3 → 1.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/AUTHORS +11 -0
- data/CHANGELOG.md +38 -0
- data/HACKING +1 -17
- data/README.md +97 -0
- data/Rakefile +9 -50
- data/examples/add_row_table.rb +46 -0
- data/examples/data/wine.csv +255 -0
- data/examples/pdf_grouping.rb +39 -0
- data/examples/pdf_table.rb +28 -0
- data/examples/pdf_table_from_csv.rb +26 -0
- data/examples/pdf_table_prawn.rb +30 -0
- data/examples/pdf_table_simple.rb +13 -0
- data/examples/row_renderer.rb +1 -1
- data/examples/simple_pdf_lines.rb +1 -1
- data/examples/trac_ticket_status.rb +1 -1
- data/lib/ruport/controller.rb +17 -21
- data/lib/ruport/data/feeder.rb +2 -2
- data/lib/ruport/data/grouping.rb +8 -8
- data/lib/ruport/data/record.rb +4 -4
- data/lib/ruport/data/table.rb +318 -206
- data/lib/ruport/formatter/csv.rb +6 -7
- data/lib/ruport/formatter/html.rb +13 -11
- data/lib/ruport/formatter/markdown.rb +105 -0
- data/lib/ruport/formatter/prawn_pdf.rb +159 -0
- data/lib/ruport/formatter/template.rb +1 -1
- data/lib/ruport/formatter/text.rb +1 -1
- data/lib/ruport/formatter.rb +54 -54
- data/lib/ruport/version.rb +1 -1
- data/lib/ruport.rb +7 -23
- data/test/controller_test.rb +201 -225
- data/test/csv_formatter_test.rb +36 -36
- data/test/data_feeder_test.rb +64 -64
- data/test/expected_outputs/prawn_pdf_formatter/pdf_basic.pdf.test +265 -0
- data/test/grouping_test.rb +103 -102
- data/test/helpers.rb +29 -10
- data/test/html_formatter_test.rb +46 -46
- data/test/markdown_formatter_test.rb +142 -0
- data/test/prawn_pdf_formatter_test.rb +108 -0
- data/test/record_test.rb +91 -91
- data/test/samples/sales.csv +21 -0
- data/test/table_pivot_test.rb +77 -26
- data/test/table_test.rb +376 -354
- data/test/template_test.rb +13 -13
- data/test/text_formatter_test.rb +52 -52
- data/util/bench/data/table/bench_column_manip.rb +0 -1
- data/util/bench/data/table/bench_dup.rb +0 -1
- data/util/bench/data/table/bench_init.rb +1 -2
- data/util/bench/data/table/bench_manip.rb +0 -1
- data/util/bench/formatter/bench_csv.rb +0 -1
- data/util/bench/formatter/bench_html.rb +0 -1
- data/util/bench/formatter/bench_pdf.rb +0 -1
- data/util/bench/formatter/bench_text.rb +0 -1
- metadata +131 -82
- data/README +0 -114
- data/lib/ruport/formatter/pdf.rb +0 -591
- data/test/pdf_formatter_test.rb +0 -354
@@ -0,0 +1,30 @@
|
|
1
|
+
$: << File.join(File.dirname(__FILE__), '..', 'lib')
|
2
|
+
|
3
|
+
require "ruport"
|
4
|
+
|
5
|
+
table = Ruport::Data::Table.new(
|
6
|
+
:column_names => %w(Make Model Year Class),
|
7
|
+
:data => [
|
8
|
+
%w(Nissan Skyline 1989 B),
|
9
|
+
%w(Mercedes-Benz 500SL 2005 A),
|
10
|
+
%w(Kia Sinatra 2008 C)
|
11
|
+
])
|
12
|
+
|
13
|
+
pdf_options = { :pdf_format => {
|
14
|
+
:page_layout => :portrait,
|
15
|
+
:page_size => "LETTER",
|
16
|
+
},
|
17
|
+
:table_format => {
|
18
|
+
:cell_style => { :size => 8},
|
19
|
+
:row_colors => ["FFFFFF","F0F0F0"],
|
20
|
+
:column_widths => {
|
21
|
+
0 => 100,
|
22
|
+
1 => 100,
|
23
|
+
2 => 50,
|
24
|
+
3 => 40
|
25
|
+
}
|
26
|
+
},
|
27
|
+
:file => 'pdf_table_prawn.pdf'
|
28
|
+
}
|
29
|
+
|
30
|
+
table.to_prawn_pdf(pdf_options)
|
@@ -0,0 +1,13 @@
|
|
1
|
+
$: << File.join(File.dirname(__FILE__), '..', 'lib')
|
2
|
+
require "ruport"
|
3
|
+
|
4
|
+
# Quick and simple example using prawn 0.9.0 with to_prawn_pdf.
|
5
|
+
table = Ruport::Data::Table.new(
|
6
|
+
:column_names => %w(Make Model Year),
|
7
|
+
:data => [
|
8
|
+
%w(Nissan Skyline 1989),
|
9
|
+
%w(Mercedes-Benz 500SL 2005),
|
10
|
+
%w(Kia Sinatra 2008)
|
11
|
+
])
|
12
|
+
|
13
|
+
table.to_prawn_pdf(:file => 'pdf_table_simple.pdf')
|
data/examples/row_renderer.rb
CHANGED
@@ -41,7 +41,7 @@ class TracSummaryReport
|
|
41
41
|
Grouping(table,:by => :date)
|
42
42
|
end
|
43
43
|
|
44
|
-
def renderable_data(
|
44
|
+
def renderable_data(_format)
|
45
45
|
summary = feed_data.summary :date,
|
46
46
|
:opened => lambda { |g| g.sigma { |r| r.opened } },
|
47
47
|
:closed => lambda { |g| g.sigma { |r| r.closed } },
|
data/lib/ruport/controller.rb
CHANGED
@@ -165,19 +165,15 @@ class Ruport::Controller
|
|
165
165
|
# Example:
|
166
166
|
#
|
167
167
|
# table.as(:csv, :show_table_headers => false)
|
168
|
-
def as(format,options={})
|
168
|
+
def as(format, options = {})
|
169
169
|
raise ControllerNotSetError unless self.class.controller
|
170
|
-
unless self.class.controller.formats.include?(format)
|
171
|
-
|
170
|
+
raise UnknownFormatError unless self.class.controller.formats.include?(format)
|
171
|
+
self.class.controller.render(format, self.class.rendering_options.merge(options)) do |rend|
|
172
|
+
rend.data = respond_to?(:renderable_data) ? renderable_data(format) : self
|
173
|
+
yield(rend) if block_given?
|
172
174
|
end
|
173
|
-
|
174
|
-
|
175
|
-
rend.data =
|
176
|
-
respond_to?(:renderable_data) ? renderable_data(format) : self
|
177
|
-
yield(rend) if block_given?
|
178
|
-
end
|
179
|
-
end
|
180
|
-
|
175
|
+
end
|
176
|
+
|
181
177
|
def save_as(file,options={})
|
182
178
|
file =~ /.*\.(.*)/
|
183
179
|
format = $1
|
@@ -220,7 +216,8 @@ class Ruport::Controller
|
|
220
216
|
def built_in_formats
|
221
217
|
{ :html => Ruport::Formatter::HTML,
|
222
218
|
:csv => Ruport::Formatter::CSV,
|
223
|
-
:pdf => Ruport::Formatter::
|
219
|
+
:pdf => Ruport::Formatter::PrawnPDF,
|
220
|
+
:prawn_pdf => Ruport::Formatter::PrawnPDF,
|
224
221
|
:text => Ruport::Formatter::Text }
|
225
222
|
end
|
226
223
|
|
@@ -389,16 +386,16 @@ class Ruport::Controller
|
|
389
386
|
# # other details omitted
|
390
387
|
# end
|
391
388
|
def required_option(*opts)
|
392
|
-
self.required_options ||= []
|
393
|
-
opts.each do |opt|
|
394
|
-
self.required_options << opt
|
389
|
+
(self.required_options ||= []).concat(opts)
|
395
390
|
|
396
|
-
|
397
|
-
unless
|
398
|
-
define_method(
|
391
|
+
opts.each do |opt|
|
392
|
+
unless method_defined?(opt)
|
393
|
+
define_method(opt) { options.send(opt) }
|
394
|
+
end
|
395
|
+
setter = "#{opt}="
|
396
|
+
unless method_defined?(setter)
|
397
|
+
define_method(setter) {|t| options.send(setter, t) }
|
399
398
|
end
|
400
|
-
opt = "#{opt}="
|
401
|
-
define_method(opt) {|t| options.send(opt, t) }
|
402
399
|
end
|
403
400
|
end
|
404
401
|
|
@@ -573,7 +570,6 @@ class Ruport::Controller
|
|
573
570
|
else
|
574
571
|
execute_stages
|
575
572
|
end
|
576
|
-
|
577
573
|
finalize self.class.final_stage if self.class.final_stage
|
578
574
|
maybe :finalize
|
579
575
|
end
|
data/lib/ruport/data/feeder.rb
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
#
|
15
15
|
# Table Example:
|
16
16
|
#
|
17
|
-
# t = Table(%w[a b c]) do |feeder|
|
17
|
+
# t = Ruport::Data::Table(%w[a b c]) do |feeder|
|
18
18
|
# feeder.filter { |r| r.a < 5 }
|
19
19
|
# feeder.transform { |r| r.b = "B: #{r.b}"}
|
20
20
|
# feeder << [1,2,3]
|
@@ -108,4 +108,4 @@ class Ruport::Data::Feeder
|
|
108
108
|
@constraints << [:transform,block]
|
109
109
|
end
|
110
110
|
|
111
|
-
end
|
111
|
+
end
|
data/lib/ruport/data/grouping.rb
CHANGED
@@ -99,7 +99,7 @@ module Ruport::Data
|
|
99
99
|
if @subgroups.empty?
|
100
100
|
@subgroups = grouped_data(group_column)
|
101
101
|
else
|
102
|
-
@subgroups.each {|
|
102
|
+
@subgroups.each {|_name,group|
|
103
103
|
group.send(:create_subgroups, group_column)
|
104
104
|
}
|
105
105
|
end
|
@@ -172,7 +172,7 @@ module Ruport::Data
|
|
172
172
|
cols = Array(options[:by]).dup
|
173
173
|
@data = data.to_group.send(:grouped_data, cols.shift)
|
174
174
|
cols.each do |col|
|
175
|
-
@data.each do |
|
175
|
+
@data.each do |_name,group|
|
176
176
|
group.send(:create_subgroups, col)
|
177
177
|
end
|
178
178
|
end
|
@@ -200,9 +200,9 @@ module Ruport::Data
|
|
200
200
|
#
|
201
201
|
def each
|
202
202
|
if @order.respond_to?(:call)
|
203
|
-
@data.sort_by { |
|
203
|
+
@data.sort_by { |_n,g| @order[g] }.each { |n,g| yield(n,g) }
|
204
204
|
elsif @order == :name
|
205
|
-
@data.sort_by { |n,
|
205
|
+
@data.sort_by { |n,_g| n }.each { |name,group| yield(name,group) }
|
206
206
|
else
|
207
207
|
@data.each { |name,group| yield(name,group) }
|
208
208
|
end
|
@@ -216,7 +216,7 @@ module Ruport::Data
|
|
216
216
|
# by_size = grouping.sort_grouping_by { |g| g.size }
|
217
217
|
def sort_grouping_by(type=nil,&block)
|
218
218
|
a = Grouping.new(:by => @grouped_by, :order => type || block)
|
219
|
-
each { |
|
219
|
+
each { |_n,g| a << g }
|
220
220
|
return a
|
221
221
|
end
|
222
222
|
|
@@ -285,7 +285,7 @@ module Ruport::Data
|
|
285
285
|
else
|
286
286
|
cols = procs.keys + [field]
|
287
287
|
end
|
288
|
-
|
288
|
+
Table.new(:column_names => cols) { |t|
|
289
289
|
each do |name,group|
|
290
290
|
t << procs.inject({field => name}) do |s,r|
|
291
291
|
s.merge(r[0] => r[1].call(group))
|
@@ -327,7 +327,7 @@ module Ruport::Data
|
|
327
327
|
# grouping.sigma { |r| r.col2 + 1 } #=> 15
|
328
328
|
#
|
329
329
|
def sigma(column=nil)
|
330
|
-
inject(0) do |s, (
|
330
|
+
inject(0) do |s, (_group_name, group)|
|
331
331
|
if column
|
332
332
|
s + group.sigma(column)
|
333
333
|
else
|
@@ -379,7 +379,7 @@ module Kernel
|
|
379
379
|
#
|
380
380
|
# Example:
|
381
381
|
#
|
382
|
-
# a = Table(%w[a b c], :data => [[1,2,3],[4,5,6]])
|
382
|
+
# a = Ruport::Data::Table.new(%w[a b c], :data => [[1,2,3],[4,5,6]])
|
383
383
|
# b = Grouping(a, :by => "a") #=> creates a new grouping on column "a"
|
384
384
|
#
|
385
385
|
def Grouping(*args)
|
data/lib/ruport/data/record.rb
CHANGED
@@ -55,10 +55,10 @@ module Ruport::Data
|
|
55
55
|
case(data)
|
56
56
|
when Array
|
57
57
|
@attributes = options[:attributes] || (0...data.length).to_a
|
58
|
-
@data = @attributes.
|
58
|
+
@data = @attributes.each_with_object({}) { |a, h| h[a.freeze] = data.shift }
|
59
59
|
when Hash
|
60
|
-
@data = data
|
61
|
-
@attributes = options[:attributes] || data.keys
|
60
|
+
@data = data
|
61
|
+
@attributes = options[:attributes] || @data.keys
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
@@ -140,7 +140,7 @@ module Ruport::Data
|
|
140
140
|
case name
|
141
141
|
when String,Symbol
|
142
142
|
self[name] || send(name)
|
143
|
-
when
|
143
|
+
when Integer
|
144
144
|
self[name]
|
145
145
|
else
|
146
146
|
raise ArgumentError, "Whatchu Talkin' Bout, Willis?"
|