bradcypert/deckard

View on GitHub
cmd/helpers.go

Summary

Maintainability
A
0 mins
Test Coverage
package cmd

import (
    "fmt"
    "log"

    "github.com/bradcypert/deckard/lib/migrations"
    "github.com/spf13/cobra"
    "github.com/spf13/viper"
)

func configOverwriter(cmd *cobra.Command) {
    overwriteConfigField(cmd, "port")
    overwriteConfigField(cmd, "password")
    overwriteConfigField(cmd, "user")
    overwriteConfigField(cmd, "host")
    overwriteConfigField(cmd, "database")
    overwriteConfigField(cmd, "driver")
    overwriteConfigField(cmd, "sslmode")
}

func overwriteConfigField(cmd *cobra.Command, field string) {
    viperField := fmt.Sprintf("%s.%s", cmdDatabaseConfigSelector, field)
    fmt.Println(cmd.Flags().Lookup(field))
    if err := viper.BindPFlag(viperField, cmd.Flags().Lookup(field)); err != nil {
        log.Printf("Cannot overwrite %s value from config file. %s\n", field, err.Error())
    }
}

func bindVarsFromConfig() {
    if cmdDatabaseConfigSelector != "" {
        cmdDatabasePort = viper.GetInt(cmdDatabaseConfigSelector + ".port")
        cmdDatabasePassword = viper.GetString(cmdDatabaseConfigSelector + ".password")
        cmdDatabaseUser = viper.GetString(cmdDatabaseConfigSelector + ".user")
        cmdDatabaseHost = viper.GetString(cmdDatabaseConfigSelector + ".host")
        cmdDatabaseName = viper.GetString(cmdDatabaseConfigSelector + ".database")
        cmdDatabaseDriver = viper.GetString(cmdDatabaseConfigSelector + ".driver")
        cmdSSLConfig = viper.GetString(cmdDatabaseConfigSelector + ".sslconfig")
    }
}

func addDatabaseFlags(cmd *cobra.Command) {
    addSilentFlag(cmd)

    cmd.Flags().StringVarP(&cmdDatabaseConfigSelector,
        "key",
        "k",
        "",
        "The database key to use from the YAML config provided in the configFile argument.")

    cmd.Flags().StringVarP(&cmdDatabaseHost,
        "host",
        "t",
        "",
        "The host for the database you'd like to apply the migrations to.")

    cmd.Flags().StringVarP(&cmdDatabaseName,
        "database",
        "d",
        "",
        "The database name that you'd like to apply the migrations to")

    cmd.Flags().StringVarP(&cmdDatabaseUser,
        "user",
        "u",
        "",
        "The user you'd like to connect to the database as.")

    cmd.Flags().StringVarP(&cmdDatabasePassword,
        "password",
        "a",
        "",
        "The password for the database user that you're applying migrations as.")

    cmd.Flags().IntVarP(&cmdDatabasePort,
        "port",
        "p",
        0,
        "The port that the database you're targeting runs on.")

    cmd.Flags().StringVarP(&cmdDatabaseDriver,
        "driver",
        "r",
        "",
        "The database driver for connecting to the database. Valid options are: [mysql, postgres]")
    cmd.Flags().StringVarP(&cmdSSLConfig,
        "sslconfig",
        "z",
        "",
        "The config's SSL option. Postgres examples: disable, require")
}

func addSilentFlag(cmd *cobra.Command) {
    cmd.Flags().BoolVar(&cmdIsSilent,
        "silent",
        false,
        "Supress non-fatal log messages")
}

func ReverseQuerySlice(a []migrations.Query) []migrations.Query {
    for i := len(a)/2 - 1; i >= 0; i-- {
        opp := len(a) - 1 - i
        a[i], a[opp] = a[opp], a[i]
    }
    return a
}