sprockets 2.12.5 → 3.7.2

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.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +296 -0
  3. data/LICENSE +2 -2
  4. data/README.md +235 -262
  5. data/bin/sprockets +1 -0
  6. data/lib/rake/sprocketstask.rb +5 -4
  7. data/lib/sprockets/asset.rb +143 -212
  8. data/lib/sprockets/autoload/closure.rb +7 -0
  9. data/lib/sprockets/autoload/coffee_script.rb +7 -0
  10. data/lib/sprockets/autoload/eco.rb +7 -0
  11. data/lib/sprockets/autoload/ejs.rb +7 -0
  12. data/lib/sprockets/autoload/sass.rb +7 -0
  13. data/lib/sprockets/autoload/uglifier.rb +7 -0
  14. data/lib/sprockets/autoload/yui.rb +7 -0
  15. data/lib/sprockets/autoload.rb +11 -0
  16. data/lib/sprockets/base.rb +56 -393
  17. data/lib/sprockets/bower.rb +58 -0
  18. data/lib/sprockets/bundle.rb +69 -0
  19. data/lib/sprockets/cache/file_store.rb +168 -14
  20. data/lib/sprockets/cache/memory_store.rb +66 -0
  21. data/lib/sprockets/cache/null_store.rb +46 -0
  22. data/lib/sprockets/cache.rb +236 -0
  23. data/lib/sprockets/cached_environment.rb +69 -0
  24. data/lib/sprockets/closure_compressor.rb +35 -10
  25. data/lib/sprockets/coffee_script_processor.rb +25 -0
  26. data/lib/sprockets/coffee_script_template.rb +17 -0
  27. data/lib/sprockets/compressing.rb +44 -23
  28. data/lib/sprockets/configuration.rb +83 -0
  29. data/lib/sprockets/context.rb +86 -144
  30. data/lib/sprockets/dependencies.rb +73 -0
  31. data/lib/sprockets/deprecation.rb +90 -0
  32. data/lib/sprockets/digest_utils.rb +180 -0
  33. data/lib/sprockets/directive_processor.rb +207 -211
  34. data/lib/sprockets/eco_processor.rb +32 -0
  35. data/lib/sprockets/eco_template.rb +9 -30
  36. data/lib/sprockets/ejs_processor.rb +31 -0
  37. data/lib/sprockets/ejs_template.rb +9 -29
  38. data/lib/sprockets/encoding_utils.rb +261 -0
  39. data/lib/sprockets/engines.rb +53 -35
  40. data/lib/sprockets/environment.rb +17 -64
  41. data/lib/sprockets/erb_processor.rb +30 -0
  42. data/lib/sprockets/erb_template.rb +11 -0
  43. data/lib/sprockets/errors.rb +4 -13
  44. data/lib/sprockets/file_reader.rb +15 -0
  45. data/lib/sprockets/http_utils.rb +117 -0
  46. data/lib/sprockets/jst_processor.rb +35 -15
  47. data/lib/sprockets/legacy.rb +330 -0
  48. data/lib/sprockets/legacy_proc_processor.rb +35 -0
  49. data/lib/sprockets/legacy_tilt_processor.rb +29 -0
  50. data/lib/sprockets/loader.rb +325 -0
  51. data/lib/sprockets/manifest.rb +202 -127
  52. data/lib/sprockets/manifest_utils.rb +45 -0
  53. data/lib/sprockets/mime.rb +112 -31
  54. data/lib/sprockets/path_dependency_utils.rb +85 -0
  55. data/lib/sprockets/path_digest_utils.rb +47 -0
  56. data/lib/sprockets/path_utils.rb +287 -0
  57. data/lib/sprockets/paths.rb +42 -19
  58. data/lib/sprockets/processing.rb +178 -126
  59. data/lib/sprockets/processor_utils.rb +180 -0
  60. data/lib/sprockets/resolve.rb +211 -0
  61. data/lib/sprockets/sass_cache_store.rb +22 -17
  62. data/lib/sprockets/sass_compressor.rb +39 -15
  63. data/lib/sprockets/sass_functions.rb +2 -70
  64. data/lib/sprockets/sass_importer.rb +2 -30
  65. data/lib/sprockets/sass_processor.rb +292 -0
  66. data/lib/sprockets/sass_template.rb +12 -59
  67. data/lib/sprockets/server.rb +129 -84
  68. data/lib/sprockets/transformers.rb +145 -0
  69. data/lib/sprockets/uglifier_compressor.rb +39 -12
  70. data/lib/sprockets/unloaded_asset.rb +137 -0
  71. data/lib/sprockets/uri_tar.rb +98 -0
  72. data/lib/sprockets/uri_utils.rb +188 -0
  73. data/lib/sprockets/utils/gzip.rb +67 -0
  74. data/lib/sprockets/utils.rb +210 -44
  75. data/lib/sprockets/version.rb +1 -1
  76. data/lib/sprockets/yui_compressor.rb +39 -11
  77. data/lib/sprockets.rb +142 -81
  78. metadata +96 -90
  79. data/lib/sprockets/asset_attributes.rb +0 -137
  80. data/lib/sprockets/bundled_asset.rb +0 -78
  81. data/lib/sprockets/caching.rb +0 -96
  82. data/lib/sprockets/charset_normalizer.rb +0 -41
  83. data/lib/sprockets/index.rb +0 -100
  84. data/lib/sprockets/processed_asset.rb +0 -152
  85. data/lib/sprockets/processor.rb +0 -32
  86. data/lib/sprockets/safety_colons.rb +0 -28
  87. data/lib/sprockets/scss_template.rb +0 -13
  88. data/lib/sprockets/static_asset.rb +0 -60
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sprockets
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.12.5
4
+ version: 3.7.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Stephenson
@@ -12,35 +12,27 @@ cert_chain: []
12
12
  date: 2018-06-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: hike
