def add_plugin_load_paths
plugin_loader.add_plugin_load_paths
end
plugin_loader (実体はRails::Plugin::Loader) に委譲されているので、そちらをみてみます。
# rails-2.3.3/lib/rails/plugin/loader.rb
def add_plugin_load_paths
plugins.each do |plugin|
plugin.load_paths.each do |path|
$LOAD_PATH.insert(application_lib_index + 1, path)
ActiveSupport::Dependencies.load_paths << path
unless configuration.reload_plugins?
ActiveSupport::Dependencies.load_once_paths << path
end
end
end
$LOAD_PATH.uniq!
end
plugins というのは Rails::Plugin の配列で、Plugin.load_paths というのが $LOAD_PATH や ActiveSupport::Dependencies.load_paths に追加されています。その Plugin.load_paths の正体がこれ。
# rails-2.3.3/lib/rails/plugin.rb
module Rails
class Plugin
~~ 略 ~~
def initialize(directory)
@directory = directory
@name = File.basename(@directory) rescue nil
@loaded = false
end
~~ 略 ~~
def load_paths
report_nonexistant_or_empty_plugin! unless valid?
returning [] do |load_paths|
load_paths << lib_path if has_lib_directory?
load_paths << app_paths if has_app_directory?
end.flatten
end
~~ 略 ~~
private
def app_paths
[ File.join(directory, 'app', 'models'), File.join(directory, 'app', 'helpers'), controller_path, metal_path ]
end
def lib_path
File.join(directory, 'lib')
end
end
end
[Rails][CodeReading] Railsの初期化コードを読む (イントロ&目次)
0 件のコメント:
コメントを投稿