Module: Streakable

Defined in:
lib/streakable.rb

Overview

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)

Defined Under Namespace

Modules: InstanceMethods

Class Method Summary collapse

Class Method Details

.included(klass) ⇒ Object


28
29
30
31
32
# File 'lib/streakable.rb', line 28

def self.included(klass)
  klass.class_eval do
    include InstanceMethods
  end
end