15
+ name: rack
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - "~>"
19
- - !ruby/object:Gem::Version
20
- version: '1.2'
21
- type: :runtime
22
- prerelease: false
23
- version_requirements: !ruby/object:Gem::Requirement
24
- requirements:
25
- - - "~>"
18
+ - - ">"
26
19
  - !ruby/object:Gem::Version
27
- version: '1.2'
28
- - !ruby/object:Gem::Dependency
29
- name: multi_json
30
- requirement: !ruby/object:Gem::Requirement
31
- requirements:
32
- - - "~>"
20
+ version: '1'
21
+ - - "<"
33
22
  - !ruby/object:Gem::Version
34
- version: '1.0'
23
+ version: '3'
35
24
  type: :runtime
36
25
  prerelease: false
37
26
  version_requirements: !ruby/object:Gem::Requirement
38
27
  requirements:
39
- - - "~>"
28
+ - - ">"
40
29
  - !ruby/object:Gem::Version
41
- version: '1.0'
30
+ version: '1'
31
+ - - "<"
32
+ - !ruby/object:Gem::Version
33
+ version: '3'
42
34
  - !ruby/object:Gem::Dependency
43
- name: rack
35
+ name: concurrent-ruby
44
36
  requirement: !ruby/object:Gem::Requirement
45
37
  requirements:
46
38
  - - "~>"
@@ -54,69 +46,63 @@ dependencies:
54
46
  - !ruby/object:Gem::Version
55
47
  version: '1.0'
56
48
  - !ruby/object:Gem::Dependency
57
- name: tilt
49
+ name: closure-compiler
58
50
  requirement: !ruby/object:Gem::Requirement
59
51
  requirements:
60
52
  - - "~>"
61
53
  - !ruby/object:Gem::Version
62
54
  version: '1.1'
63
- - - "!="
64
- - !ruby/object:Gem::Version
65
- version: 1.3.0
66
- type: :runtime
55
+ type: :development
67
56
  prerelease: false
