actionview 6.1.5 → 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 +90 -332
  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 +17 -4
  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 +22 -16
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fd064a197a833619a7f7946467645cf6814026fc955611621b69bdf46e84999d
4
- data.tar.gz: decb0c47e2ddab1aabb45bd2a0e4001296c59d680cedc84f153e4340b4872040
3
+ metadata.gz: 488edff5bf41873248138efbc0c8ee4ecd1809793a99ebe520870d35e2a6e459
4
+ data.tar.gz: 429fd7c60ef3fb02df47871d05a7289cfda25e21586928dc1accebaa45678a7d
5
5
  SHA512:
6
- metadata.gz: 4cce01bf7d01ed74cdeed1e68ecfa02c8bb714e6ae2737ff8b413a2d1dfd28d218dc0652561851ad8753214968ce29ecf0b7aadf7f6cd06e301e3ee975e4b454
7
- data.tar.gz: a2103caa32e76b4cdb7f1efb56bf36388374bdaf9acde4874c8578482024a5945329d194d762bdfd6803b53713356284216a9d15795c56ad203ce5ed16410271
6
+ metadata.gz: 3db204604fb84ce3ab96976aad76fffb4938a2ec6ad7f965b2dc59a785622888867f92df3282ae560d6fb594fecc215a1c18340329ea912bed58c74d457e6824
7
+ data.tar.gz: 7eb29f984ea723f25728f8ae0c06127b7728501e18e690b0b73972d34a3bd467783760c293d50bc474f1fba9ddc824c02678af7653edcab8a5703766a572b96f
data/CHANGELOG.md CHANGED
@@ -1,115 +1,109 @@
1
- ## Rails 6.1.5 (March 09, 2022) ##
1
+ ## Rails 7.0.0.alpha1 (September 15, 2021) ##
2
2
 
3
- * `preload_link_tag` properly inserts `as` attributes for files with `image` MIME
4
- types, such as JPG or SVG.
3
+ * Improves the performance of ActionView::Helpers::NumberHelper formatters by avoiding the use of
4
+ exceptions as flow control.
5
5
 
6
- *Nate Berkopec*
7
-
8
- * Add `autocomplete="off"` to all generated hidden fields.
9
-
10
- Fixes #42610.
11
-
12
- *Ryan Baumann*
13
-
14
- * Fix `current_page?` when URL has trailing slash.
15
-
16
- This fixes the `current_page?` helper when the given URL has a trailing slash,
17
- and is an absolute URL or also has query params.
18
-
19
- Fixes #33956.
20
-
21
- *Jonathan Hefner*
6
+ *Mike Dalessio*
22
7
 
8
+ * `preload_link_tag` properly inserts `as` attributes for files with `image` MIME types, such as JPG or SVG.
23
9
 
24
- ## Rails 6.1.4.7 (March 08, 2022) ##
25
-
26
- * No changes.
27
-
28
-
29
- ## Rails 6.1.4.6 (February 11, 2022) ##
30
-
31
- * No changes.
32
-
10
+ *Nate Berkopec*
33
11
 
34
- ## Rails 6.1.4.5 (February 11, 2022) ##
12
+ * Add `weekday_options_for_select` and `weekday_select` helper methods. Also adds `weekday_select` to `FormBuilder`.
35
13
 
36
- * No changes.
14
+ *Drew Bragg*, *Dana Kashubeck*, *Kasper Timm Hansen*
37
15
 
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.
38
17
 
39
- ## Rails 6.1.4.4 (December 15, 2021) ##
18
+ *Ben Toews*, *John Hawthorn*, *Kasper Timm Hansen*, *Joel Hawksley*
40
19
 
41
- * No changes.
20
+ * Add `include_seconds` option for `time_field`.
42
21
 
22
+ <%= form.time_field :foo, include_seconds: false %>
23
+ # => <input value="16:22" type="time" />
43
24
 
44
- ## Rails 6.1.4.3 (December 14, 2021) ##
25
+ Default includes seconds:
45
26
 
46
- * No changes.
27
+ <%= form.time_field :foo %>
28
+ # => <input value="16:22:01.440" type="time" />
47
29
 
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.
48
31
 
49
- ## Rails 6.1.4.2 (December 14, 2021) ##
32
+ *Alex Ghiculescu*
50
33
 
51
- * No changes.
34
+ * Improve error messages when template file does not exist at absolute filepath.
52
35
 
36
+ *Ted Whang*
53
37
 
54
- ## Rails 6.1.4.1 (August 19, 2021) ##
38
+ * Add `:country_code` option to `sms_to` for consistency with `phone_to`.
55
39
 
56
- * No changes.
40
+ *Jonathan Hefner*
57
41
 
