Module: Teems::Services::SyncDirNaming

Included in:
SyncStore
Defined in:
lib/teems/services/sync_dir_naming.rb

Overview

Directory naming helpers for SyncStore

Constant Summary collapse

GENERIC_LABELS =
['Group Chat', '1:1 Chat', 'Meeting Chat', 'Channel', 'Space'].freeze
MAX_DIR_NAME_LENGTH =
100
TYPE_DIRS =
{
  'oneOnOne' => 'dms', 'group' => 'groups', 'meeting' => 'meetings',
  'channel' => 'channels', 'space' => 'spaces'
}.freeze

Class Method Summary collapse

Class Method Details

.build_dir_name(chat_id, display_name) ⇒ Object



32
33
34
35
36
37
38
39
# File 'lib/teems/services/sync_dir_naming.rb', line 32

def build_dir_name(chat_id, display_name)
  sanitized = sanitize_display_name(display_name)
  safe_id = sanitize_id(chat_id)
  return safe_id unless sanitized
  return sanitized unless GENERIC_LABELS.include?(display_name.strip)

  "#{sanitized} (#{safe_id[0, 20]})"
end

.sanitize_display_name(name) ⇒ Object



24
25
26
27
28
29
30
# File 'lib/teems/services/sync_dir_naming.rb', line 24

def sanitize_display_name(name)
  return nil if name.to_s.strip.empty?

  sanitized = name.strip.gsub(%r{[/\\:*?"<>|]}, '-').gsub(/\s+/, ' ')
  sanitized = sanitized[0, MAX_DIR_NAME_LENGTH].gsub(/[\s.]+\z/, '')
  sanitized.empty? ? nil : sanitized
end

.sanitize_id(id) ⇒ Object



20
21
22
# File 'lib/teems/services/sync_dir_naming.rb', line 20

def sanitize_id(id)
  id.gsub(/[:@]/, '_')
end

.type_dir(chat_type) ⇒ Object



16
# File 'lib/teems/services/sync_dir_naming.rb', line 16

def type_dir(chat_type) = TYPE_DIRS[chat_type] || 'other'