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.
Installation
Add this line to your application’s Gemfile:
gem 'streakable'
And then execute:
$ bundle
Or install it directly with:
$ gem install streakable
Usage
Let’s say I have a User
that has_many
posts:
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:
class User < ActiveRecord::Base
include Streakable
end
Now I can display the user’s streak:
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:
user.streak(:other_association)
And you can change the column the streak is calculated on:
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):
user.streak(:posts, except_today: true)
Find the longest streak, not just the current one:
user.streak(:posts, longest: true)
To get all of the streaks, not just the current one:
user.streaks(:posts)
TODO
- Add class methods/scopes for calculating streaks on records not in memory
Specs
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
.
Contributing
- Fork it
- Create your feature branch (
git checkout -b feature/my-new-feature
) or bugfix branch (git checkout -b bugfix/my-helpful-bugfix
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin feature/my-new-feature
) - Make sure specs are passing (
bundle exec rspec
) - Create new Pull Request
License
See the LICENSE file.