diff --git a/lib/phlex/csv.rb b/lib/phlex/csv.rb index 14419ca2..589df0f3 100644 --- a/lib/phlex/csv.rb +++ b/lib/phlex/csv.rb @@ -4,8 +4,9 @@ class Phlex::CSV FORMULA_PREFIXES = Set["=", "+", "-", "@", "\t", "\r"].freeze SPACE_CHARACTERS = Set[" ", "\t", "\r"].freeze - def initialize(collection) + def initialize(collection, delimiter: ",") @collection = collection + @delimiter = delimiter @_headers = [] @_current_row = [] @_current_column_index = 0 @@ -44,10 +45,10 @@ def escape_csv_injection? = true view_template(*args, **kwargs) if @_first && render_headers? - buffer << @_headers.join(",") << "\n" + buffer << @_headers.join(@delimiter) << "\n" end - buffer << @_current_row.join(",") << "\n" + buffer << @_current_row.join(@delimiter) << "\n" @_current_column_index = 0 @_current_row.clear end diff --git a/quickdraw/csv.test.rb b/quickdraw/csv.test.rb index 5c9ddb36..f243821d 100644 --- a/quickdraw/csv.test.rb +++ b/quickdraw/csv.test.rb @@ -46,6 +46,19 @@ def render_headers? CSV end +test "basic csv with semicolon as delimiter" do + products = [ + Product.new("Apple", 1.00), + Product.new(" Banana ", 2.00), + ] + + assert_equal Example.new(products, delimiter: ";").call, <<~CSV + name;price + Apple;1.0 + " Banana ";2.0 + CSV +end + test "trim whitespace" do products = [ Product.new(" Apple", 1.00),