actionview 6.1.6.1 → 7.0.0.alpha1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of actionview might be problematic. Click here for more details.

Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +89 -347
  3. data/MIT-LICENSE +2 -1
  4. data/lib/action_view/base.rb +3 -3
  5. data/lib/action_view/buffers.rb +2 -2
  6. data/lib/action_view/cache_expiry.rb +46 -32
  7. data/lib/action_view/dependency_tracker/erb_tracker.rb +154 -0
  8. data/lib/action_view/dependency_tracker/ripper_tracker.rb +59 -0
  9. data/lib/action_view/dependency_tracker.rb +6 -147
  10. data/lib/action_view/digestor.rb +7 -4
  11. data/lib/action_view/flows.rb +4 -4
  12. data/lib/action_view/gem_version.rb +4 -4
  13. data/lib/action_view/helpers/active_model_helper.rb +1 -1
  14. data/lib/action_view/helpers/asset_tag_helper.rb +84 -29
  15. data/lib/action_view/helpers/asset_url_helper.rb +7 -7
  16. data/lib/action_view/helpers/atom_feed_helper.rb +3 -4
  17. data/lib/action_view/helpers/cache_helper.rb +51 -3
  18. data/lib/action_view/helpers/capture_helper.rb +2 -2
  19. data/lib/action_view/helpers/controller_helper.rb +2 -2
  20. data/lib/action_view/helpers/csp_helper.rb +1 -1
  21. data/lib/action_view/helpers/csrf_helper.rb +1 -1
  22. data/lib/action_view/helpers/date_helper.rb +6 -7
  23. data/lib/action_view/helpers/debug_helper.rb +3 -1
  24. data/lib/action_view/helpers/form_helper.rb +72 -12
  25. data/lib/action_view/helpers/form_options_helper.rb +65 -33
  26. data/lib/action_view/helpers/form_tag_helper.rb +75 -32
  27. data/lib/action_view/helpers/javascript_helper.rb +3 -5
  28. data/lib/action_view/helpers/number_helper.rb +3 -4
  29. data/lib/action_view/helpers/output_safety_helper.rb +2 -2
  30. data/lib/action_view/helpers/rendering_helper.rb +1 -1
  31. data/lib/action_view/helpers/sanitize_helper.rb +2 -2
  32. data/lib/action_view/helpers/tag_helper.rb +25 -44
  33. data/lib/action_view/helpers/tags/base.rb +3 -15
  34. data/lib/action_view/helpers/tags/check_box.rb +2 -2
  35. data/lib/action_view/helpers/tags/collection_select.rb +1 -1
  36. data/lib/action_view/helpers/tags/hidden_field.rb +0 -4
  37. data/lib/action_view/helpers/tags/time_field.rb +10 -1
  38. data/lib/action_view/helpers/tags/weekday_select.rb +27 -0
  39. data/lib/action_view/helpers/tags.rb +3 -2
  40. data/lib/action_view/helpers/text_helper.rb +24 -13
  41. data/lib/action_view/helpers/translation_helper.rb +1 -2
  42. data/lib/action_view/helpers/url_helper.rb +102 -77
  43. data/lib/action_view/helpers.rb +25 -25
  44. data/lib/action_view/lookup_context.rb +33 -52
  45. data/lib/action_view/model_naming.rb +1 -1
  46. data/lib/action_view/path_set.rb +16 -22
  47. data/lib/action_view/railtie.rb +14 -1
  48. data/lib/action_view/render_parser.rb +188 -0
  49. data/lib/action_view/renderer/abstract_renderer.rb +2 -2
  50. data/lib/action_view/renderer/partial_renderer.rb +0 -34
  51. data/lib/action_view/renderer/renderer.rb +4 -4
  52. data/lib/action_view/renderer/streaming_template_renderer.rb +3 -3
  53. data/lib/action_view/renderer/template_renderer.rb +6 -2
  54. data/lib/action_view/rendering.rb +2 -2
  55. data/lib/action_view/ripper_ast_parser.rb +198 -0
  56. data/lib/action_view/routing_url_for.rb +1 -1
  57. data/lib/action_view/template/error.rb +108 -13
  58. data/lib/action_view/template/handlers/erb.rb +6 -0
  59. data/lib/action_view/template/handlers.rb +3 -3
  60. data/lib/action_view/template/html.rb +3 -3
  61. data/lib/action_view/template/inline.rb +3 -3
  62. data/lib/action_view/template/raw_file.rb +3 -3
  63. data/lib/action_view/template/resolver.rb +84 -311
  64. data/lib/action_view/template/text.rb +3 -3
  65. data/lib/action_view/template/types.rb +14 -12
  66. data/lib/action_view/template.rb +10 -1
  67. data/lib/action_view/template_details.rb +66 -0
  68. data/lib/action_view/template_path.rb +64 -0
  69. data/lib/action_view/test_case.rb +6 -2
  70. data/lib/action_view/testing/resolvers.rb +11 -12
  71. data/lib/action_view/unbound_template.rb +33 -7
  72. data/lib/action_view.rb +3 -4
  73. metadata +25 -19
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 73ad472357d09152ca691368bebd4d9879dde000ca496201bc2d2f4781c20787
4
- data.tar.gz: 51229bf951522f16967e4bce38848c20009713b22d753a53af7c1e61bd9e3396
3
+ metadata.gz: 488edff5bf41873248138efbc0c8ee4ecd1809793a99ebe520870d35e2a6e459
4
+ data.tar.gz: 429fd7c60ef3fb02df47871d05a7289cfda25e21586928dc1accebaa45678a7d
5
5
  SHA512:
