18cb9257f9
Previously, to fetch data out of the `*config.Configuration` type, a reference to a `Fetcher` was used, a-la: ``` cfg.Env.Get(...) ``` This is quite convenient, however, it forces the LFS client to implement several methods more than once. Consider the interface: ``` type Fetcher interface { Get(key string) (val string) Bool(key string, def bool) (val bool) // et. al. } ``` In order to return typed information from a configuration instance, _each_ `Fetcher` must implement its own `N` methods for `Int`, `Bool`, etc. To remedy this, the `Environment` type was introduced. It instead _has_ a `Fetcher`, and defines its own type conversions, like so: ``` type Environment struct { f Fetcher } func (e *Environment) Bool(key string, def bool) (val bool) { } func (e *Environment) Int(key string, def int) (val int) { } // et. al. ``` Now, the `config.Configuration` type holds a reference to an `Environment`, and all type conversion methods are defined only once, saving time, and enforcing consistency across multiple sources.
12 lines
191 B
Go
12 lines
191 B
Go
package config_test
|
|
|
|
import "github.com/stretchr/testify/mock"
|
|
|
|
type MockFetcher struct {
|
|
mock.Mock
|
|
}
|
|
|
|
func (m *MockFetcher) Get(key string) (val string) {
|
|
return m.Called(key).String(0)
|
|
}
|