Skip to content

Latest commit

 

History

History
55 lines (39 loc) · 1.62 KB

README.md

File metadata and controls

55 lines (39 loc) · 1.62 KB

This library provides an easy way to generate CSV files. It allows you to define the colums and their respective types.

Example

defmodule MyCSV do
  use CsvGenerator

  column :name, :string
  column :joined, :date, format: "%d-%m-%Y"
  column :points, :integer, label: "points earned"
  hardcoded :string, "Game", "domino"
end

You would then render the CSV bij calling the render/1 method with the list of lines to render.

Example

iex> MyCSV.render([ 
   %{ name: "Chris McCord", joined: ~D[2020-01-01], points: 110},
   %{ name: "Jose Valim", joined: ~D[2020-03-29], points: 10} ])
"\"name\",\"joined\",\"points earned\",\"Game\"\n\"Chris McCord\",01-01-2020,110,\"domino\"\n\"Jose Valim\",29-03-2020,10,\"domino\""

By default the CSV columns will be seperated by a ",", the lines by a "\n". This can be changed by using delimiter and line_ending.

Example

defmodule MyCSV do
  use CsvGenerator

  delimiter ";"
  line_ending "\r\n"

  column :name, :string
  column :birthday, :date, format: "%d-%m-%Y"
  column :points, :integer
end

iex> MyCSV.render([ 
   %{ name: "Jose Valim", joined: ~D[2020-03-29], points: 10} ])
"\"name\";\"joined\";\"points earned\"\n\"Jose Valim\";29-03-2020;10"

Formatting

A formatter is included, to be able to have mix format use it, you have to add it to your own .formatter.exs in import_deps.

Example

[
  import_deps: [:ecto, :phoenix, :csv_generator],
  inputs: ["*.{ex,exs}", "priv/*/seeds.exs", "{config,lib,test}/**/*.{ex,exs}"],
  subdirectories: ["priv/*/migrations"]
]