Skip to content

Commit d483bd7

Browse files
author
Oppodelldog
committed
added HomeConfigDirProvider
1 parent 415c5c2 commit d483bd7

3 files changed

Lines changed: 57 additions & 0 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
WorkingDirProvider(),
1818
ExecutableDirProvider(),
1919
EnvVarFilePathProvider(envVarName),
20+
HomeConfigDirProvider(".config","myapp"),
2021
}
2122

2223
discovery := filediscovery.New(fileLocationProviders)

providers.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"os"
66
"path"
77
"path/filepath"
8+
"os/user"
89
)
910

1011
var workingDirProviderFunc = os.Getwd
@@ -52,3 +53,24 @@ func EnvVarFilePathProvider(envVar string) FileLocationProvider {
5253
return "", fmt.Errorf("env var '%s' not defined", envVar)
5354
}
5455
}
56+
57+
58+
var homeFolderLookupFunc = user.Current
59+
60+
// HomeConfigDirProvider provides the working directory as a possible file location
61+
func HomeConfigDirProvider(subFolders ...string) FileLocationProvider {
62+
63+
return func(fileName string) (string, error) {
64+
usr, err := homeFolderLookupFunc()
65+
if err != nil {
66+
return "", err
67+
}
68+
69+
subfoldersPath := ""
70+
for _, subfolder := range subFolders {
71+
subfoldersPath = path.Join(subfoldersPath, subfolder)
72+
}
73+
74+
return path.Join(usr.HomeDir, subfoldersPath, fileName), nil
75+
}
76+
}

providers_test.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"errors"
1010

1111
"github.com/stretchr/testify/assert"
12+
"os/user"
1213
)
1314

1415
func TestWorkingDirProvider(t *testing.T) {
@@ -102,3 +103,36 @@ func TestEnvVarFilePathProvider_error(t *testing.T) {
102103
assert.Error(t, err)
103104

104105
}
106+
107+
func TestHomeConfigDirProvider(t *testing.T) {
108+
testFileName := "testfile"
109+
110+
subfolder1 := ".config"
111+
subfolder2 := "some-project"
112+
provider := HomeConfigDirProvider(subfolder1, subfolder2)
113+
result, err := provider(testFileName)
114+
if err != nil {
115+
t.Fatalf("Did not expect provider to return an error, but got: %v", err)
116+
}
117+
118+
usr, err := user.Current()
119+
if err != nil {
120+
t.Fatalf("Did not expect user.Current to return an error, but got: %v", err)
121+
}
122+
123+
expectedFilepath := path.Join(usr.HomeDir, subfolder1, subfolder2, testFileName)
124+
assert.Equal(t, expectedFilepath, result)
125+
}
126+
127+
func TestHomeConfigDirProvider_UserLookupReturnsError(t *testing.T) {
128+
129+
errorStub := errors.New("error-stub")
130+
homeFolderLookupFunc = func() (*user.User, error) {
131+
return nil, errorStub
132+
}
133+
134+
provider := HomeConfigDirProvider()
135+
_, err := provider(testFileName)
136+
137+
assert.Exactly(t, errorStub, err)
138+
}

0 commit comments

Comments
 (0)