# 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
# 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
# File lib/xtemplate.rb, line 62 def <<(template) @node.add_child(template.node) self end
# File lib/xtemplate.rb, line 42 def [](name) node = @templates[name] if( node ) self.class.new(node) else nil end end
# 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
# File lib/xtemplate.rb, line 71 def dump() [Marshal.dump(self)].pack("m") end
# File lib/xtemplate.rb, line 37 def dup() self.class.new(@node.deep_dup, @templates) end
# File lib/xtemplate.rb, line 88 def expand(data, opts = nil) s = SanitizedString[''] expand2(s, data, opts) s end
# 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
# File lib/xtemplate.rb, line 67 def to_s @node.to_s end