class Dyndoc::RbServer
Public Class Methods
capture(code,rbEnvir=nil)
click to toggle source
# File lib/dyndoc/base/filter/server.rb, line 129 def RbServer.capture(code,rbEnvir=nil) require 'stringio' require 'ostruct' begin # redirect output to StringIO objects oldstdout,oldstderr=$stdout, $stderr stdout, stderr = StringIO.new, StringIO.new $stdout, $stderr = stdout, stderr if rbEnvir.is_a? Binding out=rbEnvir.eval(code) elsif rbEnvir.is_a? Module out=rbEnvir.module_eval(code) end ensure # restore normal output $stdout, $stderr = oldstdout,oldstderr end {input: code, output: out.inspect, stdout: stdout.string, stderr: stderr.string} end
echo(code,rbEnvir=nil,prompt="ruby> ",tab=2)
click to toggle source
# File lib/dyndoc/base/filter/server.rb, line 166 def RbServer.echo(code,rbEnvir=nil,prompt="ruby> ",tab=2) out="" res=RbServer.inputsAndOutputs(code,rbEnvir) ## Dyndoc.warn "RbServer",res res.each do |cmd| ## Dyndoc.warn "input",cmd out << prompt+ cmd[:input].split("\n").each_with_index.map{|e,i| i==0 ? e : " "*(prompt.length)+e}.join("\n").gsub(/\t/," "*tab) out << "\n" ## Dyndoc.warn "output1",out out << cmd[:stdout] out << cmd[:output] || "" ## Dyndoc.warn "output2",out out << cmd[:stderr]!="" ? cmd[:stderr] : "" out << (cmd[:output] ? "\n\n" : "") ## Dyndoc.warn "output3",out end out end
echo_verb(txt,mode,rbEnvir=nil)
click to toggle source
# File lib/dyndoc/base/filter/server.rb, line 185 def RbServer.echo_verb(txt,mode,rbEnvir=nil) ## Dyndoc.warn "echo_verb:txt",txt txtout=Dyndoc::RbServer.echo(txt.strip,rbEnvir).strip mode=:default unless Dyndoc::VERB.keys.include? mode header= (mode!=:default) and txtout.length>0 out="" out << Dyndoc::VERB[mode][:begin] << "\n" if header out << txtout out << "\n" << Dyndoc::VERB[mode][:end] << "\n" if header out end
filter(str,rbEnvir=nil)
click to toggle source
# File lib/dyndoc/base/filter/server.rb, line 32 def RbServer.filter(str,rbEnvir=nil) res=str.gsub(/\\?(?i:\#Rb|\#rb|\:Rb|\:rb|\:)#{@@start}[^#{@@stop}]+#{@@stop}/) {|w| if w[0,1]=="\\" w[1..-1] else k=(w[1,2].downcase=="rb" ? w[4..-2] : w[2..-2]) #the key #p "apply:Rb";p k;p w;p rbEnvir RbServer.output(k,rbEnvir,:error=> w) end } res end
inputsAndOutputs(code,rbEnvir=nil)
click to toggle source
# File lib/dyndoc/base/filter/server.rb, line 152 def RbServer.inputsAndOutputs(code,rbEnvir=nil) require 'ripper' res = [] input = "" code.each_line do |l| input += l if Ripper.sexp input res << RbServer.capture(input,rbEnvir) input = "" end end res end
output(code,rbEnvir=nil,opts={:error=>"ERROR"})
click to toggle source
def RbServer.output(code,rbEnvir=nil,error="ERROR") begin
puts “code”;p code
out=eval(code,rbEnvir)
puts “out”;p out
rescue out=error end
p out
out=out.join(",") if out.is_a? Array out.to_s end
# File lib/dyndoc/base/filter/server.rb, line 60 def RbServer.output(code,rbEnvir=nil,opts={:error=>"ERROR"}) begin if rbEnvir.is_a? Binding out=rbEnvir.eval(code) elsif rbEnvir.is_a? Module out=rbEnvir.module_eval(code) end rescue if RUBY_VERSION >= "1.9.3" and rbEnvir.is_a? Binding and rbEnvir.eval("local_variables").include? :childBinding begin rbEnvir2=rbEnvir.eval("childBinding") out=rbEnvir2.eval(code) return out rescue end end #two solution: #in the same spirit as #{} # out="\\:{"+code+"}" # or more informative for debugging! out="\\:{"+code+"}" if Dyndoc.cfg_dyn[:ruby_debug] ==:expression Dyndoc.warn "WARNING: >>>>>>>>>>>>>>>>>>+\n"+opts[:error]+" in #{rbEnvir}:\n"+code+"\n<<<<<<<<<<<<<<<<<<" end if Dyndoc.cfg_dyn[:dyndoc_mode]!=:normal and $dyn_logger ##p ["error ruby",code] $dyn_logger.write("\nERROR Ruby:\n"+code+"\n") end rescue SyntaxError $outRbError="RbServer syntax error in: "+code puts $outRbError raise SystemError if Dyndoc.cfg_dyn[:dyndoc_mode]==:normal and Dyndoc.cfg_dyn[:ruby_debug]!=:none if Dyndoc.cfg_dyn[:dyndoc_mode]!=:normal $dyn_logger.write("\nERROR Ruby Syntax:\n"+code+"\n") end out=":{"+code+"}" end #p out out end
redirect() { || ... }
click to toggle source
# File lib/dyndoc/base/filter/server.rb, line 109 def RbServer.redirect if block_given? require 'stringio' begin # redirect output to StringIO objects oldstdout,oldstderr=$stdout, $stderr stdout, stderr = StringIO.new, StringIO.new $stdout, $stderr = stdout, stderr yield ensure # restore normal output $stdout, $stderr = oldstdout,oldstderr end return {stdout: stdout.string, stderr: stderr.string} else return {stdout: "", stderr: ""} end end