forbidden = Proc.new{raise WEBrick::HTTPStatus::Forbidden} acl = Proc.new{|req, res| client_ip = IPAddr.new(req.peeraddr[3]) allowed_ips.find(forbidden) do |ip| IPAddr.new(ip).include?(client_ip) end }
こんな感じかなぁ。
[追記] 例外をあらゆるなきものにすると find の引数が意味をなさないので、 begin ~ rescue ~ end を消しました。まぁ、例外が出れば 500 なので、そんなもんでしょう。