Permalink
Browse files

Merge pull request #2977 from guilleiguaran/fix-relative-root-in-assets

Set relative url root in assets when controller isn't available for Sprockets
  • Loading branch information...
spastorino committed Sep 13, 2011
2 parents 038e45a + 9279d11 commit b0cee703547a12adeb0fe43e121ad2da8c73422a
View
@@ -48,6 +48,8 @@
*Rails 3.1.1 (unreleased)*
+* Set relative url root in assets when controller isn't available for Sprockets (eg. Sass files using asset_path). Fixes #2435 [Guillermo Iguaran]
+
* Fixed the behavior of asset pipeline when config.assets.digest and config.assets.compile are false and requested asset isn't precompiled.
Before the requested asset were compiled anyway ignoring that the config.assets.compile flag is false. [Guillermo Iguaran]
@@ -17,6 +17,7 @@ def asset_paths
paths.asset_digests = asset_digests
paths.compile_assets = compile_assets?
paths.digest_assets = digest_assets?
+ paths.relative_url_root = config.action_controller.relative_url_root
paths
end
end
@@ -96,12 +97,17 @@ def asset_environment
end
class AssetPaths < ::ActionView::AssetPaths #:nodoc:
- attr_accessor :asset_environment, :asset_prefix, :asset_digests, :compile_assets, :digest_assets
+ attr_accessor :asset_environment, :asset_prefix, :asset_digests, :compile_assets,
+ :digest_assets, :relative_url_root
class AssetNotPrecompiledError < StandardError; end
- def compute_public_path(source, dir, ext=nil, include_host=true, protocol=nil)
- super(source, asset_prefix, ext, include_host, protocol)
+ def compute_public_path(source, dir, ext = nil, include_host = true, protocol = nil)
+ public_path = super(source, asset_prefix, ext, include_host, protocol)
+ if !is_uri?(public_path) && relative_url_root
+ public_path = rewrite_relative_url_root(public_path, relative_url_root)
+ end
+ public_path
end
# Return the filesystem path for the source
@@ -149,6 +155,10 @@ def rewrite_extension(source, dir, ext)
source
end
end
+
+ def relative_url_root
+ has_request? ? super : @relative_url_root
+ end
end
end
end
@@ -124,6 +124,13 @@ def url_for(*args)
asset_path("/images/logo.gif")
end
+ test "asset path with relative url root when controller isn't present but relative_url_root is" do
+ @controller = nil
+ @config.action_controller.relative_url_root = "/collaboration/hieraki"
+ assert_equal "/collaboration/hieraki/images/logo.gif",
+ asset_path("/images/logo.gif")
+ end
+
test "javascript path" do
assert_match %r{/assets/application-[0-9a-f]+.js},
asset_path(:application, "js")

0 comments on commit b0cee70

Please sign in to comment.