Skip to content

Commit 0bafcdb

Browse files
committed
Allow for register_engine without deprecation
Frustratingly you may need to use both `register_engine` to get the behavior your want in Sprockets 3 even if you're using the new API (i.e. `register_transformer` etc.). I think this is because the different APIs have a different backend but I haven't looked into it enough to know exactly why they diverged. Here's a PR that shows the problem: sass/sassc-rails#65 If you only call `register_transformer` then the Sprockets 3 tests will fail. I think this is because the processor built into `lib/sprockets.rb` and registered via `register_engine` still gets executed. By registering the sassc processor again with `register_engine` we're writing over the built in processor to ensure ours takes priority. I'm not 100% on this cause but it seems reasonable. This PR introduces a way to silence the deprecation for `register_engine` so that libraries that still need the `register_engine` API to function correctly (such as sassc-rails) can operate without deprecations. This is an opt-in flag, we assume if you use the flag that you're aware of the new API and have updated your library appropriately. After this PR I'm going to change the docs to show how to use both `register_transformer` and `register_engine` at the same time.
1 parent 2f5bd84 commit 0bafcdb

File tree

5 files changed

+26
-18
lines changed

5 files changed

+26
-18
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@ doc
66
docs
77
pkg
88
tmp
9+
.DS_Store

lib/sprockets.rb

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -124,32 +124,30 @@ module Sprockets
124124
# Mmm, CoffeeScript
125125
require 'sprockets/coffee_script_processor'
126126
Deprecation.silence do
127-
register_engine '.coffee', CoffeeScriptProcessor, mime_type: 'application/javascript'
127+
register_engine '.coffee', CoffeeScriptProcessor, mime_type: 'application/javascript', silence_deprecation: true
128128
end
129129

130130
# JST engines
131131
require 'sprockets/eco_processor'
132132
require 'sprockets/ejs_processor'
133133
require 'sprockets/jst_processor'
134134
Deprecation.silence do
135-
register_engine '.jst', JstProcessor, mime_type: 'application/javascript'
136-
register_engine '.eco', EcoProcessor, mime_type: 'application/javascript'
137-
register_engine '.ejs', EjsProcessor, mime_type: 'application/javascript'
135+
register_engine '.jst', JstProcessor, mime_type: 'application/javascript', silence_deprecation: true
136+
register_engine '.eco', EcoProcessor, mime_type: 'application/javascript', silence_deprecation: true
137+
register_engine '.ejs', EjsProcessor, mime_type: 'application/javascript', silence_deprecation: true
138138
end
139139

140140
# CSS engines
141141
require 'sprockets/sass_processor'
142142
Deprecation.silence do
143-
register_engine '.sass', SassProcessor, mime_type: 'text/css'
144-
register_engine '.scss', ScssProcessor, mime_type: 'text/css'
143+
register_engine '.sass', SassProcessor, mime_type: 'text/css', silence_deprecation: true
144+
register_engine '.scss', ScssProcessor, mime_type: 'text/css', silence_deprecation: true
145145
end
146146
register_bundle_metadata_reducer 'text/css', :sass_dependencies, Set.new, :+
147147

148148
# Other
149149
require 'sprockets/erb_processor'
150-
Deprecation.silence do
151-
register_engine '.erb', ERBProcessor, mime_type: 'text/plain'
152-
end
150+
register_engine '.erb', ERBProcessor, mime_type: 'text/plain', silence_deprecation: true
153151

154152
register_dependency_resolver 'environment-version' do |env|
155153
env.version

