Skip to content

Commit 468c879

Browse files
committed
adding "nodigest" task to add non digest assets
The new task `assets:nodigest` copies compiled files removing the md5 from the file.
1 parent 1548551 commit 468c879

File tree

3 files changed

+64
-1
lines changed

3 files changed

+64
-1
lines changed

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,12 @@ Only removes old assets (keeps the most recent 3 copies) from `public/assets`. U
2929

3030
Nuke `public/assets`.
3131

32+
**`rake 'assets:generate_nondigests[app_sdk.js, app_sdk.css]''`**
33+
34+
Will generate non-digest files of the files passed in the parameters of the task (`app_sdk.js` and `app_sdk.css` in the example above). Useful if you need some of your assets to be available for developers outside of your application (Javascript SDK for example).
35+
36+
Remember that it's your responsibility to deal with cache expiration for those assets.
37+
3238
#### Customize
3339

3440
If the basic tasks don't do all that you need, it's straight forward to redefine them and replace them with something more specific to your app.

lib/sprockets/rails/task.rb

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
module Sprockets
88
module Rails
99
class Task < Rake::SprocketsTask
10+
class MissingParamsError < StandardError; end
11+
class MissingFileError < StandardError; end
12+
1013
attr_accessor :app
1114

1215
def initialize(app = nil)
@@ -49,6 +52,16 @@ def manifest
4952
end
5053
end
5154

55+
def generate_nondigests(files)
56+
files.each do |file|
57+
digest_file = manifest.assets[file]
58+
raise MissingFileError.new("#{file} does not exists. Maybe you didn't run assets:precompile yet?") unless digest_file
59+
60+
path = manifest.directory
61+
FileUtils.cp("#{path}/#{digest_file}", "#{path}/#{file}")
62+
end
63+
end
64+
5265
def define
5366
namespace :assets do
5467
%w( environment precompile clean clobber ).each do |task|
@@ -69,6 +82,16 @@ def define
6982
end
7083
end
7184

85+
desc "Compile non-digest files"
86+
task :generate_nondigest => :environment do |t, args|
87+
files = args.extras
88+
raise MissingParamsError.new("You must pass the files you want to generate nondigests (e.g. rake 'assets:generate_nondigests[file1.js, file2.js]')") if files.empty?
89+
90+
with_logger do
91+
generate_nondigests(files)
92+
end
93+
end
94+
7295
desc "Remove old compiled assets"
7396
task :clean, [:keep] => :environment do |t, args|
7497
with_logger do

test/test_task.rb

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def setup
2525
Sprockets::Rails::Task.new do |t|
2626
t.environment = @assets
2727
t.manifest = @manifest
28-
t.assets = ['foo.js', 'foo-modified.js']
28+
t.assets = ['foo.js', 'foo-modified.js', 'file1.js', 'file2.js']
2929
t.log_level = :fatal
3030
end
3131

@@ -139,4 +139,38 @@ def test_clean_with_keep_specified
139139
ensure
140140
FileUtils.rm(new_path) if new_path
141141
end
142+
143+
def test_generate_nondigests
144+
assert !@environment_ran
145+
asset1_name = "file1.js"
146+
asset2_name = "file2.js"
147+
148+
digest1_path = @assets[asset1_name].digest_path
149+
digest2_path = @assets[asset2_name].digest_path
150+
151+
@rake['assets:precompile'].invoke
152+
assert @environment_ran
153+
154+
setup
155+
156+
assert !@environment_ran
157+
assert File.exist?("#{@dir}/#{digest1_path}")
158+
refute File.exist?("#{@dir}/#{asset1_name}")
159+
assert File.exist?("#{@dir}/#{digest2_path}")
160+
refute File.exist?("#{@dir}/#{asset2_name}")
161+
162+
@rake['assets:generate_nondigest'].invoke(asset1_name, asset2_name)
163+
164+
assert @environment_ran
165+
assert File.exist?("#{@dir}/#{digest1_path}"), "digest file 1 not found"
166+
assert File.exist?("#{@dir}/#{asset1_name}"), "nondigest file 1 not found"
167+
assert File.exist?("#{@dir}/#{digest2_path}"), "digest file 2 not found"
168+
assert File.exist?("#{@dir}/#{asset2_name}"), "nondigest file 2 not found"
169+
end
170+
171+
def test_generate_nondigests_with_no_params
172+
assert_raises Sprockets::Rails::Task::MissingParamsError do
173+
@rake['assets:generate_nondigest'].invoke
174+
end
175+
end
142176
end

0 commit comments

Comments
 (0)