Class Jabber::Presence
In: lib/xmpp4r/presence.rb
Parent: XMPPStanza

The presence class is used to construct presence messages to send to the Jabber service.

Methods

<=>   cmp_interest   new   priority   priority=   set_priority   set_show   set_status   set_type   show   show=   status   status=   type   type=  

Included Modules

Comparable XParent

Constants

PRESENCE_STATUS = { :chat => 4, nil => 3, :dnd => 2, :away => 1, :xa => 0, :unavailable => -1, :error => -2 }   Compare two presences. The most suitable to talk with is the biggest.

Public Class methods

Create presence stanza

show:[Symbol] Initial Availability Status (see show)
status:[String] Initial status message
priority:[Fixnum] Initial priority value

[Source]

    # File lib/xmpp4r/presence.rb, line 24
24:     def initialize(show=nil, status=nil, priority=nil)
25:       super()
26:       set_show(show) if show
27:       set_status(status) if status
28:       set_priority(priority) if priority
29:     end

Public Instance methods

Compare two presences using priority (with cmp_interest as fall-back).

[Source]

     # File lib/xmpp4r/presence.rb, line 197
197:     def <=>(o)
198:       if priority.to_i == o.priority.to_i
199:         cmp_interest(o)
200:       else
201:         priority.to_i <=> o.priority.to_i
202:       end
203:     end

[Source]

     # File lib/xmpp4r/presence.rb, line 215
215:     def cmp_interest(o)
216:       if type.nil?
217:         if o.type.nil?
218:           # both available.
219:           PRESENCE_STATUS[show] <=> PRESENCE_STATUS[o.show]
220:         else
221:           return -1
222:         end
223:       elsif o.type.nil?
224:         return 1
225:       else
226:         # both are non-nil. We consider this is equal.
227:         return 0
228:       end
229:     end

Get presence priority, or nil if absent

result:[Integer]

[Source]

     # File lib/xmpp4r/presence.rb, line 163
163:     def priority
164:        e = first_element_text('priority')
165:       if e
166:         return e.to_i
167:       else
168:         return nil
169:       end
170:     end

Set presence priority

val:[Integer] Priority value between -128 and +127

*Warning:* negative values make you receive no subscription requests etc. (RFC3921 - 2.2.2.3.)

[Source]

     # File lib/xmpp4r/presence.rb, line 178
178:     def priority=(val)
179:       if val.nil?
180:         delete_element('priority')
181:       else
182:         replace_element_text('priority', val)
183:       end
184:     end

Set presence priority (chaining-friendly)

val:[Integer] Priority value between -128 and +127

[Source]

     # File lib/xmpp4r/presence.rb, line 189
189:     def set_priority(val)
190:       self.priority = val
191:       self
192:     end

Set Availability Status (chaining-friendly)

val:[Symbol] or [Nil] See show for explanation

[Source]

     # File lib/xmpp4r/presence.rb, line 129
129:     def set_show(val)
130:       self.show = val
131:       self
132:     end

Set status message (chaining-friendly)

val:[String] or nil

[Source]

     # File lib/xmpp4r/presence.rb, line 155
155:     def set_status(val)
156:       self.status = val
157:       self
158:     end

Set type of presence (chaining-friendly)

val:[Symbol] See type for possible subscription types

[Source]

    # File lib/xmpp4r/presence.rb, line 76
76:     def set_type(val)
77:       self.type = val
78:       self
79:     end

Get Availability Status (RFC3921 - 5.2)

result:[Symbol] or [Nil] Valid values according to RFC3921:
  • nil (Available, no <show/> element)
  • :away
  • :chat (Free for chat)
  • :dnd (Do not disturb)
  • :xa (Extended away)

[Source]

    # File lib/xmpp4r/presence.rb, line 89
89:     def show
90:       e = first_element('show')
91:       text = e ? e.text : nil
92:       case text
93:         when 'away' then :away
94:         when 'chat' then :chat
95:         when 'dnd' then :dnd
96:         when 'xa' then :xa
97:         else nil
98:       end
99:     end

Set Availability Status

val:[Symbol] or [Nil] See show for explanation

[Source]

     # File lib/xmpp4r/presence.rb, line 104
104:     def show=(val)
105:       xe = first_element('show')
106:       if xe.nil?
107:         xe = add_element('show')
108:       end
109:       case val
110:         when String then raise "Invalid value for show."
111:         when :away then text = 'away'
112:         when :chat then text = 'chat'
113:         when :dnd then text = 'dnd'
114:         when :xa then text = 'xa'
115:         when nil then text = nil
116:         else raise "Invalid value for show."
117:       end
118: 
119:       if text.nil?
120:         delete_element(xe)
121:       else
122:         xe.text = text
123:       end
124:     end

Get status message

result:[String] or nil

[Source]

     # File lib/xmpp4r/presence.rb, line 137
137:     def status
138:       first_element_text('status')
139:     end

Set status message

val:[String] or nil

[Source]

     # File lib/xmpp4r/presence.rb, line 144
144:     def status=(val)
145:       if val.nil?
146:         delete_element('status')
147:       else
148:         replace_element_text('status', val)
149:       end
150:     end

Get type of presence

result:[Symbol] or [Nil] Possible values are:
  • :error
  • :probe (Servers send this to request presence information)
  • :subscribe (Subscription request)
  • :subscribed (Subscription approval)
  • :unavailable (User has gone offline)
  • :unsubscribe (Unsubscription request)
  • :unsubscribed (Unsubscription approval)
  • [nil] (available)

See RFC3921 - 2.2.1. for explanation.

[Source]

    # File lib/xmpp4r/presence.rb, line 44
44:     def type
45:       case super
46:         when 'error' then :error
47:         when 'probe' then :probe
48:         when 'subscribe' then :subscribe
49:         when 'subscribed' then :subscribed
50:         when 'unavailable' then :unavailable
51:         when 'unsubscribe' then :unsubscribe
52:         when 'unsubscribed' then :unsubscribed
53:         else nil
54:       end
55:     end

Set type of presence

val:[Symbol] See type for possible subscription types

[Source]

    # File lib/xmpp4r/presence.rb, line 60
60:     def type=(val)
61:       case val
62:         when :error then super('error')
63:         when :probe then super('probe')
64:         when :subscribe then super('subscribe')
65:         when :subscribed then super('subscribed')
66:         when :unavailable then super('unavailable')
67:         when :unsubscribe then super('unsubscribe')
68:         when :unsubscribed then super('unsubscribed')
69:         else super(nil)
70:       end
71:     end

[Validate]