github.com/midore/mdiary
の最近変更した箇所
$ ./mdiary-run.rb -st 'music'
を実行すると、ファイル content 内容に'music'を含むファイルがあるか検索する。
検索結果がゼロでなければ
1 [+] [2009/12/10 Thu AM 00:00:00] [music] (tower)
2 [+] [2009/12/11 Fri PM 17:04:36] [music] (diary)
と結果を返す。
この場合、
class ChoiceDir の中でSearch クラスを呼びだす。
mdiary-main.rb
252 Search.new(@word, @now_dir, st).base if @now_dir
Search の base method は、View の set_i_ary を呼び出す。
set_i_ary は、Search の get_diary を使用して一つづつファイルを処理する。
get_diary は @st が nil でなければ find_content にパス をわたす。
find_content はうけとったパスのファイルを一行づつ読み検索対象文字列を探す。
対象文字列がみつかった場合、ary_to_h をかえす。ary_to_h がかえす中身は Hash。
get_diary の中の to_obj は、Hash がかえってきた場合、その Hash をもとに Diary.new() する。
method "get_diary" in mdiary-main.rb
370 def get_diary(x)
371 begin
372 h = find_index(x) unless @st
373 h = find_content(x) unless @st.nil?
374 to_obj(h) unless h.nil?
375 rescue
376 return nil
377 end
378 end
method "find_content" in mdiary-io.rb
38 def find_content(path)
39 i, m = nil, nil
40 a, mark = [], /^--content$/
41 IO.foreach(path){|line|
42 if line.match(mark)
43 i = true; next
44 end
45 (i.nil?) ? a.push(line) : m = line.match(@word)
46 break if m
47 }
48 return ary_to_h(a, path) if m
49 end
0 件のコメント:
コメントを投稿