def initialize_framework_settings
configuration.frameworks.each do |framework|
base_class = framework.to_s.camelize.constantize.const_get("Base")
configuration.send(framework).each do |setting, value|
base_class.send("#{setting}=", value)
end
end
configuration.active_support.each do |setting, value|
ActiveSupport.send("#{setting}=", value)
end
end
Configuration.frameworks に含まれるモジュールのBaseクラスに対して、environment.rb に書かれた設定を適用しています。
Configuration.framesorks はフレームワークモジュールを表すシンボル(:active_record のような)を含む配列なのですが、シンボルからBaseクラスを一気に取得しているのが3行目。Rails(ActiveSupport)のクラス検索の特色がよく出ていて面白いので、分解して追ってみました。
$ script/console
>> :active_record.to_s
=> "active_record"
>> :active_record.to_s.camelize
=> "ActiveRecord"
>> :active_record.to_s.camelize.constantize
=> ActiveRecord
>> :active_record.to_s.camelize.constantize.const_get("Base")
=> ActiveRecord::Base
Configuration.framework という変数に、個々のモジュールに対する設定が格納されているので、sendメソッドで呼び出してBaseクラスに(これもsendメソッドで)渡している。リフレクション(イントロスペクション?)が強力。
[Rails][CodeReading] Railsの初期化コードを読む (イントロ&目次)
0 件のコメント:
コメントを投稿