sprockets 4.1.0 → 4.2.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/CHANGELOG.md +7 -0
- data/README.md +3 -3
- data/lib/sprockets/cache/memory_store.rb +20 -11
- data/lib/sprockets/cached_environment.rb +10 -10
- data/lib/sprockets/exporting.rb +2 -2
- data/lib/sprockets/uri_utils.rb +1 -1
- data/lib/sprockets/utils.rb +22 -17
- data/lib/sprockets/version.rb +1 -1
- metadata +13 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3c5995147a647a6d47d625b6cc9f10586506f3832cff0070985ec9560ee3fc0d
|
4
|
+
data.tar.gz: 1befd6f705efbef88f05dc58b38f719f11b445f76c60a95f854a43ef8e84c21d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9d47aea08307515c8a0fab29615fbde5f892c91300668afd83b2739032adeb77794d4303e6ecb56c570bc784695d25304f7481fa45c4ab7bbe0727281ee7deab
|
7
|
+
data.tar.gz: 6d0f0b116766053d96402f5d88602374829ef9610160bd8398a093db33ceaafe31a2f2b33a8d0c615769f0bbba7c39d867db90dfded9bc5ff35d0c0ff4482e36
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,13 @@
|
|
2
2
|
|
3
3
|
Get upgrade notes from Sprockets 3.x to 4.x at https://github.com/rails/sprockets/blob/master/UPGRADING.md
|
4
4
|
|
5
|
+
## 4.2.0
|
6
|
+
|
7
|
+
- Rack 3 compatibility. [#758](https://github.com/rails/sprockets/pull/758)
|
8
|
+
- Fix thread safety of `Sprockets::CachedEnvironment` and `Sprockets::Cache::MemoryStore`. [#771](https://github.com/rails/sprockets/pull/771)
|
9
|
+
- Add support for Rack 3.0. Headers set by sprockets will now be lower case. [#758](https://github.com/rails/sprockets/pull/758)
|
10
|
+
- Make `Sprockets::Utils.module_include` thread safe on JRuby. [#759](https://github.com/rails/sprockets/pull/759)
|
11
|
+
|
5
12
|
## 4.1.0
|
6
13
|
|
7
14
|
- Allow age to be altered in asset:clean rake task.
|
data/README.md
CHANGED
@@ -385,10 +385,10 @@ the current file won't work, it must be a logical path.
|
|
385
385
|
`link` can also be used to include manifest files from mounted Rails engines:
|
386
386
|
|
387
387
|
```
|
388
|
-
//= link
|
388
|
+
//= link my_engine_manifest
|
389
389
|
```
|
390
390
|
|
391
|
-
This would find a manifest file at `my_engine/app/assets/config/
|
391
|
+
This would find a manifest file at `my_engine/app/assets/config/my_engine_manifest.js` and include its directives.
|
392
392
|
|
393
393
|
### link_directory
|
394
394
|
|
@@ -525,7 +525,7 @@ Generated files are cached. If you're using an `ENV` var then
|
|
525
525
|
when you change then ENV var the asset will be forced to
|
526
526
|
recompile. This behavior is only true for environment variables,
|
527
527
|
if you are pulling a value from somewhere else, such as a database,
|
528
|
-
must manually invalidate the cache to see the change.
|
528
|
+
you must manually invalidate the cache to see the change.
|
529
529
|
|
530
530
|
If you're using Rails, there are helpers you can use such as `asset_url`
|
531
531
|
that will cause a recompile if the value changes.
|
@@ -22,6 +22,7 @@ module Sprockets
|
|
22
22
|
def initialize(max_size = DEFAULT_MAX_SIZE)
|
23
23
|
@max_size = max_size
|
24
24
|
@cache = {}
|
25
|
+
@mutex = Mutex.new
|
25
26
|
end
|
26
27
|
|
27
28
|
# Public: Retrieve value from cache.
|
@@ -32,12 +33,14 @@ module Sprockets
|
|
32
33
|
#
|
33
34
|
# Returns Object or nil or the value is not set.
|
34
35
|
def get(key)
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
36
|
+
@mutex.synchronize do
|
37
|
+
exists = true
|
38
|
+
value = @cache.delete(key) { exists = false }
|
39
|
+
if exists
|
40
|
+
@cache[key] = value
|
41
|
+
else
|
42
|
+
nil
|
43
|
+
end
|
41
44
|
end
|
42
45
|
end
|
43
46
|
|
@@ -50,9 +53,11 @@ module Sprockets
|
|
50
53
|
#
|
51
54
|
# Returns Object value.
|
52
55
|
def set(key, value)
|
53
|
-
@
|
54
|
-
|
55
|
-
|
56
|
+
@mutex.synchronize do
|
57
|
+
@cache.delete(key)
|
58
|
+
@cache[key] = value
|
59
|
+
@cache.shift if @cache.size > @max_size
|
60
|
+
end
|
56
61
|
value
|
57
62
|
end
|
58
63
|
|
@@ -60,14 +65,18 @@ module Sprockets
|
|
60
65
|
#
|
61
66
|
# Returns String.
|
62
67
|
def inspect
|
63
|
-
|
68
|
+
@mutex.synchronize do
|
69
|
+
"#<#{self.class} size=#{@cache.size}/#{@max_size}>"
|
70
|
+
end
|
64
71
|
end
|
65
72
|
|
66
73
|
# Public: Clear the cache
|
67
74
|
#
|
68
75
|
# Returns true
|
69
76
|
def clear(options=nil)
|
70
|
-
@
|
77
|
+
@mutex.synchronize do
|
78
|
+
@cache.clear
|
79
|
+
end
|
71
80
|
true
|
72
81
|
end
|
73
82
|
end
|
@@ -16,11 +16,11 @@ module Sprockets
|
|
16
16
|
initialize_configuration(environment)
|
17
17
|
|
18
18
|
@cache = environment.cache
|
19
|
-
@stats =
|
20
|
-
@entries =
|
21
|
-
@uris =
|
22
|
-
@processor_cache_keys =
|
23
|
-
@resolved_dependencies =
|
19
|
+
@stats = Concurrent::Map.new
|
20
|
+
@entries = Concurrent::Map.new
|
21
|
+
@uris = Concurrent::Map.new
|
22
|
+
@processor_cache_keys = Concurrent::Map.new
|
23
|
+
@resolved_dependencies = Concurrent::Map.new
|
24
24
|
end
|
25
25
|
|
26
26
|
# No-op return self as cached environment.
|
@@ -31,27 +31,27 @@ module Sprockets
|
|
31
31
|
|
32
32
|
# Internal: Cache Environment#entries
|
33
33
|
def entries(path)
|
34
|
-
@entries.
|
34
|
+
@entries.fetch_or_store(path) { super(path) }
|
35
35
|
end
|
36
36
|
|
37
37
|
# Internal: Cache Environment#stat
|
38
38
|
def stat(path)
|
39
|
-
@stats.
|
39
|
+
@stats.fetch_or_store(path) { super(path) }
|
40
40
|
end
|
41
41
|
|
42
42
|
# Internal: Cache Environment#load
|
43
43
|
def load(uri)
|
44
|
-
@uris.
|
44
|
+
@uris.fetch_or_store(uri) { super(uri) }
|
45
45
|
end
|
46
46
|
|
47
47
|
# Internal: Cache Environment#processor_cache_key
|
48
48
|
def processor_cache_key(str)
|
49
|
-
@processor_cache_keys.
|
49
|
+
@processor_cache_keys.fetch_or_store(str) { super(str) }
|
50
50
|
end
|
51
51
|
|
52
52
|
# Internal: Cache Environment#resolve_dependency
|
53
53
|
def resolve_dependency(str)
|
54
|
-
@resolved_dependencies.
|
54
|
+
@resolved_dependencies.fetch_or_store(str) { super(str) }
|
55
55
|
end
|
56
56
|
|
57
57
|
private
|
data/lib/sprockets/exporting.rb
CHANGED
@@ -28,11 +28,11 @@ module Sprockets
|
|
28
28
|
|
29
29
|
# Public: Remove Exporting processor `klass` for `mime_type`.
|
30
30
|
#
|
31
|
-
# environment.unregister_exporter '*/*', Sprockets::Exporters::
|
31
|
+
# environment.unregister_exporter '*/*', Sprockets::Exporters::ZlibExporter
|
32
32
|
#
|
33
33
|
# Can be called without a mime type
|
34
34
|
#
|
35
|
-
# environment.unregister_exporter Sprockets::Exporters::
|
35
|
+
# environment.unregister_exporter Sprockets::Exporters::ZlibExporter
|
36
36
|
#
|
37
37
|
# Does not remove any exporters that depend on `klass`.
|
38
38
|
def unregister_exporter(mime_types, exporter = nil)
|
data/lib/sprockets/uri_utils.rb
CHANGED
data/lib/sprockets/utils.rb
CHANGED
@@ -118,33 +118,38 @@ module Sprockets
|
|
118
118
|
buf
|
119
119
|
end
|
120
120
|
|
121
|
+
MODULE_INCLUDE_MUTEX = Mutex.new
|
122
|
+
private_constant :MODULE_INCLUDE_MUTEX
|
123
|
+
|
121
124
|
# Internal: Inject into target module for the duration of the block.
|
122
125
|
#
|
123
126
|
# mod - Module
|
124
127
|
#
|
125
128
|
# Returns result of block.
|
126
129
|
def module_include(base, mod)
|
127
|
-
|
130
|
+
MODULE_INCLUDE_MUTEX.synchronize do
|
131
|
+
old_methods = {}
|
128
132
|
|
129
|
-
|
130
|
-
|
131
|
-
|
133
|
+
mod.instance_methods.each do |sym|
|
134
|
+
old_methods[sym] = base.instance_method(sym) if base.method_defined?(sym)
|
135
|
+
end
|
132
136
|
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
+
mod.instance_methods.each do |sym|
|
138
|
+
method = mod.instance_method(sym)
|
139
|
+
if base.method_defined?(sym)
|
140
|
+
base.send(:alias_method, sym, sym)
|
141
|
+
end
|
142
|
+
base.send(:define_method, sym, method)
|
137
143
|
end
|
138
|
-
base.send(:define_method, sym, method)
|
139
|
-
end
|
140
144
|
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
145
|
+
yield
|
146
|
+
ensure
|
147
|
+
mod.instance_methods.each do |sym|
|
148
|
+
base.send(:undef_method, sym) if base.method_defined?(sym)
|
149
|
+
end
|
150
|
+
old_methods.each do |sym, method|
|
151
|
+
base.send(:define_method, sym, method)
|
152
|
+
end
|
148
153
|
end
|
149
154
|
end
|
150
155
|
|
data/lib/sprockets/version.rb
CHANGED
metadata
CHANGED
@@ -1,36 +1,36 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sprockets
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Stephenson
|
8
8
|
- Joshua Peek
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2022-
|
12
|
+
date: 2022-12-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rack
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - "
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version:
|
20
|
+
version: 2.2.4
|
21
21
|
- - "<"
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: '
|
23
|
+
version: '4'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
26
|
version_requirements: !ruby/object:Gem::Requirement
|
27
27
|
requirements:
|
28
|
-
- - "
|
28
|
+
- - ">="
|
29
29
|
- !ruby/object:Gem::Version
|
30
|
-
version:
|
30
|
+
version: 2.2.4
|
31
31
|
- - "<"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '4'
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: concurrent-ruby
|
36
36
|
requirement: !ruby/object:Gem::Requirement
|
@@ -219,14 +219,14 @@ dependencies:
|
|
219
219
|
requirements:
|
220
220
|
- - "~>"
|
221
221
|
- !ruby/object:Gem::Version
|
222
|
-
version:
|
222
|
+
version: 2.0.0
|
223
223
|
type: :development
|
224
224
|
prerelease: false
|
225
225
|
version_requirements: !ruby/object:Gem::Requirement
|
226
226
|
requirements:
|
227
227
|
- - "~>"
|
228
228
|
- !ruby/object:Gem::Version
|
229
|
-
version:
|
229
|
+
version: 2.0.0
|
230
230
|
- !ruby/object:Gem::Dependency
|
231
231
|
name: rake
|
232
232
|
requirement: !ruby/object:Gem::Requirement
|
@@ -423,7 +423,7 @@ homepage: https://github.com/rails/sprockets
|
|
423
423
|
licenses:
|
424
424
|
- MIT
|
425
425
|
metadata: {}
|
426
|
-
post_install_message:
|
426
|
+
post_install_message:
|
427
427
|
rdoc_options: []
|
428
428
|
require_paths:
|
429
429
|
- lib
|
@@ -439,7 +439,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
439
439
|
version: '0'
|
440
440
|
requirements: []
|
441
441
|
rubygems_version: 3.3.7
|
442
|
-
signing_key:
|
442
|
+
signing_key:
|
443
443
|
specification_version: 4
|
444
444
|
summary: Rack-based asset packaging system
|
445
445
|
test_files: []
|