File tree Expand file tree Collapse file tree 2 files changed +52
-0
lines changed Expand file tree Collapse file tree 2 files changed +52
-0
lines changed Original file line number Diff line number Diff line change @@ -50,6 +50,7 @@ var _ Predicate = GenerationChangedPredicate{}
50
50
var _ Predicate = AnnotationChangedPredicate {}
51
51
var _ Predicate = or {}
52
52
var _ Predicate = and {}
53
+ var _ Predicate = not {}
53
54
54
55
// Funcs is a function that implements Predicate.
55
56
type Funcs struct {
@@ -340,6 +341,35 @@ func (o or) Generic(e event.GenericEvent) bool {
340
341
return false
341
342
}
342
343
344
+ // Not returns a predicate that implements a logical NOT of the predicate passed to it.
345
+ func Not (predicate Predicate ) Predicate {
346
+ return not {predicate }
347
+ }
348
+
349
+ type not struct {
350
+ predicate Predicate
351
+ }
352
+
353
+ func (n not ) InjectFunc (f inject.Func ) error {
354
+ return f (n .predicate )
355
+ }
356
+
357
+ func (n not ) Create (e event.CreateEvent ) bool {
358
+ return ! n .predicate .Create (e )
359
+ }
360
+
361
+ func (n not ) Update (e event.UpdateEvent ) bool {
362
+ return ! n .predicate .Update (e )
363
+ }
364
+
365
+ func (n not ) Delete (e event.DeleteEvent ) bool {
366
+ return ! n .predicate .Delete (e )
367
+ }
368
+
369
+ func (n not ) Generic (e event.GenericEvent ) bool {
370
+ return ! n .predicate .Generic (e )
371
+ }
372
+
343
373
// LabelSelectorPredicate constructs a Predicate from a LabelSelector.
344
374
// Only objects matching the LabelSelector will be admitted.
345
375
func LabelSelectorPredicate (s metav1.LabelSelector ) (Predicate , error ) {
Original file line number Diff line number Diff line change @@ -879,6 +879,28 @@ var _ = Describe("Predicate", func() {
879
879
Expect (prct .injected ).To (BeTrue ())
880
880
})
881
881
})
882
+ Describe ("When checking a Not predicate" , func () {
883
+ It ("should return false when its predicate returns true" , func () {
884
+ n := predicate .Not (passFuncs )
885
+ Expect (n .Create (event.CreateEvent {})).To (BeFalse ())
886
+ Expect (n .Update (event.UpdateEvent {})).To (BeFalse ())
887
+ Expect (n .Delete (event.DeleteEvent {})).To (BeFalse ())
888
+ Expect (n .Generic (event.GenericEvent {})).To (BeFalse ())
889
+ })
890
+ It ("should return true when its predicate returns false" , func () {
891
+ n := predicate .Not (failFuncs )
892
+ Expect (n .Create (event.CreateEvent {})).To (BeTrue ())
893
+ Expect (n .Update (event.UpdateEvent {})).To (BeTrue ())
894
+ Expect (n .Delete (event.DeleteEvent {})).To (BeTrue ())
895
+ Expect (n .Generic (event.GenericEvent {})).To (BeTrue ())
896
+ })
897
+ It ("should inject into its predicate" , func () {
898
+ prct := & injectablePredicate {}
899
+ n := predicate .Not (prct )
900
+ Expect (injectFunc (n )).To (Succeed ())
901
+ Expect (prct .injected ).To (BeTrue ())
902
+ })
903
+ })
882
904
})
883
905
884
906
Describe ("NewPredicateFuncs with a namespace filter function" , func () {
You can’t perform that action at this time.
0 commit comments