class TaskJuggler::XMLDocument

This class provides a rather simple XML document generator. It provides basic features to create a tree of XMLElements and to generate a XML String or file. It's much less powerful than REXML but provides a more efficient API to create XMLDocuments with lots of attributes.

Public Class Methods

new() { |block| ... } click to toggle source

Create an empty XML document.

# File lib/taskjuggler/XMLDocument.rb, line 24
def initialize(&block)
  @elements = block ? yield(block) : []
end

Public Instance Methods

<<(arg) click to toggle source

Add a top-level XMLElement.

# File lib/taskjuggler/XMLDocument.rb, line 29
def <<(arg)
  if arg.is_a?(Array)
    @elements += arg.flatten
  elsif arg.nil?
    # do nothing
  elsif arg.is_a?(XMLElement)
    @elements << arg
  else
    raise ArgumentError, "Unsupported argument of type #{arg.class}: " +
                         "#{arg.inspect}"
  end
end
to_s() click to toggle source

Produce the XMLDocument as String.

# File lib/taskjuggler/XMLDocument.rb, line 43
def to_s
  str = ''
  @elements.each do |element|
    str << element.to_s(0)
  end

  str
end
write(filename) click to toggle source

Write the XMLDocument to the specified file.

# File lib/taskjuggler/XMLDocument.rb, line 53
def write(filename)
  f = filename == '.' ? $stdout : File.new(filename.untaint, 'w')
  @elements.each do |element|
    f.puts element.to_s(0)
  end
  f.close unless f == $stdout
end