2017-10-14 81 views
0

我希望在系统调用之前检查使用系统或执行``来确保调用是由特定模块完成的。在执行系统调用之前触发一个事件

我不想用它来清理或验证命令,但只是确保只有一个模块可以进行这些调用。

谢谢。

回答

0

找到了解决办法:

module BacktickURI 
    alias_method :standard_back_tick_call, :` #` #Comment for fixing Notepad++ highlighting, needs even back ticks 
    alias_method :standard_system_call, :system 

    def `(uri)#` 
     standard_back_tick_call(uri) 
    end 

    def system uri 
    standard_system_call uri 
end 
end 

编辑:上面的代码是不完整的过程,它只是做我一直在寻找的任务,更新系统和反引号方法的位。

Alias_method将范围转换为包含,防止循环引用或类似的东西。

+0

这里的“系统”的别名是什么?看起来你在'system'方法定义中有一个循环引用。另外,我认为只需创建一个包装方法并从代码中调用它而不是反引号就会更容易。 –

+0

alias_method在运行时移动作用域,所以当我使用include时,将四个方法作为单独的实体引入(我认为这就是发生了什么)。这样做的目的是为了防止我和他人与其嵌入的任何项目一起工作,并在不应该的时候意外地进行系统调用。我使用白名单管理方式。如果用户需要做某些事情,他们可以通过添加到模块的开关手动关闭该功能。 – CBusBus

相关问题