caseによる場合わけ

こんなコードがあったとする
def foo
case @param['mode']
when 'error'
......
when 'input'
......
else
.....
end
end処理が増えると関数が大きくなるので、あまりうれしくない。あと、派生したクラスで処理を追加するのが結構めんどうになる。
そこで、Object#sendを使ってやる。
def foo
if self.respond_to? "on_#@param['mode']:" then
self.send "on_#@param['mode']:"
else
on_default
end
end
def on_error
...
end
def on_input
...
end
def on_default
...
endちょっと迷っていること。これはCGIのコードの一部で、@paramはCGIに渡されたパラメータ。なんとなく、このコードはセキュリティホールになりそうな雰囲気がある。いちおう、任意のメソッドを呼び出されないように'on_xxx'という形式にしているから大丈夫だとは思うんだけど、なんとなく不安。