sprockets 3.7.2 → 3.7.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 46e0f0a150aa8333d2a1d2663167b6f20c1e77db067cea7b545f75927f770807
4
- data.tar.gz: 5acd5cb5c64e240dd8180e91f34620195fa1433e625ee48a132fdae58be71ba5
3
+ metadata.gz: 8824196f3f212af5ad78b5109661583431f1c7e2c8616061992ad10b1f4ffbf7
4
+ data.tar.gz: 29db43e310d5fb10852c1ab7e2d3408e04f6a829edc82da388ac8618af4789f8
5
5
  SHA512:
6
- metadata.gz: 97a06eb2e0767903da7bcda387211d881f3b98d57269a8abed5045e277db5f133f381c4f8fd23fcccf45a4032c85309841abba13b9218a52b21121a5a9bfc02a
7
- data.tar.gz: 1d9c8d75bab64c366473226cc61806cd64c1951a67d90cc1220c1474e6a02cc5003b2dffb1b6324abefb7e7c8b292145635ac0bed6ae947a35393d67acd3c40e
6
+ metadata.gz: 41b8112ac0d3d420e98b85749326089157c3090f93dcadd411d6304b035f5004fa622ef66ea222b40bbd3cde2400410b60efbd259fa70b2f90f23ee9062c4841
7
+ data.tar.gz: 267728252c1d71c2b8f513950a52d793eea54c93636cae0e6de2007e7fd25d5552a70fe5650ade766bad72d141f2b283c2d544afdd986fe61dcd274d61054102
data/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ **3.7.5** (Spet 19, 2024)
2
+
3
+ * Fix `Sprockets::Base#unescape` #808.
4
+
5
+ **3.7.4** (March 28, 2024)
6
+
7
+ * Fix deprecated calls to the `uri` gem.
8
+
9
+ **3.7.3** (March 28, 2024)
10
+
11
+ * Various compatibility fixes for newer Ruby versions.
12
+
1
13
  **3.7.2** (June 19, 2018)
2
14
 
3
15
  * Security release for [CVE-2018-3760](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-3760).
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: false
2
+
1
3
  require 'set'
2
4
  require 'shellwords'
3
5
 
@@ -18,7 +18,12 @@ module Sprockets
18
18
  end
19
19
 
20
20
  def call(input)
21
- engine = ::ERB.new(input[:data], nil, '<>')
21
+ if keyword_constructor? # Ruby 2.6+
22
+ engine = ::ERB.new(input[:data], trim_mode: '<>')
23
+ else
24
+ engine = ::ERB.new(input[:data], nil, '<>')
25
+ end
26
+
22
27
  context = input[:environment].context_class.new(input)
23
28
  klass = (class << context; self; end)
24
29
  klass.class_eval(&@block) if @block
@@ -26,5 +31,12 @@ module Sprockets
26
31
  data = context._evaluate_template
27
32
  context.metadata.merge(data: data)
28
33
  end
34
+
35
+ private
36
+
37
+ def keyword_constructor?
38
+ return @keyword_constructor if defined? @keyword_constructor
39
+ @keyword_constructor = ::ERB.instance_method(:initialize).parameters.include?([:key, :trim_mode])
40
+ end
29
41
  end
30
42
  end
@@ -154,18 +154,10 @@ module Sprockets
154
154
  end
155
155
  end
156
156
 
157
- # URI.unescape is deprecated on 1.9. We need to use URI::Parser
158
- # if its available.
159
- if defined? URI::DEFAULT_PARSER
160
- def unescape(str)
161
- str = URI::DEFAULT_PARSER.unescape(str)
162
- str.force_encoding(Encoding.default_internal) if Encoding.default_internal
163
- str
164
- end
165
- else
166
- def unescape(str)
167
- URI.unescape(str)
168
- end
157
+ def unescape(str)
158
+ str = URIUtils::URI_PARSER.unescape(str)
159
+ str.force_encoding(Encoding.default_internal) if Encoding.default_internal
160
+ str
169
161
  end
170
162
  end
171
163
 
@@ -111,17 +111,37 @@ module Sprockets
111
111
  def compute_extname_map
112
112
  graph = {}
113
113
 
