Sha256: 1b8eb55954ee031ce5845ddbc6aedfc69dd691279fa961b9bea921b07b56b66c

Contents?: true

Size: 1.31 KB

Versions: 4

Compression:

Stored size: 1.31 KB

Contents

# An invitation, tracks the sender and recipient, and what the recipient is invited to.
# Generates a unique token for each invitation. The token is used in the invite url
# to (more) securely identify the invite when a new user clicks to register.
#
class Invite < ActiveRecord::Base
  belongs_to :invitable, polymorphic: true
  belongs_to :sender, class_name: Invitation.configuration.user_model_class_name

  # Rails >= 5 makes belongs_to association required by default
  if Rails::VERSION::MAJOR >= 5
    belongs_to :recipient, class_name: Invitation.configuration.user_model_class_name, optional: true
  else
    belongs_to :recipient, class_name: Invitation.configuration.user_model_class_name
  end

  before_create :generate_token
  before_save :set_email_case, on: :create
  before_save :check_recipient_existence

  validates :email, presence: true
  validates :invitable, presence: true
  validates :sender, presence: true

  def existing_user?
    recipient != nil
  end

  def generate_token
    self.token = SecureRandom.hex(20).encode('UTF-8')
  end

  def check_recipient_existence
    recipient = Invitation.configuration.user_model.find_by_email(email)
    self.recipient_id = recipient.id if recipient
  end

  private

  def set_email_case
    email.downcase! unless Invitation.configuration.case_sensitive_email
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
invitation-0.5.1 app/models/invite.rb
invitation-0.5.0 app/models/invite.rb
invitation-0.4.5 app/models/invite.rb
invitation-0.4.4 app/models/invite.rb