おおいしつかさ


旅行とバイクとドライブと料理と宇宙が好き。
Ubie Discoveryのプログラマ。
Share:  このエントリーをはてなブックマークに追加

おいしい料理を評することほど愚かなことはない

 ユルさんがまだ仕事から帰ってきていなかったので、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も全然やってないし。いけませんいけません。

 ユルさんがシチューを作ってくれました。のんびりした夜を過ごしています。