42
+ * OpenSSL constants are now used for Digest computations.
58
43
 
59
- ## Rails 6.1.4 (June 24, 2021) ##
44
+ *Dirkjan Bussink*
60
45
 
61
46
  * The `translate` helper now passes `default` values that aren't
62
47
  translation keys through `I18n.translate` for interpolation.
63
48
 
64
49
  *Jonathan Hefner*
65
50
 
66
- * Don't attach UJS form submission handlers to Turbo forms.
67
-
68
- *David Heinemeier Hansson*
69
-
70
- * Allow both `current_page?(url_hash)` and `current_page?(**url_hash)` on Ruby 2.7.
51
+ * Adds option `extname` to `stylesheet_link_tag` to skip default
52
+ `.css` extension appended to the stylesheet path.
71
53
 
72
- *Ryuta Kamizono*
54
+ Before:
73
55
 
56
+ ```ruby
57
+ stylesheet_link_tag "style.less"
58
+ # <link href="/stylesheets/style.less.scss" rel="stylesheet">
59
+ ```
74
60
 
75
- ## Rails 6.1.3.2 (May 05, 2021) ##
76
-
77
- * No changes.
78
-
79
-
80
- ## Rails 6.1.3.1 (March 26, 2021) ##
81
-
82
- * No changes.
83
-
84
-
85
- ## Rails 6.1.3 (February 17, 2021) ##
86
-
87
- * No changes.
88
-
61
+ After:
89
62
 
90
- ## 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
+ ```
91
67
 
92
- * No changes.
68
+ *Abhay Nikam*
93
69
 
70
+ * Deprecate `render` locals to be assigned to instance variables.
94
71
 
95
- ## Rails 6.1.2 (February 09, 2021) ##
72
+ *Petrik de Heus*
96
73
 
97
- * No changes.
74
+ * Remove legacy default `media=screen` from `stylesheet_link_tag`.
98
75
 
76
+ *André Luis Leal Cardoso Junior*
99
77
 
100
- ## 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:
101
80
 
102
- * 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
+ %>
103
91
 
104
- *Marek Kasztelnik*
92
+ *Sean Doyle*
105
93
 
106
- * 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.
107
97
 
108
- *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>
109
100
 
110
- * 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>
111
105
 
112
- *Étienne Barrié*
106
+ *Sean Doyle*, *Dusan Orlovic*
113
107
 
114
108
  * Add `config.action_view.preload_links_header` to allow disabling of
115
109
  the `Link` header being added by default when using `stylesheet_link_tag`
@@ -122,282 +116,46 @@
122
116
 
123
117
  *Jonathan Hefner*
124
118
 
119
+ * Add `config.action_view.image_loading` to configure the default value of
120
+ the `image_tag` `:loading` option.
125
121
 
126
- ## Rails 6.1.0 (December 09, 2020) ##
127
-
128
- * SanitizeHelper.sanitized_allowed_attributes and SanitizeHelper.sanitized_allowed_tags
129
- call safe_list_sanitizer's class method
130
-
131
- Fixes #39586
122
+ By setting `config.action_view.image_loading = "lazy"`, an application can opt in to
123
+ lazy loading images sitewide, without changing view code.
132
124
 
133
- *Taufiq Muhammadi*
134
-
135
- * Change form_with to generate non-remote forms by default.
136
-
137
- `form_with` would generate a remote form by default. This would confuse
138
- users because they were forced to handle remote requests.
139
-
140
- All new 6.1 applications will generate non-remote forms by default.
141
- When upgrading a 6.0 application you can enable remote forms by default by
142
- setting `config.action_view.form_with_generates_remote_forms` to `true`.
143
-
144
- *Petrik de Heus*
145
-
146
- * Yield translated strings to calls of `ActionView::FormBuilder#button`
147
- when a block is given.
148
-
149
- *Sean Doyle*
150
-
151
- * Alias `ActionView::Helpers::Tags::Label::LabelBuilder#translation` to
152
- `#to_s` so that `form.label` calls can yield that value to their blocks.
153
-
154
- *Sean Doyle*
155
-
156
- * Rename the new `TagHelper#class_names` method to `TagHelper#token_list`,
157
- and make the original available as an alias.
125
+ *Jonathan Hefner*
158
126
 
159
- token_list("foo", "foo bar")
160
- # => "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.
161
130
 
162
- *Sean Doyle*
131
+ <%= form_for @post do |f| %>
132
+ <%# ... %>
163
133
 
