aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2010-01-23 02:03:11 +0100
committerJosé Valim <jose.valim@gmail.com>2010-01-23 02:03:11 +0100
commit4eab3aad8d256b868390b739b075bd38661339b2 (patch)
tree71fdb380573b2550cf70ecca8a685368355ecf47 /railties/lib
parent98240c49b05093d6d14b9384a9bd695b58eefb59 (diff)
downloadrails-4eab3aad8d256b868390b739b075bd38661339b2.tar.gz
rails-4eab3aad8d256b868390b739b075bd38661339b2.tar.bz2
rails-4eab3aad8d256b868390b739b075bd38661339b2.zip
Ensure user set load paths have higher preference and move Bootstrap inside Application.
Diffstat (limited to 'railties/lib')
-rw-r--r--railties/lib/rails.rb1
-rw-r--r--railties/lib/rails/application.rb121
-rw-r--r--railties/lib/rails/bootstrap.rb80
-rw-r--r--railties/lib/rails/configuration.rb3
-rw-r--r--railties/lib/rails/engine.rb4
5 files changed, 103 insertions, 106 deletions
diff --git a/railties/lib/rails.rb b/railties/lib/rails.rb
index e3aa9e4c97..29afb672b6 100644
--- a/railties/lib/rails.rb
+++ b/railties/lib/rails.rb
@@ -8,7 +8,6 @@ require 'rails/initializable'
require 'rails/railtie'
require 'rails/plugin'
require 'rails/engine'
-require 'rails/bootstrap'
require 'rails/application'
require 'rails/railties_path'
require 'rails/version'
diff --git a/railties/lib/rails/application.rb b/railties/lib/rails/application.rb
index 9b0f39feb1..305d1c73e0 100644
--- a/railties/lib/rails/application.rb
+++ b/railties/lib/rails/application.rb
@@ -2,11 +2,14 @@ require 'fileutils'
module Rails
class Application < Engine
-
# TODO Clear up 2 way delegation flow between App class and instance.
# Infact just add a method_missing on the class.
#
# TODO I'd like to track the "default app" different using an inherited hook.
+ #
+ # TODO Check helpers works as expected
+ #
+ # TODO Check routes namespaces
class << self
alias :configure :class_eval
delegate :initialize!, :load_tasks, :load_generators, :root, :to => :instance
@@ -118,36 +121,112 @@ module Rails
end
def initializers
- my = super
- hook = my.index { |i| i.name == :set_autoload_paths } + 1
- initializers = Bootstrap.new(self).initializers
- initializers += my[0...hook]
+ initializers = Bootstrap.initializers
+ initializers += super
plugins.each { |p| initializers += p.initializers }
- initializers += my[hook..-1]
+ initializers += Finisher.initializers
initializers
end
- initializer :add_builtin_route do |app|
- if Rails.env.development?
- app.route_configuration_files << File.join(RAILTIES_PATH, 'builtin', 'routes.rb')
+ module Bootstrap
+ include Initializable
+
+ initializer :load_all_active_support do |app|
+ require "active_support/all" unless app.config.active_support.bare
end
- end
- initializer :build_middleware_stack do
- app
- end
+ # Preload all frameworks specified by the Configuration#frameworks.
+ # Used by Passenger to ensure everything's loaded before forking and
+ # to avoid autoload race conditions in JRuby.
+ initializer :preload_frameworks do |app|
+ require 'active_support/dependencies'
+ ActiveSupport::Autoload.eager_autoload! if app.config.preload_frameworks
+ end
+
+ # Initialize the logger early in the stack in case we need to log some deprecation.
+ initializer :initialize_logger do |app|
+ Rails.logger ||= app.config.logger || begin
+ path = app.config.paths.log.to_a.first
+ logger = ActiveSupport::BufferedLogger.new(path)
+ logger.level = ActiveSupport::BufferedLogger.const_get(app.config.log_level.to_s.upcase)
+ logger.auto_flushing = false if Rails.env.production?
+ logger
+ rescue StandardError => e
+ logger = ActiveSupport::BufferedLogger.new(STDERR)
+ logger.level = ActiveSupport::BufferedLogger::WARN
+ logger.warn(
+ "Rails Error: Unable to access log file. Please ensure that #{path} exists and is chmod 0666. " +
+ "The log level has been raised to WARN and the output directed to STDERR until the problem is fixed."
+ )
+ logger
+ end
+ end
+
+ # Initialize cache early in the stack so railties can make use of it.
+ initializer :initialize_cache do |app|
+ unless defined?(RAILS_CACHE)
+ silence_warnings { Object.const_set "RAILS_CACHE", ActiveSupport::Cache.lookup_store(app.config.cache_store) }
+
+ if RAILS_CACHE.respond_to?(:middleware)
+ app.config.middleware.insert_after(:"Rack::Lock", RAILS_CACHE.middleware)
+ end
+ end
+ end
+
+ # Initialize rails subscriber on top of notifications.
+ initializer :initialize_subscriber do |app|
+ require 'active_support/notifications'
+
+ if app.config.colorize_logging == false
+ Rails::Subscriber.colorize_logging = false
+ app.config.generators.colorize_logging = false
+ end
- # Fires the user-supplied after_initialize block (config#after_initialize)
- initializer :after_initialize do
- config.after_initialize_blocks.each do |block|
- block.call(self)
+ ActiveSupport::Notifications.subscribe do |*args|
+ Rails::Subscriber.dispatch(args)
+ end
+ end
+
+ initializer :set_clear_dependencies_hook do |app|
+ unless app.config.cache_classes
+ ActionDispatch::Callbacks.after do
+ ActiveSupport::Dependencies.clear
+ end
+ end
+ end
+
+ # Sets the dependency loading mechanism.
+ # TODO: Remove files from the $" and always use require.
+ initializer :initialize_dependency_mechanism do |app|
+ ActiveSupport::Dependencies.mechanism = app.config.cache_classes ? :require : :load
end
end
- # Disable dependency loading during request cycle
- initializer :disable_dependency_loading do
- if config.cache_classes && !config.dependency_loading
- ActiveSupport::Dependencies.unhook!
+ module Finisher
+ include Initializable
+
+ initializer :add_builtin_route do |app|
+ if Rails.env.development?
+ app.route_configuration_files << File.join(RAILTIES_PATH, 'builtin', 'routes.rb')
+ end
+ end
+
+ initializer :build_middleware_stack do |app|
+ app.app
+ end
+
+ # Fires the user-supplied after_initialize block (config#after_initialize)
+ initializer :after_initialize do |app|
+ app.config.after_initialize_blocks.each do |block|
+ block.call(app)
+ end
+ end
+
+ # Disable dependency loading during request cycle
+ initializer :disable_dependency_loading do |app|
+ if app.config.cache_classes && !app.config.dependency_loading
+ ActiveSupport::Dependencies.unhook!
+ end
end
end
end
diff --git a/railties/lib/rails/bootstrap.rb b/railties/lib/rails/bootstrap.rb
deleted file mode 100644
index 7c33955b2b..0000000000
--- a/railties/lib/rails/bootstrap.rb
+++ /dev/null
@@ -1,80 +0,0 @@
-module Rails
- class Bootstrap
- include Initializable
-
- def initialize(application)
- @application = application
- end
-
- delegate :config, :root, :to => :'@application'
-
- initializer :load_all_active_support do
- require "active_support/all" unless config.active_support.bare
- end
-
- # Preload all frameworks specified by the Configuration#frameworks.
- # Used by Passenger to ensure everything's loaded before forking and
- # to avoid autoload race conditions in JRuby.
- initializer :preload_frameworks do
- require 'active_support/dependencies'
- ActiveSupport::Autoload.eager_autoload! if config.preload_frameworks
- end
-
- # Initialize the logger early in the stack in case we need to log some deprecation.
- initializer :initialize_logger do
- Rails.logger ||= config.logger || begin
- logger = ActiveSupport::BufferedLogger.new(config.paths.log.to_a.first)
- logger.level = ActiveSupport::BufferedLogger.const_get(config.log_level.to_s.upcase)
- logger.auto_flushing = false if Rails.env.production?
- logger
- rescue StandardError => e
- logger = ActiveSupport::BufferedLogger.new(STDERR)
- logger.level = ActiveSupport::BufferedLogger::WARN
- logger.warn(
- "Rails Error: Unable to access log file. Please ensure that #{config.log_path} exists and is chmod 0666. " +
- "The log level has been raised to WARN and the output directed to STDERR until the problem is fixed."
- )
- logger
- end
- end
-
- # Initialize cache early in the stack so railties can make use of it.
- initializer :initialize_cache do
- unless defined?(RAILS_CACHE)
- silence_warnings { Object.const_set "RAILS_CACHE", ActiveSupport::Cache.lookup_store(config.cache_store) }
-
- if RAILS_CACHE.respond_to?(:middleware)
- config.middleware.insert_after(:"Rack::Lock", RAILS_CACHE.middleware)
- end
- end
- end
-
- # Initialize rails subscriber on top of notifications.
- initializer :initialize_subscriber do |app|
- require 'active_support/notifications'
-
- if app.config.colorize_logging == false
- Rails::Subscriber.colorize_logging = false
- app.config.generators.colorize_logging = false
- end
-
- ActiveSupport::Notifications.subscribe do |*args|
- Rails::Subscriber.dispatch(args)
- end
- end
-
- initializer :set_clear_dependencies_hook do
- unless config.cache_classes
- ActionDispatch::Callbacks.after do
- ActiveSupport::Dependencies.clear
- end
- end
- end
-
- # Sets the dependency loading mechanism.
- # TODO: Remove files from the $" and always use require.
- initializer :initialize_dependency_mechanism do
- ActiveSupport::Dependencies.mechanism = config.cache_classes ? :require : :load
- end
- end
-end
diff --git a/railties/lib/rails/configuration.rb b/railties/lib/rails/configuration.rb
index 76ca52867b..da2206d6a2 100644
--- a/railties/lib/rails/configuration.rb
+++ b/railties/lib/rails/configuration.rb
@@ -170,13 +170,12 @@ module Rails
:plugins, :preload_frameworks, :reload_plugins,
:serve_static_assets, :time_zone, :whiny_nils
-
def initialize(*)
super
@filter_parameters = []
@dependency_loading = true
@serve_static_assets = true
- end
+ end
def paths
@paths ||= begin
diff --git a/railties/lib/rails/engine.rb b/railties/lib/rails/engine.rb
index 93f39f176c..03c78b6d4b 100644
--- a/railties/lib/rails/engine.rb
+++ b/railties/lib/rails/engine.rb
@@ -77,12 +77,12 @@ module Rails
initializer :add_routing_files do |app|
config.paths.config.routes.to_a.each do |route|
- app.route_configuration_files << route if File.exists?(route)
+ app.route_configuration_files.unshift(route) if File.exists?(route)
end
end
initializer :add_locales do
- config.i18n.load_path.concat(config.paths.config.locales.to_a)
+ config.i18n.load_path.unshift(*config.paths.config.locales.to_a)
end
initializer :add_view_paths do