6
- metadata.gz: 3baeab0382dc8aee9f262b63b5bdb05753201f9677822c77d4282ebe8d04f42696fe697d0194b3754230c6340694cbb98d4c1f81647b7c715d3a15ffc336c682
7
- data.tar.gz: 79a528161f47a066ca70cd9284e81cdf2a7a441623a0774d78ef1c182e40cd15b9b44c21c630a3df4bb7bf17538fc7ac055e6bb06bebf32d08bc904fe543045d
6
+ metadata.gz: 3db204604fb84ce3ab96976aad76fffb4938a2ec6ad7f965b2dc59a785622888867f92df3282ae560d6fb594fecc215a1c18340329ea912bed58c74d457e6824
7
+ data.tar.gz: 7eb29f984ea723f25728f8ae0c06127b7728501e18e690b0b73972d34a3bd467783760c293d50bc474f1fba9ddc824c02678af7653edcab8a5703766a572b96f
data/CHANGELOG.md CHANGED
@@ -1,131 +1,109 @@
1
- ## Rails 6.1.6.1 (July 12, 2022) ##
1
+ ## Rails 7.0.0.alpha1 (September 15, 2021) ##
2
2
 
3
- * No changes.
3
+ * Improves the performance of ActionView::Helpers::NumberHelper formatters by avoiding the use of
4
+ exceptions as flow control.
4
5
 
6
+ *Mike Dalessio*
5
7
 
6
- ## Rails 6.1.5.1 (April 26, 2022) ##
7
-
8
- * Fix and add protections for XSS in `ActionView::Helpers` and `ERB::Util`.
9
-
10
- Escape dangerous characters in names of tags and names of attributes in the
11
- tag helpers, following the XML specification. Rename the option
12
- `:escape_attributes` to `:escape`, to simplify by applying the option to the
13
- whole tag.
14
-
15
- *Álvaro Martín Fraguas*
16
-
17
- ## Rails 6.1.5 (March 09, 2022) ##
18
-
19
- * `preload_link_tag` properly inserts `as` attributes for files with `image` MIME
20
- types, such as JPG or SVG.
8
+ * `preload_link_tag` properly inserts `as` attributes for files with `image` MIME types, such as JPG or SVG.
21
9
 
22
10
  *Nate Berkopec*
23
11
 
