おいしい料理を評することほど愚かなことはない
ユルさんがまだ仕事から帰ってきていなかったので、kaeruspoonをいじくって待つことにしました。とても寒くてエアコンが追いつかない中、キーボードを叩きます。今回は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
end
start_mark, end_markに関しては実際はメソッド内で定義しているのだけど、ここでは省略しています。
リファクタリングはまだしてません。もっと全然スマートにできそうですが、その前に掲示板機能を作っちゃおうと思います。リファクタリングは最後回しです。サンデープログラマですね。TDDも全然やってないし。いけませんいけません。
ユルさんがシチューを作ってくれました。のんびりした夜を過ごしています。