Class | XTemplate::XPath::Action |
In: |
lib/xtemplate/xpath.rb
|
Parent: | Object |
sanitize | -> | __sanitize__ |
unsanitize | -> | __unsanitize__ |
# File lib/xtemplate/xpath.rb, line 41 def alt(val, *args) args.each{|arg| if( _alt_exist?(arg) ) val = nil else _alt(arg) end } val end
# File lib/xtemplate/xpath.rb, line 244 def array(val) if( val.is_a?(Enumerable) ) newval = val.to_a else newval = val end newval end
# File lib/xtemplate/xpath.rb, line 59 def attr(val, *args) case val when Hash newval = val.dup args.each{|a| a.strip! if( v = newval[a] ) newval.delete(a) newval['@'+a] = v end } newval when Array val.collect{|v| attr(v, *args)} else nil end end
# File lib/xtemplate/xpath.rb, line 422 def clear_stack(val, name) stack = ((Thread.current[:xtemplate] ||= [])[name.intern] ||= []) stack.clear val end
# File lib/xtemplate/xpath.rb, line 120 def copy(val, x, y) case val when Hash newval = val.dup if( v = newval[x] ) newval[y] = v end newval when Array val.collect{|v| copy(v, x, y)} else nil end end
# File lib/xtemplate/xpath.rb, line 378 def delete(val, *args) case val when Hash newval = val.dup args.each{|s| s.strip! if( newval[s] ) newval.delete(s) end } newval when Array val.collect{|v| delete(v, *args)} else nil end end
# File lib/xtemplate/xpath.rb, line 348 def dump(val, name=nil) if( name ) parent = XNode.new(name) else parent = XNode.new() end value_to_xml(val, parent) parent.to_s end
# File lib/xtemplate/xpath.rb, line 322 def flatten(val) warn("The action 'flatten' and 'hash' will be obsoleted.") case val when Array newval = {} text = "" val.each{|elem| case elem when Hash elem.each{|k,v| newval[k] = v } else text.concat(elem.to_s) end } if( text.size > 0 ) newval[TextNode] = text end else newval = val end newval end
# File lib/xtemplate/xpath.rb, line 223 def float(val) if( val[TextNode] ) newval = val.dup newval[TextNode] = newval[TextNode].to_i else newval = val.to_f end newval end
# File lib/xtemplate/xpath.rb, line 432 def import(val, *args) case args[0] when /^xml:\/\/(.+)/ fn = $1 doc = File.open(fn){|f|f.read} parser = XMLParser.new() node = parser.parse(doc) node.prepare() XMLDocument.new(node).to_hash when /^data:\/\/(.+)/ fn = $1 eval(File.open(fn){|f|f.read}) when /^var:(.+)/ eval($1) when /^yaml:\/\/(.+)/ require 'xtemplate/yaml' fn = $1 File.open(fn){|f|YAMLDocument.new(f)} when /^soap:\/\/(.+)/ require 'soap/driver' args.shift endpoint = $1 namespace = args.shift if( namespace =~ /^\s*$/ ) namespace = nil end obj = SOAP::Driver.new(nil, nil, namespace, "http://#{endpoint}") m = args.shift argv = args.collect{|s| eval_expr(s,val,nil) } i = -1 obj.addMethod(m, *(argv.collect{ i+=1; "arg" + i.to_s })) obj.call(m, *argv) when /^xmlrpc:\/\/(.+)/ require 'xmlrpc/client' m = args[1] argv = args[2..-1].collect{|s| eval_expr(s,val,nil) } client = XMLRPC::Client.new2("http://#{$1}") client.call(m, *argv) when /^dbi:(.+)/ require 'dbi' h = DBI.connect("dbi:#{$1}") query = args[1..-1].collect{|s|s.gsub(/\#\{(.+)\}/){eval_expr($1,val,nil).to_s }}.join(',') newval = [] h.execute(query){|sth| while( r = sth.fetch_hash ) newval.push(r) end } newval else eval(args[0]) end end
# File lib/xtemplate/xpath.rb, line 291 def index(val, tag, ini=0) if( ini ) if( ini =~ /^([1-9]\d*)$/ ) ini = $1.to_i end end case val when Hash newval = val.dup newval[tag] = ini when Array newval = [] idx = ini val.each{|v| case v when Hash v = v.dup v[tag] = idx newval.push(v) else v = {TextNode => v, tag => idx} newval.push(v) end idx = idx.succ } else newval = {tag => ini, TextNode => val} end newval end
# File lib/xtemplate/xpath.rb, line 213 def int(val) if( val[TextNode] ) newval = val.dup newval[TextNode] = newval[TextNode].to_i else newval = val.to_i end newval end
# File lib/xtemplate/xpath.rb, line 98 def node(val) case val when Hash val.reject{|k,v| (k[0] == ?@ || k == TextNode)} when Array val.collect{|v| node(v)} else nil end end
# File lib/xtemplate/xpath.rb, line 515 def p(val, out=nil) case out when "stdout" f = $stdout when "stderr" f = $stderr else f = $stdout end f.print(value_inspect(val),"\n") val end
# File lib/xtemplate/xpath.rb, line 409 def pop(val, name) stack = ((Thread.current[:xtemplate] ||= [])[name.intern] ||= []) v = stack.pop [val, v].flatten end
# File lib/xtemplate/xpath.rb, line 415 def pop_all(val, name) stack = ((Thread.current[:xtemplate] ||= [])[name.intern] ||= []) newval = [val, stack.dup].flatten stack.clear newval end
# File lib/xtemplate/xpath.rb, line 396 def push(val, name) stack = ((Thread.current[:xtemplate] ||= {})[name.intern] ||= []) stack.push(val) case val when Hash {} when Array [] else nil end end
# File lib/xtemplate/xpath.rb, line 135 def rename(val, x, y) case val when Hash newval = val.dup if( v = newval[x] ) newval[y] = v newval.delete(x) end newval when Array val.collect{|v| rename(v, x, y)} else nil end end
# File lib/xtemplate/xpath.rb, line 370 def reverse(val) if( val.is_a?(Array) ) val.reverse else nil end end
# File lib/xtemplate/xpath.rb, line 359 def sanitize(val) s = String.new(val.to_s) __sanitize__(s) end
# File lib/xtemplate/xpath.rb, line 280 def size(val) case val when Array val.size when nil 0 else 1 end end
# File lib/xtemplate/xpath.rb, line 183 def sort(val, path=nil) if( val.is_a?(Array) ) if( path ) newval = val.sort{|x,y| path.split("/").each{|key| key.strip! if( x.is_a?(Hash) && y.is_a?(Hash) ) x,y = x[key], y[key] end } if( x.is_a?(Comparable) && y.is_a?(Comparable) ) x <=> y else 0 end } else newval = val.sort{|x,y| if( x && y ) x <=> y else 0 end } end else val end end
# File lib/xtemplate/xpath.rb, line 234 def string(val) if( val[TextNode] ) newval = val.dup newval[TextNode] = newval[TextNode].to_i else newval = val.to_s end newval end
# File lib/xtemplate/xpath.rb, line 253 def strip(val) case val when Hash if( val[TextNode] ) newval = val.dup() newval[TextNode] = newval[TextNode].strip() else newval = val end when Array newval = val.reject{|v| case v when Hash, Array false else v.to_s() =~ /\A\s*\z/ end } else newval = val.to_s().strip() if( newval.size == 0 ) newval = nil end end newval end
# File lib/xtemplate/xpath.rb, line 151 def tag(val, tag) case val when Hash newval = val.dup if( v = newval[TextNode] ) newval[tag] = v newval.delete(TextNode) end newval when Array val.collect{|v| tag(v, tag)} else {tag => val} end end
# File lib/xtemplate/xpath.rb, line 109 def text(val) case val when Hash val[TextNode] when Array val.collect{|v| text(v)} else val end end
# File lib/xtemplate/xpath.rb, line 486 def time(val, fmt, tag=nil) if( tag ) case val when Array val.collect{|v| time(v, fmt, tag)} when Hash str = Time.now.strftime(fmt) newval = val.dup tag ||= TextNode newval[tag] = str newval else if( val ) str = Time.now.strftime(fmt) newval = { tag => str, TextNode => val, } newval else nil end end else Time.now.strftime(fmt) end end
# File lib/xtemplate/xpath.rb, line 78 def unattr(val, *args) case val when Hash newval = val.dup args.each{|a| a.strip! k = '@'+a if( v = newval[k] ) newval.delete(k) newval[a] = v end } newval when Array val.collect{|v| unattr(v, *args)} else nil end end
# File lib/xtemplate/xpath.rb, line 365 def unsanitize(val) s = SanitizedString[val.to_s] SanitizedString[__unsanitize__(s)] end