diff --git a/lib/sprockets/base.rb b/lib/sprockets/base.rb index 7a6029f76..ed3ecafa9 100644 --- a/lib/sprockets/base.rb +++ b/lib/sprockets/base.rb @@ -93,6 +93,18 @@ def [](*args) find_asset(*args) end + # Find asset by logical path or expanded path. + # + # If the asset is not found an error will be raised. + def find_asset!(*args) + asset = find_asset(*args) + if asset + return asset + else + raise_on_unknown_asset(*args) + end + end + # Pretty inspect def inspect "#<#{self.class}:0x#{object_id.to_s(16)} " + @@ -107,5 +119,13 @@ def compress_from_root(uri) def expand_from_root(uri) URITar.new(uri, self).expand end + + private + def raise_on_unknown_asset(*args) + asset_name = args.shift + msg = String.new("Could not load asset #{ asset_name.inspect }") + msg << "with options #{ args.inspect }" unless args.empty? + raise Sprockets::NotFound, msg + end end end diff --git a/lib/sprockets/environment.rb b/lib/sprockets/environment.rb index 5e06a5f89..11840dcff 100644 --- a/lib/sprockets/environment.rb +++ b/lib/sprockets/environment.rb @@ -31,6 +31,10 @@ def find_asset(*args) cached.find_asset(*args) end + def find_asset!(*args) + cached.find_asset!(*args) + end + def find_all_linked_assets(*args, &block) cached.find_all_linked_assets(*args, &block) end diff --git a/test/test_environment.rb b/test/test_environment.rb index d58eb9668..5ad6440cd 100644 --- a/test/test_environment.rb +++ b/test/test_environment.rb @@ -47,6 +47,18 @@ def self.test(name, &block) assert_equal "hello: world\n", context.call("JST['hello']", name: "world") end + test "find_asset! does not raise an exception when asset is found" do + @env.find_asset!("hello.js") # assert no raise + end + + test "find_asset! raises an error when asset is not found" do + does_not_exist_file_name = "doesnotexist.blerg" + error = assert_raises(Sprockets::NotFound) do + @env.find_asset!(does_not_exist_file_name) + end + assert_match %r{#{does_not_exist_file_name}}, error.message + end + test "asset_data_uri helper" do assert asset = @env["with_data_uri.css"] assert_equal "body {\n background-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAP%2F%2F%2FwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw%3D%3D) no-repeat;\n}\n", asset.to_s