From a0d0783062943590befd8405f6502909deecfdf1 Mon Sep 17 00:00:00 2001 From: Eric Lindvall Date: Thu, 17 Jul 2008 22:08:48 -0700 Subject: [PATCH] Implementation of CSV report. --- .gitignore | 1 + lib/munger.rb | 1 + lib/munger/render/csv.rb | 31 +++++++++++++++++++++++++++++++ spec/spec_render_csv.rb | 21 +++++++++++++++++++++ 4 files changed, 54 insertions(+) create mode 100644 .gitignore create mode 100644 lib/munger/render/csv.rb create mode 100644 spec/spec_render_csv.rb diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5fff1d9 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +pkg diff --git a/lib/munger.rb b/lib/munger.rb index f37fabe..5c2d3f3 100644 --- a/lib/munger.rb +++ b/lib/munger.rb @@ -6,6 +6,7 @@ require 'munger/item' require 'munger/render' +require 'munger/render/csv' require 'munger/render/html' require 'munger/render/sortable_html' require 'munger/render/text' diff --git a/lib/munger/render/csv.rb b/lib/munger/render/csv.rb new file mode 100644 index 0000000..48957ee --- /dev/null +++ b/lib/munger/render/csv.rb @@ -0,0 +1,31 @@ +module Munger + module Render + class CSV + + attr_reader :report + + def initialize(report) + @report = report + end + + def render + output = [] + + # header + output << @report.columns.collect { |col| @report.column_title(col).to_s }.join(',') + + # body + @report.process_data.each do |row| + output << @report.columns.collect { |col| row[:data][col].to_s }.join(',') + end + + output.join("\n") + end + + def valid? + @report.is_a? Munger::Report + end + + end + end +end \ No newline at end of file diff --git a/spec/spec_render_csv.rb b/spec/spec_render_csv.rb new file mode 100644 index 0000000..bae3da5 --- /dev/null +++ b/spec/spec_render_csv.rb @@ -0,0 +1,21 @@ +require File.dirname(__FILE__) + "/spec_helper" + +describe Munger::Render::CSV do + include MungerSpecHelper + + before(:each) do + @data = Munger::Data.new(:data => test_data) + @report = Munger::Report.new(:data => @data) + end + + it "should accept a Munger::Report object" do + Munger::Render::Text.new(@report.process).should be_valid + end + + it "should render a basic text table" do + @render = Munger::Render::CSV.new(@report.process) + count = @report.rows + text = @render.render + text.split("\n").should have_at_least(count).items + end +end \ No newline at end of file