Move the Afero fs to the Viper type And make a exported setter for it.
diff --git a/util.go b/util.go index 6b34e14..fe6cb45 100644 --- a/util.go +++ b/util.go
@@ -77,7 +77,7 @@ // Check if File / Directory Exists func exists(path string) (bool, error) { - _, err := fs.Stat(path) + _, err := v.fs.Stat(path) if err == nil { return true, nil }
diff --git a/viper.go b/viper.go index e39a564..cdf2113 100644 --- a/viper.go +++ b/viper.go
@@ -39,11 +39,9 @@ ) var v *Viper -var fs afero.Fs func init() { v = New() - fs = afero.NewOsFs() } type remoteConfigFactory interface { @@ -134,6 +132,9 @@ // A set of paths to look for the config file in configPaths []string + // The filesystem to read config from. + fs afero.Fs + // A set of remote providers to search for the configuration remoteProviders []*defaultRemoteProvider @@ -163,6 +164,7 @@ v := new(Viper) v.keyDelim = "." v.configName = "config" + v.fs = afero.NewOsFs() v.config = make(map[string]interface{}) v.override = make(map[string]interface{}) v.defaults = make(map[string]interface{}) @@ -938,7 +940,7 @@ return UnsupportedConfigError(v.getConfigType()) } - file, err := afero.ReadFile(fs, v.getConfigFile()) + file, err := afero.ReadFile(v.fs, v.getConfigFile()) if err != nil { return err } @@ -956,7 +958,7 @@ return UnsupportedConfigError(v.getConfigType()) } - file, err := afero.ReadFile(fs, v.getConfigFile()) + file, err := afero.ReadFile(v.fs, v.getConfigFile()) if err != nil { return err } @@ -1210,6 +1212,12 @@ return m } +// Se the filesystem to use to read configuration. +func SetFs(fs afero.Fs) { v.SetFs(fs) } +func (v *Viper) SetFs(fs afero.Fs) { + v.fs = fs +} + // Name for the config file. // Does not include extension. func SetConfigName(in string) { v.SetConfigName(in) }