diff options
author | Chris <ccbrown112@gmail.com> | 2017-10-16 08:09:43 -0700 |
---|---|---|
committer | Joram Wilander <jwawilander@gmail.com> | 2017-10-16 11:09:43 -0400 |
commit | 34285d8cca93fc0f473636e78680fade03f26bda (patch) | |
tree | b8274ed8d17e5dc63ac36aadac7e7299635d2b43 /app/options.go | |
parent | adb2b1d6eddabea803af8fa6cf53a75c98694427 (diff) | |
download | chat-34285d8cca93fc0f473636e78680fade03f26bda.tar.gz chat-34285d8cca93fc0f473636e78680fade03f26bda.tar.bz2 chat-34285d8cca93fc0f473636e78680fade03f26bda.zip |
parallel tests (#7629)
Diffstat (limited to 'app/options.go')
-rw-r--r-- | app/options.go | 38 |
1 files changed, 33 insertions, 5 deletions
diff --git a/app/options.go b/app/options.go index e5ac85706..121bbbf80 100644 --- a/app/options.go +++ b/app/options.go @@ -4,25 +4,53 @@ package app import ( + "github.com/mattermost/mattermost-server/model" "github.com/mattermost/mattermost-server/store" ) type Option func(a *App) +// By default, the app will use a global configuration file. This allows you to override all or part +// of that configuration. +// +// The override parameter must be a *model.Config, func(*model.Config), or func(*model.Config) *model.Config. +// +// XXX: Most code will not respect this at the moment. (We need to eliminate utils.Cfg first.) +func ConfigOverride(override interface{}) Option { + return func(a *App) { + switch o := override.(type) { + case *model.Config: + a.configOverride = func(*model.Config) *model.Config { + return o + } + case func(*model.Config): + a.configOverride = func(cfg *model.Config) *model.Config { + ret := *cfg + o(&ret) + return &ret + } + case func(*model.Config) *model.Config: + a.configOverride = o + default: + panic("invalid ConfigOverride") + } + } +} + // By default, the app will use the store specified by the configuration. This allows you to // construct an app with a different store. // -// The storeOrFactory parameter must be either a store.Store or func(App) store.Store. -func StoreOverride(storeOrFactory interface{}) Option { +// The override parameter must be either a store.Store or func(App) store.Store. +func StoreOverride(override interface{}) Option { return func(a *App) { - switch s := storeOrFactory.(type) { + switch o := override.(type) { case store.Store: a.newStore = func() store.Store { - return s + return o } case func(*App) store.Store: a.newStore = func() store.Store { - return s(a) + return o(a) } default: panic("invalid StoreOverride") |