164
- * ARIA Array and Hash attributes are treated as space separated `DOMTokenList`
165
- values. This is useful when declaring lists of label text identifiers in
166
- `aria-labelledby` or `aria-describedby`.
167
-
168
- tag.input type: 'checkbox', name: 'published', aria: {
169
- invalid: @post.errors[:published].any?,
170
- labelledby: ['published_context', 'published_label'],
171
- describedby: { published_errors: @post.errors[:published].any? }
172
- }
173
- #=> <input
174
- type="checkbox" name="published" aria-invalid="true"
175
- aria-labelledby="published_context published_label"
176
- aria-describedby="published_errors"
177
- >
134
+ <% content_for :sticky_footer do %>
135
+ <%= form.button(form: f.id) %>
136
+ <% end %>
137
+ <% end %>
178
138
 
179
139
  *Sean Doyle*
180
140
 
181
- * Remove deprecated `escape_whitelist` from `ActionView::Template::Handlers::ERB`.
182
-
183
- *Rafael Mendonça França*
184
-
185
- * Remove deprecated `find_all_anywhere` from `ActionView::Resolver`.
186
-
187
- *Rafael Mendonça França*
188
-
189
- * Remove deprecated `formats` from `ActionView::Template::HTML`.
190
-
191
- *Rafael Mendonça França*
192
-
193
- * Remove deprecated `formats` from `ActionView::Template::RawFile`.
194
-
195
- *Rafael Mendonça França*
196
-
197
- * Remove deprecated `formats` from `ActionView::Template::Text`.
198
-
199
- *Rafael Mendonça França*
200
-
201
- * Remove deprecated `find_file` from `ActionView::PathSet`.
202
-
203
- *Rafael Mendonça França*
204
-
205
- * Remove deprecated `rendered_format` from `ActionView::LookupContext`.
206
-
207
- *Rafael Mendonça França*
208
-
209
- * Remove deprecated `find_file` from `ActionView::ViewPaths`.
210
-
211
- *Rafael Mendonça França*
212
-
213
- * Require that `ActionView::Base` subclasses implement `#compiled_method_container`.
214
-
215
- *Rafael Mendonça França*
216
-
217
- * Remove deprecated support to pass an object that is not a `ActionView::LookupContext` as the first argument
218
- in `ActionView::Base#initialize`.
219
-
220
- *Rafael Mendonça França*
221
-
222
- * Remove deprecated `format` argument `ActionView::Base#initialize`.
141
+ * `ActionView::Helpers::FormBuilder#field_id` returns the value generated by
142
+ the FormBuilder for the given attribute name.
223
143
 
224
- *Rafael Mendonça França*
225
-
226
- * Remove deprecated `ActionView::Template#refresh`.
227
-
228
- *Rafael Mendonça França*
229
-
230
- * Remove deprecated `ActionView::Template#original_encoding`.
231
-
232
- *Rafael Mendonça França*
233
-
234
- * Remove deprecated `ActionView::Template#variants`.
235
-
236
- *Rafael Mendonça França*
237
-
238
- * Remove deprecated `ActionView::Template#formats`.
239
-
240
- *Rafael Mendonça França*
241
-
242
- * Remove deprecated `ActionView::Template#virtual_path=`.
243
-
244
- *Rafael Mendonça França*
245
-
246
- * Remove deprecated `ActionView::Template#updated_at`.
247
-
248
- *Rafael Mendonça França*
249
-
250
- * Remove deprecated `updated_at` argument required on `ActionView::Template#initialize`.
251
-
252
- *Rafael Mendonça França*
253
-
254
- * Make `locals` argument required on `ActionView::Template#initialize`.
255
-
256
- *Rafael Mendonça França*
257
-
258
- * Remove deprecated `ActionView::Template.finalize_compiled_template_methods`.
259
-
260
- *Rafael Mendonça França*
261
-
262
- * Remove deprecated `config.action_view.finalize_compiled_template_methods`
263
-
264
- *Rafael Mendonça França*
265
-
266
- * Remove deprecated support to calling `ActionView::ViewPaths#with_fallback` with a block.
267
-
268
- *Rafael Mendonça França*
269
-
270
- * Remove deprecated support to passing absolute paths to `render template:`.
271
-
272
- *Rafael Mendonça França*
273
-
274
- * Remove deprecated support to passing relative paths to `render file:`.
275
-
276
- *Rafael Mendonça França*
277
-
278
- * Remove support to template handlers that don't accept two arguments.
279
-
280
- *Rafael Mendonça França*
281
-
282
- * Remove deprecated pattern argument in `ActionView::Template::PathResolver`.
283
-
284
- *Rafael Mendonça França*
285
-
286
- * Remove deprecated support to call private methods from object in some view helpers.
287
-
288
- *Rafael Mendonça França*
289
-
290
- * `ActionView::Helpers::TranslationHelper#translate` accepts a block, yielding
291
- the translated text and the fully resolved translation key:
292
-
293
- <%= translate(".relative_key") do |translation, resolved_key| %>
294
- <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) %>
295
148
  <% end %>
