class XTemplate::XMLTemplate

Constants

DEFAULT_OPTS

Attributes

node[R]

Public Class Methods

load(str) click to toggle source
# File lib/xtemplate.rb, line 75
def XMLTemplate.load(str)
  if( str.respond_to?(:read) )
    str = str.read
  end
  Marshal.load(str.unpack("m")[0])
end
new(doc, templates = nil) click to toggle source
# File lib/xtemplate.rb, line 24
def initialize(doc, templates = nil)
  case doc
  when XNode
    @node = doc
    @templates = templates || {}
  else
    parser = XMLParser.new
    @node = parser.parse(doc)
    @templates = templates || {}
    @node.prepare(nil, nil, @templates)
  end
end

Public Instance Methods

<<(template) click to toggle source
# File lib/xtemplate.rb, line 62
def <<(template)
  @node.add_child(template.node)
  self
end
[](name) click to toggle source
# File lib/xtemplate.rb, line 42
def [](name)
  node = @templates[name]
  if( node )
    self.class.new(node)
  else
    nil
  end
end
[]=(name, template) click to toggle source
# File lib/xtemplate.rb, line 51
def []=(name, template)
  node = @templates[name]
  node.children = []
  if( template )
    [template.node.children].flatten.each{|child|
      node.add_child(child)
    }
  end
  node
end
clone()
Alias for: dup
dump() click to toggle source
# File lib/xtemplate.rb, line 71
def dump()
  [Marshal.dump(self)].pack("m")
end
dup() click to toggle source
# File lib/xtemplate.rb, line 37
def dup()
  self.class.new(@node.deep_dup, @templates)
end
Also aliased as: clone
expand(data, opts = nil) click to toggle source
# File lib/xtemplate.rb, line 88
def expand(data, opts = nil)
  s = SanitizedString['']
  expand2(s, data, opts)
  s
end
expand2(io, data, opts = nil) click to toggle source
# File lib/xtemplate.rb, line 94
def expand2(io, data, opts = nil)
  if( opts )
    DEFAULT_OPTS.each{|key,val|
      opts[key] ||= val
    }
  else
    opts = DEFAULT_OPTS
  end
  if( opts[:keep_template] )
    node = @node.deep_dup()
  else
    node = @node
  end
  if( opts[:keep_data] )
    data = XTemplate::dup_data(data)
  end
  if( defined?(data.to_hash) )
    data = data.to_hash
  end
  node.expand(data, nil, data, opts[:plugin]) # (1)current data (2)parent data (3)root data
  node.dump(io)
end
to_s() click to toggle source
# File lib/xtemplate.rb, line 67
def to_s
  @node.to_s
end