Do not try to write timestamps if they are missing #8813
add I18n support for `:placeholder` HTML option is passed to form fields
[ci skip] correct default cache store class
Fix assert_template for files.

The test was not failing for `assert_template file: nil` when a file
has been rendered.
Missing ActiveSupport require for calling String#first
Merge pull request #16493 from aditya-kapoor/correct-cache-store-doc

[ci skip] correct default cache store class
[ci skip] add note about the ERB escape in generator docs
Merge pull request #16408 from aditya-kapoor/add-doc-ERB-escape

[ci skip] add note about the ERB escape in generator docs
UnexpectedErrors may reference exceptions that can't be dumped

UnexpectedError exceptions wrap the original exception, and the original
exception may contain a reference to something that can't be marshal
dumped which will cause the process to die.
this should be accessing the hash, not calling a method
fewer operations on the options hash

since we pass `as` down, then we won't have to do an insert / delete
dance with the options hash
pass consistent parameters to canonical_action?

now we only have to look up @scope[:scope_level] once per call to
canonical_action? and we don't have a variable named "flag"
only test `prefix` once

we don't need to repeat if statements
only look up scope level once

avoid hash lookups and remove depency on the instance
Finally! None of our tests are order_dependent!
move scope_level to a method on the scope object

now we don't have to have a hard coded key
move the scope level key fully inside the scope object
scope_level is no longer a hash key, just use the ivar
change to attr_reader
reduce calls to scope_level

this will help us to encapsulate magical symbols so hopefully we can
eliminate hardcoded magic symbols