Last active
December 14, 2015 01:18
Revisions
-
madwork renamed this gist
Feb 24, 2013 . 1 changed file with 0 additions and 0 deletions.There are no files selected for viewing
File renamed without changes. -
madwork revised this gist
Feb 21, 2013 . 1 changed file with 6 additions and 6 deletions.There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,8 +1,8 @@ ## Usage exporter = Exporter.new exporter.header = ["Firstname", "Lastname", "Email"] [%w(Vincent Durand vincent@foo.com), %w(Bob Marley bob@foo.com)].each do |user| exporter.add user end exporter.to_csv('ISO-8859-15//IGNORE', 'UTF-8') -
madwork created this gist
Feb 21, 2013 .There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,45 @@ require 'iconv' class Exporter def initialize(separator = ';') @separator = separator @header = [] @body = [] end def header=(columns) @header = columns.flatten end # Add value to body # # @param [Array] values # @return [Array] @body def add(values) @body << values.flatten.join(@separator) end alias_method :<<, :add # Build CSV # Iconv (http://www.ruby-doc.org/stdlib-1.9.3/libdoc/iconv/rdoc/Iconv.html) # # @param [String] to # @param [String] from # @return [String] def to_csv(to, from) csv = Iconv.new(to, from) csv.iconv header_as_string + body_as_string end private def body_as_string @body.join("\n") end def header_as_string @header.join(@separator).concat("\n") end end This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,8 @@ ## Usage exporter = Exporter.new exporter.header = ["Firstname", "Lastname", "Email"] [%w(Vincent Durand vincent@foo.com), %w(Bob Marley bob@foo.com)].each do |user| exporter.add user end exporter.to_csv('ISO-8859-15//IGNORE', 'UTF-8') This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,65 @@ require 'minitest/autorun' require File.join(File.expand_path(File.dirname(__FILE__)), 'exporter.rb') class TestExporter < MiniTest::Unit::TestCase def setup @exporter = Exporter.new @exporter.header = ["Foo", "Bar"] @exporter.add [1, 2] end def test_should_set_header assert_equal ["Foo", "Bar"], @exporter.instance_variable_get('@header') end def test_should_set_body assert_equal ["1;2"], @exporter.instance_variable_get('@body') end def test_should_add_to_body @exporter.add [3, 4] assert_equal ["1;2", "3;4"], @exporter.instance_variable_get('@body') end def test_should_add_to_body_with_aliased_method @exporter << [3, 4] assert_equal ["1;2", "3;4"], @exporter.instance_variable_get('@body') end def test_should_export_to_csv assert_equal "Foo;Bar\n1;2", @exporter.to_csv('ISO-8859-15//IGNORE', 'UTF-8') end def test_should_export_to_csv_with_empty assert_equal "\n", Exporter.new.to_csv('ISO-8859-15//IGNORE', 'UTF-8') end def test_should_set_header_with_non_flatten_array @exporter.header = ["Foo", ["Name1", "Name2"], "Bar"] assert_equal ["Foo", "Name1", "Name2", "Bar"], @exporter.instance_variable_get('@header') end def test_should_raise_error_with_invalid_header_paramter assert_raises(NoMethodError) { @exporter.header = "Foo" } end def test_should_raise_error_with_invalid_body_paramter assert_raises(NoMethodError) { @exporter << "Foo" } end def test_should_get_header_as_string assert_equal "Foo;Bar\n", @exporter.send(:header_as_string) end def test_should_get_body_as_string @exporter.add [2, 3] assert_equal "1;2\n2;3", @exporter.send(:body_as_string) end def test_should_customize_separator @exporter = Exporter.new(':') @exporter.header = ["Foo", "Bar"] @exporter.add [1, 2] assert_equal "Foo:Bar\n1:2", @exporter.to_csv('ISO-8859-15//IGNORE', 'UTF-8') end end