Class: TurboChat::ChatMembership

Inherits:
ApplicationRecord show all
Defined in:
app/models/turbo_chat/chat_membership.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.invitation_tracking_supported?Boolean

Returns:

  • (Boolean)


27
28
29
30
31
# File 'app/models/turbo_chat/chat_membership.rb', line 27

def invitation_tracking_supported?
  column_names.include?("invitation_accepted")
rescue ActiveRecord::StatementInvalid, ActiveRecord::NoDatabaseError
  false
end

Instance Method Details

#accept_invitation!Object



42
43
44
45
46
# File 'app/models/turbo_chat/chat_membership.rb', line 42

def accept_invitation!
  update_attributes = { muted: false, timed_out_until: nil }
  update_attributes[:invitation_accepted] = true if self.class.invitation_tracking_supported?
  update!(update_attributes)
end

#active?Boolean

Returns:

  • (Boolean)


34
35
36
# File 'app/models/turbo_chat/chat_membership.rb', line 34

def active?
  removed_at.nil? && (!self.class.invitation_tracking_supported? || invitation_accepted?)
end

#effective_role_definitionObject



72
73
74
# File 'app/models/turbo_chat/chat_membership.rb', line 72

def effective_role_definition
  TurboChat.configuration.role_definition(effective_role_key)
end

#effective_role_keyObject



68
69
70
# File 'app/models/turbo_chat/chat_membership.rb', line 68

def effective_role_key
  role_key.to_s
end

#effective_role_nameObject



76
77
78
# File 'app/models/turbo_chat/chat_membership.rb', line 76

def effective_role_name
  effective_role_definition&.dig(:name).presence || effective_role_key.humanize
end

#effective_role_permissionsObject



84
85
86
# File 'app/models/turbo_chat/chat_membership.rb', line 84

def effective_role_permissions
  Array(effective_role_definition&.dig(:permissions)).map(&:to_sym)
end

#effective_role_rankObject



80
81
82
# File 'app/models/turbo_chat/chat_membership.rb', line 80

def effective_role_rank
  effective_role_definition&.dig(:rank).to_i
end

#pending?Boolean

Returns:

  • (Boolean)


38
39
40
# File 'app/models/turbo_chat/chat_membership.rb', line 38

def pending?
  removed_at.nil? && self.class.invitation_tracking_supported? && !invitation_accepted?
end

#role_keyObject



48
49
50
# File 'app/models/turbo_chat/chat_membership.rb', line 48

def role_key
  custom_role_key.presence || role
end

#role_key=(value) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'app/models/turbo_chat/chat_membership.rb', line 52

def role_key=(value)
  normalized = normalize_role_key_value(value)
  if normalized.blank?
    self.custom_role_key = nil
    return
  end

  if self.class.roles.key?(normalized)
    self.role = normalized
    self.custom_role_key = nil
  else
    self.role = :member if role.blank?
    self.custom_role_key = normalized
  end
end