aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPiotr Sarnacki <drogus@gmail.com>2010-08-04 22:22:06 +0200
committerPiotr Sarnacki <drogus@gmail.com>2010-09-03 22:59:12 +0200
commit8284fd38551c00c30cf89fa22d1afd503a08c516 (patch)
tree71a7ecc2879c088578bfe5d16072e1eb4eacfa00
parentd81267727770198f4aa0cefede042c8d0c638c59 (diff)
downloadrails-8284fd38551c00c30cf89fa22d1afd503a08c516.tar.gz
rails-8284fd38551c00c30cf89fa22d1afd503a08c516.tar.bz2
rails-8284fd38551c00c30cf89fa22d1afd503a08c516.zip
Get rid of static_paths method and instead configure paths for ActionDispatch::Static in initializers
-rw-r--r--railties/lib/rails/application.rb18
-rw-r--r--railties/lib/rails/application/configuration.rb4
-rw-r--r--railties/lib/rails/engine.rb7
-rw-r--r--railties/lib/rails/engine/configuration.rb4
-rw-r--r--railties/lib/rails/railtie/configuration.rb8
-rw-r--r--railties/test/railties/engine_test.rb5
6 files changed, 29 insertions, 17 deletions
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