package runtime import "github.com/sirupsen/logrus" // Config is a runtime behaviour modifier. type Config struct { Offline bool // Whether or not Abra should prefer local / offline access RecipeExists bool // Whether or not Abra should ensure the recipe is locally cloned RecipeLatest bool // Whether or not Abra should ensure the recipe has the latest commit } // Option is a runtime configuration option. type Option func(c *Config) // New creates a new runtime configuration. func New(opts ...Option) *Config { conf := &Config{ Offline: false, RecipeExists: true, RecipeLatest: true, } for _, optFunc := range opts { optFunc(conf) } return conf } // WithOffline ensures Abra attempts to prefer local file system and offline // access. func WithOffline(offline bool) Option { return func(c *Config) { if offline { logrus.Debugf("runtime config: attempting to run in offline mode") } c.Offline = offline } } // WithEnsureRecipeExists ensures recipe exists locally. func WithEnsureRecipeExists(exists bool) Option { return func(c *Config) { if exists { logrus.Debugf("runtime config: ensuring recipe exists") } c.RecipeExists = exists } } // WithEnsureRecipeUpToDate ensures recipe is synced with the remote. func WithEnsureRecipeUpToDate(upToDate bool) Option { return func(c *Config) { if upToDate { logrus.Debugf("runtime config: ensuring recipe is synced with remote") } c.RecipeLatest = upToDate } }