1
0
mirror of https://github.com/pocketbase/pocketbase.git synced 2025-02-14 00:42:10 +02:00

added support for passing more than one id in the Hook.Unbind method for consistency with the router

This commit is contained in:
Gani Georgiev 2024-11-26 11:52:26 +02:00
parent 0ac4a388c0
commit f1b199b35c
3 changed files with 17 additions and 9 deletions

View File

@ -1,3 +1,8 @@
## (WIP)
- Added support for passing more than one id in the `Hook.Unbind` method for consistency with the router.
## v0.23.1
- Added `RequestEvent.Blob(status, contentType, bytes)` response write helper ([#5940](https://github.com/pocketbase/pocketbase/discussions/5940)).

View File

@ -112,15 +112,17 @@ func (h *Hook[T]) BindFunc(fn func(e T) error) string {
return h.Bind(&Handler[T]{Func: fn})
}
// Unbind removes a single hook handler by its id.
func (h *Hook[T]) Unbind(id string) {
// Unbind removes one or many hook handler by their id.
func (h *Hook[T]) Unbind(idsToRemove ...string) {
h.mu.Lock()
defer h.mu.Unlock()
for i := len(h.handlers) - 1; i >= 0; i-- {
if h.handlers[i].Id == id {
h.handlers = append(h.handlers[:i], h.handlers[i+1:]...)
break // for now stop on the first occurrence since we don't allow handlers with duplicated ids
for _, id := range idsToRemove {
for i := len(h.handlers) - 1; i >= 0; i-- {
if h.handlers[i].Id == id {
h.handlers = append(h.handlers[:i], h.handlers[i+1:]...)
break // for now stop on the first occurrence since we don't allow handlers with duplicated ids
}
}
}
}

View File

@ -70,6 +70,7 @@ func TestHookUnbind(t *testing.T) {
calls := ""
id0 := h.BindFunc(func(e *Event) error { calls += "0"; return e.Next() })
id1 := h.BindFunc(func(e *Event) error { calls += "1"; return e.Next() })
h.BindFunc(func(e *Event) error { calls += "2"; return e.Next() })
h.Bind(&Handler[*Event]{
@ -78,11 +79,11 @@ func TestHookUnbind(t *testing.T) {
h.Unbind("missing") // should do nothing and not panic
if total := len(h.handlers); total != 3 {
t.Fatalf("Expected %d handlers, got %d", 3, total)
if total := len(h.handlers); total != 4 {
t.Fatalf("Expected %d handlers, got %d", 4, total)
}
h.Unbind(id1)
h.Unbind(id1, id0)
if total := len(h.handlers); total != 2 {
t.Fatalf("Expected %d handlers, got %d", 2, total)