Skip to content

Commit

Permalink
Merge pull request #53 from IbraheemTuffaha/fix-standalone-erb-tags
Browse files Browse the repository at this point in the history
Run code in else block if ruby tag is standalone
  • Loading branch information
elia authored Jun 24, 2024
2 parents a7ce8b4 + a52f7fc commit d23c1c0
Show file tree
Hide file tree
Showing 4 changed files with 85 additions and 0 deletions.
27 changes: 27 additions & 0 deletions bin/rake
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#!/usr/bin/env ruby
# frozen_string_literal: true

#
# This file was generated by Bundler.
#
# The application 'rake' is installed as part of a gem, and
# this file is here to facilitate running it.
#

ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)

bundle_binstub = File.expand_path("bundle", __dir__)

if File.file?(bundle_binstub)
if File.read(bundle_binstub, 300).include?("This file was generated by Bundler")
load(bundle_binstub)
else
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
end
end

require "rubygems"
require "bundler/setup"

load Gem.bin_path("rake", "rake")
5 changes: 5 additions & 0 deletions lib/erb/formatter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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/

Expand Down Expand Up @@ -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)
Expand Down
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 d23c1c0

Please sign in to comment.