Sha256: 076c56bc18523aa52464065c38ed07244ef41819fe143fd83c77fe4a07757f65

Contents?: true

Size: 649 Bytes

Versions: 9

Compression:

Stored size: 649 Bytes

Contents

# frozen_string_literal: true

class Invite < ApplicationRecord
  include PagesCore::HasRoles

  belongs_to :user
  has_many :roles, class_name: "InviteRole", dependent: :destroy

  before_validation :ensure_token

  validates :email,
            presence: true,
            format: { with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i },
            uniqueness: { case_sensitive: false }

  validates :token, presence: true

  validate :user_already_exists

  private

  def ensure_token
    self.token ||= SecureRandom.hex(32)
  end

  def user_already_exists
    return unless User.find_by_email(email)

    errors.add(:email, :taken)
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
pages_core-3.14.0 app/models/invite.rb
pages_core-3.13.0 app/models/invite.rb
pages_core-3.12.7 app/models/invite.rb
pages_core-3.12.6 app/models/invite.rb
pages_core-3.12.5 app/models/invite.rb
pages_core-3.12.4 app/models/invite.rb
pages_core-3.12.3 app/models/invite.rb
pages_core-3.12.2 app/models/invite.rb
pages_core-3.12.1 app/models/invite.rb