JSON データに基づいてメソッドを動的に呼び出す Ruby アプリケーションを開発しています。大まかに:
def items
# do something
end
def createItem( name:, data:nil )
# do something that requires a name keyword argument
end
def receive_json(json) # e.g. { "cmd":"createItem", "name":"jim" }
hash = JSON.parse(json)
cmd = hash.delete('cmd')
if respond_to?(cmd)
params = Hash[ hash.map{ |k,v| [k.to_sym, v } ]
method(cmd).arity==0 ? send(cmd) : send(cmd,params)
end
end
上に示したように、引数を取らないメソッドもあれば、キーワード引数を取るメソッドもあります。Ruby 2.1.0 (私が開発している場所) では、arity
上記の両方の方法は0
. ただし、send(cmd,params)
常に、パラメーターを取らないメソッドに対してエラーが発生します。
send
必要な場合はキーワード引数を正しく渡し、そうでない場合は省略するにはどうすればよいですか?