module Streakable

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)

Public Class Methods

included(klass) click to toggle source
# File lib/streakable.rb, line 28
def self.included(klass)
  klass.class_eval do
    include InstanceMethods
  end
end