aboutsummaryrefslogtreecommitdiffstats
path: root/railties
diff options
context:
space:
mode:
Diffstat (limited to 'railties')
-rw-r--r--railties/CHANGELOG.md9
-rw-r--r--railties/lib/rails/application.rb2
-rw-r--r--railties/lib/rails/commands/commands_tasks.rb114
-rw-r--r--railties/lib/rails/commands/common_commands_tasks.rb68
-rw-r--r--railties/lib/rails/commands/rake_proxy.rb2
-rw-r--r--railties/lib/rails/engine/commands_tasks.rb112
-rw-r--r--railties/lib/rails/generators/rails/app/templates/config/initializers/assets.rb.tt5
-rw-r--r--railties/test/railties/railtie_test.rb7
8 files changed, 151 insertions, 168 deletions
diff --git a/railties/CHANGELOG.md b/railties/CHANGELOG.md
index 70f4b84237..594d239290 100644
--- a/railties/CHANGELOG.md
+++ b/railties/CHANGELOG.md
@@ -1,3 +1,10 @@
+* Run `before_configuration` callbacks as soon as application constant
+ inherits from `Rails::Application`.
+
+ Fixes #19880.
+
+ *Yuji Yaginuma*
+
* A generated app should not include Uglifier with `--skip-javascript` option.
*Ben Pickles*
@@ -17,7 +24,7 @@
*John Meehan*
-* Display name of the class defining the initializer along with the initializer
+* Display name of the class defining the initializer along with the initializer
name in the output of `rails initializers`.
Before:
diff --git a/railties/lib/rails/application.rb b/railties/lib/rails/application.rb
index 9c150965bf..b01196e3ed 100644
--- a/railties/lib/rails/application.rb
+++ b/railties/lib/rails/application.rb
@@ -87,6 +87,7 @@ module Rails
super
Rails.app_class = base
add_lib_to_load_path!(find_root(base.called_from))
+ ActiveSupport.run_load_hooks(:before_configuration, base)
end
def instance
@@ -146,7 +147,6 @@ module Rails
def run_load_hooks! # :nodoc:
return self if @ran_load_hooks
@ran_load_hooks = true
- ActiveSupport.run_load_hooks(:before_configuration, self)
@initial_variable_values.each do |variable_name, value|
if INITIAL_VARIABLES.include?(variable_name)
diff --git a/railties/lib/rails/commands/commands_tasks.rb b/railties/lib/rails/commands/commands_tasks.rb
index 02f6472330..43f9dd38f3 100644
--- a/railties/lib/rails/commands/commands_tasks.rb
+++ b/railties/lib/rails/commands/commands_tasks.rb
@@ -1,4 +1,6 @@
require "rails/commands/rake_proxy"
+require "rails/commands/common_commands_tasks"
+require "active_support/core_ext/string/strip"
module Rails
# This is a class which takes in a rails command and initiates the appropriate
@@ -8,27 +10,10 @@ module Rails
# it before they are run.
class CommandsTasks # :nodoc:
include Rails::RakeProxy
+ include Rails::CommonCommandsTasks
attr_reader :argv
- HELP_MESSAGE = <<-EOT
-Usage: rails COMMAND [ARGS]
-
-The most common rails commands are:
- generate Generate new code (short-cut alias: "g")
- console Start the Rails console (short-cut alias: "c")
- server Start the Rails server (short-cut alias: "s")
- test Run tests (short-cut alias: "t")
- dbconsole Start a console for the database specified in config/database.yml
- (short-cut alias: "db")
- new Create a new Rails application. "rails new my_app" creates a
- new application called MyApp in "./my_app"
-
-All commands can be run with -h (or --help) for more information.
-
-In addition to those commands, there are:
-EOT
-
ADDITIONAL_COMMANDS = [
[ "destroy", 'Undo code generated with "generate" (short-cut alias: "d")' ],
[ "plugin new", "Generates skeleton for developing a Rails plugin" ],
@@ -36,34 +21,14 @@ EOT
'Run a piece of code in the application environment (short-cut alias: "r")' ]
]
- COMMAND_WHITELIST = %w(plugin generate destroy console server dbconsole runner new version help test)
-
def initialize(argv)
@argv = argv
end
- def run_command!(command)
- command = parse_command(command)
-
- if COMMAND_WHITELIST.include?(command)
- send(command)
- else
- run_rake_task(command)
- end
- end
-
def plugin
require_command!("plugin")
end
- def generate
- generate_or_destroy(:generate)
- end
-
- def destroy
- generate_or_destroy(:destroy)
- end
-
def console
require_command!("console")
options = Rails::Console.parse_arguments(argv)
@@ -91,10 +56,6 @@ EOT
end
end
- def test
- require_command!("test")
- end
-
def dbconsole
require_command!("dbconsole")
Rails::DBConsole.start
@@ -112,16 +73,6 @@ EOT
end
end
- def version
- argv.unshift "--version"
- require_command!("application")
- end
-
- def help
- write_help_message
- write_commands ADDITIONAL_COMMANDS + formatted_rake_tasks
- end
-
private
def exit_with_initialization_warning!
@@ -134,17 +85,6 @@ EOT
argv.shift if argv.first && argv.first[0] != "-"
end
- def require_command!(command)
- require "rails/commands/#{command}"
- end
-
- def generate_or_destroy(command)
- require "rails/generators"
- require_application_and_environment!
- Rails.application.load_generators
- require_command!(command)
- end
-
# Change to the application's path if there is no config.ru file in current directory.
# This allows us to run `rails server` from other directories, but still get
# the main config.ru and properly set the tmp directory.
@@ -152,29 +92,45 @@ EOT
Dir.chdir(File.expand_path("../../", APP_PATH)) unless File.exist?(File.expand_path("config.ru"))
end
+ def commands
+ ADDITIONAL_COMMANDS + formatted_rake_tasks
+ end
+
+ def command_whitelist
+ %w(plugin generate destroy console server dbconsole runner new version help test)
+ end
+
+ def help_message
+ <<-EOT.strip_heredoc
+ Usage: rails COMMAND [ARGS]
+
+ The most common rails commands are:
+ generate Generate new code (short-cut alias: "g")
+ console Start the Rails console (short-cut alias: "c")
+ server Start the Rails server (short-cut alias: "s")
+ test Run tests (short-cut alias: "t")
+ dbconsole Start a console for the database specified in config/database.yml
+ (short-cut alias: "db")
+ new Create a new Rails application. "rails new my_app" creates a
+ new application called MyApp in "./my_app"
+
+ All commands can be run with -h (or --help) for more information.
+
+ In addition to those commands, there are:
+ EOT
+ end
+
def require_application_and_environment!
require APP_PATH
Rails.application.require_environment!
end
- def write_help_message
- puts HELP_MESSAGE
- end
-
- def write_commands(commands)
- width = commands.map { |name, _| name.size }.max || 10
- commands.each { |command| printf(" %-#{width}s %s\n", *command) }
+ def load_tasks
+ Rails.application.load_tasks
end
- def parse_command(command)
- case command
- when "--version", "-v"
- "version"
- when "--help", "-h"
- "help"
- else
- command
- end
+ def load_generators
+ Rails.application.load_generators
end
end
end
diff --git a/railties/lib/rails/commands/common_commands_tasks.rb b/railties/lib/rails/commands/common_commands_tasks.rb
new file mode 100644
index 0000000000..c1484d7ae2
--- /dev/null
+++ b/railties/lib/rails/commands/common_commands_tasks.rb
@@ -0,0 +1,68 @@
+module Rails
+ module CommonCommandsTasks # :nodoc:
+ def run_command!(command)
+ command = parse_command(command)
+
+ if command_whitelist.include?(command)
+ send(command)
+ else
+ run_rake_task(command)
+ end
+ end
+
+ def generate
+ generate_or_destroy(:generate)
+ end
+
+ def destroy
+ generate_or_destroy(:destroy)
+ end
+
+ def test
+ require_command!("test")
+ end
+
+ def version
+ argv.unshift "--version"
+ require_command!("application")
+ end
+
+ def help
+ write_help_message
+ write_commands(commands)
+ end
+
+ private
+
+ def generate_or_destroy(command)
+ require "rails/generators"
+ require_application_and_environment!
+ load_generators
+ require_command!(command)
+ end
+
+ def require_command!(command)
+ require "rails/commands/#{command}"
+ end
+
+ def write_help_message
+ puts help_message
+ end
+
+ def write_commands(commands)
+ width = commands.map { |name, _| name.size }.max || 10
+ commands.each { |command| printf(" %-#{width}s %s\n", *command) }
+ end
+
+ def parse_command(command)
+ case command
+ when "--version", "-v"
+ "version"
+ when "--help", "-h"
+ "help"
+ else
+ command
+ end
+ end
+ end
+end
diff --git a/railties/lib/rails/commands/rake_proxy.rb b/railties/lib/rails/commands/rake_proxy.rb
index b9e50f3e5a..f8da71831a 100644
--- a/railties/lib/rails/commands/rake_proxy.rb
+++ b/railties/lib/rails/commands/rake_proxy.rb
@@ -26,7 +26,7 @@ module Rails
Rake::TaskManager.record_task_metadata = true
Rake.application.instance_variable_set(:@name, "rails")
- Rails.application.load_tasks
+ load_tasks
@rake_tasks = Rake.application.tasks.select(&:comment)
end
diff --git a/railties/lib/rails/engine/commands_tasks.rb b/railties/lib/rails/engine/commands_tasks.rb
index e21a7183fc..d6effdb732 100644
--- a/railties/lib/rails/engine/commands_tasks.rb
+++ b/railties/lib/rails/engine/commands_tasks.rb
@@ -1,118 +1,62 @@
require "rails/commands/rake_proxy"
+require "rails/commands/common_commands_tasks"
+require "active_support/core_ext/string/strip"
module Rails
class Engine
class CommandsTasks # :nodoc:
include Rails::RakeProxy
+ include Rails::CommonCommandsTasks
attr_reader :argv
- HELP_MESSAGE = <<-EOT
-Usage: rails COMMAND [ARGS]
-
-The common Rails commands available for engines are:
- generate Generate new code (short-cut alias: "g")
- destroy Undo code generated with "generate" (short-cut alias: "d")
- test Run tests (short-cut alias: "t")
-
-All commands can be run with -h for more information.
-
-If you want to run any commands that need to be run in context
-of the application, like `rails server` or `rails console`,
-you should do it from application's directory (typically test/dummy).
-
-In addition to those commands, there are:
- EOT
-
- COMMAND_WHITELIST = %w(generate destroy version help test)
-
def initialize(argv)
@argv = argv
end
- def run_command!(command)
- command = parse_command(command)
+ private
- if COMMAND_WHITELIST.include?(command)
- send(command)
- else
- run_rake_task(command)
+ def commands
+ formatted_rake_tasks
end
- end
- def generate
- generate_or_destroy(:generate)
- end
+ def command_whitelist
+ %w(generate destroy version help test)
+ end
- def destroy
- generate_or_destroy(:destroy)
- end
+ def help_message
+ <<-EOT.strip_heredoc
+ Usage: rails COMMAND [ARGS]
- def test
- require_command!("test")
- end
+ The common Rails commands available for engines are:
+ generate Generate new code (short-cut alias: "g")
+ destroy Undo code generated with "generate" (short-cut alias: "d")
+ test Run tests (short-cut alias: "t")
- def version
- argv.unshift "--version"
- require_command!("application")
- end
+ All commands can be run with -h for more information.
- def help
- write_help_message
- write_commands(formatted_rake_tasks)
- end
+ If you want to run any commands that need to be run in context
+ of the application, like `rails server` or `rails console`,
+ you should do it from application's directory (typically test/dummy).
- private
+ In addition to those commands, there are:
+ EOT
+ end
- def require_command!(command)
- require "rails/commands/#{command}"
+ def require_application_and_environment!
+ require ENGINE_PATH
end
- def generate_or_destroy(command)
- load_generators
- require_command!(command)
+ def load_tasks
+ Rake.application.init("rails")
+ Rake.application.load_rakefile
end
def load_generators
- require "rails/generators"
- require ENGINE_PATH
-
engine = ::Rails::Engine.find(ENGINE_ROOT)
Rails::Generators.namespace = engine.railtie_namespace
engine.load_generators
end
-
- def write_help_message
- puts HELP_MESSAGE
- end
-
- def write_commands(commands)
- width = commands.map { |name, _| name.size }.max || 10
- commands.each { |command| printf(" %-#{width}s %s\n", *command) }
- end
-
- def parse_command(command)
- case command
- when "--version", "-v"
- "version"
- when "--help", "-h"
- "help"
- else
- command
- end
- end
-
- def rake_tasks
- require_rake
-
- return @rake_tasks if defined?(@rake_tasks)
-
- load_generators
- Rake::TaskManager.record_task_metadata = true
- Rake.application.init("rails")
- Rake.application.load_rakefile
- @rake_tasks = Rake.application.tasks.select(&:comment)
- end
end
end
end
diff --git a/railties/lib/rails/generators/rails/app/templates/config/initializers/assets.rb.tt b/railties/lib/rails/generators/rails/app/templates/config/initializers/assets.rb.tt
index 01ef3e6630..2318cf59ff 100644
--- a/railties/lib/rails/generators/rails/app/templates/config/initializers/assets.rb.tt
+++ b/railties/lib/rails/generators/rails/app/templates/config/initializers/assets.rb.tt
@@ -7,5 +7,6 @@ Rails.application.config.assets.version = '1.0'
# Rails.application.config.assets.paths << Emoji.images_path
# Precompile additional assets.
-# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
-# Rails.application.config.assets.precompile += %w( search.js )
+# application.js, application.css, and all non-JS/CSS in the app/assets
+# folder are already added.
+# Rails.application.config.assets.precompile += %w( admin.js admin.css )
diff --git a/railties/test/railties/railtie_test.rb b/railties/test/railties/railtie_test.rb
index 994019267c..755ac23cb1 100644
--- a/railties/test/railties/railtie_test.rb
+++ b/railties/test/railties/railtie_test.rb
@@ -79,6 +79,13 @@ module RailtiesTest
assert_equal app_path, $before_configuration
end
+ test "before_configuration callbacks run as soon as the application constant inherits from Rails::Application" do
+ $before_configuration = false
+ class Foo < Rails::Railtie ; config.before_configuration { $before_configuration = true } ; end
+ class Application < Rails::Application ; end
+ assert $before_configuration
+ end
+
test "railtie can add after_initialize callbacks" do
$after_initialize = false
class Foo < Rails::Railtie ; config.after_initialize { $after_initialize = true } ; end