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:[String] Initial Availability Status
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 196
196:     def <=>(o)
197:       if priority.to_i == o.priority.to_i
198:         cmp_interest(o)
199:       else
200:         priority.to_i <=> o.priority.to_i
201:       end
202:     end

[Source]

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

Get presence priority, or nil if absent

result:[Integer]

[Source]

     # File lib/xmpp4r/presence.rb, line 162
162:     def priority
163:        e = first_element_text('priority')
164:       if e
165:         return e.to_i
166:       else
167:         return nil
168:       end
169:     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 177
177:     def priority=(val)
178:       if val.nil?
179:         delete_element('priority')
180:       else
181:         replace_element_text('priority', val)
182:       end
183:     end

Set presence priority (chaining-friendly)

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

[Source]

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

Set Availability Status (chaining-friendly)

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

[Source]

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

Set status message (chaining-friendly)

val:[String] or nil

[Source]

     # File lib/xmpp4r/presence.rb, line 154
154:     def set_status(val)
155:       self.status = val
156:       self
157:     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 :away then text = 'away'
111:         when :chat then text = 'chat'
112:         when :dnd then text = 'dnd'
113:         when :xa then text = 'xa'
114:         when nil then text = nil
115:         else raise "Invalid value for show."
116:       end
117: 
118:       if text.nil?
119:         delete_element(xe)
120:       else
121:         xe.text = text
122:       end
123:     end

Get status message

result:[String] or nil

[Source]

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

Set status message

val:[String] or nil

[Source]

     # File lib/xmpp4r/presence.rb, line 143
143:     def status=(val)
144:       if val.nil?
145:         delete_element('status')
146:       else
147:         replace_element_text('status', val)
148:       end
149:     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]