Hex.pmBuild StatusInline docs

An Elixir app which generates text-based tables for display

Currently supports output:

####Features

1

####Stability

This software is pre-v1 and therefore the public API may change; any breaking changes will be clearly denoted in the CHANGELOG. After v1, the API will be stable.

####Documenation

See the quick start below or check out the full API docs at HexDocs.

Installation

The package is available on Hex, therefore:

Addtable_rex to your list of dependencies in mix.exs:

def deps do
  [{:table_rex, "~> 0.4.0"}]
end

Then starttable_rex by adding it to application/0 in mix.exs:

def application do
  [applications: [:logger, :table_rex]]
end

##Quick Start

Use the TableRex.quick_render and TableRex.quick_render! functions; for those that just want a table quickly.

Given this data:

title = "Drum & Bass Releases"
header = ["Artist", "Track", "Label", "Year"]
rows = [
  ["Konflict", "Cyanide", "Renegade Hardware", 1999],
  ["Marcus Intalex", "Temperance", "Soul:r", 2004],
  ["Kryptic Minds", "The Forgotten", "Defcom Records", 2007]
]

###TableRex.quick_render!/1

rows
|> TableRex.quick_render!
|> IO.puts
+-----------------+---------------+-------------------+------+
|    Konflict     |    Cyanide    | Renegade Hardware | 1999 |
| Marcus Intalex  |  Temperance   |      Soul:r       | 2004 |
|  Kryptic Minds  | The Forgotten |  Defcom Records   | 2007 |
+-----------------+---------------+-------------------+------+

###TableRex.quick_render!/2

rows
|> TableRex.quick_render!(header)
|> IO.puts
+----------------+---------------+-------------------+------+
|     Artist     |     Track     |       Label       | Year |
+----------------+---------------+-------------------+------+
|    Konflict    |    Cyanide    | Renegade Hardware | 1999 |
| Marcus Intalex |  Temperance   |      Soul:r       | 2004 |
| Kryptic Minds  | The Forgotten |  Defcom Records   | 2007 |
+----------------+---------------+-------------------+------+

###TableRex.quick_render!/3

rows
|> TableRex.quick_render!(header, title)
|> IO.puts
+-----------------------------------------------------------+
|                   Drum & Bass Releases                    |
+----------------+---------------+-------------------+------+
|     Artist     |     Track     |       Label       | Year |
+----------------+---------------+-------------------+------+
|    Konflict    |    Cyanide    | Renegade Hardware | 1999 |
| Marcus Intalex |  Temperance   |      Soul:r       | 2004 |
| Kryptic Minds  | The Forgotten |  Defcom Records   | 2007 |
+----------------+---------------+-------------------+------+

###Utilising TableRex.Table for deeper customisation

These examples all use: alias TableRex.Table to shorten the namespace.

Set alignment & padding for specific columns or column ranges:

Table.new
|> Table.add_rows(rows)
|> Table.set_header(header)
|> Table.set_column_meta(0, align: :right, padding: 5)
|> Table.set_column_meta(1..2, align: :left)
|> Table.render!
|> IO.puts
+------------------------+---------------+-------------------+------+
|             Artist     | Track         | Label             | Year |
+------------------------+---------------+-------------------+------+
|           Konflict     | Cyanide       | Renegade Hardware | 1999 |
|     Marcus Intalex     | Temperance    | Soul:r            | 2004 |
|      Kryptic Minds     | The Forgotten | Defcom Records    | 2007 |
+------------------------+---------------+-------------------+------+

Change the table styling:

Table.new
|> Table.add_rows(rows)
|> Table.set_header(header)
|> Table.render!(header_separator_symbol: "=", horizontal_style: :all)
|> IO.puts
+----------------+---------------+-------------------+------+
|     Artist     |     Track     |       Label       | Year |
+================+===============+===================+======+
|    Konflict    |    Cyanide    | Renegade Hardware | 1999 |
+----------------+---------------+-------------------+------+
| Marcus Intalex |  Temperance   |      Soul:r       | 2004 |
+----------------+---------------+-------------------+------+
| Kryptic Minds  | The Forgotten |  Defcom Records   | 2007 |
+----------------+---------------+-------------------+------+

Available render options:

horizontal_style: one of :off, :frame (just the outside frame), :header (frame + header seperators), :all (frame + header + row seperators). vertical_style: one of :off, :frame (just the outside frame) or :all (frame + column separators). horizonal_symbol: used for drawing horizontal row separators. Default: -. vertical_symbol: used for drawing vertical separators. Default: -. intersection_symbol: used to draw the symbol where horizontal and vertical seperators intersect. Default: +. top_frame_symbol: used to draw the frame's top horizontal separator. Default: -. title_separator_symbol: used to draw the horizontal separator under the (optional) title. Default: -. header_separator_symbol: used to draw the horizontal separator under the (optional) header. Default: -. bottom_frame_symbol: used to draw the frame's bottom horizontal separator. Default: -. ` **Set cell level meta (including for the header cells):** ```elixir Table.new |> Table.add_rows(rows) |> Table.set_header(header) |> Table.set_header_meta(0, align: :left) |> Table.set_cell_meta(2, 1, align: :right) |> Table.render! |> IO.puts ``` ``` +----------------+---------------+-------------------+------+ | Artist | Track | Label | Year | +----------------+---------------+-------------------+------+ | Konflict | Cyanide | Renegade Hardware | 1999 | | Marcus Intalex | Temperance | Soul:r | 2004 | | Kryptic Minds | The Forgotten | Defcom Records | 2007 | +----------------+---------------+-------------------+------+ ``` *NB:* * inset_header_metathe0referred to the first cell of the header which was aligned left. * inset_cell_meta, the2referred to theLabelcolumn, and the1referred to the row index. The cell was aligned right. **Change/pass in your own renderer module:** The default renderer isTableRex.Renderer.Text. Custom renderer modules must be behaviours ofTableRex.Renderer`. elixir Table.new |> Table.add_rows(rows) |> Table.set_header(header) |> Table.render!(renderer: YourCustom.Renderer.Module)Go mad:elixir Table.new |> Table.add_rows(rows) |> Table.set_header(header) |> Table.render!(horizontal_style: :all, vertical_style: :all, top_frame_symbol: "*", header_separator_symbol: "=", horizontal_symbol: "~", vertical_symbol: "!") |> IO.puts+****************+***************+*******************+******+ ! Artist ! Track ! Label ! Year ! +================+===============+===================+======+ ! Konflict ! Cyanide ! Renegade Hardware ! 1999 ! +~~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~~~~~+~~~~~~+ ! Marcus Intalex ! Temperance ! Soul:r ! 2004 ! +~~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~~~~~+~~~~~~+ ! Kryptic Minds ! The Forgotten ! Defcom Records ! 2007 ! +----------------+---------------+-------------------+------+ ##Run the tests We have an extensive test suite which helps showcase project usage. For example: the quick render functions, table manipulation API or the text renderer module. To run the test suite, from the project directory, do: bash mix test ##Roadmap/Contributing We use the Github Issues tracker. If you have found something wrong, please raise an issue. If you'd like to contribute, check the issues to see where you can help. Contributions are welcome from anyone at any time but if the piece of work is significant in size, please raise an issue first. ##License MIT. See the full license. ##Thanks Ryanz720, for the original T-Rex image. Everyone in #elixir-lang on freenode, for answering the endless questions.