@@ -60,15 +60,23 @@ def assets_environment
60
60
end
61
61
62
62
def compute_asset_path ( path , options = { } )
63
- if digest_path = asset_digest_path ( path , options )
64
- path = digest_path if digest_assets
65
- path += "?body=1" if options [ : debug] && ! using_sprockets4?
66
- File . join ( assets_prefix || "/" , path )
63
+ debug = options [ :debug ]
64
+
65
+ if asset_path = resolve_asset_path ( path , debug )
66
+ File . join ( assets_prefix || "/" , legacy_debug_path ( asset_path , debug ) )
67
67
else
68
68
super
69
69
end
70
70
end
71
71
72
+ # Resolve the asset path against the Sprockets manifest or environment.
73
+ # Returns nil if it's an asset we don't know about.
74
+ def resolve_asset_path ( path , allow_non_precompiled = false ) #:nodoc:
75
+ resolve_asset do |resolver |
76
+ resolver . asset_path path , digest_assets , allow_non_precompiled
77
+ end
78
+ end
79
+
72
80
# Expand asset path to digested form.
73
81
#
74
82
# path - String path
@@ -91,7 +99,7 @@ def asset_integrity(path, options = {})
91
99
path = path_with_extname ( path , options )
92
100
93
101
resolve_asset do |resolver |
94
- resolver . integrity path , options [ :debug ]
102
+ resolver . integrity path
95
103
end
96
104
end
97
105
@@ -192,7 +200,7 @@ def lookup_debug_asset(path, options = {})
192
200
path = path_with_extname ( path , options )
193
201
194
202
resolve_asset do |resolver |
195
- resolver . find_debug_asset path , options [ :debug ]
203
+ resolver . find_debug_asset path
196
204
end
197
205
end
198
206
@@ -218,6 +226,15 @@ def asset_resolver_strategies
218
226
HelperAssetResolvers [ name ] . new ( self )
219
227
end
220
228
end
229
+
230
+ # Append ?body=1 if debug is on and we're on old Sprockets.
231
+ def legacy_debug_path ( path , debug )
232
+ if debug && !using_sprockets4?
233
+ "#{ path } ?body=1"
234
+ else
235
+ path
236
+ end
237
+ end
221
238
end
222
239
223
240
# Use a separate module since Helper is mixed in and we needn't pollute
@@ -240,23 +257,29 @@ def initialize(view)
240
257
raise ArgumentError , 'config.assets.resolve_with includes :manifest, but app.assets_manifest is nil' unless @manifest
241
258
end
242
259
243
- def digest_path ( path , debug = false )
260
+ def asset_path ( path , digest , allow_non_precompiled = false )
261
+ if digest
262
+ digest_path path , allow_non_precompiled
263
+ end
264
+ end
265
+
266
+ def digest_path ( path , allow_non_precompiled = false )
244
267
@manifest . assets [ path ]
245
268
end
246
269
247
- def integrity ( path , debug = false )
248
- if meta = metadata ( path , debug )
270
+ def integrity ( path )
271
+ if meta = metadata ( path )
249
272
meta [ "integrity" ]
250
273
end
251
274
end
252
275
253
- def find_debug_asset ( path , debug = false )
276
+ def find_debug_asset ( path )
254
277
nil
255
278
end
256
279
257
280
private
258
- def metadata ( path , debug = false )
259
- if digest_path = digest_path ( path , debug )
281
+ def metadata ( path )
282
+ if digest_path = digest_path ( path )
260
283
@manifest . files [ digest_path ]
261
284
end
262
285
end
@@ -269,18 +292,31 @@ def initialize(view)
269
292
@precompiled_asset_checker = view . precompiled_asset_checker
270
293
end
271
294
272
- def digest_path ( path , debug = false )
295
+ def asset_path ( path , digest , allow_non_precompiled = false )
296
+ # Digests enabled? Do the work to calculate the full asset path.
297
+ if digest
298
+ digest_path path , allow_non_precompiled
299
+
300
+ # Otherwise, ask the Sprockets environment whether the asset exists
301
+ # and check whether it's also precompiled for production deploys.
302
+ elsif find_asset ( path )
303
+ raise_unless_precompiled_asset path unless allow_non_precompiled
304
+ path
305
+ end
306
+ end
307
+
308
+ def digest_path ( path , allow_non_precompiled = false )
273
309
if asset = find_asset ( path )
274
- raise_unless_precompiled_asset asset . logical_path unless debug
310
+ raise_unless_precompiled_asset path unless allow_non_precompiled
275
311
asset . digest_path
276
312
end
277
313
end
278
314
279
- def integrity ( path , debug = false )
315
+ def integrity ( path )
280
316
find_asset ( path ) . try :integrity
281
317
end
282
318
283
- def find_debug_asset ( path , options = { } )
319
+ def find_debug_asset ( path )
284
320
if asset = find_asset ( path , pipeline : :debug )
285
321
raise_unless_precompiled_asset asset . logical_path . sub ( '.debug' , '' )
286
322
asset
@@ -292,10 +328,12 @@ def find_asset(path, options = {})
292
328
@env [ path , options ]
293
329
end
294
330
295
- def raise_unless_precompiled_asset ( logical_path )
296
- if !@precompiled_asset_checker . call ( logical_path )
297
- raise Helper ::AssetNotPrecompiled . new ( logical_path )
298
- end
331
+ def precompiled? ( path )
332
+ @precompiled_asset_checker . call path
333
+ end
334
+
335
+ def raise_unless_precompiled_asset ( path )
336
+ raise Helper ::AssetNotPrecompiled . new ( path ) unless precompiled? ( path )
299
337
end
300
338
end
301
339
end
0 commit comments