最近のファイルを開くを書き直し

既に現在開いているやつが候補にあがっても困るなと思って.
わーっと書いていたところがあったので書き直してみた.

require File.dirname(__FILE__) + '/open_from_menu'
include Mate::OpenFromMenu

module Mate
  module OpenRecent
    def open_recent(target_dir = ENV["TM_PROJECT_DIRECTORY"] )
      open_from_menu (
        collect_view_paths (
        delete_selected_file (
        select_recent (
        target_dir  ))))
    end
    
    def collect_view_paths(list)
      list.collect { |e|
        dir_base = File.split(e)
        [dir_base[1], e]
      }
    end
    
    def delete_selected_file(list)
      list.select { |e| e != ENV["TM_SELECTED_FILE"] }
    end
    
    def select_recent(root)
      root = ENV["HOME"]  if root == nil
      Dir.glob("#{ root }/**/*.*").sort_by { |f| 
        File.mtime(f)
      }.reverse[0..7]
    end
  end
end

__END__

#!/usr/bin/env ruby
require ENV['TM_BUNDLE_SUPPORT'] + "/lib/mate/open_recent"
include Mate::OpenRecent
open_recent
$: << "#{ENV["TM_SUPPORT_PATH"]}/lib" if ENV.has_key? "TM_SUPPORT_PATH"
require "exit_codes"
require "ui"

module Mate
  module OpenFromMenu
    View, Path = 0, 1

    def open_mate(path)
      %x["$TM_SUPPORT_PATH/bin/mate" "#{path}"]
    end

    def open_from_menu(view_paths)
      views = view_paths.collect { |view_path|
        view_path[View]
      }
      choice  = TextMate::UI.menu(views)
      exit if choice.nil?
      open_mate(view_paths[choice][Path])
    end
  end
end


書き直しての気づき。
関数呼び出しだと下から上に読むようにすればいいんだね。

  open_from_menu (
    collect_view_paths (
    delete_selected_file (
    select_recent (
    target_dir  ))))

OO使わなくて、
パイプ & フィルターみたいに、左から右へ書きたいときには、どうすればいいのかな??
パイプ & フィルターみたいに、左から右へ書いて、書いた文字列をパースして、上の文字列を組み立てて、evalするのかな??