Sha256: 538ff8dce711a2db6ba47134bea89c4978c088e5afadeeb8c6614ba4f03372b9

Contents?: true

Size: 1.63 KB

Versions: 1

Compression:

Stored size: 1.63 KB

Contents

module Blather

  class RosterItem
    attr_reader :jid,
                :ask,
                :statuses

    attr_accessor :name,
                  :groups

    def initialize(item)
      @statuses = []

      if item.is_a?(JID)
        self.jid = item.stripped
      elsif item.is_a?(XMPPNode)
        self.jid          = JID.new(item['jid']).stripped
        self.name         = item['name']
        self.subscription = item['subscription']
        self.ask          = item['ask']
        item.groups.each { |g| self.groups << g }
      end
    end

    def jid=(jid)
      @jid = JID.new(jid).stripped
    end

    VALID_SUBSCRIPTION_TYPES = [:both, :from, :none, :remove, :to].freeze
    def subscription=(sub)
      raise ArgumentError, "Invalid Type (#{sub}), use: #{VALID_SUBSCRIPTION_TYPES*' '}" if
        sub && !VALID_SUBSCRIPTION_TYPES.include?(sub = sub.to_sym)
      @subscription = sub ? sub : :none
    end

    def subscription
      @subscription || :none
    end

    def ask=(ask)
      raise ArgumentError, "Invalid Type (#{ask}), use: #{VALID_SUBSCRIPTION_TYPES*' '}" if ask && (ask = ask.to_sym) != :subscribe
      @ask = ask ? ask : nil
    end

    def status=(presence)
      @statuses.delete_if { |s| s.from == presence.from }
      @statuses << presence
      @statuses.sort!
    end

    def status(resource = nil)
      top = resource ? @statuses.detect { |s| s.from.resource == resource } : @statuses.first
    end

    def to_stanza(type = nil)
      r = Stanza::Iq::Roster.new type
      n = Stanza::Iq::Roster::RosterItem.new jid, name, subscription, ask
      r.query << n
      n.groups = groups
      r
    end
  end #RosterItem

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sprsquish-blather-0.1 lib/blather/core/roster_item.rb