2020-04-24 18:09:46 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
module HasUserType
|
|
|
|
extend ActiveSupport::Concern
|
|
|
|
|
|
|
|
USER_TYPES = {
|
|
|
|
human: nil,
|
|
|
|
support_bot: 1,
|
|
|
|
alert_bot: 2,
|
|
|
|
visual_review_bot: 3,
|
|
|
|
service_user: 4,
|
|
|
|
ghost: 5,
|
2020-05-04 21:09:41 +00:00
|
|
|
project_bot: 6,
|
2020-10-14 18:08:47 +00:00
|
|
|
migration_bot: 7,
|
|
|
|
security_bot: 8
|
2020-04-24 18:09:46 +00:00
|
|
|
}.with_indifferent_access.freeze
|
|
|
|
|
2020-10-14 18:08:47 +00:00
|
|
|
BOT_USER_TYPES = %w[alert_bot project_bot support_bot visual_review_bot migration_bot security_bot].freeze
|
2020-04-24 18:09:46 +00:00
|
|
|
NON_INTERNAL_USER_TYPES = %w[human project_bot service_user].freeze
|
|
|
|
INTERNAL_USER_TYPES = (USER_TYPES.keys - NON_INTERNAL_USER_TYPES).freeze
|
|
|
|
|
|
|
|
included do
|
|
|
|
scope :humans, -> { where(user_type: :human) }
|
|
|
|
scope :bots, -> { where(user_type: BOT_USER_TYPES) }
|
2020-10-07 15:08:40 +00:00
|
|
|
scope :without_bots, -> { humans.or(where.not(user_type: BOT_USER_TYPES)) }
|
2020-04-24 18:09:46 +00:00
|
|
|
scope :bots_without_project_bot, -> { where(user_type: BOT_USER_TYPES - ['project_bot']) }
|
|
|
|
scope :non_internal, -> { humans.or(where(user_type: NON_INTERNAL_USER_TYPES)) }
|
|
|
|
scope :without_ghosts, -> { humans.or(where.not(user_type: :ghost)) }
|
2020-05-19 09:08:12 +00:00
|
|
|
scope :without_project_bot, -> { humans.or(where.not(user_type: :project_bot)) }
|
2020-04-24 18:09:46 +00:00
|
|
|
|
|
|
|
enum user_type: USER_TYPES
|
|
|
|
|
|
|
|
def human?
|
|
|
|
super || user_type.nil?
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def bot?
|
|
|
|
BOT_USER_TYPES.include?(user_type)
|
|
|
|
end
|
|
|
|
|
|
|
|
# The explicit check for project_bot will be removed with Bot Categorization
|
|
|
|
# Ref: https://gitlab.com/gitlab-org/gitlab/-/issues/213945
|
|
|
|
def internal?
|
|
|
|
ghost? || (bot? && !project_bot?)
|
|
|
|
end
|
|
|
|
end
|