Skip to content

Commit 577555d

Browse files
authored
Merge pull request #43 from tinh-tinh/feat/ren/42-add-for-root-module
feat: add for roor module to store common config
2 parents 41180c9 + 41411cc commit 577555d

2 files changed

Lines changed: 70 additions & 2 deletions

File tree

module.go

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,20 @@ import (
88

99
const QUEUE core.Provide = "QUEUE"
1010

11+
func ForRoot(opt *Options) core.Modules {
12+
return func(module core.Module) core.Module {
13+
queueModule := module.New(core.NewModuleOptions{})
14+
15+
queueModule.NewProvider(core.ProviderOptions{
16+
Name: QUEUE,
17+
Value: opt,
18+
})
19+
queueModule.Export(QUEUE)
20+
21+
return queueModule
22+
}
23+
}
24+
1125
// getQueueName generates a unique name for a queue provider.
1226
//
1327
// The name is in the form "<name>Queue".
@@ -18,13 +32,24 @@ func getQueueName(name string) core.Provide {
1832
// Register registers a new queue module with the given name and options. The
1933
// registered module creates a new queue with the given name and options, and
2034
// exports the queue under the name "<name>Queue".
21-
func Register(name string, opt *Options) core.Modules {
35+
func Register(name string, opts ...*Options) core.Modules {
36+
var option *Options
37+
if len(opts) > 0 {
38+
option = opts[0]
39+
}
2240
return func(module core.Module) core.Module {
41+
if option == nil {
42+
defaultOptions, ok := module.Ref(QUEUE).(*Options)
43+
if !ok || defaultOptions == nil {
44+
panic("not config option for queue")
45+
}
46+
option = defaultOptions
47+
}
2348
queueModule := module.New(core.NewModuleOptions{})
2449

2550
queueModule.NewProvider(core.ProviderOptions{
2651
Name: getQueueName(name),
27-
Value: New(name, opt),
52+
Value: New(name, option),
2853
})
2954
queueModule.Export(getQueueName(name))
3055

module_test.go

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,46 @@ func Test_Module(t *testing.T) {
2828
queue := queue.Inject(module, "jobs")
2929
require.NotNil(t, queue)
3030
}
31+
32+
func Test_Panic(t *testing.T) {
33+
require.Panics(t, func() {
34+
module := core.NewModule(core.NewModuleOptions{
35+
Imports: []core.Modules{
36+
queue.Register("jobs"),
37+
},
38+
})
39+
40+
require.NotNil(t, module)
41+
})
42+
}
43+
44+
func Test_DefaultOptions(t *testing.T) {
45+
module := core.NewModule(core.NewModuleOptions{
46+
Imports: []core.Modules{
47+
queue.ForRoot(&queue.Options{
48+
Connect: &redis.Options{
49+
Addr: "localhost:6379",
50+
DB: 0,
51+
Password: "",
52+
},
53+
Workers: 6,
54+
RetryFailures: 3,
55+
}),
56+
queue.Register("video"),
57+
queue.Register("media", &queue.Options{
58+
Connect: &redis.Options{
59+
Addr: "localhost:6379",
60+
DB: 0,
61+
Password: "",
62+
},
63+
Workers: 3,
64+
}),
65+
},
66+
})
67+
68+
videoQueue := queue.Inject(module, "video")
69+
require.NotNil(t, videoQueue)
70+
71+
mediaQueue := queue.Inject(module, "media")
72+
require.NotNil(t, mediaQueue)
73+
}

0 commit comments

Comments
 (0)