diff --git a/hook/hook.go b/hook/hook.go new file mode 100644 index 0000000..21eac7b --- /dev/null +++ b/hook/hook.go @@ -0,0 +1,31 @@ +package hook + +type EventHook struct { + events map[string][]func() +} + +func NewEventHook() EventHook { + return EventHook{make(map[string][]func())} +} + +func (e *EventHook) AddHook(eventName string, handler func()) { + + hooks, ok := e.events[eventName] + if !ok { + e.events[eventName] = []func(){handler} + } + + e.events[eventName] = append(hooks, handler) +} + +func (e *EventHook) RunHooks(eventName string) { + + hooks, ok := e.events[eventName] + if !ok { + return + } + + for _, hook := range hooks { + hook() + } +} diff --git a/hook/hook_test.go b/hook/hook_test.go new file mode 100644 index 0000000..a5dbf29 --- /dev/null +++ b/hook/hook_test.go @@ -0,0 +1,31 @@ +package hook + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestRunHook(t *testing.T) { + + h := NewEventHook() + i := 0 + + h.AddHook("sample", func() { + i++ + }) + + h.AddHook("sample", func() { + i++ + }) + + assert.Equal(t, i, 0) + + h.RunHooks("x") + + assert.Equal(t, i, 0) + + h.RunHooks("sample") + + assert.Equal(t, i, 2) +}