livedoor Reader で irb (インタラクティブ ruby)
RedHanded 経由で irb のリモート版があるのを知り、早速作ってみました。LDR 上で
:ruby 10.times { print "ho! " }
なことができます。
また、セッションが維持されますので、前に定義した変数等を参照することも出来ます。
つまり、irb そのものです。
といった場面での活躍が期待できます。(よね?)
ご利用はキーワードの方からどうぞ (user.js ファイルが提供されています)。
一応こちらにも定義部分を再掲しておきます:
register_command("irb|ruby", function() { // See: http://redhanded.hobix.com/inspect/rubylessRuby.html var irb = "http://tryruby.hobix.com/irb?cmd="; var func = arguments.callee, args = arguments; if (!func.sess) return GM_xmlhttpRequest({ method: "GET", url: irb + "!INIT!IRB!", onload: function(res) { func.sess = res.responseText; func.apply(this, args); } }); GM_xmlhttpRequest({ method: "GET", url: irb + encodeURIComponent(w.Array.from(args).join(" ")), headers: { "Cookie": ["_session_id", func.sess].map(encodeURIComponent).join("=") }, onload: function(res) { message(res.responseText); } }); });
(IE では "w.Array" の "w." が不要です。ひょっとして Firefox でも不要でしょうか?)
追記:
言い忘れましたが、IE 用の GM_xmlhttpRequest は id:reinyannyan:20060525:p1 に定義してあります。
Update [20060705]:
GM* 関数が二つあるのが格好悪い気がしたので、書き直してみました。(が、行数的には長くなってしまいました)
あと、サーバーが落ちている場合にインプット・フィールドがいつまでも閉じないのが嫌だったので、返答待ちのメッセージを追加しました。
register_command("irb|ruby", function() { var self = arguments.callee; if (!self.gen_param) self.gen_param = function (args) { var cmd, headers, onload; if (self.sess) { cmd = encodeURIComponent(w.Array.from(args).join(" ")); headers = { Cookie: ["_session_id", self.sess ].map(encodeURIComponent).join("=") }; onload = function(res) { message(res.responseText); }; } else { cmd = "!INIT!IRB!"; onload = function(res) { self.sess = res.responseText; self.apply(null, args); }; } return { method: "GET", url: "http://tryruby.hobix.com/irb?cmd=" + cmd, headers: headers, onload: onload }; }; message(".."); GM_xmlhttpRequest(self.gen_param(arguments)); });