diff --git a/lib/html2slim/converter.rb b/lib/html2slim/converter.rb index 78c7cf0..e53565b 100644 --- a/lib/html2slim/converter.rb +++ b/lib/html2slim/converter.rb @@ -19,7 +19,9 @@ def initialize(file) erb.gsub!(/<%(.+?)\s*\{\s*(\|.+?\|)?\s*%>/){ %(<%#{$1} do #{$2}%>) } # case, if, for, unless, until, while, and blocks... - erb.gsub!(/<%(-\s+)?((\s*(case|if|for|unless|until|while) .+?)|.+?do\s*(\|.+?\|)?\s*)-?%>/){ %() } + statement_start = /\s*(?:case|if|for|unless|until|while) .+?/ + method_start = /.+?(?:,\s*\n.+?)*do\s*(?:\|.+?\|)?\s*/ + erb.gsub!(/<%(?:-\s+)?(#{statement_start}|#{method_start})-?%>/){ %() } # else erb.gsub!(/<%-?\s*else\s*-?%>/, %()) # elsif diff --git a/lib/html2slim/hpricot_monkeypatches.rb b/lib/html2slim/hpricot_monkeypatches.rb index 877a959..e1d9fd5 100644 --- a/lib/html2slim/hpricot_monkeypatches.rb +++ b/lib/html2slim/hpricot_monkeypatches.rb @@ -73,7 +73,7 @@ def to_slim(lvl=0) private def slim_ruby_code(r) - (code.strip[0] == "=" ? "" : "- ") + code.strip.gsub(/\n/, "\n#{r}- ") + (code.strip[0] == "=" ? "" : "- ") + code.strip.gsub(/(? +
+ <%= form.text_field :query, + class: "form-control" %> +
+ <%= form.submit "Search", + class: "btn" %> +<% end %> diff --git a/test/fixtures/multiline_method_args.slim b/test/fixtures/multiline_method_args.slim new file mode 100644 index 0000000..d80f114 --- /dev/null +++ b/test/fixtures/multiline_method_args.slim @@ -0,0 +1,8 @@ += form_with url: search_path, + class: "search-form", + method: :get do |form| + .form-group + = form.text_field :query, + class: "form-control" + = form.submit "Search", + class: "btn" diff --git a/test/test_html2slim.rb b/test/test_html2slim.rb index cb64a34..be649c3 100644 --- a/test/test_html2slim.rb +++ b/test/test_html2slim.rb @@ -52,6 +52,12 @@ def test_convert_multiline_block end end + def test_convert_multiline_method_args + IO.popen("bin/erb2slim test/fixtures/multiline_method_args.erb -", "r") do |f| + assert_equal File.read("test/fixtures/multiline_method_args.slim"), f.read + end + end + def test_convert_elsif_block IO.popen("bin/erb2slim test/fixtures/erb_elsif.erb -", "r") do |f| assert_equal File.read("test/fixtures/erb_elsif.slim"), f.read