-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsection_builder.rb
More file actions
102 lines (84 loc) · 3.41 KB
/
Copy pathsection_builder.rb
File metadata and controls
102 lines (84 loc) · 3.41 KB
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
class SectionBuilder
STANDARD_SECTION_TYPES = %w[HEADER CONTACT PEOPLE AFFILIATIONS ADDITIONAL_INFO OTHER_SCIM_FIELDS].freeze
def self.clean_for_push(sections)
sections.map do |section|
cleaned_section = section.except('__typename')
if cleaned_section['profileAdminElements']
cleaned_section['profileAdminElements'] = cleaned_section['profileAdminElements'].map do |element|
clean_element(element)
end
end
cleaned_section
end
end
def self.build_field_data(db_field, slack_id = nil, legacy_field_id = nil)
field_type_value = db_field.field_type_value
default_visibility_value = db_field.default_visibility_value
valid_data_sources = db_field.valid_data_sources || []
permissions = db_field.permissions || {}
if permissions['ui'] == true
valid_data_sources = valid_data_sources + ['API']
permissions['ui'] = false
permissions['api'] = %w[ORG_ADMIN ORG_OWNER ORG_PRIMARY_OWNER WORKSPACE_ADMIN WORKSPACE_OWNER WORKSPACE_PRIMARY_OWNER]
end
element = {
'label' => db_field.label,
'isFilterable' => db_field.is_filterable,
'isIndexed' => db_field.is_indexed,
'isScimManaged' => db_field.is_scim_managed,
'elementKey' => db_field.element_key,
'isInPreview' => false,
'hint' => db_field.hint || '',
'order' => db_field.position,
'canSetOptions' => db_field.can_set_options,
'canChangeHidden' => db_field.can_change_hidden,
'canEdit' => db_field.can_edit,
'type' => field_type_value,
'isHidden' => db_field.is_hidden,
'permissions' => permissions,
'validDataSources' => valid_data_sources
}
element['id'] = slack_id if slack_id.present?
element['legacyFieldId'] = legacy_field_id if legacy_field_id.present?
element['canChangeLabel'] = db_field.can_change_label unless db_field.can_change_label.nil?
element['canChangeSearch'] = db_field.can_change_search unless db_field.can_change_search.nil?
element['defaultVisibility'] = default_visibility_value if default_visibility_value.present?
element['areCelebrationsEnabled'] = db_field.are_celebrations_enabled unless db_field.are_celebrations_enabled.nil?
element['permissions'] = element['permissions'].except('__typename') if element['permissions']&.key?('__typename')
set_field_type_specific_data(element, field_type_value, db_field)
element
end
private
def self.clean_element(element)
cleaned_element = element.except(
'__typename',
'options',
'inverseLabel',
'isInverse'
)
cleaned_element['isInPreview'] = false unless cleaned_element.key?('isInPreview')
['permissions', 'text', 'person'].each do |key|
cleaned_element[key] = cleaned_element[key].except('__typename') if cleaned_element[key]
end
cleaned_element
end
def self.set_field_type_specific_data(element, field_type_value, db_field)
case field_type_value
when 'TEXT'
text_obj = db_field.options || { 'options' => [] }
text_obj = text_obj.except('__typename') if text_obj.is_a?(Hash)
element['text'] = text_obj
element['person'] = nil
when 'PERSON'
element['text'] = nil
if db_field.inverse_label.present?
element['person'] = { 'inverseLabel' => db_field.inverse_label }
else
element['person'] = nil
end
else
element['text'] = nil
element['person'] = nil
end
end
end