Skip to content

Commit

Permalink
Run code in else block if ruby tag is standalone
Browse files Browse the repository at this point in the history
  • Loading branch information
IbraheemTuffaha authored and elia committed Jun 24, 2024
1 parent b3795c9 commit a52f7fc
Showing 3 changed files with 58 additions and 0 deletions.
5 changes: 5 additions & 0 deletions lib/erb/formatter.rb
Original file line number Diff line number Diff line change
@@ -61,6 +61,7 @@ class Error < StandardError; end
end.freeze
end

RUBY_STANDALONE_BLOCK = /\A(yield|next)\b/
RUBY_CLOSE_BLOCK = /\Aend\z/
RUBY_REOPEN_BLOCK = /\A(else|elsif\b(.*)|when\b(.*))\z/

@@ -306,6 +307,10 @@ def format_erb_tags(string)
erb_open << ' ' unless ruby_code.start_with?('#')

case ruby_code
when RUBY_STANDALONE_BLOCK
ruby_code = format_ruby(ruby_code, autoclose: false)
full_erb_tag = "#{erb_open}#{ruby_code} #{erb_close}"
html << (erb_pre_match.match?(/\s+\z/) ? indented(full_erb_tag) : full_erb_tag)
when RUBY_CLOSE_BLOCK
full_erb_tag = "#{erb_open}#{ruby_code} #{erb_close}"
tag_stack_pop('%erb%', ruby_code)
24 changes: 24 additions & 0 deletions test/fixtures/yield.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<section>
<div class="flex flex-col pb-4 mx-auto">
<div class="w-full bg-white rounded-lg shadow sm:max-w-lg md:mt-0 xl:p-0 dark:bg-gray-800 dark:border dark:border-gray-700">
<div class="p-6 space-y-4 sm:p-8 md:space-y-6">
<%= yield %>
</div>
<%= next %>
</div>
<%= break %>
</div>
</section>

<div id="flash">
<% flash.each do |type, message| %>
<% next unless message.is_a?(String) %>

<% case type %>
<% when "alert" %>
<%= render("shared/alert_flash", message: message) %>
<% when "notice" %>
<%= render("shared/notice_flash", message: message) %>
<% end %>
<% end %>
</div>
29 changes: 29 additions & 0 deletions test/fixtures/yield.html.expected.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<section>
<div class="flex flex-col pb-4 mx-auto">
<div
class="
w-full bg-white rounded-lg shadow sm:max-w-lg md:mt-0 xl:p-0 dark:bg-gray-800
dark:border dark:border-gray-700
"
>
<div class="p-6 space-y-4 sm:p-8 md:space-y-6">
<%= yield %>
</div>
<%= next %>
</div>
<%= break %>
</div>
</section>

<div id="flash">
<% flash.each do |type, message| %>
<% next unless message.is_a?(String) %>

<% case type %>
<% when "alert" %>
<%= render("shared/alert_flash", message: message) %>
<% when "notice" %>
<%= render("shared/notice_flash", message: message) %>
<% end %>
<% end %>
</div>

0 comments on commit a52f7fc

Please sign in to comment.