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