blob: 6b70c13a773a2d58a2d2470375a444c6c50822e5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
# frozen_string_literal: true
class Analytics::DevopsAdoption::SegmentSelection < ApplicationRecord
ALLOWED_SELECTIONS_PER_SEGMENT = 20
belongs_to :segment
belongs_to :project
belongs_to :group
validates :segment, presence: true
validates :project, presence: { unless: :group }
validates :project_id, uniqueness: { scope: :segment_id, if: :project }
validates :group, presence: { unless: :project }
validates :group_id, uniqueness: { scope: :segment_id, if: :group }
validate :exclusive_project_or_group
validate :validate_selection_count
private
def exclusive_project_or_group
if project.present? && group.present?
errors.add(:group, s_('DevopsAdoptionSegmentSelection|The selection cannot be configured for a project and for a group at the same time'))
end
end
def validate_selection_count
return unless segment
selection_count_for_segment = self.class.where(segment: segment).count
if selection_count_for_segment >= ALLOWED_SELECTIONS_PER_SEGMENT
errors.add(:segment, s_('DevopsAdoptionSegmentSelection|The maximum number of selections has been reached'))
end
end
end
|