Skip to content

Commit

Permalink
Extract outputs into smaller interfaces
Browse files Browse the repository at this point in the history
  • Loading branch information
bryanl committed Dec 12, 2015
1 parent a78b855 commit fa20cf6
Show file tree
Hide file tree
Showing 17 changed files with 415 additions and 340 deletions.
2 changes: 1 addition & 1 deletion commands/account.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,5 @@ func RunAccountGet(ns string, config doit.Config, out io.Writer, args []string)
return err
}

return doit.DisplayOutput(a, out)
return displayOutput(&account{Account: a}, out)
}
4 changes: 2 additions & 2 deletions commands/actions.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ func RunCmdActionList(ns string, config doit.Config, out io.Writer, args []strin
list[i] = si[i].(godo.Action)
}

return doit.DisplayOutput(list, out)
return displayOutput(&action{actions: list}, out)
}

// RunCmdActionGet runs action get.
Expand All @@ -74,5 +74,5 @@ func RunCmdActionGet(ns string, config doit.Config, out io.Writer, args []string
return err
}

return doit.DisplayOutput(a, out)
return displayOutput(&action{actions: actions{*a}}, out)
}
53 changes: 53 additions & 0 deletions commands/commands.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package commands

import (
"bytes"
"encoding/json"
"fmt"
"io"

"github.com/bryanl/doit"
)

type displayer interface {
JSON(io.Writer) error
String(io.Writer) error
}

// displayOutput displays an object or group of objects to a user. It
// checks to see what the output type should be.
func displayOutput(item displayer, out io.Writer) error {
output, err := doit.DoitConfig.GetString(doit.NSRoot, "output")
if err != nil {
return nil
}

if output == "" {
output = "text"
}

switch output {
case "json":
return item.JSON(out)
case "text":
return item.String(out)
default:
return fmt.Errorf("unknown output type")
}
}

func writeJSON(item interface{}, w io.Writer) error {
b, err := json.Marshal(item)
if err != nil {
return err
}

var out bytes.Buffer
err = json.Indent(&out, b, "", " ")
if err != nil {
return err
}
_, err = out.WriteTo(w)

return err
}
12 changes: 6 additions & 6 deletions commands/domains.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ func RunDomainCreate(ns string, config doit.Config, out io.Writer, args []string
return err
}

return doit.DisplayOutput(d, out)
return displayOutput(&domain{domains: domains{*d}}, out)
}

// RunDomainList runs domain create.
Expand Down Expand Up @@ -122,7 +122,7 @@ func RunDomainList(ns string, config doit.Config, out io.Writer, args []string)
list[i] = si[i].(godo.Domain)
}

return doit.DisplayOutput(list, out)
return displayOutput(&domain{domains: list}, out)
}

// RunDomainGet retrieves a domain by name.
Expand All @@ -143,7 +143,7 @@ func RunDomainGet(ns string, config doit.Config, out io.Writer, args []string) e
return err
}

return doit.DisplayOutput(d, out)
return displayOutput(&domain{domains: domains{*d}}, out)
}

// RunDomainDelete deletes a domain by name.
Expand Down Expand Up @@ -200,7 +200,7 @@ func RunRecordList(ns string, config doit.Config, out io.Writer, args []string)
list[i] = si[i].(godo.DomainRecord)
}

return doit.DisplayOutput(list, out)
return displayOutput(&domainRecord{domainRecords: list}, out)
}

// RunRecordCreate creates a domain record.
Expand Down Expand Up @@ -260,7 +260,7 @@ func RunRecordCreate(ns string, config doit.Config, out io.Writer, args []string
return err
}

return doit.DisplayOutput(r, out)
return displayOutput(&domainRecord{domainRecords{*r}}, out)
}

// RunRecordDelete deletes a domain record.
Expand Down Expand Up @@ -339,5 +339,5 @@ func RunRecordUpdate(ns string, config doit.Config, out io.Writer, args []string
return err
}

return doit.DisplayOutput(r, out)
return displayOutput(&domainRecord{domainRecords{*r}}, out)
}
2 changes: 1 addition & 1 deletion commands/droplet_actions.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ func performAction(out io.Writer, config doit.Config, fn actionFn) error {
return err
}

return doit.DisplayOutput(a, out)
return displayOutput(&action{actions{*a}}, out)
}

