Class: Chatrix::User

Inherits:
Object
  • Object
show all
Includes:
Wisper::Publisher
Defined in:
lib/chatrix/user.rb

Overview

Describes a user.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(id) ⇒ User

Initializes a new User instance.

Parameters:

  • id (String)

    The user ID.



25
26
27
28
29
30
# File 'lib/chatrix/user.rb', line 25

def initialize(id)
  @id = id

  # room_id => membership
  @memberships = {}
end

Instance Attribute Details

#avatarString? (readonly)

Returns This user's avatar URL, if one has been set.

Returns:

  • (String, nil)

    This user's avatar URL, if one has been set.



21
22
23
# File 'lib/chatrix/user.rb', line 21

def avatar
  @avatar
end

#displaynameString? (readonly)

Returns The display name of this user, if one has been set.

Returns:

  • (String, nil)

    The display name of this user, if one has been set.



18
19
20
# File 'lib/chatrix/user.rb', line 18

def displayname
  @displayname
end

#idString (readonly)

Returns The user ID of this user.

Returns:

  • (String)

    The user ID of this user.



14
15
16
# File 'lib/chatrix/user.rb', line 14

def id
  @id
end

Instance Method Details

#power_in(room) ⇒ Fixnum

Get this user's power level in a room.

Parameters:

  • room (Room)

    The room to check.

Returns:

  • (Fixnum)

    The user's power level in the specified room.



36
37
38
39
# 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) ⇒ Object

Process an invite to a room.

Parameters:

  • room (Room)

    The room the user was invited to.

  • sender (User)

    The user who sent the invite.

  • event (Hash)

    Event data.



75
76
77
78
79
80
81
# File 'lib/chatrix/user.rb', line 75

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) ⇒ Object

Process a member event.

Parameters:

  • room (Room)

    The room that sent the event.

  • event (Hash)

    Event data.



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/chatrix/user.rb', line 45

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) ⇒ Object

Process a power level update in a room.

Parameters:

  • room (Room)

    The room where the level updated.

  • level (Fixnum)

    The new power level.



65
66
67
68
69
# File 'lib/chatrix/user.rb', line 65

def process_power_level(room, level)
  membership = (@memberships[room] ||= {})
  membership[:power] = level
  broadcast(:power_level, self, room, level)
end

#to_sString

Converts this User object to a string representation of it.

Returns:

  • (String)

    Returns the user's display name if one is set, otherwise returns the ID.



86
87
88
# File 'lib/chatrix/user.rb', line 86

def to_s
  @id
end

#update(data) ⇒ Object (private)

Updates metadata for this user.

Parameters:

  • data (Hash{String=>String})

    User metadata.



94
95
96
97
# File 'lib/chatrix/user.rb', line 94

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) ⇒ Object (private)

Sets a new avatar URL for this user.

Parameters:

  • url (String)

    The new URL to set.



101
102
103
104
# File 'lib/chatrix/user.rb', line 101

def update_avatar(url)
  @avatar = url
  broadcast(:avatar, self, @avatar)
end

#update_displayname(name) ⇒ Object (private)

Sets a new display name for this user.

Parameters:

  • name (String)

    The new name to set.



108
109
110
111
# File 'lib/chatrix/user.rb', line 108

def update_displayname(name)
  @displayname = name
  broadcast(:displayname, self, @displayname)
end