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

Partial template name does no more have to be a valid Ruby identifier

because the partial renderer would not create an lvar per each template since c67005f221
This commit is contained in:
Akira Matsuda 2015-02-06 00:18:05 +09:00
parent 4ca1dda0bf
commit da9038eaa5
5 changed files with 21 additions and 16 deletions

View file

@ -1,3 +1,13 @@
* Partial template name does no more have to be a valid Ruby identifier.
There used to be a naming rule that the partial name should start with
underscore, and should be followed by any combination of letters, numbers
and underscores.
But now we can give our partials any name starting with underscore, such as
_🍔.html.erb.
*Akira Matsuda*
* Change the default template handler from `ERB` to `Raw`. * Change the default template handler from `ERB` to `Raw`.
Files without a template handler in their extension will be rendered using the raw Files without a template handler in their extension will be rendered using the raw

View file

@ -519,7 +519,7 @@ module ActionView
def retrieve_variable(path, as) def retrieve_variable(path, as)
variable = as || begin variable = as || begin
base = path[-1] == "/" ? "" : File.basename(path) base = path[-1] == "/" ? "" : File.basename(path)
raise_invalid_identifier(path) unless base =~ /\A_?([a-z]\w*)(\.\w+)*\z/ raise_invalid_identifier(path) unless base =~ /\A_?(.*)(?:\.\w+)*\z/
$1.to_sym $1.to_sym
end end
if @collection if @collection
@ -530,8 +530,7 @@ module ActionView
end end
IDENTIFIER_ERROR_MESSAGE = "The partial name (%s) is not a valid Ruby identifier; " + IDENTIFIER_ERROR_MESSAGE = "The partial name (%s) is not a valid Ruby identifier; " +
"make sure your partial name starts with underscore, " + "make sure your partial name starts with underscore."
"and is followed by any combination of letters, numbers and underscores."
OPTION_AS_ERROR_MESSAGE = "The value (%s) of the option `as` is not a valid Ruby identifier; " + OPTION_AS_ERROR_MESSAGE = "The value (%s) of the option `as` is not a valid Ruby identifier; " +
"make sure it starts with lowercase letter, " + "make sure it starts with lowercase letter, " +

View file

@ -0,0 +1 @@
🍣

View file

View file

@ -171,18 +171,12 @@ module RenderTestCases
assert_equal "only partial", @view.render("test/partial_only", :counter_counter => 5) assert_equal "only partial", @view.render("test/partial_only", :counter_counter => 5)
end end
def test_render_partial_with_invalid_name def test_render_partial_with_number
e = assert_raises(ArgumentError) { @view.render(:partial => "test/200") } assert_nothing_raised { @view.render(:partial => "test/200") }
assert_equal "The partial name (test/200) is not a valid Ruby identifier; " +
"make sure your partial name starts with underscore, " +
"and is followed by any combination of letters, numbers and underscores.", e.message
end end
def test_render_partial_with_missing_filename def test_render_partial_with_missing_filename
e = assert_raises(ArgumentError) { @view.render(:partial => "test/") } assert_raises(ActionView::MissingTemplate) { @view.render(:partial => "test/") }
assert_equal "The partial name (test/) is not a valid Ruby identifier; " +
"make sure your partial name starts with underscore, " +
"and is followed by any combination of letters, numbers and underscores.", e.message
end end
def test_render_partial_with_incompatible_object def test_render_partial_with_incompatible_object
@ -190,11 +184,12 @@ module RenderTestCases
assert_equal "'#{nil.inspect}' is not an ActiveModel-compatible object. It must implement :to_partial_path.", e.message assert_equal "'#{nil.inspect}' is not an ActiveModel-compatible object. It must implement :to_partial_path.", e.message
end end
def test_render_partial_starting_with_a_capital
assert_nothing_raised { @view.render(:partial => 'test/FooBar') }
end
def test_render_partial_with_hyphen def test_render_partial_with_hyphen
e = assert_raises(ArgumentError) { @view.render(:partial => "test/a-in") } assert_nothing_raised { @view.render(:partial => "test/a-in") }
assert_equal "The partial name (test/a-in) is not a valid Ruby identifier; " +
"make sure your partial name starts with underscore, " +
"and is followed by any combination of letters, numbers and underscores.", e.message
end end
def test_render_partial_with_invalid_option_as def test_render_partial_with_invalid_option_as