This commit removes a deprecated catch-all route in the AV tests. It
defines and includes the necessary routes for each test such that we
don't need the catch-all anymore.
This also helps push us toward #33970
This brings `escape_javascript` in line with the behavior of `json_escape` and
allows other value types to be output without needing explicit casting in the
view template.
Example:
<%= javascript_tag do %>
var locale = '<%== j I18n.locale %>'; // locale is a symbol
<% end %>
On every iteration of generating a cache for a collection a “digest path” is calculated even though it’s exactly the same for every element.
This PR exposes a method `digest_path_from_virtual` that returns back a “digest_path”. This can in turn be passed back into `cache_fragment_name`. This not only does less work, but it also (you guessed it) uses less memory.
before: Total allocated: 762539 bytes (7035 objects)
after: Total allocated: 743590 bytes (6621 objects)
(762539 - 743590)/ 762539.0 # => 2.4% faster ⚡️⚡️
When no dependencies are present to be digested there is no reason to build an array just to turn around and turn it back into a string.
The dependencies array is not mutated in this method so we can use the same empty array across all invocations.
Total allocated: 791402 bytes (7294 objects)
Total allocated: 777442 bytes (7132 objects)
(791402 - 777442) / 791402.0 # => 1.76 % speed improvement
There was a warning when running `npm install` in Action View:
coffee-script@1.11.1: CoffeeScript on NPM has moved to
"coffeescript" (no hyphen)
We are not requiring `coffee-script` explicitly, but `coffeelint` does.
The latest version, 2.1.0, already fix the dependency package name, so
we should upgrade to it to suppress the warning.
Test that using private methods in `options_from_collection_for_select`
is deprecated.
Make the unused `secret` paramether in the `Post` Struct private to use
it in the test.
Avoid exposing private methods in view's helpers. However, as
`extract_values_from_collection` is only called from
`options_from_collection_for_select` where `value_for_collection` is
previously called, this case was already covered. The change makes
anyway sense for consistency and in case the code changes in the
future.
Use attr_reader/attr_writer instead of methods
method is 12% slower
Use flat_map over map.flatten(1)
flatten is 66% slower
Use hash[]= instead of hash.merge! with single arguments
merge! is 166% slower
See https://github.com/rails/rails/pull/32337 for more conversation
Special form_with attributes `skip_default_ids` and `allow_method_names_outside_object`
attributes are leaking into html attributes of option select tag helpers.
`button_to` was throwing exception when invoked with `params` hash that
contains symbol and string keys. The reason for the exception was that
`to_form_params` was comparing the given symbol and string keys.
The issue is fixed by turning all keys to strings inside
`to_form_params` before comparing them.