posexional v0.1.1 Posexional.Row

this module represent a row in a positional file

Summary

Functions

finds a field in the row by its name

calculate the row total length based on the passed fields

read a positional file row and convert it back to a keyword list of values

outputs a row

Functions

add_field(row, field)

Specs

add_field(%Posexional.Row{fields: term, name: term, row_guesser: term, separator: term}, struct) :: %Posexional.Row{fields: term, name: term, row_guesser: term, separator: term}
add_fields(row, fields)

Specs

add_fields(%Posexional.Row{fields: term, name: term, row_guesser: term, separator: term}, []) :: %Posexional.Row{fields: term, name: term, row_guesser: term, separator: term}
find_field(row, name)

Specs

find_field(%Posexional.Row{fields: term, name: term, row_guesser: term, separator: term}, atom) :: %Posexional.Field.Value{alignment: term, filler: term, name: term, size: term}

finds a field in the row by its name

Examples

iex> Posexional.Row.new(:row_test, []) |> Posexional.Row.find_field(:test)
nil

iex> Posexional.Row.new(:row_test, [Posexional.Field.Value.new(:test, 5)]) |> Posexional.Row.find_field(:test)
Posexional.Field.Value.new(:test, 5)

iex> Posexional.Row.new(:row_test, [Posexional.Field.Value.new(:test, 5), Posexional.Field.Value.new(:test2, 5)])
...>   |> Posexional.Row.find_field(:test2)
Posexional.Field.Value.new(:test2, 5)
length(row)

Specs

length(%Posexional.Row{fields: term, name: term, row_guesser: term, separator: term}) :: integer

calculate the row total length based on the passed fields

Examples

iex> Posexional.Row.new(:row_test, [])
...>   |> Posexional.Row.length
0

iex> Posexional.Row.new(:row_test, [Posexional.Field.Value.new(:test1, 10), Posexional.Field.Value.new(:test2, 20)])
...>   |> Posexional.Row.length
30
manage_counters(row, counters)

Specs

manage_counters(%Posexional.Row{fields: term, name: term, row_guesser: term, separator: term}, [{atom, pid}]) :: %Posexional.Row{fields: term, name: term, row_guesser: term, separator: term}
new(name, fields, opts \\ [])

Specs

new(atom, [], Keyword.t) :: %Posexional.Row{fields: term, name: term, row_guesser: term, separator: term}
read(row, content)

Specs

read(%Posexional.Row{fields: term, name: term, row_guesser: term, separator: term}, binary) :: Keyword.t

read a positional file row and convert it back to a keyword list of values

write(row, values)

Specs

write(%Posexional.Row{fields: term, name: term, row_guesser: term, separator: term}, Keyword.t) :: {atom, binary}

outputs a row

Examples

iex> Posexional.Row.new(:row_test, []) |> Posexional.Row.write([test: "test"])
{:ok, ""}

iex> Posexional.Row.new(:row_test, [Posexional.Field.Value.new(:test1, 5), Posexional.Field.Value.new(:test2, 10)])
...>   |> Posexional.Row.write([test1: "test1", test2: "test2"])
{:ok, "test1test2     "}

iex> Posexional.Row.new(:row_test, [Posexional.Field.Value.new(:test1, 5), Posexional.Field.Value.new(:test2, 10)])
...>   |> Posexional.Row.write([test1: "test1", non_existent: "test2"])
{:ok, "test1          "}

iex> Posexional.Row.new(:row_test, [Posexional.Field.Value.new(:test1, 6)])
...>   |> Posexional.Row.write([test1: "test1", not_configured: "test2"])
{:ok, "test1 "}

iex> Posexional.Row.new(:row_test, [Posexional.Field.Value.new(:test1, 5)])
...>   |> Posexional.Row.write([not_configured: "test2", another: "test3"])
{:ok, "     "}

iex> Posexional.Row.new(:row_test, [Posexional.Field.Empty.new(5)])
...>   |> Posexional.Row.write([])
{:ok, "     "}