Class: Vines::User
Direct Known Subclasses
Instance Attribute Summary collapse
-
#jid ⇒ Object
readonly
Returns the value of attribute jid.
-
#name ⇒ Object
Returns the value of attribute name.
-
#password ⇒ Object
Returns the value of attribute password.
-
#roster ⇒ Object
Returns the value of attribute roster.
Instance Method Summary collapse
- #<=>(user) ⇒ Object
-
#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.
-
#contact(jid) ⇒ Object
Returns the contact with this jid or nil if not found.
-
#contact?(jid) ⇒ Boolean
Return true if the jid is on this user’s roster.
- #hash ⇒ Object
-
#initialize(args = {}) ⇒ User
constructor
A new instance of User.
-
#remove_contact(jid) ⇒ Object
Removes the contact with this jid from the user’s roster.
- #remove_subscription_from(jid) ⇒ Object
- #remove_subscription_to(jid) ⇒ Object
-
#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.
-
#subscribed_from?(jid) ⇒ Boolean
Returns true if the user has a presence subscription from this contact.
-
#subscribed_from_contacts ⇒ Object
Returns a list of the contacts that are subscribed to this user’s presence updates.
-
#subscribed_to?(jid) ⇒ Boolean
Returns true if the user is subscribed to this contact’s presence updates.
-
#subscribed_to_contacts ⇒ Object
Returns a list of the contacts to which this user has successfully subscribed.
-
#to_roster_xml(id) ⇒ Object
Returns this user’s roster contacts as an iq query element.
-
#update_from(user) ⇒ Object
Update this user’s information from the given user object.
Constructor Details
#initialize(args = {}) ⇒ User
Returns a new instance of User.
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
#jid ⇒ Object (readonly)
Returns the value of attribute jid.
8 9 10 |
# File 'lib/vines/user.rb', line 8 def jid @jid end |
#name ⇒ Object
Returns the value of attribute name.
7 8 9 |
# File 'lib/vines/user.rb', line 7 def name @name end |
#password ⇒ Object
Returns the value of attribute password.
7 8 9 |
# File 'lib/vines/user.rb', line 7 def password @password end |
#roster ⇒ Object
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) = JID.new(jid). @roster.find {|c| c.jid. == } end |
#contact?(jid) ⇒ Boolean
Return true if the jid is on this user’s roster.
37 38 39 |
# File 'lib/vines/user.rb', line 37 def contact?(jid) !contact(jid).nil? end |
#hash ⇒ Object
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) = JID.new(jid). @roster.reject! {|c| c.jid. == } 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.
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_contacts ⇒ Object
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.
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_contacts ⇒ Object
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 |