Class: TurboChat::Permission

Inherits:
Object
  • Object
show all
Includes:
MentionSupport, Support
Defined in:
lib/turbo_chat/permission.rb,
lib/turbo_chat/permission/support.rb,
lib/turbo_chat/permission/mention_support.rb

Defined Under Namespace

Modules: MentionSupport, Support

Constant Summary collapse

ROLE_MENTION_TOKEN_PATTERN =
/\A@[A-Z][A-Z0-9_]{0,31}\z/.freeze
MEMBER_MENTION_TOKEN_PATTERN =
/\A@[a-z0-9_]{1,32}\z/i.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from MentionSupport

#can_mention_all?, #can_mention_members?, #can_mention_roles?, #can_mention_token?

Constructor Details

#initialize(participant, chat = nil) ⇒ Permission

Returns a new instance of Permission.



13
14
15
16
# File 'lib/turbo_chat/permission.rb', line 13

def initialize(participant, chat = nil)
  @participant = participant
  @chat = chat
end

Instance Attribute Details

#chatObject (readonly)

Returns the value of attribute chat.



11
12
13
# File 'lib/turbo_chat/permission.rb', line 11

def chat
  @chat
end

#participantObject (readonly)

Returns the value of attribute participant.



11
12
13
# File 'lib/turbo_chat/permission.rb', line 11

def participant
  @participant
end

Instance Method Details

#can_ban_member?(target_membership = nil) ⇒ Boolean

Returns:

  • (Boolean)


40
# File 'lib/turbo_chat/permission.rb', line 40

def can_ban_member?(target_membership = nil) = can_manage_target_membership?(:ban_member, target_membership)

#can_close_chat?Boolean

Returns:

  • (Boolean)


66
# File 'lib/turbo_chat/permission.rb', line 66

def can_close_chat? = can_view_chat? && role_permission?(:close_chat)

#can_create_chat?Boolean

Returns:

  • (Boolean)


25
# File 'lib/turbo_chat/permission.rb', line 25

def can_create_chat? = participant_present?

#can_delete_message?(message = nil) ⇒ Boolean

Returns:

  • (Boolean)


46
47
48
49
50
51
52
# File 'lib/turbo_chat/permission.rb', line 46

def can_delete_message?(message = nil)
  return false unless can_view_chat? && role_permission?(:delete_message)
  return true if message.nil?
  return false unless message_in_chat?(message)

  can_act_on_target_membership?(membership_for(message.participant))
end

#can_edit_message?(message = nil) ⇒ Boolean

Returns:

  • (Boolean)


54
55
56
57
58
59
60
61
62
63
64
# File 'lib/turbo_chat/permission.rb', line 54

def can_edit_message?(message = nil)
  return false unless can_post_message?
  return true if message.nil?
  return false unless message_in_chat?(message)

  participant_type, participant_id = actor_identity
  return false if participant_type.blank? || participant_id.blank?

  message.participant_type.to_s == participant_type &&
    message.participant_id.to_s == participant_id.to_s
end

#can_grant_member_permissions?(target_membership = nil) ⇒ Boolean

Returns:

  • (Boolean)


44
# File 'lib/turbo_chat/permission.rb', line 44

def can_grant_member_permissions?(target_membership = nil) = can_manage_target_membership?(:grant_member_permissions, target_membership)

#can_invite_member?Boolean

Returns:

  • (Boolean)


42
# File 'lib/turbo_chat/permission.rb', line 42

def can_invite_member? = can_view_chat? && role_permission?(:invite_member)

#can_mute_member?(target_membership = nil) ⇒ Boolean

Returns:

  • (Boolean)


36
# File 'lib/turbo_chat/permission.rb', line 36

def can_mute_member?(target_membership = nil) = can_manage_target_membership?(:mute_member, target_membership)

#can_post_message?Boolean

Returns:

  • (Boolean)


27
28
29
30
31
32
33
34
# File 'lib/turbo_chat/permission.rb', line 27

def can_post_message?
  can_view_chat? &&
    !chat_input_disabled? &&
    role_permission?(:post_message) &&
    !chat_closed? &&
    !actor_membership_muted? &&
    !actor_membership_timed_out?
end

#can_reopen_chat?Boolean

Returns:

  • (Boolean)


68
# File 'lib/turbo_chat/permission.rb', line 68

def can_reopen_chat? = can_view_chat? && role_permission?(:reopen_chat)

#can_timeout_member?(target_membership = nil) ⇒ Boolean

Returns:

  • (Boolean)


38
# File 'lib/turbo_chat/permission.rb', line 38

def can_timeout_member?(target_membership = nil) = can_manage_target_membership?(:timeout_member, target_membership)

#can_view_chat?Boolean

Returns:

  • (Boolean)


18
19
20
21
22
23
# File 'lib/turbo_chat/permission.rb', line 18

def can_view_chat?
  return false unless participant_present?
  return true unless chat_present?

  actor_membership_active? && role_permission?(:view_chat)
end