提交 e82ffeaa 编写于 作者: A Artiom Di

Restoring the '%' trim mode for ERb templates, allowing for a leading percent...

Restoring the '%' trim mode for ERb templates, allowing for a leading percent sign on a line to indicate non-inserted Ruby code.
上级 9cd1f697
## Rails 4.0.0 (unreleased) ##
* Restored support for the "%" ERb/Erubis _trim mode_. This can be activated with:
config.action_view.erb_trim_mode = "%" # or "%-" whitespace trim
With that mode active, you can use a single percent sign at the beginning of a line to engage Ruby mode (without inserting results). It allows for template code like this:
% if current_user.try(:admin?)
<%= render "edit_links" %>
% end
*James Edward Gray II*
* `javascript_include_tag :all` will now not include `application.js` if the file does not exists. *Prem Sichanugrist*
* Send an empty response body when call `head` with status between 100 and 199, 204, 205 or 304.
......
......@@ -37,6 +37,10 @@ def add_postamble(src)
end
end
class ErubisWithPercentLine < Erubis
include ::Erubis::PercentLineEnhancer
end
class ERB
# Specify trim mode for the ERB compiler. Defaults to '-'.
# See ERB documentation for suitable values.
......@@ -76,10 +80,12 @@ def call(template)
# Always make sure we return a String in the default_internal
erb.encode!
self.class.erb_implementation.new(
erb,
:trim => (self.class.erb_trim_mode == "-")
).src
mode = self.class.erb_trim_mode.to_s
implementation = self.class.erb_implementation
if mode.include? "%" and implementation == Erubis
implementation = ErubisWithPercentLine
end
implementation.new(erb, :trim => mode.include?("-")).src
end
private
......
require "abstract_unit"
class HandlersTest < ActiveSupport::TestCase
HANDLER = ActionView::Template::Handlers::ERB
Template = Struct.new(:source)
extend ActiveSupport::Testing::Declarative
test "content is not trimmed without a trim mode" do
with_erb_trim_mode nil do
assert_equal(" \ntest", render(" <% 'IGNORED' %> \ntest"))
end
end
test "content around tags is trimmed if the trim mode includes a dash" do
with_erb_trim_mode '-' do
assert_equal("test", render(" <% 'IGNORED' %> \ntest"))
end
end
test "percent lines are normal content without a trim mode" do
with_erb_trim_mode nil do
assert_equal( "% if false\noops\n% end\n",
render("% if false\noops\n% end\n") )
end
end
test "percent lines count as ruby if trim mode includes a percent" do
with_erb_trim_mode "%" do
assert_equal("", render("% if false\noops\n% end\n"))
end
end
test "both trim modes can be used at the same time" do
with_erb_trim_mode "%-" do
assert_equal( "test", render( "% if false\noops\n% end\n" +
" <% 'IGNORED' %> \ntest" ) )
end
end
private
def with_erb_trim_mode(mode)
@old_erb_trim_mode = HANDLER.erb_trim_mode
HANDLER.erb_trim_mode = mode
yield
ensure
HANDLER.erb_trim_mode = @old_erb_trim_mode
end
def render(template)
eval("output_buffer = nil; " + HANDLER.call(Template.new(template)))
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册