diff options
author | Carl Lerche <carllerche@mac.com> | 2009-10-08 12:14:57 -0700 |
---|---|---|
committer | Carl Lerche <carllerche@mac.com> | 2009-10-08 12:31:09 -0700 |
commit | e4d7e5090c928e5b64350be9a1fb3aaf6f968e4c (patch) | |
tree | 27fe4309341ed992a1f9ca4867f3db6ee46802eb /railties/lib/rails/application.rb | |
parent | 6d6ae0841c94d3c0ce0c91311028ff7396c44a4a (diff) | |
download | rails-e4d7e5090c928e5b64350be9a1fb3aaf6f968e4c.tar.gz rails-e4d7e5090c928e5b64350be9a1fb3aaf6f968e4c.tar.bz2 rails-e4d7e5090c928e5b64350be9a1fb3aaf6f968e4c.zip |
Moving more initializers into the application object
Diffstat (limited to 'railties/lib/rails/application.rb')
-rw-r--r-- | railties/lib/rails/application.rb | 93 |
1 files changed, 71 insertions, 22 deletions
diff --git a/railties/lib/rails/application.rb b/railties/lib/rails/application.rb index 783d45aa65..011a9c489d 100644 --- a/railties/lib/rails/application.rb +++ b/railties/lib/rails/application.rb @@ -2,34 +2,39 @@ module Rails class Application extend Initializable - def self.inherited(child) - child.initializers = initializers.dup - end + class << self + def config + @config ||= Configuration.new + end - def self.config - @config ||= Configuration.new - end + # TODO: change the plugin loader to use config + alias configuration config - def self.config=(config) - @config = config - end + def config=(config) + @config = config + end - def self.routes - ActionController::Routing::Routes - end + def plugin_loader + @plugin_loader ||= config.plugin_loader.new(self) + end - def self.middleware - config.middleware - end + def routes + ActionController::Routing::Routes + end - def self.call(env) - @app ||= middleware.build(routes) - @app.call(env) - end + def middleware + config.middleware + end + + def call(env) + @app ||= middleware.build(routes) + @app.call(env) + end - def self.new - initializers.run - self + def new + initializers.run + self + end end initializer :initialize_rails do @@ -49,5 +54,49 @@ module Rails abort %{Your config/boot.rb is outdated: Run "rake rails:update".} end end + + # Requires all frameworks specified by the Configuration#frameworks + # list. By default, all frameworks (Active Record, Active Support, + # Action Pack, Action Mailer, and Active Resource) are loaded. + initializer :require_frameworks do + begin + require 'active_support' + require 'active_support/core_ext/kernel/reporting' + require 'active_support/core_ext/logger' + + # TODO: This is here to make Sam Ruby's tests pass. Needs discussion. + require 'active_support/core_ext/numeric/bytes' + config.frameworks.each { |framework| require(framework.to_s) } + rescue LoadError => e + # Re-raise as RuntimeError because Mongrel would swallow LoadError. + raise e.to_s + end + end + + # Set the paths from which Rails will automatically load source files, and + # the load_once paths. + initializer :set_autoload_paths do + require 'active_support/dependencies' + ActiveSupport::Dependencies.load_paths = config.load_paths.uniq + ActiveSupport::Dependencies.load_once_paths = config.load_once_paths.uniq + + extra = ActiveSupport::Dependencies.load_once_paths - ActiveSupport::Dependencies.load_paths + unless extra.empty? + abort <<-end_error + load_once_paths must be a subset of the load_paths. + Extra items in load_once_paths: #{extra * ','} + end_error + end + + # Freeze the arrays so future modifications will fail rather than do nothing mysteriously + config.load_once_paths.freeze + end + + # Adds all load paths from plugins to the global set of load paths, so that + # code from plugins can be required (explicitly or automatically via ActiveSupport::Dependencies). + initializer :add_plugin_load_paths do + require 'active_support/dependencies' + plugin_loader.add_plugin_load_paths + end end end |