lib/sprockets/engines.rb

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,16 @@ def engine_mime_types
5151
# environment.register_engine '.coffee', CoffeeScriptProcessor
5252
#
5353
def register_engine(ext, klass, options = {})
54-
Deprecation.new([caller.first]).warn("`register_engine` is deprecated please register a mime type and use `register_compressor` or `register_transformer`")
54+
unless options[:silence_deprecation]
55+
msg = <<-MSG
56+
Sprockets method `register_engine` is deprecated.
57+
Please register a mime type using `register_mime_type` then
58+
use `register_compressor` or `register_transformer`.
59+
https://github.com/rails/sprockets/blob/master/guides/extending_sprockets.md#supporting-all-versions-of-sprockets-in-processors
60+
MSG
61+
62+
Deprecation.new([caller.first]).warn(msg)
63+
end
5564

5665
ext = Sprockets::Utils.normalize_extension(ext)
5766

test/sprockets_test.rb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ def silence_warnings
2323

2424
NoopProcessor = proc { |input| input[:data] }
2525
# Sprockets.register_mime_type 'text/haml', extensions: ['.haml']
26-
Sprockets.register_engine '.haml', NoopProcessor, mime_type: 'text/html'
26+
Sprockets.register_engine '.haml', NoopProcessor, mime_type: 'text/html', silence_deprecation: true
2727

2828
# Sprockets.register_mime_type 'text/ng-template', extensions: ['.ngt']
2929
AngularProcessor = proc { |input|
@@ -33,19 +33,19 @@ def silence_warnings
3333
});
3434
EOS
3535
}
36-
Sprockets.register_engine '.ngt', AngularProcessor, mime_type: 'application/javascript'
36+
Sprockets.register_engine '.ngt', AngularProcessor, mime_type: 'application/javascript', silence_deprecation: true
3737

3838
# Sprockets.register_mime_type 'text/mustache', extensions: ['.mustache']
39-
Sprockets.register_engine '.mustache', NoopProcessor, mime_type: 'application/javascript'
39+
Sprockets.register_engine '.mustache', NoopProcessor, mime_type: 'application/javascript', silence_deprecation: true
4040

4141
# Sprockets.register_mime_type 'text/x-handlebars-template', extensions: ['.handlebars']
42-
Sprockets.register_engine '.handlebars', NoopProcessor, mime_type: 'application/javascript'
42+
Sprockets.register_engine '.handlebars', NoopProcessor, mime_type: 'application/javascript', silence_deprecation: true
4343

4444
# Sprockets.register_mime_type 'application/javascript-module', extensions: ['.es6']
45-
Sprockets.register_engine '.es6', NoopProcessor, mime_type: 'application/javascript'
45+
Sprockets.register_engine '.es6', NoopProcessor, mime_type: 'application/javascript', silence_deprecation: true
4646

4747
# Sprockets.register_mime_type 'application/dart', extensions: ['.dart']
48-
Sprockets.register_engine '.dart', NoopProcessor, mime_type: 'application/javascript'
48+
Sprockets.register_engine '.dart', NoopProcessor, mime_type: 'application/javascript', silence_deprecation: true
4949

5050
require 'nokogiri'
5151

@@ -72,7 +72,7 @@ def silence_warnings
7272
Sprockets.register_transformer 'application/xml+builder', 'application/xml', XmlBuilderProcessor
7373

7474
require 'sprockets/jst_processor'
75-
Sprockets.register_engine '.jst2', Sprockets::JstProcessor.new(namespace: 'this.JST2'), mime_type: 'application/javascript'
75+
Sprockets.register_engine '.jst2', Sprockets::JstProcessor.new(namespace: 'this.JST2'), mime_type: 'application/javascript', silence_deprecation: true
7676

7777
SVG2PNG = proc { |input|
7878
"\x89\x50\x4e\x47\xd\xa\x1a\xa#{input[:data]}"

test/test_engines.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class TestEngines < Sprockets::TestCase
3030
env = new_environment
3131

3232
Sprockets::SilenceDeprecation.silence do
33-
env.register_engine ".alert", AlertProcessor
33+
env.register_engine ".alert", AlertProcessor, silence_deprecation: true
3434
end
3535

3636
asset = env["hello.alert"]

0 commit comments

Comments
 (0)