class Chatrix::User

Describes a user.

Attributes

avatar[R]

@return [String,nil] This user's avatar URL, if one has been set.

displayname[R]

@return [String,nil] The display name of this user, if one has

been set.
id[R]

@return [String] The user ID of this user.

Public Class Methods

new(id) click to toggle source

Initializes a new User instance. @param id [String] The user ID.

# File lib/chatrix/user.rb, line 25
def initialize(id)
  @id = id

  # room_id => membership
  @memberships = {}
end

Public Instance Methods

member?(room) click to toggle source

Checks if this user is a member of the specified room. @param room [Room] The room to check. @return [Boolean] `true` if the user is a member in the room,

otherwise `false`.
# File lib/chatrix/user.rb, line 45
def member?(room)
  @memberships.key?(room) && @memberships[room][:type] == :join
end
power_in(room) click to toggle source

Get this user's power level in a room.

@param room [Room] The room to check. @return [Fixnum] The user's power level in the specified room.

# File lib/chatrix/user.rb, line 36
def power_in(room)
  return 0 unless @memberships.key? room
  @memberships[room][:power] || 0
end
process_invite(room, sender, event) click to toggle source

Process an invite to a room. @param room [Room] The room the user was invited to. @param sender [User] The user who sent the invite. @param event [Hash] Event data.

# File lib/chatrix/user.rb, line 83
def process_invite(room, sender, event)
  # Return early if we're already part of this room
  membership = (@memberships[room] ||= {})
  return if membership[:type] == :join
  process_member_event room, event
  broadcast(:invited, self, room, sender)
end
process_member_event(room, event) click to toggle source

Process a member event.

@param room [Room] The room that sent the event. @param event [Hash] Event data.

# File lib/chatrix/user.rb, line 53
def process_member_event(room, event)
  membership = (@memberships[room] ||= {})
  type = event['content']['membership'].to_sym

  # Only update the membership status if we are currently not in the room
  # or if the new state is that we have left.
  if membership[:type] != :join || type == :leave
    membership[:type] = type
    broadcast(:membership, self, room, membership)
  end

  update(event['content'])

  Events.processed event
end
process_power_level(room, level) click to toggle source

Process a power level update in a room.

@param room [Room] The room where the level updated. @param level [Fixnum] The new power level.

# File lib/chatrix/user.rb, line 73
def process_power_level(room, level)
  membership = (@memberships[room] ||= {})
  membership[:power] = level
  broadcast(:power_level, self, room, level)
end
to_s() click to toggle source

Converts this User object to a string representation of it. @return [String] Returns the user's display name if one is set,

otherwise returns the ID.
# File lib/chatrix/user.rb, line 94
def to_s
  @id
end

Private Instance Methods

update(data) click to toggle source

Updates metadata for this user. @param data [Hash{String=>String}] User metadata.

# File lib/chatrix/user.rb, line 102
def update(data)
  update_avatar(data['avatar_url']) if data.key? 'avatar_url'
  update_displayname(data['displayname']) if data.key? 'displayname'
end
update_avatar(url) click to toggle source

Sets a new avatar URL for this user. @param url [String] The new URL to set.

# File lib/chatrix/user.rb, line 109
def update_avatar(url)
  @avatar = url
  broadcast(:avatar, self, @avatar)
end
update_displayname(name) click to toggle source

Sets a new display name for this user. @param name [String] The new name to set.

# File lib/chatrix/user.rb, line 116
def update_displayname(name)
  @displayname = name
  broadcast(:displayname, self, @displayname)
end