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:
parent
4ca1dda0bf
commit
da9038eaa5
5 changed files with 21 additions and 16 deletions
|
@ -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
|
||||
|
|
|
@ -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, " +
|
||||
|
|
1
actionview/test/fixtures/test/_FooBar.html.erb
vendored
Normal file
1
actionview/test/fixtures/test/_FooBar.html.erb
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
🍣
|
0
actionview/test/fixtures/test/_a-in.html.erb
vendored
Normal file
0
actionview/test/fixtures/test/_a-in.html.erb
vendored
Normal 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
|
||||
|
|
Loading…
Reference in a new issue