Ensure lib/rails/initializers/*.rb also works for gems.

This commit is contained in:
José Valim 2010-03-23 23:50:24 +01:00
parent cc0e402aa8
commit 5c41cb77d9
5 changed files with 42 additions and 50 deletions

@ -109,6 +109,13 @@ def load_tasks
config.generators.templates.unshift(*paths.lib.templates.to_a)
end
initializer :load_lib_initializers do |app|
paths.lib.rails.initializers.to_a.sort.each do |initializer|
config = app.config
eval(File.read(initializer), binding, initializer)
end
end
initializer :load_application_initializers do
paths.config.initializers.to_a.sort.each do |initializer|
load(initializer)

@ -14,23 +14,25 @@ def initialize(root=nil)
def paths
@paths ||= begin
paths = Rails::Paths::Root.new(@root)
paths.app "app", :eager_load => true, :glob => "*"
paths.app.controllers "app/controllers", :eager_load => true
paths.app.helpers "app/helpers", :eager_load => true
paths.app.models "app/models", :eager_load => true
paths.app.mailers "app/mailers", :eager_load => true
paths.app.metals "app/metal", :eager_load => true
paths.app.views "app/views", :eager_load => true
paths.lib "lib", :load_path => true
paths.lib.tasks "lib/tasks", :glob => "**/*.rake"
paths.lib.templates "lib/templates"
paths.config "config"
paths.config.initializers "config/initializers", :glob => "**/*.rb"
paths.config.locales "config/locales", :glob => "*.{rb,yml}"
paths.config.routes "config/routes.rb"
paths.public "public"
paths.public.javascripts "public/javascripts"
paths.public.stylesheets "public/stylesheets"
paths.app "app", :eager_load => true, :glob => "*"
paths.app.controllers "app/controllers", :eager_load => true
paths.app.helpers "app/helpers", :eager_load => true
paths.app.models "app/models", :eager_load => true
paths.app.mailers "app/mailers", :eager_load => true
paths.app.metals "app/metal", :eager_load => true
paths.app.views "app/views", :eager_load => true
paths.lib "lib", :load_path => true
paths.lib.rails "lib/rails", :glob => "**/*.rake"
paths.lib.rails.initializers "lib/rails/initializers", :glob => "**/*.rb"
paths.lib.tasks "lib/tasks", :glob => "**/*.rake"
paths.lib.templates "lib/templates"
paths.config "config"
paths.config.initializers "config/initializers", :glob => "**/*.rb"
paths.config.locales "config/locales", :glob => "*.{rb,yml}"
paths.config.routes "config/routes.rb"
paths.public "public"
paths.public.javascripts "public/javascripts"
paths.public.stylesheets "public/stylesheets"
paths
end
end

@ -47,20 +47,13 @@ def config
end
initializer :load_init_rb, :before => :load_application_initializers do |app|
initializers = Dir["#{root}/lib/rails/initializers/*.rb"]
lib_initializers = paths.lib.rails.initializers.to_a
files = %w(rails/init.rb init.rb).map { |path| File.expand_path(path, root) }
if initializers.any?
initializers.each do |initializer|
config = app.config
eval(File.read(initializer), binding, initializer)
end
else
files = %w(rails/init.rb init.rb).map { |path| File.expand_path path, root }
if initrb = files.find { |path| File.file? path }
ActiveSupport::Deprecation.warn "init.rb is deprecated: #{initrb}. Use lib/rails/initializers/#{name}.rb"
config = app.config
eval(File.read(initrb), binding, initrb)
end
if lib_initializers.empty? && initrb = files.find { |path| File.file?(path) }
ActiveSupport::Deprecation.warn "init.rb is deprecated: #{initrb}. Use lib/rails/initializers/#{name}.rb"
config = app.config
eval(File.read(initrb), binding, initrb)
end
end

@ -94,26 +94,6 @@ class Engine < Rails::Engine
assert rescued, "Expected boot rails to fail"
end
test "loads lib/rails/initializers/foo.rb" do
@plugin.write "lib/rails/initializers/foo.rb", <<-RUBY
$loaded = true
RUBY
boot_rails
assert $loaded
end
test "loads vendored rails/initializers/foo thats already in the $LOAD_PATH" do
$: << "#{app_path}/vendor/foo/lib"
app_file "vendor/foo/lib/rails/initializers/foo.rb", <<-RUBY
$loaded = true
RUBY
boot_rails
assert $loaded
end
test "skips init.rb if initializer is present" do
@plugin.write "lib/rails/initializers/foo.rb", <<-RUBY
$loaded = true

@ -297,6 +297,16 @@ def test_plugin_initializers
assert $plugin_initializer
end
def test_rails_plugin_initializers
$plugin_initializer = false
@plugin.write "lib/rails/initializers/foo.rb", <<-RUBY
$plugin_initializer = true
RUBY
boot_rails
assert $plugin_initializer
end
def test_plugin_midleware_referenced_in_configuration
@plugin.write "lib/bukkits.rb", <<-RUBY
class Bukkits