/
profile_field.rb
43 lines (32 loc) 路 1.33 KB
/
profile_field.rb
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
37
38
39
40
41
42
43
class ProfileField < ApplicationRecord
WORD_REGEX = /\b\w+\b/
HEADER_FIELD_LIMIT = 3
HEADER_LIMIT_MESSAGE = "maximum number of header fields (#{HEADER_FIELD_LIMIT}) exceeded".freeze
# Key names follow the Rails form helpers
enum input_type: { text_field: 0, text_area: 1 }
enum display_area: { header: 0, left_sidebar: 1 }
belongs_to :profile_field_group
validates :attribute_name, presence: true, on: :update
validates :display_area, presence: true
validates :input_type, presence: true
validates :label, presence: true, uniqueness: { case_sensitive: false }
validates :show_in_onboarding, inclusion: { in: [true, false] }
validate :maximum_header_field_count
before_create :generate_attribute_name
private
def generate_attribute_name
self.attribute_name = "attribute_#{SecureRandom.hex}"
end
def maximum_header_field_count
return unless header?
header_field_count = self.class.header.count
# We need to have less than the maximum number so we can still create one.
if new_record? || display_area_was == "left_sidebar"
return if header_field_count < HEADER_FIELD_LIMIT
# We can change existing fields or update them as long as we're within the limit.
elsif header_field_count <= HEADER_FIELD_LIMIT
return
end
errors.add(:display_area, HEADER_LIMIT_MESSAGE)
end
end