24
- * Add `autocomplete="off"` to all generated hidden fields.
25
-
26
- Fixes #42610.
27
-
28
- *Ryan Baumann*
29
-
30
- * Fix `current_page?` when URL has trailing slash.
31
-
32
- This fixes the `current_page?` helper when the given URL has a trailing slash,
33
- and is an absolute URL or also has query params.
34
-
35
- Fixes #33956.
36
-
37
- *Jonathan Hefner*
38
-
39
-
40
- ## Rails 6.1.4.7 (March 08, 2022) ##
41
-
42
- * No changes.
43
-
44
-
45
- ## Rails 6.1.4.6 (February 11, 2022) ##
46
-
47
- * No changes.
48
-
12
+ * Add `weekday_options_for_select` and `weekday_select` helper methods. Also adds `weekday_select` to `FormBuilder`.
49
13
 
50
- ## Rails 6.1.4.5 (February 11, 2022) ##
14
+ *Drew Bragg*, *Dana Kashubeck*, *Kasper Timm Hansen*
51
15
 
52
- * No changes.
16
+ * Add `caching?` helper that returns whether the current code path is being cached and `uncacheable!` to denote helper methods that can't participate in fragment caching.
53
17
 
18
+ *Ben Toews*, *John Hawthorn*, *Kasper Timm Hansen*, *Joel Hawksley*
54
19
 
55
- ## Rails 6.1.4.4 (December 15, 2021) ##
20
+ * Add `include_seconds` option for `time_field`.
56
21
 
57
- * No changes.
22
+ <%= form.time_field :foo, include_seconds: false %>
23
+ # => <input value="16:22" type="time" />
58
24
 
25
+ Default includes seconds:
59
26
 
60
- ## Rails 6.1.4.3 (December 14, 2021) ##
27
+ <%= form.time_field :foo %>
28
+ # => <input value="16:22:01.440" type="time" />
61
29
 
