-
おいしい料理を評することほど愚かなことはない 2006-12-20 00:00:00
ユルさんがまだ仕事から帰ってきていなかったので、kaeruspoonkaeruspoonをいじくって待つことにしました。とても寒くてエアコンが追いつかない中、キーボードを叩きます。今回はkaeruspoonの独自記法に関する機能の実装。最初はcontrollerにコードを書いていたのだけど、おかしいことに気づいてhelper上でメソッドを作りました。preタグの扱いにちょっと考えたけど、とりあえず勢いで以下のように実装です。
def view_text(text) text_list = Array.new pos = 0 while start_pos = text.index(start_mark, pos) if start_pos != pos text_list << {:name => "text", :start => pos, :end => start_pos -1} end end_pos = text.index(end_mark, start_pos) if end_pos text_list << {:name => "pre", :start => start_pos, :end => end_pos} pos = end_pos + end_mark.length else text_list.pop text_list << {:name => "text", :start => pos, :end => -1} pos = -1 end end if text_list.empty? text_list << {:name => "text", :start => 0, :end => -1} else if (pos != -1) && (text.index(start_mark, pos) == nil) text_list << {:name => "text", :start => pos, :end => -1} end end html = '' text_list.each do |part| if part[:name] == "text" part_text = text[part[:start]..part[:end]].strip part_text = exchange_http(part_text) part_text = exchange_strong(part_text) part_text = part_text.gsub("\n", "<br/>") html << '<p>' + part_text + '</p>' else part_text = text[(part[:start] + start_mark.length)..(part[:end] - 1)] part_text = h(part_text) html << '<pre>' + part_text + '</pre>' end end return html endstart_mark, end_markに関しては実際はメソッド内で定義しているのだけど、ここでは省略しています。
リファクタリングはまだしてません。もっと全然スマートにできそうですが、その前に掲示板機能を作っちゃおうと思います。リファクタリングは最後回しです。サンデープログラマですね。TDDも全然やってないし。いけませんいけません。
ユルさんがシチューを作ってくれました。のんびりした夜を過ごしています。

コメント(
リンク元(12)