Skip to content

Commit

Permalink
Allow Engines loading its own environment file from config/environments
Browse files Browse the repository at this point in the history
  • Loading branch information
drogus committed Jul 29, 2010
1 parent 6b5f428 commit 9cfdd09
Show file tree
Hide file tree
Showing 7 changed files with 50 additions and 18 deletions.
4 changes: 0 additions & 4 deletions railties/lib/rails/application.rb
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,6 @@ class Application < Engine
class << self
private :new

def configure(&block)
class_eval(&block)
end

def instance
if self == Rails::Application
if Rails.application
Expand Down
7 changes: 2 additions & 5 deletions railties/lib/rails/application/bootstrap.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,7 @@ class Application
module Bootstrap
include Initializable

initializer :load_environment_config do
environment = config.paths.config.environments.to_a.first
require environment if environment
end
initializer :load_environment_hook do end

initializer :load_active_support do
require 'active_support/dependencies'
Expand Down Expand Up @@ -73,4 +70,4 @@ module Bootstrap
end
end
end
end
end
1 change: 0 additions & 1 deletion railties/lib/rails/application/configuration.rb
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ def paths
paths.app.controllers << builtin_controller if builtin_controller
paths.config.database "config/database.yml"
paths.config.environment "config/environment.rb"
paths.config.environments "config/environments", :glob => "#{Rails.env}.rb"
paths.lib.templates "lib/templates"
paths.log "log/#{Rails.env}.log"
paths.tmp "tmp"
Expand Down
9 changes: 9 additions & 0 deletions railties/lib/rails/engine.rb
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,10 @@ def endpoint(endpoint = nil)
@endpoint
end

def configure(&block)
class_eval(&block)
end

protected

def method_missing(*args, &block)
Expand Down Expand Up @@ -249,6 +253,11 @@ def initializers
# consistently executed after all the initializers above across all engines.
end

initializer :load_environment_config, :before => :load_environment_hook do
environment = config.paths.config.environments.to_a.first
require environment if environment
end

protected
def default_middleware_stack
ActionDispatch::MiddlewareStack.new
Expand Down
1 change: 1 addition & 0 deletions railties/lib/rails/engine/configuration.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ def paths
paths.config.initializers "config/initializers", :glob => "**/*.rb"
paths.config.locales "config/locales", :glob => "*.{rb,yml}"
paths.config.routes "config/routes.rb"
paths.config.environments "config/environments", :glob => "#{Rails.env}.rb"
paths.public "public"
paths.public.javascripts "public/javascripts"
paths.public.stylesheets "public/stylesheets"
Expand Down
17 changes: 17 additions & 0 deletions railties/test/application/loading_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,23 @@ class User < ActiveRecord::Base
User
end

test "load config/environments/environment before Bootstrap initializers" do
app_file "config/environments/development.rb", <<-RUBY
AppTemplate::Application.configure do
config.development_environment_loaded = true
end
RUBY

add_to_config <<-RUBY
config.before_initialize do
config.loaded = config.development_environment_loaded
end
RUBY

require "#{app_path}/config/environment"
assert ::AppTemplate::Application.config.loaded
end

def test_descendants_are_cleaned_on_each_request_without_cache_classes
add_to_config <<-RUBY
config.cache_classes = false
Expand Down
29 changes: 21 additions & 8 deletions railties/test/railties/engine_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -54,15 +54,9 @@ class Engine < ::Rails::Engine

initializers = Rails.application.initializers.tsort
index = initializers.index { |i| i.name == "dummy_initializer" }
selection = initializers[(index-3)..(index)].map(&:name).map(&:to_s)

assert_equal %w(
load_config_initializers
load_config_initializers
engines_blank_point
dummy_initializer
), selection

assert index > initializers.index { |i| i.name == :load_config_initializers }
assert index > initializers.index { |i| i.name == :engines_blank_point }
assert index < initializers.index { |i| i.name == :build_middleware_stack }
end

Expand Down Expand Up @@ -164,5 +158,24 @@ class Engine < ::Rails::Engine
assert !Bukkits::Engine.config.respond_to?(:engine_yaffle_loaded)
assert Rails.application.config.app_yaffle_loaded
end

test "it loads its environment file" do
@plugin.write "lib/bukkits.rb", <<-RUBY
class Bukkits
class Engine < ::Rails::Engine
end
end
RUBY

@plugin.write "config/environments/development.rb", <<-RUBY
Bukkits::Engine.configure do
config.environment_loaded = true
end
RUBY

boot_rails

assert Bukkits::Engine.config.environment_loaded
end
end
end

0 comments on commit 9cfdd09

Please sign in to comment.