sprockets-rails 3.0.0.beta2 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +29 -19
- data/lib/sprockets/rails/helper.rb +202 -79
- data/lib/sprockets/rails/utils.rb +0 -5
- data/lib/sprockets/rails/version.rb +1 -1
- data/lib/sprockets/railtie.rb +35 -15
- metadata +5 -7
- data/LICENSE +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f20d1344a104a96a8fdc6ca1140776f9bee0b095
|
4
|
+
data.tar.gz: b2a9b8a9c86913d9ec6d55a221e2f433cac8201f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5f0bfaac5eaaaa8db5681deb71749e0e1195b8f4e0c819125d70102359094baa1a535ad6a5d6163b60d24b5474848c7db2fc12d9bf917aa9c53d3809e69fa2f0
|
7
|
+
data.tar.gz: 8966809de396e82b543ccac54823f99c0abad6696f58bfdc40a1db9e884d196b2570b8c62720c2ac04c35de942a8a4469805c31418d070f09a262afb486124c4
|
data/README.md
CHANGED
@@ -74,10 +74,6 @@ config.assets.version = 'v2'
|
|
74
74
|
|
75
75
|
Defaults to `/assets`. Changes the directory to compile assets to.
|
76
76
|
|
77
|
-
**`config.assets.manifest`**
|
78
|
-
|
79
|
-
Defines the full path to be used for the asset precompiler's manifest file. Defaults to a randomly-generated filename in the `config.assets.prefix` directory within the public folder.
|
80
|
-
|
81
77
|
**`config.assets.digest`**
|
82
78
|
|
83
79
|
When enabled, fingerprints will be added to asset filenames.
|
@@ -108,6 +104,24 @@ config.assets.configure do |env|
|
|
108
104
|
end
|
109
105
|
```
|
110
106
|
|
107
|
+
**`config.assets.resolve_with`**
|
108
|
+
|
109
|
+
A list of `:environment` and `:manifest` symbols that defines the order that
|
110
|
+
we try to find assets: manifest first, environment second? Manifest only?
|
111
|
+
|
112
|
+
By default, we check the manifest first if asset digests are enabled and debug
|
113
|
+
is not enabled, then we check the environment if compiling is enabled:
|
114
|
+
```
|
115
|
+
# Dev where debug is true, or digests are disabled
|
116
|
+
%i[ environment ]
|
117
|
+
|
118
|
+
# Dev default, or production with compile enabled.
|
119
|
+
%i[ manifest environment ]
|
120
|
+
|
121
|
+
# Production default.
|
122
|
+
%i[ manifest ]
|
123
|
+
```
|
124
|
+
|
111
125
|
|
112
126
|
## Complementary plugins
|
113
127
|
|
@@ -136,23 +150,16 @@ Sprockets 3.x adds experimental support for subresource integrity checks. The sp
|
|
136
150
|
|
137
151
|
``` ruby
|
138
152
|
javascript_include_tag :application, integrity: true
|
139
|
-
# => "<script src="/assets/application.js" integrity="
|
153
|
+
# => "<script src="/assets/application.js" integrity="sha256-TvVUHzSfftWg1rcfL6TIJ0XKEGrgLyEq6lEpcmrG9qs="></script>"
|
140
154
|
```
|
141
155
|
|
142
156
|
|
143
|
-
## Contributing
|
157
|
+
## Contributing to Sprockets Rails
|
144
158
|
|
145
|
-
|
146
|
-
|
147
|
-
``` shell
|
148
|
-
$ git clone https://github.com/rails/sprockets-rails.git
|
149
|
-
$ cd sprockets-rails/
|
150
|
-
$ bundle install
|
151
|
-
$ bundle exec rake test
|
152
|
-
```
|
153
|
-
|
154
|
-
[](https://travis-ci.org/rails/sprockets-rails)
|
159
|
+
Sprockets Rails is work of many contributors. You're encouraged to submit pull requests, propose
|
160
|
+
features and discuss issues.
|
155
161
|
|
162
|
+
See [CONTRIBUTING](CONTRIBUTING.md).
|
156
163
|
|
157
164
|
## Releases
|
158
165
|
|
@@ -164,9 +171,12 @@ The minor and patch version will be updated according to [semver](http://semver.
|
|
164
171
|
* Any time the sprockets dependency is bumped, there will be a new minor release
|
165
172
|
* Simple bug fixes will be patch releases
|
166
173
|
|
167
|
-
|
168
174
|
## License
|
169
175
|
|
170
|
-
|
176
|
+
Sprockets Rails is released under the [MIT License](MIT-LICENSE).
|
177
|
+
|
178
|
+
## Code Status
|
171
179
|
|
172
|
-
|
180
|
+
* [](http://travis-ci.org/rails/sprockets-rails)
|
181
|
+
* [](http://badge.fury.io/rb/sprockets-rails)
|
182
|
+
* [](https://gemnasium.com/rails/sprockets-rails)
|
@@ -7,11 +7,25 @@ module Sprockets
|
|
7
7
|
module Rails
|
8
8
|
module Helper
|
9
9
|
class AssetNotPrecompiled < StandardError
|
10
|
+
include Sprockets::Rails::Utils
|
10
11
|
def initialize(source)
|
11
|
-
msg =
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
msg =
|
13
|
+
if using_sprockets4?
|
14
|
+
"Asset `#{source}` was not declared to be precompiled in production.\n" +
|
15
|
+
"Declare links to your assets in `assets/config/manifest.js`.\n" +
|
16
|
+
"Examples:\n" +
|
17
|
+
"`//= link ../javascripts/application.js`\n" +
|
18
|
+
"`//= link_directory ../javascripts .js`\n" +
|
19
|
+
"`//= link_directory ../stylesheets .css`\n" +
|
20
|
+
"`//= link_tree ../javascripts .js`\n" +
|
21
|
+
"`//= link_tree ../images`\n" +
|
22
|
+
"and restart your server"
|
23
|
+
else
|
24
|
+
"Asset was not declared to be precompiled in production.\n" +
|
25
|
+
"Add `Rails.application.config.assets.precompile += " +
|
26
|
+
"%w( #{source} )` to `config/initializers/assets.rb` and " +
|
27
|
+
"restart your server"
|
28
|
+
end
|
15
29
|
super(msg)
|
16
30
|
end
|
17
31
|
end
|
@@ -20,9 +34,12 @@ module Sprockets
|
|
20
34
|
include ActionView::Helpers::AssetTagHelper
|
21
35
|
include Sprockets::Rails::Utils
|
22
36
|
|
23
|
-
VIEW_ACCESSORS = [
|
24
|
-
|
25
|
-
|
37
|
+
VIEW_ACCESSORS = [
|
38
|
+
:assets_environment, :assets_manifest,
|
39
|
+
:assets_precompile, :precompiled_asset_checker,
|
40
|
+
:assets_prefix, :digest_assets, :debug_assets,
|
41
|
+
:resolve_assets_with
|
42
|
+
]
|
26
43
|
|
27
44
|
def self.included(klass)
|
28
45
|
klass.class_attribute(*VIEW_ACCESSORS)
|
@@ -57,15 +74,23 @@ module Sprockets
|
|
57
74
|
end
|
58
75
|
|
59
76
|
def compute_asset_path(path, options = {})
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
File.join(assets_prefix || "/",
|
77
|
+
debug = options[:debug]
|
78
|
+
|
79
|
+
if asset_path = resolve_asset_path(path, debug)
|
80
|
+
File.join(assets_prefix || "/", legacy_debug_path(asset_path, debug))
|
64
81
|
else
|
65
82
|
super
|
66
83
|
end
|
67
84
|
end
|
68
85
|
|
86
|
+
# Resolve the asset path against the Sprockets manifest or environment.
|
87
|
+
# Returns nil if it's an asset we don't know about.
|
88
|
+
def resolve_asset_path(path, allow_non_precompiled = false) #:nodoc:
|
89
|
+
resolve_asset do |resolver|
|
90
|
+
resolver.asset_path path, digest_assets, allow_non_precompiled
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
69
94
|
# Expand asset path to digested form.
|
70
95
|
#
|
71
96
|
# path - String path
|
@@ -73,21 +98,8 @@ module Sprockets
|
|
73
98
|
#
|
74
99
|
# Returns String path or nil if no asset was found.
|
75
100
|
def asset_digest_path(path, options = {})
|
76
|
-
|
77
|
-
|
78
|
-
return digest_path
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
if environment = assets_environment
|
83
|
-
if asset = environment[path]
|
84
|
-
unless options[:debug]
|
85
|
-
if !precompiled_assets.include?(asset.logical_path)
|
86
|
-
raise AssetNotPrecompiled.new(asset.logical_path)
|
87
|
-
end
|
88
|
-
end
|
89
|
-
return asset.digest_path
|
90
|
-
end
|
101
|
+
resolve_asset do |resolver|
|
102
|
+
resolver.digest_path path, options[:debug]
|
91
103
|
end
|
92
104
|
end
|
93
105
|
|
@@ -98,26 +110,11 @@ module Sprockets
|
|
98
110
|
#
|
99
111
|
# Returns String integrity attribute or nil if no asset was found.
|
100
112
|
def asset_integrity(path, options = {})
|
101
|
-
path = path
|
102
|
-
if extname = compute_asset_extname(path, options)
|
103
|
-
path = "#{path}#{extname}"
|
104
|
-
end
|
105
|
-
|
106
|
-
if manifest = assets_manifest
|
107
|
-
if digest_path = manifest.assets[path]
|
108
|
-
if metadata = manifest.files[digest_path]
|
109
|
-
return metadata["integrity"]
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
113
|
+
path = path_with_extname(path, options)
|
113
114
|
|
114
|
-
|
115
|
-
|
116
|
-
return asset.integrity
|
117
|
-
end
|
115
|
+
resolve_asset do |resolver|
|
116
|
+
resolver.integrity path
|
118
117
|
end
|
119
|
-
|
120
|
-
nil
|
121
118
|
end
|
122
119
|
|
123
120
|
# Override javascript tag helper to provide debugging support.
|
@@ -125,15 +122,7 @@ module Sprockets
|
|
125
122
|
# Eventually will be deprecated and replaced by source maps.
|
126
123
|
def javascript_include_tag(*sources)
|
127
124
|
options = sources.extract_options!.stringify_keys
|
128
|
-
|
129
|
-
unless request_ssl?
|
130
|
-
options.delete("integrity")
|
131
|
-
end
|
132
|
-
|
133
|
-
case options["integrity"]
|
134
|
-
when true, false, nil
|
135
|
-
compute_integrity = options.delete("integrity")
|
136
|
-
end
|
125
|
+
integrity = compute_integrity?(options)
|
137
126
|
|
138
127
|
if options["debug"] != false && request_debug_assets?
|
139
128
|
sources.map { |source|
|
@@ -151,9 +140,8 @@ module Sprockets
|
|
151
140
|
}.flatten.uniq.join("\n").html_safe
|
152
141
|
else
|
153
142
|
sources.map { |source|
|
154
|
-
|
155
|
-
|
156
|
-
options)
|
143
|
+
options = options.merge('integrity' => asset_integrity(source, :type => :javascript)) if integrity
|
144
|
+
super source, options
|
157
145
|
}.join("\n").html_safe
|
158
146
|
end
|
159
147
|
end
|
@@ -163,15 +151,7 @@ module Sprockets
|
|
163
151
|
# Eventually will be deprecated and replaced by source maps.
|
164
152
|
def stylesheet_link_tag(*sources)
|
165
153
|
options = sources.extract_options!.stringify_keys
|
166
|
-
|
167
|
-
unless request_ssl?
|
168
|
-
options.delete("integrity")
|
169
|
-
end
|
170
|
-
|
171
|
-
case options["integrity"]
|
172
|
-
when true, false, nil
|
173
|
-
compute_integrity = options.delete("integrity")
|
174
|
-
end
|
154
|
+
integrity = compute_integrity?(options)
|
175
155
|
|
176
156
|
if options["debug"] != false && request_debug_assets?
|
177
157
|
sources.map { |source|
|
@@ -189,15 +169,34 @@ module Sprockets
|
|
189
169
|
}.flatten.uniq.join("\n").html_safe
|
190
170
|
else
|
191
171
|
sources.map { |source|
|
192
|
-
|
193
|
-
|
194
|
-
options)
|
172
|
+
options = options.merge('integrity' => asset_integrity(source, :type => :stylesheet)) if integrity
|
173
|
+
super source, options
|
195
174
|
}.join("\n").html_safe
|
196
175
|
end
|
197
176
|
end
|
198
177
|
|
199
178
|
protected
|
200
|
-
|
179
|
+
# This is awkward: `integrity` is a boolean option indicating whether
|
180
|
+
# we want to include or omit the subresource integrity hash, but the
|
181
|
+
# options hash is also passed through as literal tag attributes.
|
182
|
+
# That means we have to delete the shortcut boolean option so it
|
183
|
+
# doesn't bleed into the tag attributes, but also check its value if
|
184
|
+
# it's boolean-ish.
|
185
|
+
def compute_integrity?(options)
|
186
|
+
if secure_subresource_integrity_context?
|
187
|
+
case options['integrity']
|
188
|
+
when nil, false, true
|
189
|
+
options.delete('integrity') == true
|
190
|
+
end
|
191
|
+
else
|
192
|
+
options.delete 'integrity'
|
193
|
+
false
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
# Only serve integrity metadata for HTTPS requests:
|
198
|
+
# http://www.w3.org/TR/SRI/#non-secure-contexts-remain-non-secure
|
199
|
+
def secure_subresource_integrity_context?
|
201
200
|
respond_to?(:request) && self.request && self.request.ssl?
|
202
201
|
end
|
203
202
|
|
@@ -205,28 +204,152 @@ module Sprockets
|
|
205
204
|
# and replaced by source maps in Sprockets 3.x.
|
206
205
|
def request_debug_assets?
|
207
206
|
debug_assets || (defined?(controller) && controller && params[:debug_assets])
|
208
|
-
rescue
|
209
|
-
|
207
|
+
rescue # FIXME: what exactly are we rescuing?
|
208
|
+
false
|
210
209
|
end
|
211
210
|
|
212
211
|
# Internal method to support multifile debugging. Will
|
213
212
|
# eventually be removed w/ Sprockets 3.x.
|
214
213
|
def lookup_debug_asset(path, options = {})
|
215
|
-
|
214
|
+
path = path_with_extname(path, options)
|
215
|
+
|
216
|
+
resolve_asset do |resolver|
|
217
|
+
resolver.find_debug_asset path
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
# compute_asset_extname is in AV::Helpers::AssetUrlHelper
|
222
|
+
def path_with_extname(path, options)
|
216
223
|
path = path.to_s
|
217
|
-
|
218
|
-
|
224
|
+
"#{path}#{compute_asset_extname(path, options)}"
|
225
|
+
end
|
226
|
+
|
227
|
+
# Try each asset resolver and return the first non-nil result.
|
228
|
+
def resolve_asset
|
229
|
+
asset_resolver_strategies.detect do |resolver|
|
230
|
+
if result = yield(resolver)
|
231
|
+
break result
|
232
|
+
end
|
219
233
|
end
|
234
|
+
end
|
220
235
|
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
236
|
+
# List of resolvers in `config.assets.resolve_with` order.
|
237
|
+
def asset_resolver_strategies
|
238
|
+
@asset_resolver_strategies ||=
|
239
|
+
Array(resolve_assets_with).map do |name|
|
240
|
+
HelperAssetResolvers[name].new(self)
|
225
241
|
end
|
242
|
+
end
|
243
|
+
|
244
|
+
# Append ?body=1 if debug is on and we're on old Sprockets.
|
245
|
+
def legacy_debug_path(path, debug)
|
246
|
+
if debug && !using_sprockets4?
|
247
|
+
"#{path}?body=1"
|
248
|
+
else
|
249
|
+
path
|
226
250
|
end
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
254
|
+
# Use a separate module since Helper is mixed in and we needn't pollute
|
255
|
+
# the class namespace with our internals.
|
256
|
+
module HelperAssetResolvers #:nodoc:
|
257
|
+
def self.[](name)
|
258
|
+
case name
|
259
|
+
when :manifest
|
260
|
+
Manifest
|
261
|
+
when :environment
|
262
|
+
Environment
|
263
|
+
else
|
264
|
+
raise ArgumentError, "Unrecognized asset resolver: #{name.inspect}. Expected :manifest or :environment"
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
268
|
+
class Manifest #:nodoc:
|
269
|
+
def initialize(view)
|
270
|
+
@manifest = view.assets_manifest
|
271
|
+
raise ArgumentError, 'config.assets.resolve_with includes :manifest, but app.assets_manifest is nil' unless @manifest
|
272
|
+
end
|
273
|
+
|
274
|
+
def asset_path(path, digest, allow_non_precompiled = false)
|
275
|
+
if digest
|
276
|
+
digest_path path, allow_non_precompiled
|
277
|
+
end
|
278
|
+
end
|
279
|
+
|
280
|
+
def digest_path(path, allow_non_precompiled = false)
|
281
|
+
@manifest.assets[path]
|
282
|
+
end
|
283
|
+
|
284
|
+
def integrity(path)
|
285
|
+
if meta = metadata(path)
|
286
|
+
meta["integrity"]
|
287
|
+
end
|
288
|
+
end
|
289
|
+
|
290
|
+
def find_debug_asset(path)
|
291
|
+
nil
|
292
|
+
end
|
293
|
+
|
294
|
+
private
|
295
|
+
def metadata(path)
|
296
|
+
if digest_path = digest_path(path)
|
297
|
+
@manifest.files[digest_path]
|
298
|
+
end
|
299
|
+
end
|
300
|
+
end
|
301
|
+
|
302
|
+
class Environment #:nodoc:
|
303
|
+
def initialize(view)
|
304
|
+
raise ArgumentError, 'config.assets.resolve_with includes :environment, but app.assets is nil' unless view.assets_environment
|
305
|
+
@env = view.assets_environment
|
306
|
+
@precompiled_asset_checker = view.precompiled_asset_checker
|
307
|
+
end
|
308
|
+
|
309
|
+
def asset_path(path, digest, allow_non_precompiled = false)
|
310
|
+
# Digests enabled? Do the work to calculate the full asset path.
|
311
|
+
if digest
|
312
|
+
digest_path path, allow_non_precompiled
|
313
|
+
|
314
|
+
# Otherwise, ask the Sprockets environment whether the asset exists
|
315
|
+
# and check whether it's also precompiled for production deploys.
|
316
|
+
elsif find_asset(path)
|
317
|
+
raise_unless_precompiled_asset path unless allow_non_precompiled
|
318
|
+
path
|
319
|
+
end
|
320
|
+
end
|
321
|
+
|
322
|
+
def digest_path(path, allow_non_precompiled = false)
|
323
|
+
if asset = find_asset(path)
|
324
|
+
raise_unless_precompiled_asset path unless allow_non_precompiled
|
325
|
+
asset.digest_path
|
326
|
+
end
|
327
|
+
end
|
227
328
|
|
228
|
-
|
329
|
+
def integrity(path)
|
330
|
+
find_asset(path).try :integrity
|
229
331
|
end
|
332
|
+
|
333
|
+
def find_debug_asset(path)
|
334
|
+
if asset = find_asset(path, pipeline: :debug)
|
335
|
+
raise_unless_precompiled_asset asset.logical_path.sub('.debug', '')
|
336
|
+
asset
|
337
|
+
end
|
338
|
+
end
|
339
|
+
|
340
|
+
private
|
341
|
+
def find_asset(path, options = {})
|
342
|
+
@env[path, options]
|
343
|
+
end
|
344
|
+
|
345
|
+
def precompiled?(path)
|
346
|
+
@precompiled_asset_checker.call path
|
347
|
+
end
|
348
|
+
|
349
|
+
def raise_unless_precompiled_asset(path)
|
350
|
+
raise Helper::AssetNotPrecompiled.new(path) unless precompiled?(path)
|
351
|
+
end
|
352
|
+
end
|
230
353
|
end
|
231
354
|
end
|
232
355
|
end
|
@@ -6,11 +6,6 @@ module Sprockets
|
|
6
6
|
def using_sprockets4?
|
7
7
|
Gem::Version.new(Sprockets::VERSION) >= Gem::Version.new('4.0.0')
|
8
8
|
end
|
9
|
-
|
10
|
-
# Internal: Generate a Set of all precompiled assets logical paths.
|
11
|
-
def build_precompiled_list(manifest, assets)
|
12
|
-
manifest.find(assets || []).map(&:logical_path)
|
13
|
-
end
|
14
9
|
end
|
15
10
|
end
|
16
11
|
end
|
data/lib/sprockets/railtie.rb
CHANGED
@@ -8,6 +8,7 @@ require 'sprockets/rails/context'
|
|
8
8
|
require 'sprockets/rails/helper'
|
9
9
|
require 'sprockets/rails/route_wrapper'
|
10
10
|
require 'sprockets/rails/version'
|
11
|
+
require 'set'
|
11
12
|
|
12
13
|
module Rails
|
13
14
|
class Application
|
@@ -27,8 +28,18 @@ module Rails
|
|
27
28
|
# Returns Sprockets::Manifest for app config.
|
28
29
|
attr_accessor :assets_manifest
|
29
30
|
|
30
|
-
#
|
31
|
-
|
31
|
+
# Called from asset helpers to alert you if you reference an asset URL that
|
32
|
+
# isn't precompiled and hence won't be available in production.
|
33
|
+
def asset_precompiled?(logical_path)
|
34
|
+
precompiled_assets.include? logical_path
|
35
|
+
end
|
36
|
+
|
37
|
+
# Lazy-load the precompile list so we don't cause asset compilation at app
|
38
|
+
# boot time, but ensure we cache the list so we don't recompute it for each
|
39
|
+
# request or test case.
|
40
|
+
def precompiled_assets
|
41
|
+
@precompiled_assets ||= assets_manifest.find(config.assets.precompile).map(&:logical_path).to_set
|
42
|
+
end
|
32
43
|
end
|
33
44
|
|
34
45
|
class Engine < Railtie
|
@@ -37,7 +48,6 @@ module Rails
|
|
37
48
|
initializer :append_assets_path, :group => :all do |app|
|
38
49
|
app.config.assets.paths.unshift(*paths["vendor/assets"].existent_directories)
|
39
50
|
app.config.assets.paths.unshift(*paths["lib/assets"].existent_directories)
|
40
|
-
app.config.assets.paths.unshift(*paths["app"].existent_directories.grep(/\/assets\z/))
|
41
51
|
app.config.assets.paths.unshift(*paths["app/assets"].existent_directories)
|
42
52
|
end
|
43
53
|
end
|
@@ -79,11 +89,6 @@ module Sprockets
|
|
79
89
|
config.assets.paths.each { |path| env.append_path(path) }
|
80
90
|
end
|
81
91
|
|
82
|
-
config.assets.configure do |env|
|
83
|
-
env.js_compressor = config.assets.js_compressor
|
84
|
-
env.css_compressor = config.assets.css_compressor
|
85
|
-
end
|
86
|
-
|
87
92
|
config.assets.configure do |env|
|
88
93
|
env.context_class.send :include, ::Sprockets::Rails::Context
|
89
94
|
env.context_class.assets_prefix = config.assets.prefix
|
@@ -123,16 +128,23 @@ module Sprockets
|
|
123
128
|
|
124
129
|
env = Sprockets::Environment.new(app.root.to_s)
|
125
130
|
|
131
|
+
config = app.config
|
132
|
+
|
126
133
|
# Run app.assets.configure blocks
|
127
|
-
|
134
|
+
config.assets._blocks.each do |block|
|
128
135
|
block.call(env)
|
129
136
|
end
|
130
137
|
|
138
|
+
# Set compressors after the configure blocks since they can
|
139
|
+
# define new compressors and we only accept existent compressors.
|
140
|
+
env.js_compressor = config.assets.js_compressor
|
141
|
+
env.css_compressor = config.assets.css_compressor
|
142
|
+
|
131
143
|
# No more configuration changes at this point.
|
132
144
|
# With cache classes on, Sprockets won't check the FS when files
|
133
145
|
# change. Preferable in production when the FS only changes on
|
134
146
|
# deploys when the app restarts.
|
135
|
-
if
|
147
|
+
if config.cache_classes
|
136
148
|
env = env.cached
|
137
149
|
end
|
138
150
|
|
@@ -153,10 +165,14 @@ module Sprockets
|
|
153
165
|
app.routes.prepend do
|
154
166
|
mount app.assets => config.assets.prefix
|
155
167
|
end
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
168
|
+
end
|
169
|
+
|
170
|
+
app.assets_manifest = build_manifest(app)
|
171
|
+
|
172
|
+
if config.assets.resolve_with.nil?
|
173
|
+
config.assets.resolve_with = []
|
174
|
+
config.assets.resolve_with << :manifest if config.assets.digest && !config.assets.debug
|
175
|
+
config.assets.resolve_with << :environment if config.assets.compile
|
160
176
|
end
|
161
177
|
|
162
178
|
ActionDispatch::Routing::RouteWrapper.class_eval do
|
@@ -182,7 +198,11 @@ module Sprockets
|
|
182
198
|
|
183
199
|
self.assets_environment = app.assets
|
184
200
|
self.assets_manifest = app.assets_manifest
|
185
|
-
|
201
|
+
|
202
|
+
self.resolve_assets_with = config.assets.resolve_with
|
203
|
+
|
204
|
+
# Expose the app precompiled asset check to the view
|
205
|
+
self.precompiled_asset_checker = -> logical_path { app.asset_precompiled? logical_path }
|
186
206
|
end
|
187
207
|
end
|
188
208
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sprockets-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.0
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joshua Peek
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-12-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sprockets
|
@@ -114,7 +114,6 @@ executables: []
|
|
114
114
|
extensions: []
|
115
115
|
extra_rdoc_files: []
|
116
116
|
files:
|
117
|
-
- LICENSE
|
118
117
|
- README.md
|
119
118
|
- lib/sprockets/rails.rb
|
120
119
|
- lib/sprockets/rails/context.rb
|
@@ -139,14 +138,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
139
138
|
version: 1.9.3
|
140
139
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
141
140
|
requirements:
|
142
|
-
- - "
|
141
|
+
- - ">="
|
143
142
|
- !ruby/object:Gem::Version
|
144
|
-
version:
|
143
|
+
version: '0'
|
145
144
|
requirements: []
|
146
145
|
rubyforge_project:
|
147
|
-
rubygems_version: 2.4.
|
146
|
+
rubygems_version: 2.4.5.1
|
148
147
|
signing_key:
|
149
148
|
specification_version: 4
|
150
149
|
summary: Sprockets Rails integration
|
151
150
|
test_files: []
|
152
|
-
has_rdoc:
|
data/LICENSE
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
Copyright (c) 2014 Joshua Peek
|
2
|
-
|
3
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
-
a copy of this software and associated documentation files (the
|
5
|
-
"Software"), to deal in the Software without restriction, including
|
6
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
-
permit persons to whom the Software is furnished to do so, subject to
|
9
|
-
the following conditions:
|
10
|
-
|
11
|
-
The above copyright notice and this permission notice shall be
|
12
|
-
included in all copies or substantial portions of the Software.
|
13
|
-
|
14
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|