From 8284fd38551c00c30cf89fa22d1afd503a08c516 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Wed, 4 Aug 2010 22:22:06 +0200 Subject: Get rid of static_paths method and instead configure paths for ActionDispatch::Static in initializers --- railties/lib/rails/application.rb | 18 +----------------- railties/lib/rails/application/configuration.rb | 4 ++++ railties/lib/rails/engine.rb | 7 +++++++ railties/lib/rails/engine/configuration.rb | 4 ++++ railties/lib/rails/railtie/configuration.rb | 8 ++++++++ railties/test/railties/engine_test.rb | 5 +++++ 6 files changed, 29 insertions(+), 17 deletions(-) (limited to 'railties') diff --git a/railties/lib/rails/application.rb b/railties/lib/rails/application.rb index c403863007..8631a5df3e 100644 --- a/railties/lib/rails/application.rb +++ b/railties/lib/rails/application.rb @@ -145,25 +145,9 @@ module Rails protected - def static_paths - @static_paths ||= begin - static_paths = ActiveSupport::OrderedHash.new - static_paths["/"] = paths.public.to_a.first - - railties.all do |railtie| - if railtie.config.respond_to?(:asset_path) && railtie.config.asset_path - public_path = railtie.config.paths.public.to_a.first - static_paths[railtie.config.asset_path % ""] = public_path if File.exists?(public_path) - end - end - - static_paths - end - end - def default_middleware_stack ActionDispatch::MiddlewareStack.new.tap do |middleware| - middleware.use ::ActionDispatch::Static, static_paths if config.serve_static_assets + middleware.use ::ActionDispatch::Static, config.static_asset_paths if config.serve_static_assets middleware.use ::Rack::Lock if !config.allow_concurrency middleware.use ::Rack::Runtime middleware.use ::Rails::Rack::Logger diff --git a/railties/lib/rails/application/configuration.rb b/railties/lib/rails/application/configuration.rb index 29fa9d14eb..477bbbc1e7 100644 --- a/railties/lib/rails/application/configuration.rb +++ b/railties/lib/rails/application/configuration.rb @@ -37,6 +37,10 @@ module Rails super(value) end + def compiled_asset_path + "/" + end + def encoding=(value) @encoding = value if "ruby".encoding_aware? diff --git a/railties/lib/rails/engine.rb b/railties/lib/rails/engine.rb index 1b0ab07b11..3d4bbca5d7 100644 --- a/railties/lib/rails/engine.rb +++ b/railties/lib/rails/engine.rb @@ -428,6 +428,13 @@ module Rails initializer :default_asset_path do config.asset_path = "/#{engine_name}%s" unless config.asset_path end + + initializer :append_asset_paths do + public_path = config.paths.public.to_a.first + if config.compiled_asset_path && File.exist?(public_path) + config.static_asset_paths[config.compiled_asset_path] = public_path + end + end protected def find_root_with_flag(flag, default=nil) root_path = self.class.called_from diff --git a/railties/lib/rails/engine/configuration.rb b/railties/lib/rails/engine/configuration.rb index 9aac9c81d0..bce1cd6580 100644 --- a/railties/lib/rails/engine/configuration.rb +++ b/railties/lib/rails/engine/configuration.rb @@ -55,6 +55,10 @@ module Rails def autoload_paths @autoload_paths ||= paths.autoload_paths end + + def compiled_asset_path + asset_path % "" if asset_path + end end end end diff --git a/railties/lib/rails/railtie/configuration.rb b/railties/lib/rails/railtie/configuration.rb index 96d9bd0da2..f09e3940cc 100644 --- a/railties/lib/rails/railtie/configuration.rb +++ b/railties/lib/rails/railtie/configuration.rb @@ -5,6 +5,7 @@ module Rails class Configuration def initialize @@options ||= {} + @@static_asset_paths = ActiveSupport::OrderedHash.new end # This allows you to modify the application's middlewares from Engines. @@ -65,6 +66,13 @@ module Rails super || @@options.key?(name.to_sym) end + # static_asset_paths is a Hash containing asset_paths + # with associated public folders, like: + # { "/" => "/app/public", "/my_engine" => "app/engines/my_engine/public" } + def static_asset_paths + @@static_asset_paths + end + private def method_missing(name, *args, &blk) diff --git a/railties/test/railties/engine_test.rb b/railties/test/railties/engine_test.rb index 47a38d7aeb..cda1d12fa8 100644 --- a/railties/test/railties/engine_test.rb +++ b/railties/test/railties/engine_test.rb @@ -287,6 +287,7 @@ module RailtiesTest @plugin.write "public/bukkits.html", "/bukkits/bukkits.html" app_file "public/app.html", "/app.html" + app_file "public/bukkits/file_from_app.html", "/bukkits/file_from_app.html" boot_rails @@ -297,6 +298,10 @@ module RailtiesTest env = Rack::MockRequest.env_for("/bukkits/bukkits.html") response = Rails.application.call(env) assert_equal response[2].path, File.join(@plugin.path, "public/bukkits.html") + + env = Rack::MockRequest.env_for("/bukkits/file_from_app.html") + response = Rails.application.call(env) + assert_equal response[2].path, File.join(app_path, "public/bukkits/file_from_app.html") end test "shared engine should include application's helpers" do -- cgit v1.2.3