2012-01-10 8 views
1

RubyスクリプトでFileUtilsモジュールのrm\_rfメソッドを無効にします。デーモンでメソッド/モジュールアクセスコントロールを追加する方法は?

FileUtils.rm_rf(file) 

それはによって運営されてはならない:

foo.rbが含まれている場合

Daemons.run("foo.rb", some_options) 

、代わりにエラーメッセージを与える必要があります。

Daemonsはこれを行うことができますか?あるいは、他のライブラリでこれを簡単かつ効果的に行うことができますか?

+2

ライブラリを必要とせず、no-opに再定義するだけです。 –

+0

@DaveNewton許可リストを作成してから、すべてのモジュールの他のすべてのメソッドを無効にすることはできますか? – nttstar

+0

確か;すべてのメソッドを取得し、リスト内のメソッドを拒否し、残りのメソッドを再定義します。 –

答えて

2

あなたのやりたいことの概要を以下に示します。

alias_methodを使用すると、古いメソッドを別のものに定義しない限り、良い考えではない可能性があります。ここではメソッドが定義されています。このアプローチの危険性は、想定される方法で内部動作が影響を受ける可能性があることです。たとえば、許可されたメソッドでは内部的に許可されないメソッドが使用されます。

シングルトン(クラス)メソッドの場合、インスタンスのメソッドには同じロジックを使用できます。これは実装可能ないくつかの方法がありますが、これはガイドとしての意味の1つです。

> 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_methodModule::remove_method、あります。

関連する問題