如何检查JRuby脚本是否定义了特定方法?

时间:2013-03-23 20:17:18

标签: ruby jruby

我通过JRuby在一个Java应用程序中嵌入Ruby,并且需要测试给定的Ruby脚本是否定义了各种方法。我有一个非常简单的JRuby设置:

ScriptingContainer container = new ScriptingContainer();
Object receiver = container.runScriptlet(new FileReader(SCRIPT_PATH));

其中SCRIPT_PATH是包含以下内容的文件:

def processDoc(doc)
  return doc
end

我现在想确定脚本是否定义了processDoc方法,但找不到实际调用processDoc以外的方法,我宁愿避免使用。{1}}。我已经尝试了respond_to? 'processDoc'methods.include? 'processDoc',两者都不起作用,因为以下成功的断言集指示:

Object doc = new Object();
assert container.runScriptlet("respond_to? :processDoc") == Boolean.FALSE;
assert container.runScriptlet("methods().include? 'processDoc'") == Boolean.FALSE;
assert receiver == null;
assert container.callMethod(receiver, "processDoc", doc) == doc;

我是否可以使用其他任何技术来确定一个简单的JRuby脚本是否定义了一个具有特定名称的方法,而没有实际调用该方法?

1 个答案:

答案 0 :(得分:2)

定义全局方法时,它将成为Object的私有方法。因此,您必须使用respond_to?include_all参数才能使其生效:

container.runScriptlet("Object::respond_to?(:processDoc, true)")