-
Notifications
You must be signed in to change notification settings - Fork 3
/
container.go
86 lines (75 loc) · 2.09 KB
/
container.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package action
import (
"github.com/jbrunton/gflows/env"
"github.com/jbrunton/gflows/io"
"github.com/jbrunton/gflows/io/content"
"github.com/jbrunton/gflows/workflow"
"github.com/jbrunton/gflows/config"
)
type Container struct {
*content.Container
context *config.GFlowsContext
env *env.GFlowsEnv
installer *env.GFlowsLibInstaller
workflowManager *WorkflowManager
}
func (container *Container) Context() *config.GFlowsContext {
return container.context
}
func (container *Container) WorkflowManager() *WorkflowManager {
if container.workflowManager == nil {
templateEngine := CreateWorkflowEngine(
container.FileSystem(),
container.Context(),
container.ContentWriter(),
container.Environment(),
container.Logger())
container.workflowManager = NewWorkflowManager(
container.FileSystem(),
container.Logger(),
container.Styles(),
container.Validator(),
container.Context(),
container.ContentWriter(),
templateEngine)
}
return container.workflowManager
}
func (container *Container) Environment() *env.GFlowsEnv {
if container.env == nil {
container.env = env.NewGFlowsEnv(
container.FileSystem(),
container.Installer(),
container.Context(),
container.Logger(),
)
}
return container.env
}
func (container *Container) Installer() *env.GFlowsLibInstaller {
if container.installer == nil {
container.installer = env.NewGFlowsLibInstaller(
container.FileSystem(),
container.ContentReader(),
container.ContentWriter(),
container.Logger(),
container.RepoManager(),
)
}
return container.installer
}
func (container *Container) GitAdapter() io.GitAdapter {
return io.NewGoGitAdapter()
}
func (container *Container) Validator() *workflow.Validator {
return workflow.NewValidator(container.FileSystem(), container.Context())
}
func (container *Container) Watcher() *Watcher {
return NewWatcher(container.WorkflowManager(), container.Context())
}
func NewContainer(parentContainer *content.Container, context *config.GFlowsContext) *Container {
return &Container{
Container: parentContainer,
context: context,
}
}