class Chatrix::User
Describes a user.
Attributes
@return [String,nil] This user's avatar URL, if one has been set.
@return [String,nil] The display name of this user, if one has
been set.
@return [String] The user ID of this user.
Public Class Methods
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
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
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 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 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 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
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
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
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
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