114
+ engine_extname_permutation = []
115
+
116
+ 4.times do |n|
117
+ config[:engines].keys.permutation(n).each do |engine_extnames|
118
+ engine_extname_permutation << engine_extnames
119
+ end
120
+ end
121
+
122
+ mime_exts_grouped_by_mime_type = {}
123
+ config[:mime_exts].each do |format_extname,format_type|
124
+ mime_exts_grouped_by_mime_type[format_type] ||= []
125
+ mime_exts_grouped_by_mime_type[format_type] << format_extname
126
+ end
127
+
114
128
  ([nil] + pipelines.keys.map(&:to_s)).each do |pipeline|
115
- pipeline_extname = ".#{pipeline}" if pipeline
116
- ([[nil, nil]] + config[:mime_exts].to_a).each do |format_extname, format_type|
117
- 4.times do |n|
118
- config[:engines].keys.permutation(n).each do |engine_extnames|
129
+ pipeline_extname = pipeline ? ".#{pipeline}" : ''.freeze
130
+ engine_extname_permutation.each do |engine_extnames|
131
+ mime_exts_grouped_by_mime_type.each do |format_type, format_extnames|
132
+ type = format_type
133
+ value = [type, engine_extnames, pipeline]
134
+ format_extnames.each do |format_extname|
119
135
  key = "#{pipeline_extname}#{format_extname}#{engine_extnames.join}"
120
- type = format_type || config[:engine_mime_types][engine_extnames.first]
121
- graph[key] = {type: type, engines: engine_extnames, pipeline: pipeline}
136
+ graph[key] = value
137
+ end
138
+ if format_type == config[:engine_mime_types][engine_extnames.first]
139
+ key = "#{pipeline_extname}#{engine_extnames.join}"
140
+ graph[key] = value
122
141
  end
123
142
  end
124
143
  end
144
+ graph[pipeline_extname] = [nil, [], pipeline]
125
145
  end
126
146
 
127
147
  graph
@@ -202,7 +202,7 @@ module Sprockets
202
202
 
203
203
  if extname
204
204
  path = path.chomp(extname)
205
- type, engines, pipeline = value.values_at(:type, :engines, :pipeline)
205
+ type, engines, pipeline = value
206
206
  end
207
207
 
208
208
  return path, type, engines, pipeline
@@ -251,11 +251,11 @@ module Sprockets
251
251
  # If the request url contains a fingerprint, set a long
252
252
  # expires on the response
253
253
  if path_fingerprint(env["PATH_INFO"])
254
- headers["Cache-Control"] << ", max-age=31536000"
254
+ headers["Cache-Control"] += ", max-age=31536000"
255
255
 
256
256
  # Otherwise set `must-revalidate` since the asset could be modified.
257
257
  else
258
- headers["Cache-Control"] << ", must-revalidate"
258
+ headers["Cache-Control"] += ", must-revalidate"
259
259
  headers["Vary"] = "Accept-Encoding"
260
260
  end
261
261
 
@@ -20,6 +20,8 @@ module Sprockets
20
20
  module URIUtils
21
21
  extend self
22
22
 
23
+ URI_PARSER = defined?(URI::RFC2396_PARSER) ? URI::RFC2396_PARSER : URI::RFC2396_Parser.new
24
+
23
25
  # Internal: Parse URI into component parts.
24
26
  #
25
27
  # uri - String uri
@@ -44,12 +46,15 @@ module Sprockets
44
46
  def split_file_uri(uri)
45
47
  scheme, _, host, _, _, path, _, query, _ = URI.split(uri)
46
48
 
47
- path = URI::Generic::DEFAULT_PARSER.unescape(path)
49
+ path = URI_PARSER.unescape(path)
48
50
  path.force_encoding(Encoding::UTF_8)
49
51
 
50
52
  # Hack for parsing Windows "file:///C:/Users/IEUser" paths
51
53
  path.gsub!(/^\/([a-zA-Z]:)/, '\1'.freeze)
52
54
 
55
+ host = nil if host && host.empty?
56
+ query = nil if query && query.empty?
57
+
53
58
  [scheme, host, path, query]
54
59
  end
55
60
 
@@ -60,7 +65,7 @@ module Sprockets
60
65
  str = "#{scheme}://"
