Class: CSVReportGenerator
- Inherits:
-
Object
- Object
- CSVReportGenerator
- Defined in:
- lib/csv_report_generator/csv_report_generator.rb
Constant Summary collapse
- DEFAULT_ROW_TRANSFORMER =
proc { |r| r }.freeze
- DEFAULT_TOTAL_TRANSFORMER =
proc { |r| r }.freeze
Instance Attribute Summary collapse
-
#headers ⇒ Object
writeonly
Sets the attribute headers.
-
#rows ⇒ Object
writeonly
Sets the attribute rows.
Instance Method Summary collapse
- #as_csv ⇒ Object
-
#initialize(rows, headers = nil, opts = {}) ⇒ CSVReportGenerator
constructor
A new instance of CSVReportGenerator.
- #row_transformer(&block) ⇒ Object
- #total_transformer(&block) ⇒ Object
- #transform(row, block) ⇒ Object
Constructor Details
#initialize(rows, headers = nil, opts = {}) ⇒ CSVReportGenerator
Returns a new instance of CSVReportGenerator.
21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/csv_report_generator/csv_report_generator.rb', line 21 def initialize(rows, headers = nil, opts = {}) @headers = headers @rows = rows @includes_total = opts[:includes_total] || false if block_given? yield(self) else # setup default transformers @row_transformer = DEFAULT_ROW_TRANSFORMER @total_transformer = DEFAULT_TOTAL_TRANSFORMER end end |
Instance Attribute Details
#headers=(value) ⇒ Object (writeonly)
Sets the attribute headers
6 7 8 |
# File 'lib/csv_report_generator/csv_report_generator.rb', line 6 def headers=(value) @headers = value end |
#rows=(value) ⇒ Object (writeonly)
Sets the attribute rows
7 8 9 |
# File 'lib/csv_report_generator/csv_report_generator.rb', line 7 def rows=(value) @rows = value end |
Instance Method Details
#as_csv ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/csv_report_generator/csv_report_generator.rb', line 35 def as_csv FasterCSV.generate do |csv| unless @headers.nil? csv << @headers.map { |h| h.values.first } end # transform if passed block, otherwise leave as is # don't mess with original row data in case we want # to redefine rows = @rows.collect do |row| if(@includes_total && @rows.last == row) self.transform(row, @total_transformer) else self.transform(row, @row_transformer) end end # need to do it this way so headers and data are in sync unless @headers.nil? rows.map { |r| @headers.map { |h| h.keys.first }.map { |h| r.send(:[], h.to_sym) } }.each { |row| csv << row } else unless rows.empty? cols = rows[0].keys rows.map { |r| cols.map { |c| r.send(:[], c.to_sym) } }.each { |row| csv << row } end end end end |
#row_transformer(&block) ⇒ Object
9 10 11 |
# File 'lib/csv_report_generator/csv_report_generator.rb', line 9 def row_transformer(&block) @row_transformer = block end |
#total_transformer(&block) ⇒ Object
13 14 15 |
# File 'lib/csv_report_generator/csv_report_generator.rb', line 13 def total_transformer(&block) @total_transformer = block end |
#transform(row, block) ⇒ Object
17 18 19 |
# File 'lib/csv_report_generator/csv_report_generator.rb', line 17 def transform(row, block) block.call(row) end |