Class DBus::IntrospectXMLParser
In: lib/dbus/introspect.rb
Parent: Object

D-Bus introspect XML parser class

This class parses introspection XML of an object and constructs a tree of Node, Interface, Method, Signal instances.

Methods

new   parse   parse_subnodes  

Public Class methods

Creates a new parser for XML data in string xml.

[Source]

# File lib/dbus/introspect.rb, line 228
    def initialize(xml)
      @xml = xml
    end

Public Instance methods

return a pair: [list of Interfaces, list of direct subnode names]

[Source]

# File lib/dbus/introspect.rb, line 243
    def parse
      interfaces = Array.new
      subnodes = Array.new
      t = Time.now
      d = REXML::Document.new(@xml)
      d.elements.each("node/node") do |e|
        subnodes << e.attributes["name"]
      end
      d.elements.each("node/interface") do |e|
        i = Interface.new(e.attributes["name"])
        e.elements.each("method") do |me|
          m = Method.new(me.attributes["name"])
          parse_methsig(me, m)
          i << m
        end
        e.elements.each("signal") do |se|
          s = Signal.new(se.attributes["name"])
          parse_methsig(se, s)
          i << s
        end
        interfaces << i
      end
      d = Time.now - t
      if d > 2
        puts "Some XML took more that two secs to parse. Optimize me!" if $DEBUG
      end
      [interfaces, subnodes]
    end

return the names of direct subnodes

[Source]

# File lib/dbus/introspect.rb, line 233
    def parse_subnodes
      subnodes = Array.new
      d = REXML::Document.new(@xml)
      d.elements.each("node/node") do |e|
        subnodes << e.attributes["name"]
      end
      subnodes
    end

[Validate]