ruport 1.6.3 → 1.8.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.
- 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?"
|