// DropletAction creates the droplet-action command.
Expand Down
22 changes: 11 additions & 11 deletions commands/droplets.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ func RunDropletActions(ns string, config doit.Config, out io.Writer, args []stri
list[i] = si[i].(godo.Action)
}

return doit.DisplayOutput(list, out)
return displayOutput(&action{actions: list}, out)
}

// RunDropletBackups returns a list of backup images for a droplet.
Expand Down Expand Up @@ -148,7 +148,7 @@ func RunDropletBackups(ns string, config doit.Config, out io.Writer, args []stri
list[i] = si[i].(godo.Image)
}

return doit.DisplayOutput(list, out)
return displayOutput(&image{images: list}, out)
}

// RunDropletCreate creates a droplet.
Expand Down Expand Up @@ -257,10 +257,10 @@ func RunDropletCreate(ns string, config doit.Config, out io.Writer, args []strin
r, _ = getDropletByID(client, r.ID)
}

doit.DisplayOutput(r, out)
displayOutput(&droplet{droplets{*r}}, out)
}()
} else {
doit.DisplayOutput(r, out)
displayOutput(&droplet{droplets{*r}}, out)
}
}

Expand Down Expand Up @@ -297,7 +297,7 @@ func createDroplet(client *godo.Client, dcr *godo.DropletCreateRequest, wait boo
}
}

return doit.DisplayOutput(r, out)
return displayOutput(&droplet{droplets{*r}}, out)
}

func extractSSHKeys(keys []string) []godo.DropletCreateSSHKey {
Expand Down Expand Up @@ -363,12 +363,12 @@ func RunDropletGet(ns string, config doit.Config, out io.Writer, args []string)

client := config.GetGodoClient()

droplet, err := getDropletByID(client, id)
d, err := getDropletByID(client, id)
if err != nil {
return err
}

return doit.DisplayOutput(droplet, out)
return displayOutput(&droplet{droplets{*d}}, out)
}

// RunDropletKernels returns a list of available kernels for a droplet.
Expand Down Expand Up @@ -403,7 +403,7 @@ func RunDropletKernels(ns string, config doit.Config, out io.Writer, args []stri
list[i] = si[i].(godo.Kernel)
}

return doit.DisplayOutput(list, out)
return displayOutput(&kernel{kernels: list}, out)
}

// RunDropletList returns a list of droplets.
Expand Down Expand Up @@ -434,7 +434,7 @@ func RunDropletList(ns string, config doit.Config, out io.Writer, args []string)
list[i] = si[i].(godo.Droplet)
}

return doit.DisplayOutput(list, out)
return displayOutput(&droplet{droplets: list}, out)
}

// RunDropletNeighbors returns a list of droplet neighbors.
Expand All @@ -450,7 +450,7 @@ func RunDropletNeighbors(ns string, config doit.Config, out io.Writer, args []st
return err
}

return doit.DisplayOutput(list, out)
return displayOutput(&droplet{droplets: list}, out)
}

// RunDropletSnapshots returns a list of available kernels for a droplet.
Expand Down Expand Up @@ -485,7 +485,7 @@ func RunDropletSnapshots(ns string, config doit.Config, out io.Writer, args []st
list[i] = si[i].(godo.Image)
}

return doit.DisplayOutput(list, out)
return displayOutput(&image{images: list}, out)
}

func getDropletByID(client *godo.Client, id int) (*godo.Droplet, error) {
Expand Down
12 changes: 6 additions & 6 deletions commands/floating_ip_actions.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,12 @@ func RunFloatingIPActionsGet(ns string, config doit.Config, out io.Writer, args
return err
}

action, _, err := client.FloatingIPActions.Get(ip, actionID)
a, _, err := client.FloatingIPActions.Get(ip, actionID)
if err != nil {
return err
}

return doit.DisplayOutput(action, out)
return displayOutput(&action{actions: actions{*a}}, out)
}

// RunFloatingIPActionsAssign assigns a floating IP to a droplet.
Expand All @@ -71,11 +71,11 @@ func RunFloatingIPActionsAssign(ns string, config doit.Config, out io.Writer, ar
return err
}

action, _, err := client.FloatingIPActions.Assign(ip, dropletID)
a, _, err := client.FloatingIPActions.Assign(ip, dropletID)
if err != nil {
checkErr(fmt.Errorf("could not assign IP to droplet: %v", err))
}
return doit.DisplayOutput(action, out)
return displayOutput(&action{actions: actions{*a}}, out)
}

