module Kernel
# safe_eval(string [, binding [, filename [,lineno]]] *allowed_class/module_names ) -> obj
#
# Evaluates the Ruby expression(s) in string. If
# binding is given, which must be a Binding
# object, the evaluation is performed in its context. If the
# optional filename and lineno parameters are
# present, they will be used when reporting syntax errors.
#
# def get_binding(str)
# return binding
# end
# str = "hello"
# safe_eval "str + ' Fred'" ,Kernel #=> "hello Fred"
# safe_eval "str + ' Fred'", get_binding("bye") ,Kernel #=> "bye Fred"
def safe_eval(*args)
# defaults
begin
allowed= Array.new
eval_exception= String.new
tmp_array= nil
end
# separate allowed names
begin
tmp_array= Array.new
args.each do |argument|
case argument.class.to_s.downcase
when "class","module"
begin
allowed.push argument
end
else
begin
tmp_array.push argument
end
end
end
args= tmp_array
end
# build exception list to eval
begin
allowed.each do |one_name|
eval_exception += "|"+one_name.to_s
end
end
# trim un wanted elements from string
begin
args.each do |argument|
case argument.class.to_s.downcase
when "string"
begin
#TODO new regex! # /(\b|\.|\{|\>)[A-Z]\w*/
#args[args.index(argument)]= argument.gsub( /(\b|\.|\{|\>)[A-Z]\w*/ ,'')
end
end
end
end
# do save eval
begin
eval(*args)
end
end if $DEBUG == true
end