Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kasvith/teks
Easily get custom go template based outputs to your command-line tool. Like in docker/kubernetes
https://github.com/kasvith/teks
cli cli-app cli-formatter clitools command docker-like-output easy-to-use format formatter formatting go go-template golang helper librar output table tabular text-template text-templating
Last synced: about 19 hours ago
JSON representation
Easily get custom go template based outputs to your command-line tool. Like in docker/kubernetes
- Host: GitHub
- URL: https://github.com/kasvith/teks
- Owner: kasvith
- License: mit
- Created: 2019-06-02T14:10:04.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2019-07-08T09:25:01.000Z (about 5 years ago)
- Last Synced: 2024-06-20T03:54:07.932Z (4 months ago)
- Topics: cli, cli-app, cli-formatter, clitools, command, docker-like-output, easy-to-use, format, formatter, formatting, go, go-template, golang, helper, librar, output, table, tabular, text-template, text-templating
- Language: Go
- Homepage:
- Size: 21.5 KB
- Stars: 41
- Watchers: 3
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# teks : awesome outputs for your commands
[![Build Status](https://travis-ci.com/kasvith/teks.svg?branch=master)](https://travis-ci.com/kasvith/teks) [![Go Report Card](https://goreportcard.com/badge/github.com/kasvith/teks)](https://goreportcard.com/report/github.com/kasvith/teks) [![GoDoc](https://godoc.org/github.com/kasvith/teks?status.svg)](https://godoc.org/github.com/kasvith/teks)
**teks** brings painless output formating for your commands. Docker/Kubernetes provides custom formatting via `go-templates`.
**teks** brings the power into any application providing a smooth intergration as a library.> **teks** is hevily inspired by [Docker CLI](https://github.com/docker/cli)
# Install
`teks` is a go package. To use it execute
```
go get github.com/kasvith/teks
```# Available formatting options
| Name | Usage |
| --- | --- |
| `json` | Output is formatted as JSON |
| `jsonPretty` | Outputs a human-readable JSON with indented by 2 spaces |
| `upper` | Convert string to uppercase |
| `lower` | Convert string to lowercase |
| `split` | Splits strings given by `string` and `sep` |
| `join` | Joins strings by given separator |
| `title` | Convert the first letter to uppercase of a string |# Example
In this example we are going to printout details of few persons using teks.
```go
package mainimport (
"flag"
"fmt"
"io"
"os"
"text/template""github.com/kasvith/teks"
)// Person represents a human being or whatever
type Person struct {
Name string
Age int
Address string
}func main() {
var format string
// default one will printout Name and Age in tabular format
flag.StringVar(&format, "format", "table {{.Name}}\t{{.Age}}", "format of output")
flag.Parse()// whatever data you have
persons := []Person{
{"Kasun", 24, "Earth"},
{"John Doe", 34, "Somewhere on earth"},
{"Spongebob", 30, "Under Sea"},
{"Harry Potter", 30, "4 Privet Drive, Little Whinging, Surrey"},
}// create new context
ctx := teks.NewContext(os.Stdout, format)// create a renderer function to match signature defined in teks.Renderer
renderer := func(w io.Writer, t *template.Template) error {
for _, p := range persons {
if err := t.Execute(w, p); err != nil {
return err
}
_, _ = w.Write([]byte{'\n'})
}
return nil
}// headers for table
tableHeaders := map[string]string{
"Age": "Age",
"Name": "Name",
"Address": "Address",
}//override header functions if you want
//teks.HeaderFuncs = template.FuncMap{
// "split": strings.Split,
//}// execute context and write to our output
if err := ctx.Write(renderer, tableHeaders); err != nil {
fmt.Println("Error executing template:", err.Error())
}
}```
Now run program as follows
```
➜ go run simple.go
Name Age
Kasun 24
John Doe 34
Spongebob 30
Harry Potter 30
```Let's pretty print Name and Address in tabular format
```
➜ go run simple.go --format "table {{.Name}}\t{{.Address}}"
Name Address
Kasun Earth
John Doe Somewhere on earth
Spongebob Under Sea
Harry Potter 4 Privet Drive, Little Whinging, Surrey
```Let's make Name UPPERCASE
```
➜ go run simple.go --format "table {{upper .Name}}\t{{.Address}}"
NAME Address
KASUN Earth
JOHN DOE Somewhere on earth
SPONGEBOB Under Sea
HARRY POTTER 4 Privet Drive, Little Whinging, Surrey
```You can change behavior of these headers by providing custom HeaderFuncs.
[![asciicast](https://asciinema.org/a/249879.svg)](https://asciinema.org/a/249879)
# Contribution
All contributions are welcome. Raise an Issue or a Pull Request