Gem Version Build Status Coverage Status Inline docs Maintainability MIT License Gem GitHub stars

Streakable Logo

Streakable is a Ruby gem to track consecutive day streaks :calendar: on your Rails/ActiveRecord models. Hard fork of has_streak by Garrett Martin with a different include interface and more features. Requires Ruby >= 2.1 and ActiveRecord >= 3.2.22.

Github Project Page


Add this line to your application’s Gemfile:

gem 'streakable'

And then execute:

$ bundle

Or install it yourself as:

$ gem install streakable


Let’s say I have a User that has_many posts:

ruby class User < ActiveRecord::Base has_many :posts end

I want to track how many days in a row that each user wrote a post. I just have to include streakable in the model:

ruby class User < ActiveRecord::Base include Streakable end

Now I can display the user’s streak:

ruby user.streak(:posts) # => number of days in a row that this user wrote a post (as determined by the created_at column, by default)

The streak instance method can be called with any association:

ruby user.streak(:other_association)

And you can change the column the streak is calculated on:

ruby user.streak(:posts, :updated_at)

Don’t penalize the current day being absent when determining streaks (the User could write another Post before the day ends):

ruby user.streak(:posts, except_today: true)

Find the longest streak, not just the current one:

ruby user.streak(:posts, longest: true)

To get all of the streaks, not just the current one:

ruby user.streaks(:posts)


  • Add class methods/scopes for calculating streaks on records not in memory


To run the specs for the currently running Ruby version, run bundle install and then bundle exec rspec. To run specs for every supported version of ActionPack, run bundle exec appraisal install and then bundle exec appraisal rspec.

Gem release

Make sure the specs pass, bump the version number in streakable.gemspec, build the gem with gem build streakable.gemspec. Commit your changes and push to Github, then tag the commit with the current release number using Github’s Releases interface (use the format vx.x.x, where x is the semantic version number). You can pull the latest tags to your local repo with git pull --tags. Finally, push the gem with gem push streakable-version-number-here.gem.


  1. Fork it
  2. Create your feature branch (git checkout -b feature/my-new-feature) or bugfix branch (git checkout -b bugfix/my-helpful-bugfix)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin feature/my-new-feature)
  5. Make sure specs are passing (bundle exec rspec)
  6. Create new Pull Request


See the LICENSE file.