Evalmimic is a project mainly written in ..., based on the GPL-3.0 license.
Evalmimic allow the implementation of eval like methods, solves the common problem of binding retrieve: in ruby you can't obtain the binding of the caller, or if you can, is some tricky
= evalmimic
== DESCRIPTION:
Evalmimic allow the implementation of eval like methods, solves the common problem of binding retrieve: in ruby you can't obtain the binding of the caller, or if you can, is some tricky
== INSTALL:
sudo gem install evalmimic
== USAGE
Use define_eval_method to add a eval like method to the class or as global function:
class X define_eval_method :my_eval ... end
Define a method named internal_eval to handle the calls
class X define_eval_method :my_eval
def internal_eval(binding_, args)
# binding_ is the original binding of the caller of my_eval
# args is an array of the arguments passed to my_eval
end
end
Also, it can be use outside of a class, in analog way:
define_eval_method :my_eval
def internaleval(binding, args)
# args is an array of the arguments passed to my_eval
end
=== Example 1
Creating your own implementation of eval
require "rubygems" require "evalmimic"
define_eval_method :my_eval
def internaleval(b, args) b_.eval("a+b") end
def foo a = 4 b = 5
my_eval
end
print foo," "
=== Example 2
Creating an Evaluator class
require "rubygems" require "evalmimic"
class MyEvaluator define_eval_method :eval
def internal_eval(b_, args)
b_.eval(args[0])
end
end
def foo m = MyEvaluator.new
a = 4
b = 5
m.eval "a+b"
end
print foo," "
=== Example 3
Hooking/monkey patching of the original eval
require "rubygems" require "evalmimic"
alias original_eval eval define_eval_method :eval
def internaleval(b, args) print "eval called with code = #{args[0].inspect} "
args[1] = args[1] || b_
original_eval(*args)
end
def foo a = 4 eval "a" end
print foo," "
== LICENSE:
Copyright (c) 2011 Roberto Dario Seminara [email protected]
evalhook is free software: you can redistribute it and/or modify it under the terms of the gnu general public license as published by the free software foundation, either version 3 of the license, or (at your option) any later version.
evalhook is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. see the gnu general public license for more details.
you should have received a copy of the gnu general public license along with evalhook. if not, see http://www.gnu.org/licenses/.