62
- * No changes.
30
+ This allows you to take advantage of [different rendering options](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/time#time_value_format) in some browsers.
63
31
 
32
+ *Alex Ghiculescu*
64
33
 
65
- ## Rails 6.1.4.2 (December 14, 2021) ##
34
+ * Improve error messages when template file does not exist at absolute filepath.
66
35
 
67
- * No changes.
36
+ *Ted Whang*
68
37
 
38
+ * Add `:country_code` option to `sms_to` for consistency with `phone_to`.
69
39
 
70
- ## Rails 6.1.4.1 (August 19, 2021) ##
71
-
72
- * No changes.
40
+ *Jonathan Hefner*
73
41
 
42
+ * OpenSSL constants are now used for Digest computations.
74
43
 
75
- ## Rails 6.1.4 (June 24, 2021) ##
44
+ *Dirkjan Bussink*
76
45
 
77
46
  * The `translate` helper now passes `default` values that aren't
78
47
  translation keys through `I18n.translate` for interpolation.
79
48
 
80
49
  *Jonathan Hefner*
81
50
 
82
- * Don't attach UJS form submission handlers to Turbo forms.
83
-
84
- *David Heinemeier Hansson*
85
-
86
- * Allow both `current_page?(url_hash)` and `current_page?(**url_hash)` on Ruby 2.7.
87
-
88
- *Ryuta Kamizono*
89
-
90
-
91
- ## Rails 6.1.3.2 (May 05, 2021) ##
92
-
93
- * No changes.
94
-
51
+ * Adds option `extname` to `stylesheet_link_tag` to skip default
52
+ `.css` extension appended to the stylesheet path.
95
53
 
96
- ## Rails 6.1.3.1 (March 26, 2021) ##
54
+ Before:
97
55
 
98
- * No changes.
99
-
100
-
101
- ## Rails 6.1.3 (February 17, 2021) ##
102
-
103
- * No changes.
56
+ ```ruby
57
+ stylesheet_link_tag "style.less"
58
+ # <link href="/stylesheets/style.less.scss" rel="stylesheet">
59
+ ```
104
60
 
61
+ After:
105
62
 
106
- ## Rails 6.1.2.1 (February 10, 2021) ##
63
+ ```ruby
64
+ stylesheet_link_tag "style.less", extname: false, skip_pipeline: true, rel: "stylesheet/less"
65
+ # <link href="/stylesheets/style.less" rel="stylesheet/less">
66
+ ```
107
67
 
108
- * No changes.
68
+ *Abhay Nikam*
109
69
 
70
+ * Deprecate `render` locals to be assigned to instance variables.
110
71
 
111
- ## Rails 6.1.2 (February 09, 2021) ##
72
+ *Petrik de Heus*
112
73
 
113
- * No changes.
74
+ * Remove legacy default `media=screen` from `stylesheet_link_tag`.
114
75
 
76
+ *André Luis Leal Cardoso Junior*
115
77
 
116
- ## Rails 6.1.1 (January 07, 2021) ##
78
+ * Change `ActionView::Helpers::FormBuilder#button` to transform `formmethod`
79
+ attributes into `_method="$VERB"` Form Data to enable varied same-form actions:
117
80
 
118
- * Fix lazy translation in partial with block.
81
+ <%= form_with model: post, method: :put do %>
82
+ <%= form.button "Update" %>
83
+ <%= form.button "Delete", formmethod: :delete %>
84
+ <% end %>
85
+ <%# => <form action="posts/1">
86
+ => <input type="hidden" name="_method" value="put">
87
+ => <button type="submit">Update</button>
88
+ => <button type="submit" formmethod="post" name="_method" value="delete">Delete</button>
89
+ => </form>
90
+ %>
119
91
 
120
- *Marek Kasztelnik*
92
+ *Sean Doyle*
121
93
 
122
- * Avoid extra `SELECT COUNT` queries when rendering Active Record collections.
94
+ * Change `ActionView::Helpers::UrlHelper#button_to` to *always* render a
95
+ `<button>` element, regardless of whether or not the content is passed as
96
+ the first argument or as a block.
123
97
 
124
- *aar0nr*
98
+ <%= button_to "Delete", post_path(@post), method: :delete %>
99
+ # => <form action="/posts/1"><input type="hidden" name="_method" value="delete"><button type="submit">Delete</button></form>
125
100
 
126
- * Link preloading keep integrity hashes in the header.
101
+ <%= button_to post_path(@post), method: :delete do %>
102
+ Delete
103
+ <% end %>
104
+ # => <form action="/posts/1"><input type="hidden" name="_method" value="delete"><button type="submit">Delete</button></form>
127
105
 
128
- *Étienne Barrié*
106
+ *Sean Doyle*, *Dusan Orlovic*
129
107
 
130
108
  * Add `config.action_view.preload_links_header` to allow disabling of
131
109
  the `Link` header being added by default when using `stylesheet_link_tag`
@@ -138,282 +116,46 @@
138
116
 
139
117
  *Jonathan Hefner*
140
118
 
119
+ * Add `config.action_view.image_loading` to configure the default value of
120
+ the `image_tag` `:loading` option.
141
121
 
142
- ## Rails 6.1.0 (December 09, 2020) ##
143
-
144
- * SanitizeHelper.sanitized_allowed_attributes and SanitizeHelper.sanitized_allowed_tags
145
- call safe_list_sanitizer's class method
146
-
147
- Fixes #39586
148
-
149
- *Taufiq Muhammadi*
150
-
151
- * Change form_with to generate non-remote forms by default.
152
-
153
- `form_with` would generate a remote form by default. This would confuse
154
- users because they were forced to handle remote requests.
155
-
156
- All new 6.1 applications will generate non-remote forms by default.
157
- When upgrading a 6.0 application you can enable remote forms by default by
158
- setting `config.action_view.form_with_generates_remote_forms` to `true`.
159
-
160
- *Petrik de Heus*
161
-
162
- * Yield translated strings to calls of `ActionView::FormBuilder#button`
163
- when a block is given.
164
-
165
- *Sean Doyle*
166
-
167
- * Alias `ActionView::Helpers::Tags::Label::LabelBuilder#translation` to
168
- `#to_s` so that `form.label` calls can yield that value to their blocks.
122
+ By setting `config.action_view.image_loading = "lazy"`, an application can opt in to
123
+ lazy loading images sitewide, without changing view code.
169
124
 
170
- *Sean Doyle*
171
-
172
- * Rename the new `TagHelper#class_names` method to `TagHelper#token_list`,
173
- and make the original available as an alias.
125
+ *Jonathan Hefner*
174
126
 
175
- token_list("foo", "foo bar")
176
- # => "foo bar"
127
+ * `ActionView::Helpers::FormBuilder#id` returns the value
128
+ of the `<form>` element's `id` attribute. With a `method` argument, returns
129
+ the `id` attribute for a form field with that name.
177
130
 
178
- *Sean Doyle*
131
+ <%= form_for @post do |f| %>
132
+ <%# ... %>
179
133
 
180
- * ARIA Array and Hash attributes are treated as space separated `DOMTokenList`
181
- values. This is useful when declaring lists of label text identifiers in
182
- `aria-labelledby` or `aria-describedby`.
183
-
184
- tag.input type: 'checkbox', name: 'published', aria: {
185
- invalid: @post.errors[:published].any?,
186
- labelledby: ['published_context', 'published_label'],
187
- describedby: { published_errors: @post.errors[:published].any? }
188
- }
189
- #=> <input
190
- type="checkbox" name="published" aria-invalid="true"
191
- aria-labelledby="published_context published_label"
192
- aria-describedby="published_errors"
193
- >
134
+ <% content_for :sticky_footer do %>
135
+ <%= form.button(form: f.id) %>
136
+ <% end %>
137
+ <% end %>
194
138
 
195
139
  *Sean Doyle*
196
140
 
197
- * Remove deprecated `escape_whitelist` from `ActionView::Template::Handlers::ERB`.
198
-
199
- *Rafael Mendonça França*
200
-
201
- * Remove deprecated `find_all_anywhere` from `ActionView::Resolver`.
202
-
203
- *Rafael Mendonça França*
204
-
205
- * Remove deprecated `formats` from `ActionView::Template::HTML`.
206
-
207
- *Rafael Mendonça França*
208
-
209
- * Remove deprecated `formats` from `ActionView::Template::RawFile`.
210
-
211
- *Rafael Mendonça França*
212
-
213
- * Remove deprecated `formats` from `ActionView::Template::Text`.
214
-
215
- *Rafael Mendonça França*
216
-
217
- * Remove deprecated `find_file` from `ActionView::PathSet`.
218
-
219
- *Rafael Mendonça França*
220
-
221
- * Remove deprecated `rendered_format` from `ActionView::LookupContext`.
222
-
223
- *Rafael Mendonça França*
224
-
225
- * Remove deprecated `find_file` from `ActionView::ViewPaths`.
226
-
227
- *Rafael Mendonça França*
228
-
229
- * Require that `ActionView::Base` subclasses implement `#compiled_method_container`.
230
-
231
- *Rafael Mendonça França*
141
+ * `ActionView::Helpers::FormBuilder#field_id` returns the value generated by
142
+ the FormBuilder for the given attribute name.
232
143
 
233
- * Remove deprecated support to pass an object that is not a `ActionView::LookupContext` as the first argument
234
- in `ActionView::Base#initialize`.
235
-
236
- *Rafael Mendonça França*
237
-
238
- * Remove deprecated `format` argument `ActionView::Base#initialize`.
239
-
240
- *Rafael Mendonça França*
241
-
242
- * Remove deprecated `ActionView::Template#refresh`.
243
-
244
- *Rafael Mendonça França*
245
-
246
- * Remove deprecated `ActionView::Template#original_encoding`.
247
-
248
- *Rafael Mendonça França*
249
-
250
- * Remove deprecated `ActionView::Template#variants`.
251
-
252
- *Rafael Mendonça França*
253
-
254
- * Remove deprecated `ActionView::Template#formats`.
255
-
256
- *Rafael Mendonça França*
257
-
258
- * Remove deprecated `ActionView::Template#virtual_path=`.
259
-
260
- *Rafael Mendonça França*
261
-
262
- * Remove deprecated `ActionView::Template#updated_at`.
263
-
264
- *Rafael Mendonça França*
265
-
266
- * Remove deprecated `updated_at` argument required on `ActionView::Template#initialize`.
267
-
268
- *Rafael Mendonça França*
269
-
270
- * Make `locals` argument required on `ActionView::Template#initialize`.
271
-
272
- *Rafael Mendonça França*
273
-
274
- * Remove deprecated `ActionView::Template.finalize_compiled_template_methods`.
275
-
276
- *Rafael Mendonça França*
277
-
278
- * Remove deprecated `config.action_view.finalize_compiled_template_methods`
279
-
280
- *Rafael Mendonça França*
281
-
282
- * Remove deprecated support to calling `ActionView::ViewPaths#with_fallback` with a block.
283
-
284
- *Rafael Mendonça França*
285
-
286
- * Remove deprecated support to passing absolute paths to `render template:`.
287
-
288
- *Rafael Mendonça França*
289
-
290
- * Remove deprecated support to passing relative paths to `render file:`.
291
-
292
- *Rafael Mendonça França*
293
-
294
- * Remove support to template handlers that don't accept two arguments.
295
-
296
- *Rafael Mendonça França*
297
-
298
- * Remove deprecated pattern argument in `ActionView::Template::PathResolver`.
299
-
300
- *Rafael Mendonça França*
301
-
302
- * Remove deprecated support to call private methods from object in some view helpers.
303
-
304
- *Rafael Mendonça França*
305
-
306
- * `ActionView::Helpers::TranslationHelper#translate` accepts a block, yielding
307
- the translated text and the fully resolved translation key:
308
-
309
- <%= translate(".relative_key") do |translation, resolved_key| %>
310
- <span title="<%= resolved_key %>"><%= translation %></span>
144
+ <%= form_for @post do |f| %>
145
+ <%= f.label :title %>
146
+ <%= f.text_field :title, aria: { describedby: f.field_id(:title, :error) } %>
147
+ <%= tag.span("is blank", id: f.field_id(:title, :error) %>
311
148
  <% end %>
312
149
 
313
150
  *Sean Doyle*
314
151
 
315
- * Ensure cache fragment digests include all relevant template dependencies when
316
- fragments are contained in a block passed to the render helper. Remove the
317
- virtual_path keyword arguments found in CacheHelper as they no longer possess
318
- any function following 1581cab.
152
+ * Add `tag.attributes` to transform a Hash into HTML Attributes, ready to be
153
+ interpolated into ERB.
319
154
 
320
- Fixes #38984.
155
+ <input <%= tag.attributes(type: :text, aria: { label: "Search" }) %> >
156
+ # => <input type="text" aria-label="Search">
321
157
 
322
- *Aaron Lipman*
323
-
324
- * Deprecate `config.action_view.raise_on_missing_translations` in favor of
325
- `config.i18n.raise_on_missing_translations`.
326
-
327
- New generalized configuration option now determines whether an error should be raised
328
- for missing translations in controllers and views.
329
-
330
- *fatkodima*
331
-
332
- * Instrument layout rendering in `TemplateRenderer#render_with_layout` as `render_layout.action_view`,
333
- and include (when necessary) the layout's virtual path in notification payloads for collection and partial renders.
334
-
335
- *Zach Kemp*
336
-
337
- * `ActionView::Base.annotate_rendered_view_with_filenames` annotates HTML output with template file names.
338
-
339
- *Joel Hawksley*, *Aaron Patterson*
340
-
341
- * `ActionView::Helpers::TranslationHelper#translate` returns nil when
342
- passed `default: nil` without a translation matching `I18n#translate`.
343
-
344
- *Stefan Wrobel*
345
-
346
- * `OptimizedFileSystemResolver` prefers template details in order of locale,
347
- formats, variants, handlers.
348
-
349
- *Iago Pimenta*
350
-
351
- * Added `class_names` helper to create a CSS class value with conditional classes.
352
-
353
- *Joel Hawksley*, *Aaron Patterson*
354
-
355
- * Add support for conditional values to TagBuilder.
356
-
357
- *Joel Hawksley*
358
-
359
- * `ActionView::Helpers::FormOptionsHelper#select` should mark option for `nil` as selected.
360
-
361
- ```ruby
362
- @post = Post.new
363
- @post.category = nil
364
-
365
- # Before
366
- select("post", "category", none: nil, programming: 1, economics: 2)
367
- # =>
368
- # <select name="post[category]" id="post_category">
369
- # <option value="">none</option>
370
- # <option value="1">programming</option>
371
- # <option value="2">economics</option>
372
- # </select>
373
-
374
- # After
375
- select("post", "category", none: nil, programming: 1, economics: 2)
376
- # =>
377
- # <select name="post[category]" id="post_category">
378
- # <option selected="selected" value="">none</option>
379
- # <option value="1">programming</option>
380
- # <option value="2">economics</option>
381
- # </select>
382
- ```
383
-
384
- *bogdanvlviv*
385
-
386
- * Log lines for partial renders and started template renders are now
387
- emitted at the `DEBUG` level instead of `INFO`.
388
-
389
- Completed template renders are still logged at the `INFO` level.
390
-
391
- *DHH*
392
-
393
- * ActionView::Helpers::SanitizeHelper: support rails-html-sanitizer 1.1.0.
394
-
395
- *Juanito Fatas*
396
-
397
- * Added `phone_to` helper method to create a link from mobile numbers.
398
-
399
- *Pietro Moro*
400
-
401
- * annotated_source_code returns an empty array so TemplateErrors without a
402
- template in the backtrace are surfaced properly by DebugExceptions.
403
-
404
- *Guilherme Mansur*, *Kasper Timm Hansen*
405
-
406
- * Add autoload for SyntaxErrorInTemplate so syntax errors are correctly raised by DebugExceptions.
407
-
408
- *Guilherme Mansur*, *Gannon McGibbon*
409
-
410
- * `RenderingHelper` supports rendering objects that `respond_to?` `:render_in`.
411
-
412
- *Joel Hawksley*, *Natasha Umer*, *Aaron Patterson*, *Shawn Allen*, *Emily Plummer*, *Diana Mounter*, *John Hawthorn*, *Nathan Herald*, *Zaid Zawaideh*, *Zach Ahn*
413
-
414
- * Fix `select_tag` so that it doesn't change `options` when `include_blank` is present.
415
-
416
- *Younes SERRAJ*
158
+ *Sean Doyle*
417
159
 
418
160
 
419
- Please check [6-0-stable](https://github.com/rails/rails/blob/6-0-stable/actionview/CHANGELOG.md) for previous changes.
161
+ Please check [6-1-stable](https://github.com/rails/rails/blob/6-1-stable/actionview/CHANGELOG.md) for previous changes.
data/MIT-LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2004-2022 David Heinemeier Hansson
1
+ Copyright (c) 2004-2021 David Heinemeier Hansson
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -18,3 +18,4 @@ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
18
  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
19
  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
20
  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
@@ -9,7 +9,7 @@ require "action_view/context"
9
9
  require "action_view/template"
10
10
  require "action_view/lookup_context"
11
11
 
12
- module ActionView #:nodoc:
12
+ module ActionView # :nodoc:
13
13
  # = Action View Base
14
14
  #
15
15
  # Action View templates can be written in several ways.
@@ -179,7 +179,7 @@ module ActionView #:nodoc:
179
179
  ActionView::Resolver.caching = value
180
180
  end
181
181
 
182
- def xss_safe? #:nodoc:
182
+ def xss_safe? # :nodoc:
183
183
  true
184
184
  end
185
185
 
@@ -227,7 +227,7 @@ module ActionView #:nodoc:
227
227
 
228
228
  # :startdoc:
229
229
 
230
- def initialize(lookup_context, assigns, controller) #:nodoc:
230
+ def initialize(lookup_context, assigns, controller) # :nodoc:
231
231
  @_config = ActiveSupport::InheritableOptions.new
232
232
 
233
233
  @lookup_context = lookup_context
@@ -18,7 +18,7 @@ module ActionView
18
18
  # sbuf << 5
19
19
  # puts sbuf # => "hello\u0005"
20
20
  #
21
- class OutputBuffer < ActiveSupport::SafeBuffer #:nodoc:
21
+ class OutputBuffer < ActiveSupport::SafeBuffer # :nodoc:
22
22
  def initialize(*)
23
23
  super
24
24
  encode!
@@ -38,7 +38,7 @@ module ActionView
38
38
  alias :safe_append= :safe_concat
39
39
  end
40
40
 
41
- class StreamingBuffer #:nodoc:
41
+ class StreamingBuffer # :nodoc:
42
42
  def initialize(block)
43
43
  @block = block
44
44
  end
@@ -4,49 +4,63 @@ module ActionView
4
4
  class CacheExpiry
5
5
  class Executor
6
6
  def initialize(watcher:)
7
- @cache_expiry = CacheExpiry.new(watcher: watcher)
7
+ @execution_lock = Concurrent::ReadWriteLock.new
8
+ @cache_expiry = ViewModificationWatcher.new(watcher: watcher) do
9
+ clear_cache
10
+ end
8
11
  end
9
12
 
10
- def before(target)
11
- @cache_expiry.clear_cache_if_necessary
13
+ def run
14
+ ActiveSupport::Dependencies.interlock.permit_concurrent_loads do
15
+ @cache_expiry.execute_if_updated
16
+ @execution_lock.acquire_read_lock
17
+ end
12
18
  end
13
- end
14
-
15
- def initialize(watcher:)
16
- @watched_dirs = nil
17
- @watcher_class = watcher
18
- @watcher = nil
19
- @mutex = Mutex.new
20
- end
21
19
 
22
- def clear_cache_if_necessary
23
- @mutex.synchronize do
24
- watched_dirs = dirs_to_watch
25
- return if watched_dirs.empty?
20
+ def complete(_)
21
+ @execution_lock.release_read_lock
22
+ end
26
23
 
27
- if watched_dirs != @watched_dirs
28
- @watched_dirs = watched_dirs
29
- @watcher = @watcher_class.new([], watched_dirs) do
30
- clear_cache
24
+ private
25
+ def clear_cache
26
+ @execution_lock.with_write_lock do
27
+ ActionView::LookupContext::DetailsKey.clear
31
28
  end
32
- @watcher.execute
33
- else
34
- @watcher.execute_if_updated
35
29
  end
36
- end
37
- end
38
-
39
- def clear_cache
40
- ActionView::LookupContext::DetailsKey.clear
41
30
  end
42
31
 
43
- private
44
- def dirs_to_watch
45
- all_view_paths.grep(FileSystemResolver).map!(&:path).tap(&:uniq!).sort!
32
+ class ViewModificationWatcher
33
+ def initialize(watcher:, &block)
34
+ @watched_dirs = nil
35
+ @watcher_class = watcher
36
+ @watcher = nil
37
+ @mutex = Mutex.new
38
+ @block = block
46
39
  end
47
40
 
48
- def all_view_paths
49
- ActionView::ViewPaths.all_view_paths.flat_map(&:paths)
41
+ def execute_if_updated
42
+ @mutex.synchronize do
43
+ watched_dirs = dirs_to_watch
44
+ return if watched_dirs.empty?
45
+
46
+ if watched_dirs != @watched_dirs
47
+ @watched_dirs = watched_dirs
48
+ @watcher = @watcher_class.new([], watched_dirs, &@block)
49
+ @watcher.execute
50
+ else
51
+ @watcher.execute_if_updated
52
+ end
53
+ end
50
54
  end
55
+
56
+ private
57
+ def dirs_to_watch
58
+ all_view_paths.grep(FileSystemResolver).map!(&:path).tap(&:uniq!).sort!
59
+ end
60
+
61
+ def all_view_paths
62
+ ActionView::ViewPaths.all_view_paths.flat_map(&:paths)
63
+ end
64
+ end
51
65
  end
52
66
  end