module HasTokenField

Constants

VERSION

Public Instance Methods

has_token_field(name) click to toggle source
# File lib/has_token_field.rb, line 5
def has_token_field(name)
  define_singleton_method :make_token do
    loop do
      token = SecureRandom.urlsafe_base64(15).tr('lIO0', 'sxyz')
      break token unless self.where("#{name}" => token).first
    end
  end

  self.send(:before_save, "ensure_#{name}")

  define_method "ensure_#{name}" do
    self[name] = self.class.make_token if self[name].blank? && self.class.column_names.include?(name.to_s)
  end
end