Кажется, что сложная часть здесь состоит в том, чтобы выяснить, как вы хотите поддерживать состояние, необходимое для определения, когда значок должен быть вручен. Плагины конечного автомата для рельсов не сильно вам в этом помогут.
Например, как кусок кода определит, вошел ли пользователь в систему 10 дней подряд? Как только вы это поймете, вы можете беспокоиться о том, как организовать обработку событий.
Вам нужно уведомлять их в режиме реального времени, когда они получают значок? Если это так, то вы можете легко сделать это с ActiveRecord :: Observer, но у него могут быть некоторые проблемы с задержкой при длительном запуске (http://api.rubyonrails.org/classes/ActiveRecord/Observer.html)
Если вам не нужно делать это в режиме реального времени, вы можете сделать это с фоновыми заданиями какой-либо формы. Есть много библиотек для фоновых заданий. Я использую рабочую силу, когда меня не волнует масштабирование, и я просто хочу быстро что-то поднять.