61
66
  str << host if host
62
67
  path = "/#{path}" unless path.start_with?("/")
63
- str << URI::Generic::DEFAULT_PARSER.escape(path)
68
+ str << URI_PARSER.escape(path)
64
69
  str << "?#{query}" if query
65
70
  str
66
71
  end
@@ -159,7 +164,7 @@ module Sprockets
159
164
  when Integer
160
165
  query << "#{key}=#{value}"
161
166
  when String, Symbol
162
- query << "#{key}=#{URI::Generic::DEFAULT_PARSER.escape(value.to_s)}"
167
+ query << "#{key}=#{URI_PARSER.escape(value.to_s)}"
163
168
  when TrueClass
164
169
  query << "#{key}"
165
170
  when FalseClass, NilClass
@@ -179,7 +184,7 @@ module Sprockets
179
184
  def parse_uri_query_params(query)
180
185
  query.to_s.split('&').reduce({}) do |h, p|
181
186
  k, v = p.split('=', 2)
182
- v = URI::Generic::DEFAULT_PARSER.unescape(v) if v
187
+ v = URI_PARSER.unescape(v) if v
183
188
  h[k.to_sym] = v || true
184
189
  h
185
190
  end
@@ -102,6 +102,7 @@ module Sprockets
102
102
  #
103
103
  # Returns buf String.
104
104
  def concat_javascript_sources(buf, source)
105
+ buf = +buf
105
106
  if source.bytesize > 0
106
107
  buf << source
107
108
 
@@ -1,3 +1,3 @@
1
1
  module Sprockets
2
- VERSION = "3.7.2"
2
+ VERSION = "3.7.5"
3
3
  end
data/lib/sprockets.rb CHANGED
@@ -105,7 +105,7 @@ module Sprockets
105
105
  register_bundle_processor 'application/javascript', Bundle
106
106
  register_bundle_processor 'text/css', Bundle
107
107
 
108
- register_bundle_metadata_reducer '*/*', :data, proc { "" }, :concat
108
+ register_bundle_metadata_reducer '*/*', :data, proc { "" }, :+
109
109
  register_bundle_metadata_reducer 'application/javascript', :data, proc { "" }, Utils.method(:concat_javascript_sources)
110
110
  register_bundle_metadata_reducer '*/*', :links, :+
111
111
 
metadata CHANGED
@@ -1,16 +1,30 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sprockets
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.7.2
4
+ version: 3.7.5
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: 2018-06-19 00:00:00.000000000 Z
12
+ date: 2024-09-19 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: base64
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
14
28
  - !ruby/object:Gem::Dependency
15
29
  name: rack
16
30
  requirement: !ruby/object:Gem::Requirement
@@ -175,16 +189,16 @@ dependencies:
175
189
  name: rake
176
190
  requirement: !ruby/object:Gem::Requirement
177
191
  requirements:
178
- - - "~>"
192
+ - - ">="
179
193
  - !ruby/object:Gem::Version
180
- version: '10.0'
194
+ version: '0'
181
195
  type: :development
182
196
  prerelease: false
183
197
  version_requirements: !ruby/object:Gem::Requirement
184
198
  requirements:
185
- - - "~>"
199
+ - - ">="
186
200
  - !ruby/object:Gem::Version
187
- version: '10.0'
201
+ version: '0'
188
202
  - !ruby/object:Gem::Dependency
189
203
  name: sass
190
204
  requirement: !ruby/object:Gem::Requirement
@@ -317,7 +331,7 @@ homepage: https://github.com/rails/sprockets
317
331
  licenses:
318
332
  - MIT
319
333
  metadata: {}
320
- post_install_message:
334
+ post_install_message:
321
335
  rdoc_options: []
322
336
  require_paths:
323
337
  - lib
@@ -332,9 +346,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
332
346
  - !ruby/object:Gem::Version
333
347
  version: '0'
334
348
  requirements: []
335
- rubyforge_project: sprockets
336
- rubygems_version: 2.7.6
337
- signing_key:
349
+ rubygems_version: 3.5.11
350
+ signing_key:
338
351
  specification_version: 4
339
352
  summary: Rack-based asset packaging system
340
353
  test_files: []