The document discusses the modular architecture of Rails, including Railties, Engines, Applications, and Plugins. It explains how these pieces work together through configuration, initialization, generators, and other mechanisms to provide a flexible and extensible framework. Key components like Railtie, Engine, and Application are described in terms of their responsibilities and how they relate to and extend each other.
15. rails/all.rb
require 'rails'
%w(
active_record
action_controller
action_mailer
active_resource
rails/test_unit
).each do |framework|
begin
require "#{framework}/railtie"
rescue LoadError
end
end
37. YourApp::Application.initialize!
initializers.each do |initializer|
initializer.run(*args)
end
def initializers
railties.all { |r| initializers += r.initializers }
end
def all(&block)
@all ||= railties + engines + plugins
@all.each(&block) if block
@all
end
38. railties + engines +
plugins
def railties
@railties ||= ::Rails::Railtie.subclasses.map(&:new)
end
def engines
@engines ||= ::Rails::Engine.subclasses.map(&:new)
end
def plugins
@plugins ||= begin
plugin_names = (@config.plugins || [:all]).map { |p| p.to_sym }
Plugin.all(plugin_names, @config.paths.vendor.plugins)
end
end
39. Plugin.all
def self.all(list, paths)
plugins = []
paths.each do |path|
Dir["#{path}/*"].each do |plugin_path|
plugin = new(plugin_path)
next unless list.include?(plugin.name) || list.include?(:all)
plugins << plugin
end
end
plugins.sort_by do |p|
[list.index(p.name) || list.index(:all), p.name.to_s]
end
end