Class: Vines::User

Inherits:
Object
  • Object
show all
Includes:
Comparable
Defined in:
lib/vines/user.rb

Direct Known Subclasses

Cluster::UserProxy

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(args = {}) ⇒ User

Returns a new instance of User.

Raises:

  • (ArgumentError)


10
11
12
13
14
15
16
17
# File 'lib/vines/user.rb', line 10

def initialize(args={})
  @jid = JID.new(args[:jid])
  raise ArgumentError, 'invalid jid' if @jid.empty?

  @name = args[:name]
  @password = args[:password]
  @roster = args[:roster] || []
end

Instance Attribute Details

#jidObject (readonly)

Returns the value of attribute jid.



8
9
10
# File 'lib/vines/user.rb', line 8

def jid
  @jid
end

#nameObject

Returns the value of attribute name.



7
8
9
# File 'lib/vines/user.rb', line 7

def name
  @name
end

#passwordObject

Returns the value of attribute password.



7
8
9
# File 'lib/vines/user.rb', line 7

def password
  @password
end

#rosterObject

Returns the value of attribute roster.



7
8
9
# File 'lib/vines/user.rb', line 7

def roster
  @roster
end

Instance Method Details

#<=>(user) ⇒ Object



19
20
21
# File 'lib/vines/user.rb', line 19

def <=>(user)
  user.is_a?(User) ? self.jid.to_s <=> user.jid.to_s : nil
end

#add_subscription_from(jid) ⇒ Object

Add the user’s jid to this contact’s roster with a subscription state of ‘from.’ This signals that this contact has approved a user’s subscription.



91
92
93
94
95
96
97
# File 'lib/vines/user.rb', line 91

def add_subscription_from(jid)
  unless contact = contact(jid)
    contact = Contact.new(:jid => jid)
    @roster << contact
  end
  contact.subscribe_from
end

#contact(jid) ⇒ Object

Returns the contact with this jid or nil if not found.



42
43
44
45
# File 'lib/vines/user.rb', line 42

def contact(jid)
  bare = JID.new(jid).bare
  @roster.find {|c| c.jid.bare == bare }
end

#contact?(jid) ⇒ Boolean

Return true if the jid is on this user’s roster.

Returns:

  • (Boolean)


37
38
39
# File 'lib/vines/user.rb', line 37

def contact?(jid)
  !contact(jid).nil?
end

#hashObject



25
26
27
# File 'lib/vines/user.rb', line 25

def hash
  jid.to_s.hash
end

#remove_contact(jid) ⇒ Object

Removes the contact with this jid from the user’s roster.



62
63
64
65
# File 'lib/vines/user.rb', line 62

def remove_contact(jid)
  bare = JID.new(jid).bare
  @roster.reject! {|c| c.jid.bare == bare }
end

#remove_subscription_from(jid) ⇒ Object



105
106
107
108
109
# File 'lib/vines/user.rb', line 105

def remove_subscription_from(jid)
  if contact = contact(jid)
    contact.unsubscribe_from
  end
end

#remove_subscription_to(jid) ⇒ Object



99
100
101
102
103
# File 'lib/vines/user.rb', line 99

def remove_subscription_to(jid)
  if contact = contact(jid)
    contact.unsubscribe_to
  end
end

#request_subscription(jid) ⇒ Object

Update the contact’s jid on this user’s roster to signal that this user has requested the contact’s permission to receive their presence updates.



81
82
83
84
85
86
87
# File 'lib/vines/user.rb', line 81

def request_subscription(jid)
  unless contact = contact(jid)
    contact = Contact.new(:jid => jid)
    @roster << contact
  end
  contact.ask = 'subscribe' if %w[none from].include?(contact.subscription)
end

#subscribed_from?(jid) ⇒ Boolean

Returns true if the user has a presence subscription from this contact. The contact is subscribed to this user’s presence.

Returns:

  • (Boolean)


56
57
58
59
# File 'lib/vines/user.rb', line 56

def subscribed_from?(jid)
  contact = contact(jid)
  contact && contact.subscribed_from?
end

#subscribed_from_contactsObject

Returns a list of the contacts that are subscribed to this user’s presence updates.



75
76
77
# File 'lib/vines/user.rb', line 75

def subscribed_from_contacts
  @roster.select {|c| c.subscribed_from? }
end

#subscribed_to?(jid) ⇒ Boolean

Returns true if the user is subscribed to this contact’s presence updates.

Returns:

  • (Boolean)


49
50
51
52
# File 'lib/vines/user.rb', line 49

def subscribed_to?(jid)
  contact = contact(jid)
  contact && contact.subscribed_to?
end

#subscribed_to_contactsObject

Returns a list of the contacts to which this user has successfully subscribed.



69
70
71
# File 'lib/vines/user.rb', line 69

def subscribed_to_contacts
  @roster.select {|c| c.subscribed_to? }
end

#to_roster_xml(id) ⇒ Object

Returns this user’s roster contacts as an iq query element.



112
113
114
115
116
117
118
119
120
121
# File 'lib/vines/user.rb', line 112

def to_roster_xml(id)
  doc = Nokogiri::XML::Document.new
  doc.create_element('iq', 'id' => id, 'type' => 'result') do |el|
    el << doc.create_element('query', 'xmlns' => 'jabber:iq:roster') do |query|
      @roster.sort!.each do |contact|
        query << contact.to_roster_xml
      end
    end
  end
end

#update_from(user) ⇒ Object

Update this user’s information from the given user object.



30
31
32
33
34
# File 'lib/vines/user.rb', line 30

def update_from(user)
  @name = user.name
  @password = user.password
  @roster = user.roster.map {|c| c.clone }
end