Skip to content

Commit e29f107

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 e29f107

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. 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)