ProductPromotion
Logo

Elixir

made by https://0x3d.site

GitHub - aerosol/Tabula: :u7533: Pretty printer for maps/structs collections (Elixir)
 :u7533: Pretty printer for maps/structs collections (Elixir) - aerosol/Tabula
Visit Site

GitHub - aerosol/Tabula: :u7533: Pretty printer for maps/structs collections (Elixir)

GitHub - aerosol/Tabula: :u7533: Pretty printer for maps/structs collections (Elixir)

SWUbanner

Tabula

Build Status Hex.pm

Tabula can transform a list of maps (structs too, e.g. Ecto models) or Keywords into an ASCII/GitHub Markdown table.

It's a weekend-over-beer-project of mine, loosely based on clojure.pprint.print-table.

Installation

  1. Add Tabula to your list of dependencies in mix.exs:
def deps do
  [{:tabula, "~> 2.1.1"}]
end
  1. Ensure Tabula is started before your application:
def application do
  [applications: [:tabula]]
end

Let's get down to business :beers:

Examples

defmodule Demo do

  use Tabula, style: :github_md

  def run do
    [ %{"name" => "Joe", "age" => 31, "city" => "New York"},
      %{"name" => "Adam", "age" => 33, "city" => "Warsaw"},
      %{"name" => "Yolanda", "age" => 28, "city" => "Berlin"}
    ] |> print_table
  end

end

Demo.run yields:

age | city     | name
--- | -------- | -------
 31 | New York | Joe
 33 | Warsaw   | Adam
 28 | Berlin   | Yolanda

Which renders in GitHub markdown as:

age city name
31 New York Joe
33 Warsaw Adam
28 Berlin Yolanda

Alternatively, you can use the default :org_mode style:

defmodule Demo do

  def run do
    Code.get_docs(Atom, :docs) 
    |> Enum.sort
    |> Enum.map(fn {{function, arity}, _line, _kind, _signature, text} ->
      %{"function" => function,
        "arity"    => arity,
        "text"     => text |> String.split("\n") |> Enum.at(0) }
    end) |> Tabula.print_table
  end

end

So that Demo.run yields:

arity | function      | text
------+---------------+---------------------------------
    1 | :to_char_list | Converts an atom to a char list.
    1 | :to_string    | Converts an atom to a string.

You can specify the columns you want to render. If you wish Tabula to automatically index your rows, you need to provide it with a special # key:

iex(1)> Repo.all(Account) |> Tabula.print_table(only: ["#", :name, :key])

  # | :name    | :key
----+----------+-----------------------------
  1 | Adam     | e1210f10a721485be4ad50604cda
  2 | Thomas   | c0ae1f149298ffded9f41a828cf5

You can use render_table to return an iolist of the rendered data, if you wish not to write to stdout.

Struct values will be printed using their string representation, provided String.Chars is implemented. If in doubt, please consult the tests.

MaybeFutureFeatures

If time permits I would like to implement the following extensions (contributions very much welcome!):

  • ANSI styles, because we all love colored output, don't we?
  • Custom formatters
  • Cell contents wrapping
  • Option to define max table width

Contributors

Adam Rutkowski - https://twitter.com/hq1aerosol

Adrian Gruntkowski - https://twitter.com/adrgrunt

Gian D - https://twitter.com/fusillicode

Wojtek Mach - https://twitter.com/wojtekmach

Articles
to learn more about the elixir concepts.

Resources
which are currently available to browse on.

mail [email protected] to add your project or resources here 🔥.

FAQ's
to know more about the topic.

mail [email protected] to add your project or resources here 🔥.

Queries
or most google FAQ's about Elixir.

mail [email protected] to add more queries here 🔍.

More Sites
to check out once you're finished browsing here.

0x3d
https://www.0x3d.site/
0x3d is designed for aggregating information.
NodeJS
https://nodejs.0x3d.site/
NodeJS Online Directory
Cross Platform
https://cross-platform.0x3d.site/
Cross Platform Online Directory
Open Source
https://open-source.0x3d.site/
Open Source Online Directory
Analytics
https://analytics.0x3d.site/
Analytics Online Directory
JavaScript
https://javascript.0x3d.site/
JavaScript Online Directory
GoLang
https://golang.0x3d.site/
GoLang Online Directory
Python
https://python.0x3d.site/
Python Online Directory
Swift
https://swift.0x3d.site/
Swift Online Directory
Rust
https://rust.0x3d.site/
Rust Online Directory
Scala
https://scala.0x3d.site/
Scala Online Directory
Ruby
https://ruby.0x3d.site/
Ruby Online Directory
Clojure
https://clojure.0x3d.site/
Clojure Online Directory
Elixir
https://elixir.0x3d.site/
Elixir Online Directory
Elm
https://elm.0x3d.site/
Elm Online Directory
Lua
https://lua.0x3d.site/
Lua Online Directory
C Programming
https://c-programming.0x3d.site/
C Programming Online Directory
C++ Programming
https://cpp-programming.0x3d.site/
C++ Programming Online Directory
R Programming
https://r-programming.0x3d.site/
R Programming Online Directory
Perl
https://perl.0x3d.site/
Perl Online Directory
Java
https://java.0x3d.site/
Java Online Directory
Kotlin
https://kotlin.0x3d.site/
Kotlin Online Directory
PHP
https://php.0x3d.site/
PHP Online Directory
React JS
https://react.0x3d.site/
React JS Online Directory
Angular
https://angular.0x3d.site/
Angular JS Online Directory