68
57
  version_requirements: !ruby/object:Gem::Requirement
69
58
  requirements:
70
59
  - - "~>"
71
60
  - !ruby/object:Gem::Version
72
61
  version: '1.1'
73
- - - "!="
74
- - !ruby/object:Gem::Version
75
- version: 1.3.0
76
62
  - !ruby/object:Gem::Dependency
77
- name: closure-compiler
63
+ name: coffee-script-source
78
64
  requirement: !ruby/object:Gem::Requirement
79
65
  requirements:
80
- - - ">="
66
+ - - "~>"
81
67
  - !ruby/object:Gem::Version
82
- version: '0'
68
+ version: '1.6'
83
69
  type: :development
84
70
  prerelease: false
85
71
  version_requirements: !ruby/object:Gem::Requirement
86
72
  requirements:
87
- - - ">="
73
+ - - "~>"
88
74
  - !ruby/object:Gem::Version
89
- version: '0'
75
+ version: '1.6'
90
76
  - !ruby/object:Gem::Dependency
91
77
  name: coffee-script
92
78
  requirement: !ruby/object:Gem::Requirement
93
79
  requirements:
94
80
  - - "~>"
95
81
  - !ruby/object:Gem::Version
96
- version: '2.0'
82
+ version: '2.2'
97
83
  type: :development
98
84
  prerelease: false
99
85
  version_requirements: !ruby/object:Gem::Requirement
100
86
  requirements:
101
87
  - - "~>"
102
88
  - !ruby/object:Gem::Version
103
- version: '2.0'
89
+ version: '2.2'
104
90
  - !ruby/object:Gem::Dependency
105
- name: coffee-script-source
91
+ name: eco
106
92
  requirement: !ruby/object:Gem::Requirement
107
93
  requirements:
108
94
  - - "~>"
109
95
  - !ruby/object:Gem::Version
110
- version: '1.2'
96
+ version: '1.0'
111
97
  type: :development
112
98
  prerelease: false
113
99
  version_requirements: !ruby/object:Gem::Requirement
114
100
  requirements:
115
101
  - - "~>"
116
102
  - !ruby/object:Gem::Version
117
- version: '1.2'
103
+ version: '1.0'
118
104
  - !ruby/object:Gem::Dependency
119
- name: eco
105
+ name: ejs
120
106
  requirement: !ruby/object:Gem::Requirement
121
107
  requirements:
122
108
  - - "~>"
@@ -130,75 +116,75 @@ dependencies:
130
116
  - !ruby/object:Gem::Version
131
117
  version: '1.0'
132
118
  - !ruby/object:Gem::Dependency
133
- name: ejs
119
+ name: execjs
134
120
  requirement: !ruby/object:Gem::Requirement
135
121
  requirements:
136
122
  - - "~>"
137
123
  - !ruby/object:Gem::Version
138
- version: '1.0'
124
+ version: '2.0'
139
125
  type: :development
140
126
  prerelease: false
141
127
  version_requirements: !ruby/object:Gem::Requirement
142
128
  requirements:
143
129
  - - "~>"
144
130
  - !ruby/object:Gem::Version
145
- version: '1.0'
131
+ version: '2.0'
146
132
  - !ruby/object:Gem::Dependency
147
- name: execjs
133
+ name: minitest
148
134
  requirement: !ruby/object:Gem::Requirement
149
135
  requirements:
150
136
  - - "~>"
151
137
  - !ruby/object:Gem::Version
152
- version: '1.0'
138
+ version: '5.0'
153
139
  type: :development
154
140
  prerelease: false
155
141
  version_requirements: !ruby/object:Gem::Requirement
156
142
  requirements:
157
143
  - - "~>"
158
144
  - !ruby/object:Gem::Version
159
- version: '1.0'
145
+ version: '5.0'
160
146
  - !ruby/object:Gem::Dependency
