$DEBUGのときはファイルに変更を加えず標準出力するだけになるようにFileクラスをいじる

if $DEBUG
   class File
      alias_method :original_initialize, :initialize
      alias_method :original_close, :close
      alias_method :original_puts, :puts
      def initialize(file,mode="r")
         if mode.downcase=="r"
            original_initialize(file)
         else
            @filename = file
            STDOUT.puts "--- File.open #{@filename} in mode #{mode} ---"
         end
      end
      def close
         if @filename
            STDOUT.puts "--- File.close #{@filename} ---"
         else
            original_close
         end
      end
      def puts(str)
         if @filename
            STDOUT.puts "--- #{@filename} << #{str}"
         else
            original_puts(str)
         end
      end
   end
end
  • 読み取りモードのとき=>通常通りのFileクラスの挙動
  • それ以外のとき=>new,puts,closeを上書きして、実体のファイルには作用しないようにする