class Vines::User

Attributes

jid[R]
name[RW]
password[RW]
roster[RW]

Public Class Methods

new(args={}) click to toggle source
# 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

Public Instance Methods

<=>(user) click to toggle source
# 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) click to toggle source

Add the user's jid to this follower's roster with a subscription state of 'from.' This signals that this follower has approved a user's subscription.

# File lib/vines/user.rb, line 91
def add_subscription_from(jid)
  unless follower = follower(jid)
    follower = Follower.new(:jid => jid)
    @roster << follower
  end
  follower.subscribe_from
end
follower(jid) click to toggle source

Returns the follower with this jid or nil if not found.

# File lib/vines/user.rb, line 42
def follower(jid)
  bare = JID.new(jid).bare
  @roster.find {|c| c.jid.bare == bare }
end
follower?(jid) click to toggle source

Return true if the jid is on this user's roster.

# File lib/vines/user.rb, line 37
def follower?(jid)
  !follower(jid).nil?
end
hash() click to toggle source
# File lib/vines/user.rb, line 25
def hash
  jid.to_s.hash
end
remove_follower(jid) click to toggle source

Removes the follower with this jid from the user's roster.

# File lib/vines/user.rb, line 62
def remove_follower(jid)
  bare = JID.new(jid).bare
  @roster.reject! {|c| c.jid.bare == bare }
end
remove_subscription_from(jid) click to toggle source
# File lib/vines/user.rb, line 105
def remove_subscription_from(jid)
  if follower = follower(jid)
    follower.unsubscribe_from
  end
end
remove_subscription_to(jid) click to toggle source
# File lib/vines/user.rb, line 99
def remove_subscription_to(jid)
  if follower = follower(jid)
    follower.unsubscribe_to
  end
end
request_subscription(jid) click to toggle source

Update the follower's jid on this user's roster to signal that this user has requested the follower's permission to receive their presence updates.

# File lib/vines/user.rb, line 81
def request_subscription(jid)
  unless follower = follower(jid)
    follower = Follower.new(:jid => jid)
    @roster << follower
  end
  follower.ask = 'subscribe' if %w[none from].include?(follower.subscription)
end
subscribed_from?(jid) click to toggle source

Returns true if the user has a presence subscription from this follower. The follower is subscribed to this user's presence.

# File lib/vines/user.rb, line 56
def subscribed_from?(jid)
  follower = follower(jid)
  follower && follower.subscribed_from?
end
subscribed_from_followers() click to toggle source

Returns a list of the followers that are subscribed to this user's presence updates.

# File lib/vines/user.rb, line 75
def subscribed_from_followers
  @roster.select {|c| c.subscribed_from? }
end
subscribed_to?(jid) click to toggle source

Returns true if the user is subscribed to this follower's presence updates.

# File lib/vines/user.rb, line 49
def subscribed_to?(jid)
  follower = follower(jid)
  follower && follower.subscribed_to?
end
subscribed_to_followers() click to toggle source

Returns a list of the followers to which this user has successfully subscribed.

# File lib/vines/user.rb, line 69
def subscribed_to_followers
  @roster.select {|c| c.subscribed_to? }
end
to_roster_xml(id) click to toggle source

Returns this user's roster followers as an iq query element.

# 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 |follower|
        query << follower.to_roster_xml
      end
    end
  end
end
update_from(user) click to toggle source

Update this user's information from the given user object.

# 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