クリップボードの内容をJavaプログラム用に加工する

Unit Test なんかで複数行にわたるちょっと大きな文字列をソースコード中に埋め込みたい場合があるんだけど、Java にはヒアドキュメントとかないので、いちいちエスケープしたりするのが面倒。
ということで、Rubyクリップボードの文字列を Java のコードに貼り付けられるように加工するプログラムを書いてみた。

require 'win32/clipboard'

lines = []
Win32::Clipboard.get_data.each do |line|
   lines << line.sub("\r\n", "\n")
end

var_name = ARGV[0] || 's'
escaped = "#{var_name} = " + lines.map {|line| line.inspect }.join(" + \n    ") + ';'
puts escaped
Win32::Clipboard.set_data(escaped)

上のコードを対象に実行したら以下の様な感じに。

% ruby ec.rb str
str = "require 'win32/clipboard'\n" + 
    "\n" + 
    "lines = []\n" + 
    "Win32::Clipboard.get_data.each do |line|\n" + 
    "   lines << line.sub(\"\\r\\n\", \"\\n\")\n" + 
    "end\n" + 
    "\n" + 
    "var_name = ARGV[0] || 's'\n" + 
    "escaped = \"\#{var_name} = \" + lines.map {|line| line.inspect }.join(\" + \\n    \") + ';'\n" + 
    "puts escaped\n" + 
    "Win32::Clipboard.set_data(escaped)\n";

Groovy でテストコードを書けばいいという話も有るけどな。