ruport 1.6.3 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +7 -0
  2. data/AUTHORS +11 -0
  3. data/CHANGELOG.md +38 -0
  4. data/HACKING +1 -17
  5. data/README.md +97 -0
  6. data/Rakefile +9 -50
  7. data/examples/add_row_table.rb +46 -0
  8. data/examples/data/wine.csv +255 -0
  9. data/examples/pdf_grouping.rb +39 -0
  10. data/examples/pdf_table.rb +28 -0
  11. data/examples/pdf_table_from_csv.rb +26 -0
  12. data/examples/pdf_table_prawn.rb +30 -0
  13. data/examples/pdf_table_simple.rb +13 -0
  14. data/examples/row_renderer.rb +1 -1
  15. data/examples/simple_pdf_lines.rb +1 -1
  16. data/examples/trac_ticket_status.rb +1 -1
  17. data/lib/ruport/controller.rb +17 -21
  18. data/lib/ruport/data/feeder.rb +2 -2
  19. data/lib/ruport/data/grouping.rb +8 -8
  20. data/lib/ruport/data/record.rb +4 -4
  21. data/lib/ruport/data/table.rb +318 -206
  22. data/lib/ruport/formatter/csv.rb +6 -7
  23. data/lib/ruport/formatter/html.rb +13 -11
  24. data/lib/ruport/formatter/markdown.rb +105 -0
  25. data/lib/ruport/formatter/prawn_pdf.rb +159 -0
  26. data/lib/ruport/formatter/template.rb +1 -1
  27. data/lib/ruport/formatter/text.rb +1 -1
  28. data/lib/ruport/formatter.rb +54 -54
  29. data/lib/ruport/version.rb +1 -1
  30. data/lib/ruport.rb +7 -23
  31. data/test/controller_test.rb +201 -225
  32. data/test/csv_formatter_test.rb +36 -36
  33. data/test/data_feeder_test.rb +64 -64
  34. data/test/expected_outputs/prawn_pdf_formatter/pdf_basic.pdf.test +265 -0
  35. data/test/grouping_test.rb +103 -102
  36. data/test/helpers.rb +29 -10
  37. data/test/html_formatter_test.rb +46 -46
  38. data/test/markdown_formatter_test.rb +142 -0
  39. data/test/prawn_pdf_formatter_test.rb +108 -0
  40. data/test/record_test.rb +91 -91
  41. data/test/samples/sales.csv +21 -0
  42. data/test/table_pivot_test.rb +77 -26
  43. data/test/table_test.rb +376 -354
  44. data/test/template_test.rb +13 -13
  45. data/test/text_formatter_test.rb +52 -52
  46. data/util/bench/data/table/bench_column_manip.rb +0 -1
  47. data/util/bench/data/table/bench_dup.rb +0 -1
  48. data/util/bench/data/table/bench_init.rb +1 -2
  49. data/util/bench/data/table/bench_manip.rb +0 -1
  50. data/util/bench/formatter/bench_csv.rb +0 -1
  51. data/util/bench/formatter/bench_html.rb +0 -1
  52. data/util/bench/formatter/bench_pdf.rb +0 -1
  53. data/util/bench/formatter/bench_text.rb +0 -1
  54. metadata +131 -82
  55. data/README +0 -114
  56. data/lib/ruport/formatter/pdf.rb +0 -591
  57. 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')
@@ -6,7 +6,7 @@ class CSV2Something < Ruport::Controller
6
6
 
7
7
  module Helpers
8
8
  def table_feeder
9
- Table(options.csv_file,:has_names => false) { |t,r| yield(r) }
9
+ Table(options.csv_file,:has_names => false) { |_t,r| yield(r) }
10
10
  end
11
11
  end
12
12
 
@@ -18,7 +18,7 @@ class PDFLines < Ruport::Formatter::PDF
18
18
  end
19
19
 
20
20
  # generate 35 random lines
21
- data = (0..34).inject([]) { |s,r|
21
+ data = (0..34).inject([]) { |s,_r|
22
22
  s << [rand(100),100+rand(400)]
23
23
  }
24
24
 
@@ -41,7 +41,7 @@ class TracSummaryReport
41
41
  Grouping(table,:by => :date)
42
42
  end
43
43
 
44
- def renderable_data(format)
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 } },
@@ -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
- raise UnknownFormatError
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
- self.class.controller.render(format,
174
- self.class.rendering_options.merge(options)) do |rend|
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::PDF,
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
- o = opt
397
- unless instance_methods(false).include?(o.to_s)
398
- define_method(o) { options.send(o.to_s) }
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
@@ -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
@@ -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 {|name,group|
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 |name,group|
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 { |n,g| @order[g] }.each { |n,g| yield(n,g) }
203
+ @data.sort_by { |_n,g| @order[g] }.each { |n,g| yield(n,g) }
204
204
  elsif @order == :name
205
- @data.sort_by { |n,g| n }.each { |name,group| yield(name,group) }
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 { |n,g| a << g }
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
- expected = Table(cols) { |t|
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, (group_name, group)|
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)
@@ -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.inject({}) { |h,a| h.merge(a => data.shift) }
58
+ @data = @attributes.each_with_object({}) { |a, h| h[a.freeze] = data.shift }
59
59
  when Hash
60
- @data = data.dup
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 Fixnum
143
+ when Integer
144
144
  self[name]
145
145
  else
146
146
  raise ArgumentError, "Whatchu Talkin' Bout, Willis?"