人気ブログランキング | 話題のタグを見る

RoR config/boot.rb GemBoot クラス

config/boot.rb の解読も、GemBoot クラスで終わりだ。いろいろ回り道をして準備をしたのであとは一気に読んでいこう。GemBoot クラスのプログラムの概要は次のようになっている。

  class GemBoot < Boot
    def load_initializer
      self.class.load_rubygems
      load_rails_gem
      require 'initializer'
    end

    def load_rails_gem

    class << self
      def rubygems_version
      def gem_version
      def load_rubygems
      def parse_gem_version(text)
      private
        def read_environment_rb
  end

インスタンスメソッドが二つ、クラスメソッドが5つ定義されている。このうち冒頭の load_inititalizer は上位の Boot クラスのオーバーライドだ。GemBoot クラスでは Boot クラスの load_initializer インスタンスメソッドをオーバーライドし、load_rails_gem インスタンスメソッドを追加している。

class << self の記法で、クラスメソッドにまとめられた5つのメソッドは、インスタンスメソッドと区別して内部処理用に使われているように見える。関数呼び出しの中で、self.class.load_rubygems のように頭に self.class がついているのは、自分自身のクラスメソッドを使うためだ。

冒頭の load_initializer だけ中身を表示したのはそれが最終的に行われる処理だからだ。つまり、RubyGems を読み込み、Rails を読み込むための前処理をし、requie 'initializer' でRailsを読み込むという処理が行われる。

ところで、上の関数群の依存性を図示すると次のようになる。

load_initializer
  self.class.load_rubygems
    self.class.rubygems_verision
  load_rails_gem
    self.class.gem_verion
    self.class.parse_gem_version
      self.class.read_environment_rb
  require 'initializer'

コードの意味を知るためには上のトップダウンのアプローチとは別に、下位の関数の動作を irb でテストしてみるボトムアップの方法が有用だ。それについては、次回からのエントリーで調べてみる。
by tnomura9 | 2008-10-22 12:43 | Ruby | Comments(0)
<< RoR config/boot... RoR と send >>