aboutsummaryrefslogtreecommitdiffstats
path: root/railties
diff options
context:
space:
mode:
authorCarlhuda <carlhuda@engineyard.com>2009-12-23 14:55:12 -0800
committerCarlhuda <carlhuda@engineyard.com>2009-12-23 16:13:09 -0800
commit38aeb1528c376f7a058beea6db0a328720b85f01 (patch)
treec7bb623d13b49e7861e531ec05ba4f2f2c770a0b /railties
parentfa8dfc7d014f6768599077b79a874894e13d317f (diff)
downloadrails-38aeb1528c376f7a058beea6db0a328720b85f01.tar.gz
rails-38aeb1528c376f7a058beea6db0a328720b85f01.tar.bz2
rails-38aeb1528c376f7a058beea6db0a328720b85f01.zip
Moving out some framework specific initializers into the framework libraries.
Diffstat (limited to 'railties')
-rw-r--r--railties/lib/rails/application.rb66
-rw-r--r--railties/lib/rails/configuration.rb25
-rw-r--r--railties/lib/rails/plugin.rb8
-rw-r--r--railties/test/application/initializer_test.rb40
-rw-r--r--railties/test/plugins/framework_extension_test.rb18
5 files changed, 61 insertions, 96 deletions
diff --git a/railties/lib/rails/application.rb b/railties/lib/rails/application.rb
index 97f72b106b..9a5656fb1d 100644
--- a/railties/lib/rails/application.rb
+++ b/railties/lib/rails/application.rb
@@ -21,11 +21,7 @@ module Rails
end
def config
- @config ||= begin
- config = Configuration.new
- Plugin.plugins.each { |p| config.merge(p.config) }
- config
- end
+ @config ||= Configuration.new(Plugin::Configuration.default)
end
# TODO: change the plugin loader to use config
@@ -122,10 +118,11 @@ module Rails
initializers
end
+ # TODO: Fix this method
def plugins
@plugins ||= begin
plugin_names = config.plugins || [:all]
- Plugin.plugins.select { |p| plugin_names.include?(p.plugin_name) } +
+ Plugin.plugins.select { |p| plugin_names.include?(:all) || plugin_names.include?(p.plugin_name) } +
Plugin::Vendored.all(config.plugins || [:all], config.paths.vendor.plugins)
end
end
@@ -189,20 +186,9 @@ module Rails
end
end
- # This initialization routine does nothing unless <tt>:active_record</tt>
- # is one of the frameworks to load (Configuration#frameworks). If it is,
- # this sets the database configuration from Configuration#database_configuration
- # and then establishes the connection.
- initializer :initialize_database do
- if defined?(ActiveRecord)
- ActiveRecord::Base.configurations = config.database_configuration
- ActiveRecord::Base.establish_connection
- end
- end
-
# Include middleware to serve up static assets
initializer :initialize_static_server do
- if config.frameworks.include?(:action_controller) && config.serve_static_assets
+ if defined?(ActionController) && config.serve_static_assets
config.middleware.use(ActionDispatch::Static, Rails.public_path)
end
end
@@ -268,7 +254,7 @@ module Rails
# logger is already set, it is not changed, otherwise it is set to use
# RAILS_DEFAULT_LOGGER.
initializer :initialize_framework_logging do
- for framework in [ :active_record, :action_controller, :action_mailer ]
+ for framework in [ :action_controller, :action_mailer ]
# TODO BEFORE PUSHING: REMOVEZ
begin
framework.to_s.camelize.constantize.const_get("Base").logger ||= Rails.logger
@@ -293,7 +279,7 @@ module Rails
require('active_support/whiny_nil') if config.whiny_nils
end
- # Sets the default value for Time.zone, and turns on ActiveRecord::Base#time_zone_aware_attributes.
+ # Sets the default value for Time.zone
# If assigned value cannot be matched to a TimeZone, an exception will be raised.
initializer :initialize_time_zone do
if config.time_zone
@@ -307,11 +293,6 @@ module Rails
end
Time.zone_default = zone_default
-
- if defined?(ActiveRecord)
- ActiveRecord::Base.time_zone_aware_attributes = true
- ActiveRecord::Base.default_timezone = :utc
- end
end
end
@@ -331,7 +312,7 @@ module Rails
# (Configuration#frameworks). The available settings map to the accessors
# on each of the corresponding Base classes.
initializer :initialize_framework_settings do
- config.frameworks.each do |framework|
+ (config.frameworks - [:active_record, :action_controller]).each do |framework|
# TODO BEFORE PUSHING: This needs to work differently
begin
base_class = framework.to_s.camelize.constantize.const_get("Base")
@@ -383,20 +364,6 @@ module Rails
end
end
- # # Setup database middleware after initializers have run
- initializer :initialize_database_middleware do
- if defined?(ActiveRecord)
- if defined?(ActionController) && ActionController::Base.session_store &&
- ActionController::Base.session_store.name == 'ActiveRecord::SessionStore'
- configuration.middleware.insert_before :"ActiveRecord::SessionStore", ActiveRecord::ConnectionAdapters::ConnectionManagement
- configuration.middleware.insert_before :"ActiveRecord::SessionStore", ActiveRecord::QueryCache
- else
- configuration.middleware.use ActiveRecord::ConnectionAdapters::ConnectionManagement
- configuration.middleware.use ActiveRecord::QueryCache
- end
- end
- end
-
# TODO: Make a DSL way to limit an initializer to a particular framework
# # Prepare dispatcher callbacks and run 'prepare' callbacks
@@ -418,25 +385,6 @@ module Rails
end
end
- # Routing must be initialized after plugins to allow the former to extend the routes
- # ---
- # If Action Controller is not one of the loaded frameworks (Configuration#frameworks)
- # this does nothing. Otherwise, it loads the routing definitions and sets up
- # loading module used to lazily load controllers (Configuration#controller_paths).
- initializer :initialize_routing do
- next unless configuration.frameworks.include?(:action_controller)
- route_configuration_files << configuration.routes_configuration_file
- route_configuration_files << configuration.builtin_routes_configuration_file
- reload_routes!
- end
- #
- # # Observers are loaded after plugins in case Observers or observed models are modified by plugins.
- initializer :load_observers do
- if defined?(ActiveRecord)
- ActiveRecord::Base.instantiate_observers
- end
- end
-
# Eager load application classes
initializer :load_application_classes do
next if $rails_rake_task
diff --git a/railties/lib/rails/configuration.rb b/railties/lib/rails/configuration.rb
index bf5b9478cc..086f67a419 100644
--- a/railties/lib/rails/configuration.rb
+++ b/railties/lib/rails/configuration.rb
@@ -5,22 +5,26 @@ module Rails
# configuration class while this bit is being cleaned up.
class Plugin::Configuration
- def initialize
- @options = Hash.new { |h,k| h[k] = ActiveSupport::OrderedOptions.new }
+ def self.default
+ @default ||= new
end
- def middleware
- @middleware ||= ActionDispatch::MiddlewareStack.new
+ attr_reader :middleware
+
+ def initialize(base = nil)
+ if base
+ @options = base.options.dup
+ @middleware = base.middleware.dup
+ else
+ @options = Hash.new { |h,k| h[k] = ActiveSupport::OrderedOptions.new }
+ @middleware = ActionDispatch::MiddlewareStack.new
+ end
end
def respond_to?(name)
super || name.to_s =~ config_key_regexp
end
- def merge(config)
- @options = config.options.merge(@options)
- end
-
protected
attr_reader :options
@@ -41,8 +45,7 @@ module Rails
end
def config_keys
- ([ :active_support, :active_record, :action_controller,
- :action_view, :action_mailer, :active_resource ] +
+ ([ :active_support, :action_view, :action_mailer, :active_resource ] +
Plugin.plugin_names).map { |n| n.to_s }.uniq
end
end
@@ -60,7 +63,7 @@ module Rails
:log_level, :log_path, :paths, :routes_configuration_file,
:view_path
- def initialize
+ def initialize(base = nil)
super
@load_once_paths = []
@after_initialize_blocks = []
diff --git a/railties/lib/rails/plugin.rb b/railties/lib/rails/plugin.rb
index 90dc1ad8dd..0699affea7 100644
--- a/railties/lib/rails/plugin.rb
+++ b/railties/lib/rails/plugin.rb
@@ -2,8 +2,10 @@ module Rails
class Plugin
include Initializable
- def self.plugin_name
- @plugin_name || name.demodulize.underscore
+ def self.plugin_name(plugin_name = nil)
+ @plugin_name ||= name.demodulize.underscore
+ @plugin_name = plugin_name if plugin_name
+ @plugin_name
end
def self.inherited(klass)
@@ -20,7 +22,7 @@ module Rails
end
def self.config
- @config ||= Configuration.new
+ Configuration.default
end
class Vendored < Plugin
diff --git a/railties/test/application/initializer_test.rb b/railties/test/application/initializer_test.rb
index 8ed8e11c8f..2ecc3e9e2d 100644
--- a/railties/test/application/initializer_test.rb
+++ b/railties/test/application/initializer_test.rb
@@ -135,21 +135,9 @@ module ApplicationTests
assert !Rails.application.config.middleware.include?(ActiveRecord::SessionStore)
end
- test "database middleware doesn't initialize when activerecord is not in frameworks" do
- add_to_config <<-RUBY
- config.root = "#{app_path}"
- config.frameworks = []
- RUBY
- require "#{app_path}/config/environment"
-
- assert_equal [], Rails.application.config.middleware
- end
-
test "database middleware initializes when session store is active record" do
- add_to_config <<-RUBY
- config.root = "#{app_path}"
- config.action_controller.session_store = :active_record_store
- RUBY
+ add_to_config "config.action_controller.session_store = :active_record_store"
+
require "#{app_path}/config/environment"
expects = [ActiveRecord::ConnectionAdapters::ConnectionManagement, ActiveRecord::QueryCache, ActiveRecord::SessionStore]
@@ -157,22 +145,28 @@ module ApplicationTests
assert_equal expects, middleware & expects
end
- test "ensure database middleware doesn't use action_controller on initializing" do
+ test "Rails.root should be a Pathname" do
add_to_config <<-RUBY
config.root = "#{app_path}"
- config.frameworks -= [:action_controller]
- config.action_controller.session_store = :active_record_store
RUBY
require "#{app_path}/config/environment"
+ assert_instance_of Pathname, Rails.root
+ end
+ end
- assert !Rails.application.config.middleware.include?(ActiveRecord::SessionStore)
+ class InitializerCustomFrameworkExtensionsTest < Test::Unit::TestCase
+ include ActiveSupport::Testing::Isolation
+
+ def setup
+ build_app
+ boot_rails
end
- test "Rails.root should be a Pathname" do
- add_to_config <<-RUBY
- config.root = "#{app_path}"
- RUBY
+
+ test "database middleware doesn't initialize when activerecord is not in frameworks" do
+ use_frameworks []
require "#{app_path}/config/environment"
- assert_instance_of Pathname, Rails.root
+
+ assert !defined?(ActiveRecord)
end
end
end \ No newline at end of file
diff --git a/railties/test/plugins/framework_extension_test.rb b/railties/test/plugins/framework_extension_test.rb
new file mode 100644
index 0000000000..87e19cadce
--- /dev/null
+++ b/railties/test/plugins/framework_extension_test.rb
@@ -0,0 +1,18 @@
+require "isolation/abstract_unit"
+
+module PluginsTest
+ class FrameworkExtensionTest < Test::Unit::TestCase
+ def setup
+ build_app
+ boot_rails
+ end
+
+ test "active_record extensions are applied to ActiveRecord" do
+ add_to_config "config.active_record.table_name_prefix = 'tbl_'"
+
+ require "#{app_path}/config/environment"
+
+ assert_equal 'tbl_', ActiveRecord::Base.table_name_prefix
+ end
+ end
+end \ No newline at end of file