class Vines::Contact
Attributes
ask[RW]
from_diaspora[RW]
groups[RW]
jid[R]
name[RW]
subscription[RW]
Public Class Methods
new(args={})
click to toggle source
# File lib/vines/contact.rb, line 10 def initialize(args={}) @jid = JID.new(args[:jid]).bare raise ArgumentError, 'invalid jid' if @jid.empty? @name = args[:name] @subscription = args[:subscription] || 'none' @from_diaspora = args[:from_diaspora] || false @ask = args[:ask] @groups = args[:groups] || [] end
Public Instance Methods
<=>(contact)
click to toggle source
# File lib/vines/contact.rb, line 20 def <=>(contact) contact.is_a?(Contact) ? self.jid.to_s <=> contact.jid.to_s : nil end
can_subscribe?()
click to toggle source
Returns true if this contact is in a state that allows the user to subscribe to their presence updates.
# File lib/vines/contact.rb, line 40 def can_subscribe? @ask == 'subscribe' && %w[none from].include?(@subscription) end
hash()
click to toggle source
# File lib/vines/contact.rb, line 26 def hash jid.to_s.hash end
send_roster_push(recipient)
click to toggle source
Write an iq stanza to the recipient stream representing this contact's current roster item state.
# File lib/vines/contact.rb, line 88 def send_roster_push(recipient) doc = Nokogiri::XML::Document.new node = doc.create_element('iq', 'id' => Kit.uuid, 'to' => recipient.user.jid.to_s, 'type' => 'set') node << doc.create_element('query', 'xmlns' => NAMESPACES[:roster]) do |query| query << to_roster_xml end recipient.write(node) end
subscribe_from()
click to toggle source
# File lib/vines/contact.rb, line 53 def subscribe_from @subscription = (@subscription == 'none') ? 'from' : 'both' @ask = nil end
subscribe_to()
click to toggle source
# File lib/vines/contact.rb, line 44 def subscribe_to @subscription = (@subscription == 'none') ? 'to' : 'both' @ask = nil end
subscribed_from?()
click to toggle source
Returns true if the user has a presence subscription from this contact. The contact is subscribed to this user's presence.
# File lib/vines/contact.rb, line 70 def subscribed_from? %w[from both].include?(@subscription) end
subscribed_to?()
click to toggle source
Returns true if the user is subscribed to this contact's presence updates.
# File lib/vines/contact.rb, line 64 def subscribed_to? %w[to both].include?(@subscription) end
to_h()
click to toggle source
Returns a hash of this contact's attributes suitable for persisting in a document store.
# File lib/vines/contact.rb, line 76 def to_h { 'name' => @name, 'subscription' => @subscription, 'from_diaspora' => @from_diaspora, 'ask' => @ask, 'groups' => @groups.sort! } end
to_roster_xml()
click to toggle source
Returns this contact as an xmpp <item> element.
# File lib/vines/contact.rb, line 101 def to_roster_xml doc = Nokogiri::XML::Document.new doc.create_element('item') do |el| el['ask'] = @ask unless @ask.nil? || @ask.empty? el['jid'] = @jid.bare.to_s el['name'] = @name unless @name.nil? || @name.empty? el['subscription'] = @subscription el['from_diaspora'] = @from_diaspora @groups.sort!.each do |group| el << doc.create_element('group', group) end end end
unsubscribe_from()
click to toggle source
# File lib/vines/contact.rb, line 58 def unsubscribe_from @subscription = (@subscription == 'both') ? 'to' : 'none' end
unsubscribe_to()
click to toggle source
# File lib/vines/contact.rb, line 49 def unsubscribe_to @subscription = (@subscription == 'both') ? 'from' : 'none' end
update_from(contact)
click to toggle source
# File lib/vines/contact.rb, line 30 def update_from(contact) @name = contact.name @subscription = contact.subscription @from_diaspora = contact.from_diaspora @ask = contact.ask @groups = contact.groups.clone end