161
- name: json
147
+ name: nokogiri
162
148
  requirement: !ruby/object:Gem::Requirement
163
149
  requirements:
164
- - - ">="
150
+ - - "~>"
165
151
  - !ruby/object:Gem::Version
166
- version: '0'
152
+ version: '1.3'
167
153
  type: :development
168
154
  prerelease: false
169
155
  version_requirements: !ruby/object:Gem::Requirement
170
156
  requirements:
171
- - - ">="
157
+ - - "~>"
172
158
  - !ruby/object:Gem::Version
173
- version: '0'
159
+ version: '1.3'
174
160
  - !ruby/object:Gem::Dependency
175
161
  name: rack-test
176
162
  requirement: !ruby/object:Gem::Requirement
177
163
  requirements:
178
- - - ">="
164
+ - - "~>"
179
165
  - !ruby/object:Gem::Version
180
- version: '0'
166
+ version: '0.6'
181
167
  type: :development
182
168
  prerelease: false
183
169
  version_requirements: !ruby/object:Gem::Requirement
184
170
  requirements:
185
- - - ">="
171
+ - - "~>"
186
172
  - !ruby/object:Gem::Version
187
- version: '0'
173
+ version: '0.6'
188
174
  - !ruby/object:Gem::Dependency
189
175
  name: rake
190
176
  requirement: !ruby/object:Gem::Requirement
191
177
  requirements:
192
- - - ">="
178
+ - - "~>"
193
179
  - !ruby/object:Gem::Version
194
- version: '0'
180
+ version: '10.0'
195
181
  type: :development
196
182
  prerelease: false
197
183
  version_requirements: !ruby/object:Gem::Requirement
198
184
  requirements:
199
- - - ">="
185
+ - - "~>"
200
186
  - !ruby/object:Gem::Version
201
- version: '0'
187
+ version: '10.0'
202
188
  - !ruby/object:Gem::Dependency
203
189
  name: sass
204
190
  requirement: !ruby/object:Gem::Requirement
@@ -217,44 +203,30 @@ dependencies:
217
203
  name: uglifier
218
204
  requirement: !ruby/object:Gem::Requirement
219
205
  requirements:
220
- - - ">="
206
+ - - "~>"
221
207
  - !ruby/object:Gem::Version
222
- version: '0'
208
+ version: '2.3'
223
209
  type: :development
224
210
  prerelease: false
225
211
  version_requirements: !ruby/object:Gem::Requirement
226
212
  requirements:
227
- - - ">="
213
+ - - "~>"
228
214
  - !ruby/object:Gem::Version
229
- version: '0'
215
+ version: '2.3'
230
216
  - !ruby/object:Gem::Dependency
231
217
  name: yui-compressor
232
- requirement: !ruby/object:Gem::Requirement
233
- requirements:
234
- - - ">="
235
- - !ruby/object:Gem::Version
236
- version: '0'
237
- type: :development
238
- prerelease: false
239
- version_requirements: !ruby/object:Gem::Requirement
240
- requirements:
241
- - - ">="
242
- - !ruby/object:Gem::Version
243
- version: '0'
244
- - !ruby/object:Gem::Dependency
245
- name: test-unit
246
218
  requirement: !ruby/object:Gem::Requirement
247
219
  requirements:
248
220
  - - "~>"
249
221
  - !ruby/object:Gem::Version
250
- version: '3.1'
222
+ version: '0.12'
251
223
  type: :development
252
224
  prerelease: false
253
225
  version_requirements: !ruby/object:Gem::Requirement
254
226
  requirements:
255
227
  - - "~>"
256
228
  - !ruby/object:Gem::Version
257
- version: '3.1'
229
+ version: '0.12'
258
230
  description: Sprockets is a Rack-based asset packaging system that concatenates and
259
231
  serves JavaScript, CoffeeScript, CSS, LESS, Sass, and SCSS.
260
232
  email:
@@ -265,49 +237,83 @@ executables:
265
237
  extensions: []
