44 lines
866 B
Ruby
44 lines
866 B
Ruby
# frozen_string_literal: true
|
|
|
|
class InvitationCode < ApplicationRecord
|
|
belongs_to :user
|
|
|
|
before_create :generate_token, :set_default_invite_count
|
|
|
|
delegate :name, to: :user, prefix: true
|
|
|
|
def to_param
|
|
token
|
|
end
|
|
|
|
def can_be_used?
|
|
count > 0 && AppConfig.settings.invitations.open?
|
|
end
|
|
|
|
def add_invites!
|
|
update(count: count + 100)
|
|
end
|
|
|
|
def use!
|
|
update(count: count - 1)
|
|
end
|
|
|
|
def generate_token
|
|
loop do
|
|
self.token = SecureRandom.hex(6)
|
|
break unless InvitationCode.default_scoped.exists?(token: token)
|
|
end
|
|
end
|
|
|
|
def self.default_inviter_or(user)
|
|
if AppConfig.admins.account.present?
|
|
inviter = User.find_by_username(AppConfig.admins.account.get)
|
|
end
|
|
inviter ||= user
|
|
inviter
|
|
end
|
|
|
|
def set_default_invite_count
|
|
self.count = AppConfig['settings.invitations.count'] || 25
|
|
end
|
|
end
|