Sha256: 95787d5e06ac22028c98a6d6577a0f68a630904990f2000f90a09fc7d31dfdd1

Contents?: true

Size: 1.63 KB

Versions: 2

Compression:

Stored size: 1.63 KB

Contents

module Jobshop
  class User < ApplicationRecord
    # Include default devise modules. Others available are:
    # :confirmable, :lockable, :timeoutable and :omniauthable
    devise :database_authenticatable, :recoverable, :rememberable

    belongs_to :team
    has_one :default_dashboard, class_name: "Jobshop::Dashboard", through: :team
    has_many :session_activations, dependent: :destroy

    validates :email,
      presence:   { if: :email_required? },
      format:     { if: :email_required?, with: /\A[^@\s]+@[^@\s]+\z/ },
      uniqueness: { if: :email_changed?, scope: :team_id }

    validates :password,
      presence:     { if: :password_required? },
      confirmation: { if: :password_required? }

    def self.find_for_authentication(warden_conditions)
      where(email:   warden_conditions[:email],
            team_id: warden_conditions[:team_id]).first
    end

    def onboard?
      # TODO: Implement this correctly.
      false
    end

    def full_name
      @full_name = [ forename, surname ].join(" ")
    end

    def activate_session
      session_activations.activate(SecureRandom.hex).activation_token
    end

    def exclusive_session(id)
      session_activations.exclusive(id)
    end

    def session_active?(id)
      session_activations.active?(id)
    end

  private
    def generate_email_authentication_token
      loop do
        token = Devise.friendly_token
        break token unless Jobshop::User.where(email_authentication_token: token).first
      end
    end

    def password_required?
      !persisted? || !password.nil? || !password_confirmation.nil?
    end

    def email_required?
      true
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
jobshop-0.0.131 app/models/jobshop/user.rb
jobshop-0.0.127 app/models/jobshop/user.rb