こんにちは、鈴木です。
「Railsのログにクライアント情報を追加する」 の最後に「Module#prepend の引数に Module.new ってどうよ?」と書いておきながらですが、Module#prepend にブロックを指定できたら便利かなと思い、以下のコードを書きました。
1 2 3 4 5 6 7 8 9 10 |
class Module prepend Module.new { def prepend(*modules, &block) modules << Module.new(&block) if block_given? super(*modules) end } end |
こうすることで、以下のように prepend にブロックを渡すことができるようになります。
1 2 3 4 5 6 7 8 9 10 |
class Rails::Rack::Logger < ActiveSupport::LogSubscriber prepend do def started_request_message(request) client_info = "#{request.user_agent}" "#{super(request)} from #{client_info}" end end end |
「prepend Module.new { ... }」と書くくらいなら、上記の方が見やすいかと思います。
(やはり「prepend の引数に Module.new ってどうよ?」という気持ちは残るのですが・・。)