266
238
  extra_rdoc_files: []
267
239
  files:
240
+ - CHANGELOG.md
268
241
  - LICENSE
269
242
  - README.md
270
243
  - bin/sprockets
271
244
  - lib/rake/sprocketstask.rb
272
245
  - lib/sprockets.rb
273
246
  - lib/sprockets/asset.rb
274
- - lib/sprockets/asset_attributes.rb
247
+ - lib/sprockets/autoload.rb
248
+ - lib/sprockets/autoload/closure.rb
249
+ - lib/sprockets/autoload/coffee_script.rb
250
+ - lib/sprockets/autoload/eco.rb
251
+ - lib/sprockets/autoload/ejs.rb
252
+ - lib/sprockets/autoload/sass.rb
253
+ - lib/sprockets/autoload/uglifier.rb
254
+ - lib/sprockets/autoload/yui.rb
275
255
  - lib/sprockets/base.rb
276
- - lib/sprockets/bundled_asset.rb
256
+ - lib/sprockets/bower.rb
257
+ - lib/sprockets/bundle.rb
258
+ - lib/sprockets/cache.rb
277
259
  - lib/sprockets/cache/file_store.rb
278
- - lib/sprockets/caching.rb
279
- - lib/sprockets/charset_normalizer.rb
260
+ - lib/sprockets/cache/memory_store.rb
261
+ - lib/sprockets/cache/null_store.rb
262
+ - lib/sprockets/cached_environment.rb
280
263
  - lib/sprockets/closure_compressor.rb
264
+ - lib/sprockets/coffee_script_processor.rb
265
+ - lib/sprockets/coffee_script_template.rb
281
266
  - lib/sprockets/compressing.rb
267
+ - lib/sprockets/configuration.rb
282
268
  - lib/sprockets/context.rb
269
+ - lib/sprockets/dependencies.rb
270
+ - lib/sprockets/deprecation.rb
271
+ - lib/sprockets/digest_utils.rb
283
272
  - lib/sprockets/directive_processor.rb
273
+ - lib/sprockets/eco_processor.rb
284
274
  - lib/sprockets/eco_template.rb
275
+ - lib/sprockets/ejs_processor.rb
285
276
  - lib/sprockets/ejs_template.rb
277
+ - lib/sprockets/encoding_utils.rb
286
278
  - lib/sprockets/engines.rb
287
279
  - lib/sprockets/environment.rb
280
+ - lib/sprockets/erb_processor.rb
281
+ - lib/sprockets/erb_template.rb
288
282
  - lib/sprockets/errors.rb
289
- - lib/sprockets/index.rb
283
+ - lib/sprockets/file_reader.rb
284
+ - lib/sprockets/http_utils.rb
290
285
  - lib/sprockets/jst_processor.rb
286
+ - lib/sprockets/legacy.rb
287
+ - lib/sprockets/legacy_proc_processor.rb
288
+ - lib/sprockets/legacy_tilt_processor.rb
289
+ - lib/sprockets/loader.rb
291
290
  - lib/sprockets/manifest.rb
291
+ - lib/sprockets/manifest_utils.rb
292
292
  - lib/sprockets/mime.rb
293
+ - lib/sprockets/path_dependency_utils.rb
294
+ - lib/sprockets/path_digest_utils.rb
295
+ - lib/sprockets/path_utils.rb
293
296
  - lib/sprockets/paths.rb
294
- - lib/sprockets/processed_asset.rb
295
297
  - lib/sprockets/processing.rb
296
- - lib/sprockets/processor.rb
297
- - lib/sprockets/safety_colons.rb
298
+ - lib/sprockets/processor_utils.rb
299
+ - lib/sprockets/resolve.rb
298
300
  - lib/sprockets/sass_cache_store.rb
299
301
  - lib/sprockets/sass_compressor.rb
300
302
  - lib/sprockets/sass_functions.rb
301
303
  - lib/sprockets/sass_importer.rb
