mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Simplify helpers handling. Ensure Metal can run AC hooks.
This commit is contained in:
parent
5b94e73d1a
commit
fbc9d0f44f
6 changed files with 65 additions and 37 deletions
|
@ -52,6 +52,7 @@ module ActionController
|
|||
module Helpers
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
class << self; attr_accessor :helpers_path; end
|
||||
include AbstractController::Helpers
|
||||
|
||||
included do
|
||||
|
|
|
@ -3,33 +3,32 @@ require "action_controller"
|
|||
require "action_dispatch/railtie"
|
||||
require "action_view/railtie"
|
||||
require "abstract_controller/railties/routes_helpers"
|
||||
require "action_controller/railties/paths"
|
||||
require "action_controller/railties/helpers"
|
||||
|
||||
module ActionController
|
||||
class Railtie < Rails::Railtie #:nodoc:
|
||||
config.action_controller = ActiveSupport::OrderedOptions.new
|
||||
|
||||
initializer "action_controller.logger" do
|
||||
ActiveSupport.on_load(:action_controller) { self.logger ||= Rails.logger }
|
||||
end
|
||||
|
||||
initializer "action_controller.initialize_framework_caches" do
|
||||
ActiveSupport.on_load(:action_controller) { self.cache_store ||= Rails.cache if respond_to?(:cache_store) }
|
||||
end
|
||||
|
||||
initializer "action_controller.assets_config", :group => :all do |app|
|
||||
app.config.action_controller.assets_dir ||= app.config.paths["public"].first
|
||||
end
|
||||
|
||||
initializer "action_controller.set_helpers_path" do |app|
|
||||
ActionController::Helpers.helpers_path = app.helpers_paths
|
||||
end
|
||||
|
||||
initializer "action_controller.set_configs" do |app|
|
||||
paths = app.config.paths
|
||||
options = app.config.action_controller
|
||||
|
||||
options.logger ||= Rails.logger
|
||||
options.cache_store ||= Rails.cache
|
||||
|
||||
options.javascripts_dir ||= paths["public/javascripts"].first
|
||||
options.stylesheets_dir ||= paths["public/stylesheets"].first
|
||||
options.page_cache_directory ||= paths["public"].first
|
||||
|
||||
# make sure readers methods get compiled
|
||||
# Ensure readers methods get compiled
|
||||
options.asset_path ||= app.config.asset_path
|
||||
options.asset_host ||= app.config.asset_host
|
||||
options.relative_url_root ||= app.config.relative_url_root
|
||||
|
@ -37,7 +36,8 @@ module ActionController
|
|||
ActiveSupport.on_load(:action_controller) do
|
||||
include app.routes.mounted_helpers
|
||||
extend ::AbstractController::Railties::RoutesHelpers.with(app.routes)
|
||||
extend ::ActionController::Railties::Paths.with(app) if respond_to?(:helpers_path)
|
||||
extend ::ActionController::Railties::Helpers
|
||||
|
||||
options.each do |k,v|
|
||||
k = "#{k}="
|
||||
if respond_to?(k)
|
||||
|
|
22
actionpack/lib/action_controller/railties/helpers.rb
Normal file
22
actionpack/lib/action_controller/railties/helpers.rb
Normal file
|
@ -0,0 +1,22 @@
|
|||
module ActionController
|
||||
module Railties
|
||||
module Helpers
|
||||
def inherited(klass)
|
||||
super
|
||||
return unless klass.respond_to?(:helpers_path=)
|
||||
|
||||
if namespace = klass.parents.detect { |m| m.respond_to?(:railtie_helpers_paths) }
|
||||
paths = namespace.railtie_helpers_paths
|
||||
else
|
||||
paths = ActionController::Helpers.helpers_path
|
||||
end
|
||||
|
||||
klass.helpers_path = paths
|
||||
|
||||
if klass.superclass == ActionController::Base && ActionController::Base.include_all_helpers
|
||||
klass.helper :all
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,24 +0,0 @@
|
|||
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_helpers_paths) }
|
||||
paths = namespace.railtie_helpers_paths
|
||||
else
|
||||
paths = app.helpers_paths
|
||||
end
|
||||
klass.helpers_path = paths
|
||||
|
||||
if klass.superclass == ActionController::Base && ActionController::Base.include_all_helpers
|
||||
klass.helper :all
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -561,7 +561,7 @@ module Rails
|
|||
initializer :add_view_paths do
|
||||
views = paths["app/views"].existent
|
||||
unless views.empty?
|
||||
ActiveSupport.on_load(:action_controller){ prepend_view_path(views) }
|
||||
ActiveSupport.on_load(:action_controller){ prepend_view_path(views) if respond_to?(:prepend_view_path) }
|
||||
ActiveSupport.on_load(:action_mailer){ prepend_view_path(views) }
|
||||
end
|
||||
end
|
||||
|
|
|
@ -95,7 +95,7 @@ class LoadingTest < ActiveSupport::TestCase
|
|||
assert_equal [ActiveRecord::SchemaMigration], ActiveRecord::Base.descendants
|
||||
end
|
||||
|
||||
test "initialize_cant_be_called_twice" do
|
||||
test "initialize cant be called twice" do
|
||||
require "#{app_path}/config/environment"
|
||||
assert_raise(RuntimeError) { ::AppTemplate::Application.initialize! }
|
||||
end
|
||||
|
@ -256,6 +256,35 @@ class LoadingTest < ActiveSupport::TestCase
|
|||
assert_equal "BODY", last_response.body
|
||||
end
|
||||
|
||||
test "AC load hooks can be used with metal" do
|
||||
app_file "app/controllers/omg_controller.rb", <<-RUBY
|
||||
begin
|
||||
class OmgController < ActionController::Metal
|
||||
ActiveSupport.run_load_hooks(:action_controller, self)
|
||||
def show
|
||||
self.response_body = ["OK"]
|
||||
end
|
||||
end
|
||||
rescue => e
|
||||
puts "Error loading metal: \#{e.class} \#{e.message}"
|
||||
end
|
||||
RUBY
|
||||
|
||||
app_file "config/routes.rb", <<-RUBY
|
||||
AppTemplate::Application.routes.draw do
|
||||
match "/:controller(/:action)"
|
||||
end
|
||||
RUBY
|
||||
|
||||
require "#{rails_root}/config/environment"
|
||||
|
||||
require 'rack/test'
|
||||
extend Rack::Test::Methods
|
||||
|
||||
get '/omg/show'
|
||||
assert_equal 'OK', last_response.body
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def setup_ar!
|
||||
|
|
Loading…
Reference in a new issue