In ruby, ogni espressione ritorna come valore il valore dell'ultima espressione valutata.
Nel tuo caso, utilizzi un if senza else. Quando il valore è maggiore di >, l'interprete non entra nella condizione ed il valore dell'ultima espressione valutata è nil. Il metodo quindi ritorna false or nil.

Ritornare nil in un before callback equivale a ritornare false, ovvero interrompere l'elaborazione.

Ci sono almeno 2 errori importanti in quel metodo:

1. creare un metodo con ? che ritorni valori misti invece di true/false.
2. passare un metodo che ritorna valori misti inconsapevolmente ad un callback

Il risultato è, ovviamente, quello che tu stesso hai sperimentato.