Dynamic time based finder for ActiveRecord
I think it's pretty nice. Get all records within a railsified period of time (7.days.ago, 12.months.ago). I can do cool things like Workout.within_12_days or Workout.within_12_hours. Further conditions can be given as a hash, and will be transposed onto the end of the :conditions.
Workout.within_n_units(:user_id => 12) #-> Workout.find(:all, :conditions => 'created_at > n.units.ago and user_id = 12')
class Workout < ActiveRecord::Base class << self def within_n_temporal_units(number, units, further_conds={}) conds = "created_at > '#{eval("#{number}.#{units}.ago").to_s(:db)}'" further_conds.each {|key, val| conds << " and #{key} = #{val}"} Workout.find(:all, :conditions => conds) end def method_missing(name, *args) return within_n_temporal_units($~[1], $~[2], args[0] || {}) if name.to_s =~ /within_(\d+)_(\w+)/ raise NoMethodError, "undefined method `#{name}' for #{self}:Class" end end end