Skip to content

Commit 3afdfc3

Browse files
committed
Expose remaining hooks to minimize the need for a Railtie based on feedback from plugin developers.
1 parent 351816f commit 3afdfc3

File tree

4 files changed

+36
-6
lines changed

4 files changed

+36
-6
lines changed

railties/lib/rails/application.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ def inherited(base)
6969
raise "You cannot have more than one Rails::Application" if Rails.application
7070
super
7171
Rails.application = base.instance
72-
7372
ActiveSupport.run_load_hooks(:before_configuration, base.instance)
7473
end
7574

railties/lib/rails/application/finisher.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ module Finisher
3737

3838
initializer :eager_load! do
3939
if config.cache_classes && !$rails_rake_task
40+
ActiveSupport.run_load_hooks(:before_eager_load, self)
4041
railties.all(&:eager_load!)
4142
end
4243
end

railties/lib/rails/railtie/configuration.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,18 @@ def generators
6868
end
6969
end
7070

71+
def before_configuration(&block)
72+
ActiveSupport.on_load(:before_configuration, :yield => true, &block)
73+
end
74+
75+
def before_eager_load(&block)
76+
ActiveSupport.on_load(:before_eager_load, :yield => true, &block)
77+
end
78+
79+
def before_initialize(&block)
80+
ActiveSupport.on_load(:before_initialize, :yield => true, &block)
81+
end
82+
7183
def after_initialize(&block)
7284
ActiveSupport.on_load(:after_initialize, :yield => true, &block)
7385
end

railties/test/application/initializers/initializers_test.rb renamed to railties/test/application/initializers/hooks_test.rb

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,34 @@ def setup
1616
assert $foo
1717
end
1818

19-
test "after_initialize block works correctly" do
19+
test "hooks block works correctly without cache classes (before_eager_load is not called)" do
2020
add_to_config <<-RUBY
21+
$initialization_callbacks = []
2122
config.root = "#{app_path}"
22-
config.after_initialize { $test_after_initialize_block1 = "success" }
23-
config.after_initialize { $test_after_initialize_block2 = "congratulations" }
23+
config.cache_classes = false
24+
config.before_configuration { $initialization_callbacks << 1 }
25+
config.before_initialize { $initialization_callbacks << 2 }
26+
config.before_eager_load { Boom }
27+
config.after_initialize { $initialization_callbacks << 3 }
2428
RUBY
29+
2530
require "#{app_path}/config/environment"
31+
assert_equal [1,2,3], $initialization_callbacks
32+
end
2633

27-
assert_equal "success", $test_after_initialize_block1
28-
assert_equal "congratulations", $test_after_initialize_block2
34+
test "hooks block works correctly with cache classes" do
35+
add_to_config <<-RUBY
36+
$initialization_callbacks = []
37+
config.root = "#{app_path}"
38+
config.cache_classes = true
39+
config.before_configuration { $initialization_callbacks << 1 }
40+
config.before_initialize { $initialization_callbacks << 2 }
41+
config.before_eager_load { $initialization_callbacks << 3 }
42+
config.after_initialize { $initialization_callbacks << 4 }
43+
RUBY
44+
45+
require "#{app_path}/config/environment"
46+
assert_equal [1,2,3,4], $initialization_callbacks
2947
end
3048

3149
test "after_initialize runs after frameworks have been initialized" do

0 commit comments

Comments
 (0)