code9ty/website

View on GitHub
app/models/user.rb

Summary

Maintainability
A
0 mins
Test Coverage
class User < ApplicationRecord
  attr_accessor :remember_token
  before_save { self.first_name = first_name.capitalize }
  before_save { self.last_name = last_name.capitalize }
  validates :email, uniqueness: true, presence: true
  validates :first_name, length: {minimum:3}, presence: true
  validates :last_name, length: {minimum:3}, presence: true
  validates :github, uniqueness: true
  validates :password, length: {minimum: 6}, allow_blank: true
  validates :mobile_number, length: {minimum: 10}

  has_many :comments
  has_many :contributions
  has_many :bids
  has_many :projects, through: :bids
  has_secure_password

  def full_name
    "#{first_name} #{last_name}"
  end
  # updates the remeber digest on the database
  def remember
    self.remember_token = User.new_token
    update_attribute(:remember_digest, User.digest(remember_token))
  end

  #forgets user
  def forget
    update_attribute(:remember_digest, nil)
  end
  #returns a random 22 character
  def User.new_token
    SecureRandom.urlsafe_base64
  end

  def User.digest(string)
    cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST : BCrypt::Engine.cost
    BCrypt::Password.create(string, cost: cost)
  end

  # returns true if remeber token matches the digest
  def authenticated?(remember_token)
    return false if remember_digest.nil?
    BCrypt::Password.new(remember_digest).is_password?(remember_token)
  end
end