304
+ - lib/sprockets/sass_processor.rb
302
305
  - lib/sprockets/sass_template.rb
303
- - lib/sprockets/scss_template.rb
304
306
  - lib/sprockets/server.rb
305
- - lib/sprockets/static_asset.rb
307
+ - lib/sprockets/transformers.rb
306
308
  - lib/sprockets/uglifier_compressor.rb
309
+ - lib/sprockets/unloaded_asset.rb
310
+ - lib/sprockets/uri_tar.rb
311
+ - lib/sprockets/uri_utils.rb
307
312
  - lib/sprockets/utils.rb
313
+ - lib/sprockets/utils/gzip.rb
308
314
  - lib/sprockets/version.rb
309
315
  - lib/sprockets/yui_compressor.rb
310
- homepage: http://getsprockets.org/
316
+ homepage: https://github.com/rails/sprockets
311
317
  licenses:
312
318
  - MIT
313
319
  metadata: {}
@@ -319,7 +325,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
319
325
  requirements:
320
326
  - - ">="
321
327
  - !ruby/object:Gem::Version
322
- version: '0'
328
+ version: 1.9.3
323
329
  required_rubygems_version: !ruby/object:Gem::Requirement
324
330
  requirements:
325
331
  - - ">="
@@ -1,137 +0,0 @@
1
- require 'pathname'
2
-
3
- module Sprockets
4
- # `AssetAttributes` is a wrapper similar to `Pathname` that provides
5
- # some helper accessors.
6
- #
7
- # These methods should be considered internalish.
8
- class AssetAttributes
9
- attr_reader :environment, :pathname
10
-
11
- def initialize(environment, path)
12
- @environment = environment
13
- @pathname = path.is_a?(Pathname) ? path : Pathname.new(path.to_s)
14
- end
15
-
16
- # Returns paths search the load path for.
17
- def search_paths
18
- paths = [pathname.to_s]
19
-
20
- extension = format_extension
21
- path_without_extension = extension ?
22
- pathname.sub(extension, '') :
23
- pathname
24
-
25
- # optimization: bower.json can only be nested one level deep
26
- if !path_without_extension.to_s.index('/')
27
- paths << path_without_extension.join(".bower.json").to_s
28
- paths << path_without_extension.join("bower.json").to_s
29
- # DEPRECATED bower configuration file
30
- paths << path_without_extension.join("component.json").to_s
31
- end
32
-
33
- if pathname.basename(extension.to_s).to_s != 'index'
34
- paths << path_without_extension.join("index#{extension}").to_s
35
- end
36
-
37
- paths
38
- end
39
-
40
- # Reverse guess logical path for fully expanded path.
41
- #
42
- # This has some known issues. For an example if a file is
43
- # shaddowed in the path, but is required relatively, its logical
44
- # path will be incorrect.
45
- def logical_path
46
- if root_path = environment.paths.detect { |path| pathname.to_s[path] }
47
- path = pathname.to_s.sub("#{root_path}/", '')
48
- path = pathname.relative_path_from(Pathname.new(root_path)).to_s
49
- path = engine_extensions.inject(path) { |p, ext| p.sub(ext, '') }
50
- path = "#{path}#{engine_format_extension}" unless format_extension
51
- path
52
- else
53
- raise FileOutsidePaths, "#{pathname} isn't in paths: #{environment.paths.join(', ')}"
54
- end
55
- end
56
-
57
- # Returns `Array` of extension `String`s.
58
- #
59
- # "foo.js.coffee"
60
- # # => [".js", ".coffee"]
61
- #
62
- def extensions
63
- @extensions ||= @pathname.basename.to_s.scan(/\.[^.]+/)
64
- end
65
-
66
- # Returns the format extension.
67
- #
68
- # "foo.js.coffee"
69
- # # => ".js"
70
- #
71
- def format_extension
72
- extensions.reverse.detect { |ext|
73
- @environment.mime_types(ext) && !@environment.engines(ext)
74
- }
75
- end
76
-
77
- # Returns an `Array` of engine extensions.
78
- #
79
- # "foo.js.coffee.erb"
80
- # # => [".coffee", ".erb"]
81
- #
82
- def engine_extensions
83
- exts = extensions
84
-
85
- if offset = extensions.index(format_extension)
86
- exts = extensions[offset+1..-1]
87
- end
88
-
89
- exts.select { |ext| @environment.engines(ext) }
90
- end
91
-
92
- # Returns engine classes.
93
- def engines
94
- engine_extensions.map { |ext| @environment.engines(ext) }
95
- end
96
-
97
- # Returns all processors to run on the path.
98
- def processors
99
- environment.preprocessors(content_type) +
100
- engines.reverse +
101
- environment.postprocessors(content_type)
102
- end
103
-
104
- # Returns the content type for the pathname. Falls back to `application/octet-stream`.
105
- def content_type
106
- @content_type ||= begin
107
- if format_extension.nil?
108
- engine_content_type || 'application/octet-stream'
109
- else
110
- @environment.mime_types(format_extension) ||
111
- engine_content_type ||
112
- 'application/octet-stream'
113
- end
114
- end
115
- end
116
-
117
- private
118
- # Returns implicit engine content type.
119
- #
120
- # `.coffee` files carry an implicit `application/javascript`
121
- # content type.
122
- def engine_content_type
123
- engines.reverse.each do |engine|
124
- if engine.respond_to?(:default_mime_type) && engine.default_mime_type
125
- return engine.default_mime_type
126
- end
127
- end
128
- nil
129
- end
130
-
131
- def engine_format_extension
132
- if content_type = engine_content_type
133
- environment.extension_for_mime_type(content_type)
134
- end
135
- end
136
- end
137
- end
@@ -1,78 +0,0 @@
1
- require 'sprockets/asset'
2
- require 'sprockets/errors'
3
- require 'fileutils'
4
- require 'set'
5
- require 'zlib'
6
-
7
- module Sprockets
8
- # `BundledAsset`s are used for files that need to be processed and
9
- # concatenated with other assets. Use for `.js` and `.css` files.
10
- class BundledAsset < Asset
11
- attr_reader :source
12
-
13
- def initialize(environment, logical_path, pathname)
14
- super(environment, logical_path, pathname)
15
-
16
- @processed_asset = environment.find_asset(pathname, :bundle => false)
17
- @required_assets = @processed_asset.required_assets
18
- @dependency_paths = @processed_asset.dependency_paths
19
-
20
- # Explode Asset into parts and gather the dependency bodies
21
- @source = to_a.map { |dependency| dependency.to_s }.join
22
-
23
- # Run bundle processors on concatenated source
24
- context = environment.context_class.new(environment, logical_path, pathname)
25
- @source = context.evaluate(pathname, :data => @source,
26
- :processors => environment.bundle_processors(content_type))
27
-
28
- @mtime = (to_a + @dependency_paths).map(&:mtime).max
29
- @length = Rack::Utils.bytesize(source)
30
- @digest = environment.digest.update(source).hexdigest
31
- end
32
-
33
- # Initialize `BundledAsset` from serialized `Hash`.
34
- def init_with(environment, coder)
35
- super
36
-
37
- @processed_asset = environment.find_asset(pathname, :bundle => false)
38
- @required_assets = @processed_asset.required_assets
39
-
40
- if @processed_asset.dependency_digest != coder['required_assets_digest']
41
- raise UnserializeError, "processed asset belongs to a stale environment"
42
- end
43
-
44
- @source = coder['source']
45
- end
46
-
47
- # Serialize custom attributes in `BundledAsset`.
48
- def encode_with(coder)
49
- super
50
-
51
- coder['source'] = source
52
- coder['required_assets_digest'] = @processed_asset.dependency_digest
53
- end
54
-
55
- # Get asset's own processed contents. Excludes any of its required
56
- # dependencies but does run any processors or engines on the
57
- # original file.
58
- def body
59
- @processed_asset.source
60
- end
61
-
62
- # Return an `Array` of `Asset` files that are declared dependencies.
63
- def dependencies
64
- to_a.reject { |a| a.eql?(@processed_asset) }
65
- end
66
-
67
- # Expand asset into an `Array` of parts.
68
- def to_a
69
- required_assets
70
- end
71
-
72
- # Checks if Asset is stale by comparing the actual mtime and
73
- # digest to the inmemory model.
74
- def fresh?(environment)
75
- @processed_asset.fresh?(environment)
76
- end
77
- end
78
- end
@@ -1,96 +0,0 @@
1
- module Sprockets
2
- # `Caching` is an internal mixin whose public methods are exposed on
3
- # the `Environment` and `Index` classes.
4
- module Caching
5
- # Low level cache getter for `key`. Checks a number of supported
6
- # cache interfaces.
7
- def cache_get(key)
8
- # `Cache#get(key)` for Memcache
9
- if cache.respond_to?(:get)
10
- cache.get(key)
11
-
12
- # `Cache#[key]` so `Hash` can be used
13
- elsif cache.respond_to?(:[])
14
- cache[key]
15
-
16
- # `Cache#read(key)` for `ActiveSupport::Cache` support
17
- elsif cache.respond_to?(:read)
18
- cache.read(key)
19
-
20
- else
21
- nil
22
- end
23
- end
24
-
25
- # Low level cache setter for `key`. Checks a number of supported
26
- # cache interfaces.
27
- def cache_set(key, value)
28
- # `Cache#set(key, value)` for Memcache
29
- if cache.respond_to?(:set)
30
- cache.set(key, value)
31
-
32
- # `Cache#[key]=value` so `Hash` can be used
33
- elsif cache.respond_to?(:[]=)
34
- cache[key] = value
35
-
36
- # `Cache#write(key, value)` for `ActiveSupport::Cache` support
37
- elsif cache.respond_to?(:write)
38
- cache.write(key, value)
39
- end
40
-
41
- value
42
- end
43
-
44
- protected
45
- # Cache helper method. Takes a `path` argument which maybe a
46
- # logical path or fully expanded path. The `&block` is passed
47
- # for finding and building the asset if its not in cache.
48
- def cache_asset(path)
49
- # If `cache` is not set, return fast
50
- if cache.nil?
51
- yield
52
-
53
- # Check cache for `path`
54
- elsif (asset = Asset.from_hash(self, cache_get_hash(path.to_s))) && asset.fresh?(self)
55
- asset
56
-
57
- # Otherwise yield block that slowly finds and builds the asset
58
- elsif asset = yield
59
- hash = {}
60
- asset.encode_with(hash)
61
-
62
- # Save the asset to its path
63
- cache_set_hash(path.to_s, hash)
64
-
65
- # Since path maybe a logical or full pathname, save the
66
- # asset its its full path too
67
- if path.to_s != asset.pathname.to_s
68
- cache_set_hash(asset.pathname.to_s, hash)
69
- end
70
-
71
- asset
72
- end
73
- end
74
-
75
- private
76
- # Strips `Environment#root` from key to make the key work
77
- # consisently across different servers. The key is also hashed
78
- # so it does not exceed 250 characters.
79
- def expand_cache_key(key)
80
- File.join('sprockets', digest_class.hexdigest(key.sub(root, '')))
81
- end
82
-
83
- def cache_get_hash(key)
84
- hash = cache_get(expand_cache_key(key))
85
- if hash.is_a?(Hash) && digest.hexdigest == hash['_version']
86
- hash
87
- end
88
- end
89
-
90
- def cache_set_hash(key, hash)
91
- hash['_version'] = digest.hexdigest
92
- cache_set(expand_cache_key(key), hash)
93
- hash
94
- end
95
- end
96
- end