// RunFloatingIPActionsUnassign unassigns a floating IP to a droplet.
Expand All @@ -88,9 +88,9 @@ func RunFloatingIPActionsUnassign(ns string, config doit.Config, out io.Writer,

client := config.GetGodoClient()

action, _, err := client.FloatingIPActions.Unassign(ip)
a, _, err := client.FloatingIPActions.Unassign(ip)
if err != nil {
checkErr(fmt.Errorf("could not unassign IP to droplet: %v", err))
}
return doit.DisplayOutput(action, out)
return displayOutput(&action{actions: actions{*a}}, out)
}
6 changes: 3 additions & 3 deletions commands/floating_ips.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ func RunFloatingIPCreate(ns string, config doit.Config, out io.Writer, args []st
if err != nil {
return err
}
return doit.DisplayOutput(ip, out)
return displayOutput(&floatingIP{floatingIPs: floatingIPs{*ip}}, out)
}

// RunFloatingIPGet retrieves a floating IP's details.
Expand All @@ -79,7 +79,7 @@ func RunFloatingIPGet(ns string, config doit.Config, out io.Writer, args []strin
return err
}

return doit.DisplayOutput(d, out)
return displayOutput(&floatingIP{floatingIPs: floatingIPs{*d}}, out)
}

// RunFloatingIPDelete runs floating IP delete.
Expand Down Expand Up @@ -124,5 +124,5 @@ func RunFloatingIPList(ns string, config doit.Config, out io.Writer, args []stri
list[i] = si[i].(godo.FloatingIP)
}

return doit.DisplayOutput(list, out)
return displayOutput(&floatingIP{floatingIPs: list}, out)
}
8 changes: 4 additions & 4 deletions commands/image_actions.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,12 @@ func RunImageActionsGet(ns string, config doit.Config, out io.Writer, args []str
return err
}

action, _, err := client.ImageActions.Get(imageID, actionID)
a, _, err := client.ImageActions.Get(imageID, actionID)
if err != nil {
return err
}

return doit.DisplayOutput(action, out)
return displayOutput(&action{actions: actions{*a}}, out)
}

// RunImageActionsTransfer an image.
Expand All @@ -79,10 +79,10 @@ func RunImageActionsTransfer(ns string, config doit.Config, out io.Writer, args
"region": region,
}

action, _, err := client.ImageActions.Transfer(id, req)
a, _, err := client.ImageActions.Transfer(id, req)
if err != nil {
checkErr(fmt.Errorf("could not transfer image: %v", err))
}

return doit.DisplayOutput(action, out)
return displayOutput(&action{actions: actions{*a}}, out)
}
14 changes: 7 additions & 7 deletions commands/images.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,14 +87,14 @@ func RunImagesGet(ns string, config doit.Config, out io.Writer, args []string) e

rawID := args[0]

var image *godo.Image
var i *godo.Image
var err error

if id, cerr := strconv.Atoi(rawID); cerr == nil {
image, _, err = client.Images.GetByID(id)
i, _, err = client.Images.GetByID(id)
} else {
if len(rawID) > 0 {
image, _, err = client.Images.GetBySlug(rawID)
i, _, err = client.Images.GetBySlug(rawID)
} else {
err = fmt.Errorf("image identifier is required")
}
Expand All @@ -104,7 +104,7 @@ func RunImagesGet(ns string, config doit.Config, out io.Writer, args []string) e
return err
}

return doit.DisplayOutput(image, out)
return displayOutput(&image{images: images{*i}}, out)
}

// RunImagesUpdate updates an image.
Expand All @@ -126,12 +126,12 @@ func RunImagesUpdate(ns string, config doit.Config, out io.Writer, args []string
Name: name,
}

image, _, err := client.Images.Update(id, req)
i, _, err := client.Images.Update(id, req)
if err != nil {
return err
}

return doit.DisplayOutput(image, out)
return displayOutput(&image{images: images{*i}}, out)
}

// RunImagesDelete deletes an image.
Expand Down Expand Up @@ -185,5 +185,5 @@ func listImages(ns string, config doit.Config, out io.Writer, lFn listFn) error
list[i] = si[i].(godo.Image)
}

return doit.DisplayOutput(list, out)
return displayOutput(&image{images: list}, out)
}
Loading

0 comments on commit fa20cf6

Please sign in to comment.