Skip to content

Commit 9981cd0

Browse files
authored
feat: add predicates for each specific type of event (#151)
1 parent ab7b9f3 commit 9981cd0

File tree

2 files changed

+96
-0
lines changed

2 files changed

+96
-0
lines changed

pkg/controller/predicates.go

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,3 +232,63 @@ func ExactNamePredicate(name, namespace string) predicate.Predicate {
232232
return obj.GetName() == name && (namespace == "*" || obj.GetNamespace() == namespace)
233233
})
234234
}
235+
236+
/////////////////////////////
237+
/// EVENT TYPE PREDICATES ///
238+
/////////////////////////////
239+
240+
type EventType string
241+
242+
const (
243+
CreateEvent EventType = "create"
244+
UpdateEvent EventType = "update"
245+
DeleteEvent EventType = "delete"
246+
GenericEvent EventType = "generic"
247+
)
248+
249+
type eventTypePredicate struct {
250+
eventType EventType
251+
}
252+
253+
var _ predicate.Predicate = eventTypePredicate{}
254+
255+
func (e eventTypePredicate) Create(_ event.TypedCreateEvent[client.Object]) bool {
256+
return e.eventType == CreateEvent
257+
}
258+
259+
func (e eventTypePredicate) Delete(_ event.TypedDeleteEvent[client.Object]) bool {
260+
return e.eventType == DeleteEvent
261+
}
262+
263+
func (e eventTypePredicate) Update(_ event.TypedUpdateEvent[client.Object]) bool {
264+
return e.eventType == UpdateEvent
265+
}
266+
267+
func (e eventTypePredicate) Generic(_ event.TypedGenericEvent[client.Object]) bool {
268+
return e.eventType == GenericEvent
269+
}
270+
271+
// OnCreatePredicate returns a predicate that reacts only to create events.
272+
func OnCreatePredicate() predicate.Predicate {
273+
return OnEventTypePredicate(CreateEvent)
274+
}
275+
276+
// OnUpdatePredicate returns a predicate that reacts only to update events.
277+
func OnUpdatePredicate() predicate.Predicate {
278+
return OnEventTypePredicate(UpdateEvent)
279+
}
280+
281+
// OnDeletePredicate returns a predicate that reacts only to delete events.
282+
func OnDeletePredicate() predicate.Predicate {
283+
return OnEventTypePredicate(DeleteEvent)
284+
}
285+
286+
// OnGenericPredicate returns a predicate that reacts only to generic events.
287+
func OnGenericPredicate() predicate.Predicate {
288+
return OnEventTypePredicate(GenericEvent)
289+
}
290+
291+
// OnEventTypePredicate returns a predicate that reacts only to events of the specified type.
292+
func OnEventTypePredicate(eventType EventType) predicate.Predicate {
293+
return eventTypePredicate{eventType: eventType}
294+
}

pkg/controller/predicates_test.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,42 @@ var _ = Describe("Predicates", func() {
253253

254254
})
255255

256+
Context("Event Types", func() {
257+
258+
It("should match only create events", func() {
259+
p := ctrlutils.OnCreatePredicate()
260+
Expect(p.Create(event.TypedCreateEvent[client.Object]{})).To(BeTrue())
261+
Expect(p.Update(event.TypedUpdateEvent[client.Object]{})).To(BeFalse())
262+
Expect(p.Delete(event.TypedDeleteEvent[client.Object]{})).To(BeFalse())
263+
Expect(p.Generic(event.GenericEvent{})).To(BeFalse())
264+
})
265+
266+
It("should match only update events", func() {
267+
p := ctrlutils.OnUpdatePredicate()
268+
Expect(p.Create(event.TypedCreateEvent[client.Object]{})).To(BeFalse())
269+
Expect(p.Update(event.TypedUpdateEvent[client.Object]{})).To(BeTrue())
270+
Expect(p.Delete(event.TypedDeleteEvent[client.Object]{})).To(BeFalse())
271+
Expect(p.Generic(event.GenericEvent{})).To(BeFalse())
272+
})
273+
274+
It("should match only delete events", func() {
275+
p := ctrlutils.OnDeletePredicate()
276+
Expect(p.Create(event.TypedCreateEvent[client.Object]{})).To(BeFalse())
277+
Expect(p.Update(event.TypedUpdateEvent[client.Object]{})).To(BeFalse())
278+
Expect(p.Delete(event.TypedDeleteEvent[client.Object]{})).To(BeTrue())
279+
Expect(p.Generic(event.GenericEvent{})).To(BeFalse())
280+
})
281+
282+
It("should match only generic events", func() {
283+
p := ctrlutils.OnGenericPredicate()
284+
Expect(p.Create(event.TypedCreateEvent[client.Object]{})).To(BeFalse())
285+
Expect(p.Update(event.TypedUpdateEvent[client.Object]{})).To(BeFalse())
286+
Expect(p.Delete(event.TypedDeleteEvent[client.Object]{})).To(BeFalse())
287+
Expect(p.Generic(event.GenericEvent{})).To(BeTrue())
288+
})
289+
290+
})
291+
256292
})
257293

258294
func updateEvent(old, new client.Object) event.UpdateEvent {

0 commit comments

Comments
 (0)