提交 9279d110 编写于 作者: G Guillermo Iguaran

Set relative url root in assets when controller isn't available for Sprockets. Fix #2435

See https://github.com/rails/sass-rails/issues/42 for details
上级 a9509284
......@@ -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")
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册