Skip to content
This repository has been archived by the owner on May 21, 2024. It is now read-only.

Commit

Permalink
add EnvVar struct + tidy up
Browse files Browse the repository at this point in the history
  • Loading branch information
imantung committed Nov 12, 2019
1 parent a577407 commit 60473d6
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 88 deletions.
18 changes: 18 additions & 0 deletions EXPERIMENTAL/typienv/env_var.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package typienv

import "os"

// EnvVar environment variable
type EnvVar struct {
Name string
Default string
}

// Value of environment variable
func (e EnvVar) Value() (value string) {
value = os.Getenv(e.Name)
if value == "" {
value = e.Default
}
return value
}
25 changes: 25 additions & 0 deletions EXPERIMENTAL/typienv/env_var_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package typienv_test

import (
"os"
"testing"

"github.com/stretchr/testify/require"

"github.com/typical-go/typical-rest-server/EXPERIMENTAL/typienv"
)

func TestEnvVar(t *testing.T) {
os.Setenv("TEST_2", "value-2")
defer os.Clearenv()
testcases := []struct {
envVar typienv.EnvVar
value string
}{
{typienv.EnvVar{"TEST_1", "default-1"}, "default-1"},
{typienv.EnvVar{"TEST_2", "default-2"}, "value-2"},
}
for i, tt := range testcases {
require.Equal(t, tt.value, tt.envVar.Value(), i)
}
}
107 changes: 19 additions & 88 deletions EXPERIMENTAL/typienv/typienv.go
Original file line number Diff line number Diff line change
@@ -1,28 +1,15 @@
package typienv

import (
"os"
)

// TODO: create struct for envkey and default value
const (
envApp = "TYPICAL_APP"
envBin = "TYPICAL_BIN"
envCmd = "TYPICAL_CMD"
envMock = "TYPICAL_MOCK"
envRelease = "TYPICAL_RELEASE"
envBuildTool = "TYPICAL_BUILD_TOOL"
envDependency = "TYPICAL_DEPENDENCY"

defaultBin = "bin"
defaultCmd = "cmd"
defaultMock = "mock"
defaultApp = "app"
defaultRelease = "release"
defaultBuildTool = "build-tool"
defaultDependency = "dependency"
defaultMetadata = ".typical-metadata"
defaultReadme = "README.md"
var (
appVar = EnvVar{"TYPICAL_APP", "app"}
binVar = EnvVar{"TYPICAL_BIN", "bin"}
cmdVar = EnvVar{"TYPICAL_CMD", "cmd"}
mockVar = EnvVar{"TYPICAL_MOCK", "mock"}
releaseVar = EnvVar{"TYPICAL_RELEASE", "release"}
buildToolVar = EnvVar{"TYPICAL_BUILD_TOOL", "build-tool"}
dependencyVar = EnvVar{"TYPICAL_DEPENDENCY", "dependency"}
metadataVar = EnvVar{"TYPICAL_METADATA", ".typical-metadata"}
readmeVar = EnvVar{"TYPICAL_README", "README.md"}
)

var (
Expand All @@ -44,12 +31,12 @@ type applicationFolder struct {
}

func init() {
AppName = app()
cmd := cmd()
Bin = bin()
Metadata = defaultMetadata
buildTool := buildTool()
dependency := dependency()
AppName = appVar.Value()
cmd := cmdVar.Value()
Bin = binVar.Value()
Metadata = metadataVar.Value()
buildTool := buildToolVar.Value()
dependency := dependencyVar.Value()
App = &applicationFolder{
Package: "main",
SrcPath: cmd + "/" + AppName,
Expand All @@ -64,63 +51,7 @@ func init() {
Package: dependency,
SrcPath: cmd + "/internal/" + dependency,
}
Mock = mock()
Release = release()
Readme = defaultReadme
}

func cmd() string {
cmd := os.Getenv(envCmd)
if cmd == "" {
cmd = defaultCmd
}
return cmd
}

func bin() string {
bin := os.Getenv(envBin)
if bin == "" {
bin = defaultBin
}
return bin
}

func buildTool() string {
devTool := os.Getenv(envBuildTool)
if devTool == "" {
devTool = defaultBuildTool
}
return devTool
}

func app() string {
app := os.Getenv(envApp)
if app == "" {
app = defaultApp
}
return app
}

func mock() string {
mock := os.Getenv(envMock)
if mock == "" {
mock = defaultMock
}
return mock
}

func release() string {
release := os.Getenv(envApp)
if release == "" {
release = defaultRelease
}
return release
}

func dependency() string {
dep := os.Getenv(envDependency)
if dep == "" {
dep = defaultDependency
}
return dep
Mock = mockVar.Value()
Release = releaseVar.Value()
Readme = readmeVar.Value()
}

0 comments on commit 60473d6

Please sign in to comment.