Skip to content

Commit eb869a9

Browse files
Fix conversion of multi-line method arguments
The regexps responsible for converting method calls with blocks did not account for arguments split across multiple lines. This patch enables multi-line method arguments, as long as every line except the last ends with a comma (and zero or more spaces).
1 parent 3b0acf0 commit eb869a9

5 files changed

Lines changed: 24 additions & 2 deletions

File tree

lib/html2slim/converter.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ def initialize(file)
1919
erb.gsub!(/<%(.+?)\s*\{\s*(\|.+?\|)?\s*%>/){ %(<%#{$1} do #{$2}%>) }
2020

2121
# case, if, for, unless, until, while, and blocks...
22-
erb.gsub!(/<%(-\s+)?((\s*(case|if|for|unless|until|while) .+?)|.+?do\s*(\|.+?\|)?\s*)-?%>/){ %(<ruby code="#{$2.gsub(/"/, '&quot;')}">) }
22+
statement_start = /\s*(?:case|if|for|unless|until|while) .+?/
23+
method_start = /.+?(?:,\s*\n.+?)*do\s*(?:\|.+?\|)?\s*/
24+
erb.gsub!(/<%(?:-\s+)?(#{statement_start}|#{method_start})-?%>/){ %(<ruby code="#{$1.gsub(/"/, '&quot;')}">) }
2325
# else
2426
erb.gsub!(/<%-?\s*else\s*-?%>/, %(</ruby><ruby code="else">))
2527
# elsif

lib/html2slim/hpricot_monkeypatches.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ def to_slim(lvl=0)
7373
private
7474

7575
def slim_ruby_code(r)
76-
(code.strip[0] == "=" ? "" : "- ") + code.strip.gsub(/\n/, "\n#{r}- ")
76+
(code.strip[0] == "=" ? "" : "- ") + code.strip.gsub(/(?<!,)([ ]*\n)/, "\\1#{r}- ")
7777
end
7878

7979
def code
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<%= form_with url: search_path,
2+
class: "search-form",
3+
method: :get do |form| %>
4+
<div class="form-group">
5+
<%= form.text_field :query %>
6+
</div>
7+
<%= form.submit %>
8+
<% end %>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
= form_with url: search_path,
2+
class: "search-form",
3+
method: :get do |form|
4+
.form-group
5+
= form.text_field :query
6+
= form.submit

test/test_html2slim.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,12 @@ def test_convert_multiline_block
5252
end
5353
end
5454

55+
def test_convert_multiline_method_args
56+
IO.popen("bin/erb2slim test/fixtures/multiline_method_args.erb -", "r") do |f|
57+
assert_equal File.read("test/fixtures/multiline_method_args.slim"), f.read
58+
end
59+
end
60+
5561
def test_convert_elsif_block
5662
IO.popen("bin/erb2slim test/fixtures/erb_elsif.erb -", "r") do |f|
5763
assert_equal File.read("test/fixtures/erb_elsif.slim"), f.read

0 commit comments

Comments
 (0)