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

split DELEGATION_RESERVED_METHOD_NAMES in half

This commit is contained in:
Toshimaru 2016-12-09 04:55:21 +09:00
parent 7407d35c54
commit d9ff835b99
5 changed files with 17 additions and 10 deletions

View file

@ -326,7 +326,7 @@ module ActionView
def locals_code #:nodoc:
# Only locals with valid variable names get set directly. Others will
# still be available in local_assigns.
locals = @locals.to_set - Module::DELEGATION_RESERVED_METHOD_NAMES.dup.delete("block")
locals = @locals - Module::RUBY_RESERVED_KEYWORDS
locals = locals.grep(/\A(?![A-Z0-9])(?:[[:alnum:]_]|[^\0-\177])+\z/)
# Double assign to suppress the dreaded 'assigned but unused variable' warning

View file

@ -1 +0,0 @@
<%= block %>

View file

@ -0,0 +1 @@
<%= _ %> <%= arg %> <%= args %> <%= block %>

View file

@ -14,10 +14,6 @@ class CompiledTemplatesTest < ActiveSupport::TestCase
render(file: "test/render_file_with_ruby_keyword_locals", locals: { class: "foo" })
end
def test_template_with_block_variable
assert_equal "foo", render(file: "test/test_template_with_block_variable", locals: { block: "foo" })
end
def test_template_with_invalid_identifier_locals
locals = {
foo: "bar",
@ -28,6 +24,16 @@ class CompiledTemplatesTest < ActiveSupport::TestCase
assert_equal locals.inspect, render(file: "test/render_file_inspect_local_assigns", locals: locals)
end
def test_template_with_delegation_reserved_keywords
locals = {
_: "one",
arg: "two",
args: "three",
block: "four",
}
assert_equal "one two three four", render(file: "test/test_template_with_delegation_reserved_keywords", locals: locals)
end
def test_template_with_unicode_identifier
assert_equal "🎂", render(file: "test/render_file_unicode_local", locals: { 🎃: "🎂" })
end

View file

@ -6,11 +6,12 @@ class Module
# option is not used.
class DelegationError < NoMethodError; end
RUBY_RESERVED_KEYWORDS = %w(alias and BEGIN begin break case class def defined? do
else elsif END end ensure false for if in module next nil not or redo rescue retry
return self super then true undef unless until when while yield)
DELEGATION_RESERVED_KEYWORDS = %w(_ arg args block)
DELEGATION_RESERVED_METHOD_NAMES = Set.new(
%w(_ arg args alias and BEGIN begin block break case class def defined? do
else elsif END end ensure false for if in module next nil not or redo
rescue retry return self super then true undef unless until when while
yield)
RUBY_RESERVED_KEYWORDS + DELEGATION_RESERVED_KEYWORDS
).freeze
# Provides a +delegate+ class method to easily expose contained objects'