バリケンのRuby日記 RSSフィード

2006-06-29

[] QuickMLソースコードを読む(19) quickml/sweeper.rbの続き  QuickMLのソースコードを読む(19) quickml/sweeper.rbの続き - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  QuickMLのソースコードを読む(19) quickml/sweeper.rbの続き - バリケンのRuby日記  QuickMLのソースコードを読む(19) quickml/sweeper.rbの続き - バリケンのRuby日記 のブックマークコメント

昨日の日記の続きだよ。

    def sweep
      @status = :sweeping
      @logger.vlog "Sweeper runs"
      Dir.new(@config.data_dir).each {|filename|
        filename = File.join(@config.data_dir, filename)
        if ml_file?(filename)
          address = mladdress(mlname(filename))
          @config.ml_mutex(address).synchronize {
            ml = QuickML.new(@config, address)
            ml.write_ml_config unless ml.ml_config_exist?
            sweep_ml(ml)
          }
        end
      }
      @logger.vlog "Sweeper finished"
      @status = :safe
    end

これはQuickML::Sweeperクラスプライベートメソッド、sweepメソッドだね。

まずシンボルオブジェクト「:sweeping」に、インスタンス変数@statusを貼り付けるよ。次にQuickML::Logger#vlogメソッド(これはquickml/logger.rbで定義されているよ)で、ログファイルにスイーパーが起動中であることを記録しているよ。

次にDirクラスインスタンス(指定したディレクトリ内の各要素を表す)を@config.data_dirを引数として生成し、その各要素に対してコードブロックを実行するよ。コードブロックの内容は、まずファイル名をフルパス表現にしたあと、ml_file?メソッドでそのファイルQuickMLで扱うファイル名であるかどうかをチェックして、そうであるならMLメンバーメールアドレス一覧をファイルから読んで、Mutex#synchronizeによってスレッドロックしたあとにQuickMLクラスインスタンスを生成、そのメーリングリスト用のconfigファイルがないのであれば生成して、メーリングリストのスイープを実行するよ。

最後にスイーパーの終了をログに記録して、シンボルオブジェクト:safeにインスタンス変数@statusを貼り付けるよ。

今日はここまで。

トラックバック - http://rubyist.g.hatena.ne.jp/muscovyduck/20060629