mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Remove unused responsibilities and add a few load definitions to engines
Since plugins were removed, we can clean up a few methods in engines. We also use this opportunity to move `load_console`, `load_tasks` and `load_runner` to Rails::Engine. This means that, if someone wants to improve script/rails for engines to support console or runner commands, part of the work is already done.
This commit is contained in:
parent
0470ddcf03
commit
50b6110106
5 changed files with 151 additions and 158 deletions
|
@ -435,7 +435,7 @@ namespace :railties do
|
|||
task :migrations => :'db:load_config' do
|
||||
to_load = ENV['FROM'].blank? ? :all : ENV['FROM'].split(",").map {|n| n.strip }
|
||||
railties = {}
|
||||
Rails.application.railties.all do |railtie|
|
||||
Rails.application.railties.each do |railtie|
|
||||
next unless to_load == :all || to_load.include?(railtie.railtie_name)
|
||||
|
||||
if railtie.respond_to?(:paths) && (path = railtie.paths['db/migrate'].first)
|
||||
|
|
|
@ -79,9 +79,11 @@ module Rails
|
|||
@routes_reloader = nil
|
||||
@env_config = nil
|
||||
@ordered_railties = nil
|
||||
@railties = nil
|
||||
@queue = nil
|
||||
end
|
||||
|
||||
# Returns true if the application is initialized.
|
||||
def initialized?
|
||||
@initialized
|
||||
end
|
||||
|
@ -98,30 +100,6 @@ module Rails
|
|||
routes_reloader.reload!
|
||||
end
|
||||
|
||||
# Load the application and its railties tasks and invoke the registered hooks.
|
||||
# Check <tt>Rails::Railtie.rake_tasks</tt> for more info.
|
||||
def load_tasks(app=self)
|
||||
initialize_tasks
|
||||
super
|
||||
self
|
||||
end
|
||||
|
||||
# Load the application console and invoke the registered hooks.
|
||||
# Check <tt>Rails::Railtie.console</tt> for more info.
|
||||
def load_console(app=self)
|
||||
initialize_console
|
||||
super
|
||||
self
|
||||
end
|
||||
|
||||
# Load the application runner and invoke the registered hooks.
|
||||
# Check <tt>Rails::Railtie.runner</tt> for more info.
|
||||
def load_runner(app=self)
|
||||
initialize_runner
|
||||
super
|
||||
self
|
||||
end
|
||||
|
||||
# Stores some of the Rails initial environment parameters which
|
||||
# will be used by middlewares and engines to configure themselves.
|
||||
def env_config
|
||||
|
@ -188,32 +166,9 @@ module Rails
|
|||
self
|
||||
end
|
||||
|
||||
# Returns the ordered railties for this application considering railties_order.
|
||||
def ordered_railties #:nodoc:
|
||||
@ordered_railties ||= begin
|
||||
order = config.railties_order.map do |railtie|
|
||||
if railtie == :main_app
|
||||
self
|
||||
elsif railtie.respond_to?(:instance)
|
||||
railtie.instance
|
||||
else
|
||||
railtie
|
||||
end
|
||||
end
|
||||
|
||||
all = (railties - order)
|
||||
all.push(self) unless (all + order).include?(self)
|
||||
order.push(:all) unless order.include?(:all)
|
||||
|
||||
index = order.index(:all)
|
||||
order[index] = all
|
||||
order.reverse.flatten
|
||||
end
|
||||
end
|
||||
|
||||
def initializers #:nodoc:
|
||||
Bootstrap.initializers_for(self) +
|
||||
super +
|
||||
railties_initializers(super) +
|
||||
Finisher.initializers_for(self)
|
||||
end
|
||||
|
||||
|
@ -246,6 +201,66 @@ module Rails
|
|||
|
||||
alias :build_middleware_stack :app
|
||||
|
||||
def run_tasks_blocks(app) #:nodoc:
|
||||
railties.each { |r| r.run_tasks_blocks(app) }
|
||||
super
|
||||
require "rails/tasks"
|
||||
task :environment do
|
||||
$rails_rake_task = true
|
||||
require_environment!
|
||||
end
|
||||
end
|
||||
|
||||
def run_generators_blocks(app) #:nodoc:
|
||||
railties.each { |r| r.run_generators_blocks(app) }
|
||||
super
|
||||
end
|
||||
|
||||
def run_runner_blocks(app) #:nodoc:
|
||||
railties.each { |r| r.run_runner_blocks(app) }
|
||||
super
|
||||
end
|
||||
|
||||
def run_console_blocks(app) #:nodoc:
|
||||
railties.each { |r| r.run_console_blocks(app) }
|
||||
super
|
||||
end
|
||||
|
||||
# Returns the ordered railties for this application considering railties_order.
|
||||
def ordered_railties #:nodoc:
|
||||
@ordered_railties ||= begin
|
||||
order = config.railties_order.map do |railtie|
|
||||
if railtie == :main_app
|
||||
self
|
||||
elsif railtie.respond_to?(:instance)
|
||||
railtie.instance
|
||||
else
|
||||
railtie
|
||||
end
|
||||
end
|
||||
|
||||
all = (railties - order)
|
||||
all.push(self) unless (all + order).include?(self)
|
||||
order.push(:all) unless order.include?(:all)
|
||||
|
||||
index = order.index(:all)
|
||||
order[index] = all
|
||||
order.reverse.flatten
|
||||
end
|
||||
end
|
||||
|
||||
def railties_initializers(current) #:nodoc:
|
||||
initializers = []
|
||||
ordered_railties.each do |r|
|
||||
if r == self
|
||||
initializers += current
|
||||
else
|
||||
initializers += r.initializers
|
||||
end
|
||||
end
|
||||
initializers
|
||||
end
|
||||
|
||||
def reload_dependencies? #:nodoc:
|
||||
config.reload_classes_only_on_change != true || reloaders.map(&:updated?).any?
|
||||
end
|
||||
|
@ -305,25 +320,6 @@ module Rails
|
|||
end
|
||||
end
|
||||
|
||||
def initialize_tasks #:nodoc:
|
||||
self.class.rake_tasks do
|
||||
require "rails/tasks"
|
||||
task :environment do
|
||||
$rails_rake_task = true
|
||||
require_environment!
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def initialize_console #:nodoc:
|
||||
require "pp"
|
||||
require "rails/console/app"
|
||||
require "rails/console/helpers"
|
||||
end
|
||||
|
||||
def initialize_runner #:nodoc:
|
||||
end
|
||||
|
||||
def build_original_fullpath(env) #:nodoc:
|
||||
path_info = env["PATH_INFO"]
|
||||
query_string = env["QUERY_STRING"]
|
||||
|
|
|
@ -338,26 +338,6 @@ module Rails
|
|||
class Engine < Railtie
|
||||
autoload :Configuration, "rails/engine/configuration"
|
||||
|
||||
def initialize
|
||||
@_all_autoload_paths = nil
|
||||
@_all_load_paths = nil
|
||||
@app = nil
|
||||
@config = nil
|
||||
@env_config = nil
|
||||
@helpers = nil
|
||||
@railties = nil
|
||||
@routes = nil
|
||||
super
|
||||
end
|
||||
|
||||
def load_generators(app=self)
|
||||
initialize_generators
|
||||
railties.each { |r| r.load_generators(app) }
|
||||
Rails::Generators.configure!(app.config.generators)
|
||||
super
|
||||
self
|
||||
end
|
||||
|
||||
class << self
|
||||
attr_accessor :called_from, :isolated
|
||||
alias :isolated? :isolated
|
||||
|
@ -406,7 +386,7 @@ module Rails
|
|||
end
|
||||
|
||||
unless mod.respond_to?(:railtie_routes_url_helpers)
|
||||
define_method(:railtie_routes_url_helpers) { railtie.routes_url_helpers }
|
||||
define_method(:railtie_routes_url_helpers) { railtie.routes.url_helpers }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -426,25 +406,54 @@ module Rails
|
|||
delegate :middleware, :root, :paths, :to => :config
|
||||
delegate :engine_name, :isolated?, :to => "self.class"
|
||||
|
||||
def load_tasks(app=self)
|
||||
railties.each { |r| r.load_tasks(app) }
|
||||
def initialize
|
||||
@_all_autoload_paths = nil
|
||||
@_all_load_paths = nil
|
||||
@app = nil
|
||||
@config = nil
|
||||
@env_config = nil
|
||||
@helpers = nil
|
||||
@routes = nil
|
||||
super
|
||||
paths["lib/tasks"].existent.sort.each { |ext| load(ext) }
|
||||
end
|
||||
|
||||
# Load console and invoke the registered hooks.
|
||||
# Check <tt>Rails::Railtie.console</tt> for more info.
|
||||
def load_console(app=self)
|
||||
railties.each { |r| r.load_console(app) }
|
||||
super
|
||||
require "pp"
|
||||
require "rails/console/app"
|
||||
require "rails/console/helpers"
|
||||
run_console_blocks(app)
|
||||
self
|
||||
end
|
||||
|
||||
# Load Rails runner and invoke the registered hooks.
|
||||
# Check <tt>Rails::Railtie.runner</tt> for more info.
|
||||
def load_runner(app=self)
|
||||
railties.each { |r| r.load_runner(app) }
|
||||
super
|
||||
run_runner_blocks(app)
|
||||
self
|
||||
end
|
||||
|
||||
def eager_load!
|
||||
railties.each(&:eager_load!)
|
||||
# Load Rake, railties tasks and invoke the registered hooks.
|
||||
# Check <tt>Rails::Railtie.rake_tasks</tt> for more info.
|
||||
def load_tasks(app=self)
|
||||
require "rake"
|
||||
run_tasks_blocks(app)
|
||||
self
|
||||
end
|
||||
|
||||
# Load rails generators and invoke the registered hooks.
|
||||
# Check <tt>Rails::Railtie.generators</tt> for more info.
|
||||
def load_generators(app=self)
|
||||
require "rails/generators"
|
||||
run_generators_blocks(app)
|
||||
Rails::Generators.configure!(app.config.generators)
|
||||
self
|
||||
end
|
||||
|
||||
# Eager load the application by loading all ruby
|
||||
# files inside eager_load paths.
|
||||
def eager_load!
|
||||
config.eager_load_paths.each do |load_path|
|
||||
matcher = /\A#{Regexp.escape(load_path)}\/(.*)\.rb\Z/
|
||||
Dir.glob("#{load_path}/**/*.rb").sort.each do |file|
|
||||
|
@ -453,10 +462,7 @@ module Rails
|
|||
end
|
||||
end
|
||||
|
||||
def railties
|
||||
@railties ||= []
|
||||
end
|
||||
|
||||
# Returns a module with all the helpers defined for the engine.
|
||||
def helpers
|
||||
@helpers ||= begin
|
||||
helpers = Module.new
|
||||
|
@ -468,14 +474,12 @@ module Rails
|
|||
end
|
||||
end
|
||||
|
||||
# Returns all registered helpers paths.
|
||||
def helpers_paths
|
||||
paths["app/helpers"].existent
|
||||
end
|
||||
|
||||
def routes_url_helpers
|
||||
routes.url_helpers
|
||||
end
|
||||
|
||||
# Returns the underlying rack application for this engine.
|
||||
def app
|
||||
@app ||= begin
|
||||
config.middleware = config.middleware.merge_into(default_middleware_stack)
|
||||
|
@ -483,20 +487,26 @@ module Rails
|
|||
end
|
||||
end
|
||||
|
||||
# Returns the endpoint for this engine. If none is registered,
|
||||
# defaults to an ActionDispatch::Routing::RouteSet.
|
||||
def endpoint
|
||||
self.class.endpoint || routes
|
||||
end
|
||||
|
||||
# Define the Rack API for this engine.
|
||||
def call(env)
|
||||
app.call(env.merge!(env_config))
|
||||
end
|
||||
|
||||
# Defines additional Rack env configuration that is added on each call.
|
||||
def env_config
|
||||
@env_config ||= {
|
||||
'action_dispatch.routes' => routes
|
||||
}
|
||||
end
|
||||
|
||||
# Defines the routes for this engine. If a block is given to
|
||||
# routes, it is appended to the engine.
|
||||
def routes
|
||||
@routes ||= ActionDispatch::Routing::RouteSet.new.tap do |routes|
|
||||
routes.draw_paths.concat paths["config/routes"].paths
|
||||
|
@ -506,22 +516,7 @@ module Rails
|
|||
@routes
|
||||
end
|
||||
|
||||
def ordered_railties
|
||||
railties + [self]
|
||||
end
|
||||
|
||||
def initializers
|
||||
initializers = []
|
||||
ordered_railties.each do |r|
|
||||
if r == self
|
||||
initializers += super
|
||||
else
|
||||
initializers += r.initializers
|
||||
end
|
||||
end
|
||||
initializers
|
||||
end
|
||||
|
||||
# Define the configuration object for the engine.
|
||||
def config
|
||||
@config ||= Engine::Configuration.new(find_root_with_flag("lib"))
|
||||
end
|
||||
|
@ -626,7 +621,6 @@ module Rails
|
|||
else
|
||||
Rake::Task["app:railties:install:migrations"].invoke
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -634,19 +628,20 @@ module Rails
|
|||
|
||||
protected
|
||||
|
||||
def initialize_generators
|
||||
require "rails/generators"
|
||||
def run_tasks_blocks(*) #:nodoc:
|
||||
super
|
||||
paths["lib/tasks"].existent.sort.each { |ext| load(ext) }
|
||||
end
|
||||
|
||||
def routes?
|
||||
def routes? #:nodoc:
|
||||
@routes
|
||||
end
|
||||
|
||||
def has_migrations?
|
||||
def has_migrations? #:nodoc:
|
||||
paths["db/migrate"].existent.any?
|
||||
end
|
||||
|
||||
def find_root_with_flag(flag, default=nil)
|
||||
def find_root_with_flag(flag, default=nil) #:nodoc:
|
||||
root_path = self.class.called_from
|
||||
|
||||
while root_path && File.directory?(root_path) && !File.exist?("#{root_path}/#{flag}")
|
||||
|
@ -660,19 +655,19 @@ module Rails
|
|||
Pathname.new File.realpath root
|
||||
end
|
||||
|
||||
def default_middleware_stack
|
||||
def default_middleware_stack #:nodoc:
|
||||
ActionDispatch::MiddlewareStack.new
|
||||
end
|
||||
|
||||
def _all_autoload_once_paths
|
||||
def _all_autoload_once_paths #:nodoc:
|
||||
config.autoload_once_paths
|
||||
end
|
||||
|
||||
def _all_autoload_paths
|
||||
def _all_autoload_paths #:nodoc:
|
||||
@_all_autoload_paths ||= (config.autoload_paths + config.eager_load_paths + config.autoload_once_paths).uniq
|
||||
end
|
||||
|
||||
def _all_load_paths
|
||||
def _all_load_paths #:nodoc:
|
||||
@_all_load_paths ||= (config.paths.load_paths + _all_autoload_paths).uniq
|
||||
end
|
||||
end
|
||||
|
|
|
@ -181,33 +181,35 @@ module Rails
|
|||
def eager_load!
|
||||
end
|
||||
|
||||
def load_console(app=self)
|
||||
self.class.console.each { |block| block.call(app) }
|
||||
end
|
||||
|
||||
def load_runner(app=self)
|
||||
self.class.runner.each { |block| block.call(app) }
|
||||
end
|
||||
|
||||
def load_tasks(app=self)
|
||||
require 'rake'
|
||||
extend Rake::DSL
|
||||
self.class.rake_tasks.each { |block| self.instance_exec(app, &block) }
|
||||
|
||||
# load also tasks from all superclasses
|
||||
klass = self.class.superclass
|
||||
while klass.respond_to?(:rake_tasks)
|
||||
klass.rake_tasks.each { |t| self.instance_exec(app, &t) }
|
||||
klass = klass.superclass
|
||||
end
|
||||
end
|
||||
|
||||
def load_generators(app=self)
|
||||
self.class.generators.each { |block| block.call(app) }
|
||||
end
|
||||
|
||||
def railtie_namespace
|
||||
@railtie_namespace ||= self.class.parents.detect { |n| n.respond_to?(:railtie_namespace) }
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def run_console_blocks(app) #:nodoc:
|
||||
self.class.console.each { |block| block.call(app) }
|
||||
end
|
||||
|
||||
def run_generators_blocks(app) #:nodoc:
|
||||
self.class.generators.each { |block| block.call(app) }
|
||||
end
|
||||
|
||||
def run_runner_blocks(app) #:nodoc:
|
||||
self.class.runner.each { |block| block.call(app) }
|
||||
end
|
||||
|
||||
def run_tasks_blocks(app) #:nodoc:
|
||||
extend Rake::DSL
|
||||
self.class.rake_tasks.each { |block| instance_exec(app, &block) }
|
||||
|
||||
# Load also tasks from all superclasses
|
||||
klass = self.class.superclass
|
||||
|
||||
while klass.respond_to?(:rake_tasks)
|
||||
klass.rake_tasks.each { |t| instance_exec(app, &t) }
|
||||
klass = klass.superclass
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1098,7 +1098,7 @@ YAML
|
|||
assert_equal "// App's bar js\n;", last_response.body.strip
|
||||
|
||||
# ensure that railties are not added twice
|
||||
railties = Rails.application.ordered_railties.map(&:class)
|
||||
railties = Rails.application.send(:ordered_railties).map(&:class)
|
||||
assert_equal railties, railties.uniq
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue