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