Sha256: 4451210ed89cf503b7e3fa0a80f92167fbf86de5748dff2e9747e9f33b1e10b3

Contents?: true

Size: 1.09 KB

Versions: 4

Compression:

Stored size: 1.09 KB

Contents

# encoding: UTF-8

module Vines
  class JID
    include Comparable

    PATTERN = /^(?:([^@]*)@)??([^@\/]*)(?:\/(.*?))?$/.freeze

    attr_reader :node, :domain, :resource
    attr_writer :resource

    def self.new(node, domain=nil, resource=nil)
      node.is_a?(JID) ? node : super
    end

    def initialize(node, domain=nil, resource=nil)
      @node, @domain, @resource = node, domain, resource

      if @domain.nil? && @resource.nil?
        @node, @domain, @resource = @node.to_s.scan(PATTERN).first
      end
      [@node, @domain].each {|piece| piece.downcase! if piece }

      [@node, @domain, @resource].each do |piece|
        raise ArgumentError, 'jid too long' if (piece || '').size > 1023
      end
    end

    def bare
      JID.new(@node, @domain)
    end

    def bare?
      @resource.nil?
    end

    def <=>(jid)
      self.to_s <=> jid.to_s
    end

    def eql?(jid)
      jid.is_a?(JID) && self == jid
    end

    def hash
      self.to_s.hash
    end

    def to_s
      s = @domain
      s = "#{@node}@#{s}" if @node
      s = "#{s}/#{@resource}" if @resource
      s
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
vines-0.2.1 lib/vines/jid.rb
vines-0.2.0 lib/vines/jid.rb
vines-0.1.1 lib/vines/jid.rb
vines-0.1.0 lib/vines/jid.rb