Class | XTemplate::XMLTemplate |
In: |
lib/xtemplate.rb
|
Parent: | Object |
DEFAULT_OPTS | = | { :keep_template => true, :keep_data => false, :plugin => XPath::Action.new, } |
node | [R] |
# 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 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 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