Class XTemplate::XMLTemplate
In: lib/xtemplate.rb
Parent: Object

Methods

<<   []   []=   clone   dump   dup   expand   expand2   load   new   to_s  

Constants

DEFAULT_OPTS = { :keep_template => true, :keep_data => false, :plugin => XPath::Action.new, }

Attributes

node  [R] 

Public Class methods

[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

[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

[Source]

# File lib/xtemplate.rb, line 62
    def <<(template)
      @node.add_child(template.node)
      self
    end

[Source]

# File lib/xtemplate.rb, line 42
    def [](name)
      node = @templates[name]
      if( node )
        self.class.new(node)
      else
        nil
      end
    end

[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

[Source]

# File lib/xtemplate.rb, line 71
    def dump()
      [Marshal.dump(self)].pack("m")
    end

[Source]

# File lib/xtemplate.rb, line 37
    def dup()
      self.class.new(@node.deep_dup, @templates)
    end

[Source]

# File lib/xtemplate.rb, line 88
    def expand(data, opts = nil)
      s = SanitizedString['']
      expand2(s, data, opts)
      s
    end

[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

[Source]

# File lib/xtemplate.rb, line 67
    def to_s
      @node.to_s
    end

[Validate]