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`.
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)
variable = as || begin
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
end
if @collection
@ -530,8 +530,7 @@ module ActionView
end
IDENTIFIER_ERROR_MESSAGE = "The partial name (%s) 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."
"make sure your partial name starts with underscore."
OPTION_AS_ERROR_MESSAGE = "The value (%s) of the option `as` is not a valid Ruby identifier; " +
"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)
end
def test_render_partial_with_invalid_name
e = assert_raises(ArgumentError) { @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
def test_render_partial_with_number
assert_nothing_raised { @view.render(:partial => "test/200") }
end
def test_render_partial_with_missing_filename
e = assert_raises(ArgumentError) { @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
assert_raises(ActionView::MissingTemplate) { @view.render(:partial => "test/") }
end
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
end
def test_render_partial_starting_with_a_capital
assert_nothing_raised { @view.render(:partial => 'test/FooBar') }
end
def test_render_partial_with_hyphen
e = assert_raises(ArgumentError) { @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
assert_nothing_raised { @view.render(:partial => "test/a-in") }
end
def test_render_partial_with_invalid_option_as