csvto v0.1.3 Csvto.Builder
Conveniences for building a Csvto
This module can be use-d into a Module to build a Csvto
Example
defmodule MyCsvto do
use Csvto.Builder
csv :product do
field :name, :string, name: "Name"
field :number, :string, name: "Number"
field :description, :string, name: "Desc"
field :price, :float, name: "Price", validate: &(&1 >= 0)
field :images, {:array, :string}, name: "Images", separator: "|"
end
end
Types and casting
When defining a schema, types of fields need to be given. The data comming from a csv file will be validated and casted according to specified type. Types are split into two categories, base type and compositional type
Base types
The base types are
Type | Value example
:————————————-|:——————————————————
:integer | 1, 2, 3
:float | 1.0, 2.0, 3.0
:boolean | yes, no, no, off, 1, 0, true, false
:string | string
:binary | binary
:decimal | 1.0, 2.0, 3.0
:naive_datetime | ISO8601 datetime
:datetime | ISO8601 with timezone
date | ISO8601 date
time | ISO8601 time
Compositional type
There is only one compositional type: {:array, subtype}
For the subtype, you can replace it with any valid simple types, such as :string
While parsing array from csv field, a :separator option could be specified to define how should the subtype
should be seperated, by default, it is "|"
Reflection
Any Csvto defined with use Elixir.Csvto.Builder will generate the __csvto__ function that can be
used for runtime introspection of the shcemas:
__csvto__(:schemas)- Lists all the schemas defined in this module__csvto__(:schema, name)- Returns theCsvto.Schemaidentified by the given name on this module