diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-12-17 14:59:07 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-12-17 14:59:07 +0300 |
commit | 8b573c94895dc0ac0e1d9d59cf3e8745e8b539ca (patch) | |
tree | 544930fb309b30317ae9797a9683768705d664c4 /app/models/experiment_subject.rb | |
parent | 4b1de649d0168371549608993deac953eb692019 (diff) |
Add latest changes from gitlab-org/gitlab@13-7-stable-eev13.7.0-rc42
Diffstat (limited to 'app/models/experiment_subject.rb')
-rw-r--r-- | app/models/experiment_subject.rb | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/app/models/experiment_subject.rb b/app/models/experiment_subject.rb new file mode 100644 index 00000000000..51ffc0b304e --- /dev/null +++ b/app/models/experiment_subject.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +class ExperimentSubject < ApplicationRecord + include ::Gitlab::Experimentation::GroupTypes + + belongs_to :experiment, inverse_of: :experiment_subjects + belongs_to :user + belongs_to :group + belongs_to :project + + validates :experiment, presence: true + validates :variant, presence: true + validate :must_have_one_subject_present + + enum variant: { GROUP_CONTROL => 0, GROUP_EXPERIMENTAL => 1 } + + private + + def must_have_one_subject_present + if non_nil_subjects.length != 1 + errors.add(:base, s_("ExperimentSubject|Must have exactly one of User, Group, or Project.")) + end + end + + def non_nil_subjects + @non_nil_subjects ||= [user, group, project].reject(&:blank?) + end +end |