開発中のコマンドラインRubyアプリがあり、そのユーザーがプロセスの一部でフィルターとして実行されるコードを提供できるようにしたいと考えています。基本的に、アプリケーションはこれを行います。
- 一部のデータを読み込む
- フィルタが指定されている場合は、それを使用してデータをフィルタリングします
- データを処理する
フィルタリングプロセス(ステップ2)をできるだけ柔軟にしたいと思います。
私の考えでは、ユーザーは、私が定義したインターフェースを実装するオブジェクトを指すように既知の定数を設定するRubyファイルを提供できると考えていました。
# user's filter
class MyFilter
def do_filter(array_to_filter)
filtered_array = Array.new
# do my filtering on array_to_filter
filtered_array
end
FILTER = MyFilter.new
私のアプリのコードは次のようになります。
array_that_might_get_filtered = get_my_array()
if (options.filter_file)
require options.filter_file
array_that_might_get_filtered = FILTER.do_filter(array_that_might_get_filtered)
end
これはうまくいくでしょうが、それは安っぽく感じます、そしてそれをするより良い方法があるべきであるように思われます。また、既知のクラスに既知の名前のメソッドを追加する形式でフィルターを使用することも検討しましたが、それも正しくないようでした。
このためのRubyのより良いイディオムはありますか?