296
149
 
297
150
  *Sean Doyle*
298
151
 
299
- * Ensure cache fragment digests include all relevant template dependencies when
300
- fragments are contained in a block passed to the render helper. Remove the
301
- virtual_path keyword arguments found in CacheHelper as they no longer possess
302
- any function following 1581cab.
303
-
304
- Fixes #38984.
152
+ * Add `tag.attributes` to transform a Hash into HTML Attributes, ready to be
153
+ interpolated into ERB.
305
154
 
306
- *Aaron Lipman*
155
+ <input <%= tag.attributes(type: :text, aria: { label: "Search" }) %> >
156
+ # => <input type="text" aria-label="Search">
307
157
 
308
- * Deprecate `config.action_view.raise_on_missing_translations` in favor of
309
- `config.i18n.raise_on_missing_translations`.
310
-
311
- New generalized configuration option now determines whether an error should be raised
312
- for missing translations in controllers and views.
313
-
314
- *fatkodima*
315
-
316
- * Instrument layout rendering in `TemplateRenderer#render_with_layout` as `render_layout.action_view`,
317
- and include (when necessary) the layout's virtual path in notification payloads for collection and partial renders.
318
-
319
- *Zach Kemp*
320
-
321
- * `ActionView::Base.annotate_rendered_view_with_filenames` annotates HTML output with template file names.
322
-
323
- *Joel Hawksley*, *Aaron Patterson*
324
-
325
- * `ActionView::Helpers::TranslationHelper#translate` returns nil when
326
- passed `default: nil` without a translation matching `I18n#translate`.
327
-
328
- *Stefan Wrobel*
329
-
330
- * `OptimizedFileSystemResolver` prefers template details in order of locale,
331
- formats, variants, handlers.
332
-
333
- *Iago Pimenta*
334
-
335
- * Added `class_names` helper to create a CSS class value with conditional classes.
336
-
337
- *Joel Hawksley*, *Aaron Patterson*
338
-
339
- * Add support for conditional values to TagBuilder.
340
-
341
- *Joel Hawksley*
342
-
343
- * `ActionView::Helpers::FormOptionsHelper#select` should mark option for `nil` as selected.
344
-
345
- ```ruby
346
- @post = Post.new
347
- @post.category = nil
348
-
349
- # Before
350
- select("post", "category", none: nil, programming: 1, economics: 2)
351
- # =>
352
- # <select name="post[category]" id="post_category">
353
- # <option value="">none</option>
354
- # <option value="1">programming</option>
355
- # <option value="2">economics</option>
356
- # </select>
357
-
358
- # After
359
- select("post", "category", none: nil, programming: 1, economics: 2)
360
- # =>
361
- # <select name="post[category]" id="post_category">
362
- # <option selected="selected" value="">none</option>
363
- # <option value="1">programming</option>
364
- # <option value="2">economics</option>
365
- # </select>
366
- ```
367
-
368
- *bogdanvlviv*
369
-
370
- * Log lines for partial renders and started template renders are now
371
- emitted at the `DEBUG` level instead of `INFO`.
372
-
373
- Completed template renders are still logged at the `INFO` level.
374
-
375
- *DHH*
376
-
377
- * ActionView::Helpers::SanitizeHelper: support rails-html-sanitizer 1.1.0.
378
-
379
- *Juanito Fatas*
380
-
381
- * Added `phone_to` helper method to create a link from mobile numbers.
382
-
383
- *Pietro Moro*
384
-
385
- * annotated_source_code returns an empty array so TemplateErrors without a
386
- template in the backtrace are surfaced properly by DebugExceptions.
387
-
388
- *Guilherme Mansur*, *Kasper Timm Hansen*
389
-
390
- * Add autoload for SyntaxErrorInTemplate so syntax errors are correctly raised by DebugExceptions.
391
-
392
- *Guilherme Mansur*, *Gannon McGibbon*
393
-
394
- * `RenderingHelper` supports rendering objects that `respond_to?` `:render_in`.
395
-
396
- *Joel Hawksley*, *Natasha Umer*, *Aaron Patterson*, *Shawn Allen*, *Emily Plummer*, *Diana Mounter*, *John Hawthorn*, *Nathan Herald*, *Zaid Zawaideh*, *Zach Ahn*
397
-
398
- * Fix `select_tag` so that it doesn't change `options` when `include_blank` is present.
399
-
400
- *Younes SERRAJ*
158
+ *Sean Doyle*
401
159
 
402
160
 
403
- 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