1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Merge pull request #41464 from p8/deprecate-ivars-locals-in-render-partial

Deprecate render locals to be assigned to instance variables
This commit is contained in:
Rafael França 2021-02-16 14:24:59 -05:00 committed by GitHub
commit fe912cb1a7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 1 deletions

View file

@ -1,3 +1,7 @@
* Deprecate `render` locals to be assigned to instance variables.
*Petrik de Heus*
* Remove legacy default `media=screen` from `stylesheet_link_tag`.
*André Luis Leal Cardoso Junior*

View file

@ -319,6 +319,13 @@ module ActionView
# Only locals with valid variable names get set directly. Others will
# still be available in local_assigns.
locals = @locals - Module::RUBY_RESERVED_KEYWORDS
deprecated_locals = locals.grep(/\A@+/)
if deprecated_locals.any?
ActiveSupport::Deprecation.warn(<<~MSG)
Passing instance variables to `render` is deprecated.
In Rails 7.0, #{deprecated_locals.to_sentence} will be ignored.
MSG
end
locals = locals.grep(/\A@?(?![A-Z0-9])(?:[[:alnum:]_]|[^\0-\177])+\z/)
# Assign for the same variable is to suppress unused variable warning

View file

@ -52,7 +52,10 @@ class CompiledTemplatesTest < ActiveSupport::TestCase
end
def test_template_with_instance_variable_identifier
assert_equal "bar", render(template: "test/render_file_instance_variable", locals: { "@foo": "bar" })
expected_deprecation = "In Rails 7.0, @foo will be ignored."
assert_deprecated(expected_deprecation) do
assert_equal "bar", render(template: "test/render_file_instance_variable", locals: { "@foo": "bar" })
end
end
def test_template_gets_recompiled_when_using_different_keys_in_local_assigns