Class: Vines::Contact
- Inherits:
-
Object
- Object
- Vines::Contact
- Includes:
- Comparable
- Defined in:
- lib/vines/contact.rb
Instance Attribute Summary collapse
-
#ask ⇒ Object
Returns the value of attribute ask.
-
#from_diaspora ⇒ Object
Returns the value of attribute from_diaspora.
-
#groups ⇒ Object
Returns the value of attribute groups.
-
#jid ⇒ Object
readonly
Returns the value of attribute jid.
-
#name ⇒ Object
Returns the value of attribute name.
-
#subscription ⇒ Object
Returns the value of attribute subscription.
Instance Method Summary collapse
- #<=>(contact) ⇒ Object
-
#can_subscribe? ⇒ Boolean
Returns true if this contact is in a state that allows the user to subscribe to their presence updates.
- #hash ⇒ Object
-
#initialize(args = {}) ⇒ Contact
constructor
A new instance of Contact.
-
#send_roster_push(recipient) ⇒ Object
Write an iq stanza to the recipient stream representing this contact’s current roster item state.
- #subscribe_from ⇒ Object
- #subscribe_to ⇒ Object
-
#subscribed_from? ⇒ Boolean
Returns true if the user has a presence subscription from this contact.
-
#subscribed_to? ⇒ Boolean
Returns true if the user is subscribed to this contact’s presence updates.
-
#to_h ⇒ Object
Returns a hash of this contact’s attributes suitable for persisting in a document store.
-
#to_roster_xml ⇒ Object
Returns this contact as an xmpp <item> element.
- #unsubscribe_from ⇒ Object
- #unsubscribe_to ⇒ Object
- #update_from(contact) ⇒ Object
Constructor Details
#initialize(args = {}) ⇒ Contact
Returns a new instance of Contact.
10 11 12 13 14 15 16 17 18 |
# File 'lib/vines/contact.rb', line 10 def initialize(args={}) @jid = JID.new(args[:jid]). 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 |
Instance Attribute Details
#ask ⇒ Object
Returns the value of attribute ask.
7 8 9 |
# File 'lib/vines/contact.rb', line 7 def ask @ask end |
#from_diaspora ⇒ Object
Returns the value of attribute from_diaspora.
7 8 9 |
# File 'lib/vines/contact.rb', line 7 def from_diaspora @from_diaspora end |
#groups ⇒ Object
Returns the value of attribute groups.
7 8 9 |
# File 'lib/vines/contact.rb', line 7 def groups @groups end |
#jid ⇒ Object (readonly)
Returns the value of attribute jid.
8 9 10 |
# File 'lib/vines/contact.rb', line 8 def jid @jid end |
#name ⇒ Object
Returns the value of attribute name.
7 8 9 |
# File 'lib/vines/contact.rb', line 7 def name @name end |
#subscription ⇒ Object
Returns the value of attribute subscription.
7 8 9 |
# File 'lib/vines/contact.rb', line 7 def subscription @subscription end |
Instance Method Details
#<=>(contact) ⇒ Object
20 21 22 |
# 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? ⇒ Boolean
Returns true if this contact is in a state that allows the user to subscribe to their presence updates.
40 41 42 |
# File 'lib/vines/contact.rb', line 40 def can_subscribe? @ask == 'subscribe' && %w[none from].include?(@subscription) end |
#hash ⇒ Object
26 27 28 |
# File 'lib/vines/contact.rb', line 26 def hash jid.to_s.hash end |
#send_roster_push(recipient) ⇒ Object
Write an iq stanza to the recipient stream representing this contact’s current roster item state.
88 89 90 91 92 93 94 95 96 97 98 |
# 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 ⇒ Object
53 54 55 56 |
# File 'lib/vines/contact.rb', line 53 def subscribe_from @subscription = (@subscription == 'none') ? 'from' : 'both' @ask = nil end |
#subscribe_to ⇒ Object
44 45 46 47 |
# File 'lib/vines/contact.rb', line 44 def subscribe_to @subscription = (@subscription == 'none') ? 'to' : 'both' @ask = nil end |
#subscribed_from? ⇒ Boolean
Returns true if the user has a presence subscription from this contact. The contact is subscribed to this user’s presence.
70 71 72 |
# File 'lib/vines/contact.rb', line 70 def subscribed_from? %w[from both].include?(@subscription) end |
#subscribed_to? ⇒ Boolean
Returns true if the user is subscribed to this contact’s presence updates.
64 65 66 |
# File 'lib/vines/contact.rb', line 64 def subscribed_to? %w[to both].include?(@subscription) end |
#to_h ⇒ Object
Returns a hash of this contact’s attributes suitable for persisting in a document store.
76 77 78 79 80 81 82 83 84 |
# 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 ⇒ Object
Returns this contact as an xmpp <item> element.
101 102 103 104 105 106 107 108 109 110 111 112 113 |
# 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..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 ⇒ Object
58 59 60 |
# File 'lib/vines/contact.rb', line 58 def unsubscribe_from @subscription = (@subscription == 'both') ? 'to' : 'none' end |
#unsubscribe_to ⇒ Object
49 50 51 |
# File 'lib/vines/contact.rb', line 49 def unsubscribe_to @subscription = (@subscription == 'both') ? 'from' : 'none' end |
#update_from(contact) ⇒ Object
30 31 32 33 34 35 36 |
# 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 |