mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Moved ActionMailer and ActionController railties options to inherited hook
This change is needed, because we must take namespace into account and if controller's/mailer's class is namespaced, engine's paths should be set instead of application's ones. The nice side effect of this is removing unneeded logic in ActionController::Base.inherited - now the helpers_path should be set correctly even for engine's controllers, so helper(:all) will always include correct helpers.
This commit is contained in:
parent
8fb9df535e
commit
e5af8b7d85
5 changed files with 61 additions and 22 deletions
|
@ -1,6 +1,7 @@
|
|||
require "action_mailer"
|
||||
require "rails"
|
||||
require "abstract_controller/railties/routes_helpers"
|
||||
require "action_mailer/railties/paths"
|
||||
|
||||
module ActionMailer
|
||||
class Railtie < Rails::Railtie
|
||||
|
@ -11,17 +12,13 @@ module ActionMailer
|
|||
end
|
||||
|
||||
initializer "action_mailer.set_configs" do |app|
|
||||
paths = app.config.paths
|
||||
options = app.config.action_mailer
|
||||
|
||||
options.assets_dir ||= paths.public.to_a.first
|
||||
options.javascripts_dir ||= paths.public.javascripts.to_a.first
|
||||
options.stylesheets_dir ||= paths.public.stylesheets.to_a.first
|
||||
|
||||
ActiveSupport.on_load(:action_mailer) do
|
||||
include AbstractController::UrlFor
|
||||
extend ::AbstractController::Railties::RoutesHelpers.with(app.routes)
|
||||
include app.routes.mounted_helpers(:app)
|
||||
extend ::AbstractController::Railties::RoutesHelpers.with(app.routes)
|
||||
extend ::ActionMailer::Railties::Paths.with(app)
|
||||
options.each { |k,v| send("#{k}=", v) }
|
||||
end
|
||||
end
|
||||
|
|
26
actionmailer/lib/action_mailer/railties/paths.rb
Normal file
26
actionmailer/lib/action_mailer/railties/paths.rb
Normal file
|
@ -0,0 +1,26 @@
|
|||
module ActionMailer
|
||||
module Railties
|
||||
module Paths
|
||||
def self.with(_app)
|
||||
Module.new do
|
||||
define_method(:inherited) do |klass|
|
||||
super(klass)
|
||||
if namespace = klass.parents.detect {|m| m.respond_to?(:_railtie) }
|
||||
app = namespace._railtie
|
||||
else
|
||||
app = _app
|
||||
end
|
||||
|
||||
paths = app.config.paths
|
||||
options = app.config.action_mailer
|
||||
|
||||
options.assets_dir ||= paths.public.to_a.first
|
||||
options.javascripts_dir ||= paths.public.javascripts.to_a.first
|
||||
options.stylesheets_dir ||= paths.public.stylesheets.to_a.first
|
||||
options.each { |k,v| klass.send("#{k}=", v) }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -223,11 +223,7 @@ module ActionController
|
|||
|
||||
def self.inherited(klass)
|
||||
super
|
||||
if namespace = klass.parents.detect {|m| m.respond_to?(:_railtie) }
|
||||
klass.helper(all_helpers_from_path(namespace._railtie.config.paths.app.helpers.to_a))
|
||||
else
|
||||
klass.helper :all if klass.superclass == ActionController::Base
|
||||
end
|
||||
klass.helper :all if klass.superclass == ActionController::Base
|
||||
end
|
||||
|
||||
ActiveSupport.run_load_hooks(:action_controller, self)
|
||||
|
|
|
@ -5,6 +5,7 @@ require "action_view/railtie"
|
|||
require "active_support/deprecation/proxy_wrappers"
|
||||
require "active_support/deprecation"
|
||||
require "abstract_controller/railties/routes_helpers"
|
||||
require "action_controller/railties/paths"
|
||||
|
||||
module ActionController
|
||||
class Railtie < Rails::Railtie
|
||||
|
@ -41,19 +42,10 @@ module ActionController
|
|||
end
|
||||
|
||||
initializer "action_controller.set_configs" do |app|
|
||||
paths = app.config.paths
|
||||
options = app.config.action_controller
|
||||
|
||||
options.assets_dir ||= paths.public.to_a.first
|
||||
options.javascripts_dir ||= paths.public.javascripts.to_a.first
|
||||
options.stylesheets_dir ||= paths.public.stylesheets.to_a.first
|
||||
options.page_cache_directory ||= paths.public.to_a.first
|
||||
options.helpers_path ||= paths.app.helpers.to_a
|
||||
|
||||
ActiveSupport.on_load(:action_controller) do
|
||||
extend ::AbstractController::Railties::RoutesHelpers.with(app.routes)
|
||||
include app.routes.mounted_helpers(:app)
|
||||
options.each { |k,v| send("#{k}=", v) }
|
||||
extend ::AbstractController::Railties::RoutesHelpers.with(app.routes)
|
||||
extend ::ActionController::Railties::Paths.with(app)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
28
actionpack/lib/action_controller/railties/paths.rb
Normal file
28
actionpack/lib/action_controller/railties/paths.rb
Normal file
|
@ -0,0 +1,28 @@
|
|||
module ActionController
|
||||
module Railties
|
||||
module Paths
|
||||
def self.with(_app)
|
||||
Module.new do
|
||||
define_method(:inherited) do |klass|
|
||||
super(klass)
|
||||
if namespace = klass.parents.detect {|m| m.respond_to?(:_railtie) }
|
||||
app = namespace._railtie
|
||||
else
|
||||
app = _app
|
||||
end
|
||||
|
||||
paths = app.config.paths
|
||||
options = app.config.action_controller
|
||||
|
||||
options.assets_dir ||= paths.public.to_a.first
|
||||
options.javascripts_dir ||= paths.public.javascripts.to_a.first
|
||||
options.stylesheets_dir ||= paths.public.stylesheets.to_a.first
|
||||
options.page_cache_directory ||= paths.public.to_a.first
|
||||
options.helpers_path ||= paths.app.helpers.to_a
|
||||
options.each { |k,v| klass.send("#{k}=", v) }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue