teks

package module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 20, 2019 License: MIT Imports: 7 Imported by: 1

README

teks : awesome outputs for your commands

Build Status Go Report Card GoDoc

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

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.

package main

import (
	"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 {examples git:(master) ✗ 
			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

Contribution

All contributions are welcome. Raise an Issue or a Pull Request

Documentation

Index

Constants

View Source
const TableFormatKey = "table"

TableFormatKey is the identifier used for table

Variables

View Source
var HeaderFuncs = template.FuncMap{
	"json":       func(s string) string { return s },
	"jsonPretty": func(s string) string { return s },
	"join":       func(s string) string { return s },
}

HeaderFuncs are used to format headers in a table Some of functions in basicFuncs are overridden

Functions

func NewBasicFormatter

func NewBasicFormatter(name string) *template.Template

NewBasicFormatter creates a new template engine with name

Types

type Context

type Context struct {
	// Output is used to write the output
	Output io.Writer
	// Format is used to keep format string
	Format Format
	// contains filtered or unexported fields
}

Context keeps data about a format operation

func NewContext

func NewContext(output io.Writer, format string) *Context

NewContext creates a context with initialized fields

func (*Context) Write

func (ctx *Context) Write(r Renderer, headers interface{}) error

Write writes data using r and headers

type Format

type Format string

Format is an alias for a string used for formatting

func (Format) IsTable

func (f Format) IsTable() bool

IsTable returns true if format string is prefixed with table

type Renderer

type Renderer func(io.Writer, *template.Template) error

Renderer is used to render a particular resource using templates

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL