module Noah class Token < Model include Taggable include Linkable attribute :name attribute :token attribute :lifetime index :name index :token index :lifetime before :save, :generate_api_token def validate super assert_present :name assert_unique :name assert_unique :token end def to_hash h = {:token => token, :lifetime => lifetime, :created_at => created_at, :updated_at => updated_at} super.merge(h) end protected def generate_api_token # Wicked hot logic to generate an API token random_string = (0...50).map{ ('a'..'z').to_a[rand(26)] }.join self.token.nil? ? self.token = OpenSSL::Digest::SHA256.hexdigest(random_string << self.name << Time.now.to_s) : self.token end def save_hook # called after any create,update,delete # logic needed to expire any orphaned ephemerals end end end