Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions lib/sprockets/rails/helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,15 @@ def initialize(bad_path, good_path, prefix)
end
end

class AssetAliasUsed < StandardError
def initialize(actual, expected)
msg = "Asset was linked to from an alias rather than its exact path. " +
"Alias resolving may not be available in production.\n" +
"Use #{expected.inspect} instead of #{actual.inspect}"
super(msg)
end
end

if defined? ActionView::Helpers::AssetUrlHelper
include ActionView::Helpers::AssetUrlHelper
include ActionView::Helpers::AssetTagHelper
Expand Down Expand Up @@ -121,6 +130,10 @@ def asset_digest_path(path, options = {})

if environment = assets_environment
if asset = environment[path]
if self.raise_runtime_errors && path != asset.logical_path
raise AssetAliasUsed.new(path, asset.logical_path)
end

return asset.digest_path
end
end
Expand Down
1 change: 1 addition & 0 deletions test/fixtures/bundle/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
var jQuery;
4 changes: 4 additions & 0 deletions test/fixtures/jquery/bower.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"name": "jquery",
"main": "./jquery.js"
}
1 change: 1 addition & 0 deletions test/fixtures/jquery/jquery.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
var jQuery;
24 changes: 24 additions & 0 deletions test/test_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -699,4 +699,28 @@ def test_ignores_missing_dependencies
end
assert_includes paths, "missing.css.erb"
end

if Sprockets::VERSION > "3"
def test_asset_path_with_index_requires_exact_logical_path
Sprockets::Rails::Helper.raise_runtime_errors = true
Sprockets::Rails::Helper.precompile = ["bundle.js"]

assert @view.asset_path("bundle.js")

assert_raises(Sprockets::Rails::Helper::AssetAliasUsed) do
assert @view.asset_path("bundle/index.js")
end
end

def test_asset_path_with_bower_requires_exact_logical_path
Sprockets::Rails::Helper.raise_runtime_errors = true
Sprockets::Rails::Helper.precompile = ["jquery/jquery.js"]

assert @view.asset_path("jquery/jquery.js")

assert_raises(Sprockets::Rails::Helper::AssetAliasUsed) do
assert @view.asset_path("jquery.js")
end
end
end
end