Sha256: 32d93bed1e3804520396f1df454f4361cda95d59e6ec89ec1c5845a9b4e3e83a

Contents?: true

Size: 1.32 KB

Versions: 2

Compression:

Stored size: 1.32 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, if: :email_changed?
  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

2 entries across 2 versions & 1 rubygems

Version Path
invitation-0.6.1 app/models/invite.rb
invitation-0.6.0 app/models/invite.rb