class Tan < ActiveRecord::Base DEFAULT_EXPIRE_TIME = 5.minutes validates_presence_of :value, :expires_at def self.generate(expire_in = nil) expires_at = Time.now + (expire_in || DEFAULT_EXPIRE_TIME) create(:expires_at => expires_at).value end def self.spend(value) delete_expired! if tan = find_by_value(value) rescue nil tan.destroy value else nil end end protected def before_validation_on_create self.value = Digest::SHA1.hexdigest(Randomizer.string) self.expires_at ||= (Time.now + DEFAULT_EXPIRE_TIME) end def self.delete_expired! Tan.delete_all(['expires_at < ?', Time.now]) end end