1
我想在Ruby腳本中禁用FileUtils
模塊的rm\_rf
方法。如何在守護程序中添加方法/模塊訪問控制?
當foo.rb
包含:
FileUtils.rm_rf(file)
它不應該被運行:
Daemons.run("foo.rb", some_options)
,應該給出錯誤信息來代替。
請問Daemons
可以做到這一點嗎?或者其他一些圖書館可以簡單而有效地做到這一點?
我想在Ruby腳本中禁用FileUtils
模塊的rm\_rf
方法。如何在守護程序中添加方法/模塊訪問控制?
當foo.rb
包含:
FileUtils.rm_rf(file)
它不應該被運行:
Daemons.run("foo.rb", some_options)
,應該給出錯誤信息來代替。
請問Daemons
可以做到這一點嗎?或者其他一些圖書館可以簡單而有效地做到這一點?
下面簡要介紹一下你想做什麼。
使用alias_method
可能不是一個好主意,除非您將舊方法定義爲其他方法;這裏的方法被定義了。這種方法的危險在於內部行爲可能會以預期的方式受到影響,例如,允許的方法在內部使用不允許的方法。
以下是針對singleton(類)方法的情況,相同的邏輯可用於實例方法。有幾個這種方式可以實施,這只是一個,意味着作爲一個指導。
> FileUtils.pwd
=> "/home/dave"
> FileUtils.cp '.bashrc', 'tmpbashrc'
=> nil
> class Object
* def deimplement_singleton_methods *methods
* methods.each do |msym|
* define_singleton_method msym do |*args|
* raise NotImplementedError.new "#{msym} not implemented"
* end
* end
* end
* end
> FileUtils.deimplement_singleton_methods :cp
> FileUtils.pwd
=> "/home/dave"
> FileUtils.cp '.bashrc', 'tmpbashrc'
NotImplementedError: cp not implemented
from (pry):10:in `block (2 levels) in deimplement_singleton_methods'
還有Module::undef_method和Module::remove_method,這可能會或可能不會提供您想要的(不知道你需要它做什麼)的行爲。
你不需要一個庫,只需將它重新定義爲no-op即可。 – 2012-01-10 11:34:05
@DaveNewton我可以有一個允許列表,然後禁用所有模塊的所有其他方法? – nttstar 2012-01-10 11:57:46
當然;獲取所有方法,拒絕列表中的方法,重新定義剩下的方法。 – 2012-01-10 12:14:31