diff --git a/lib/slim/embedded_engine.rb b/lib/slim/embedded_engine.rb index d11eeff6..931a4ed0 100644 --- a/lib/slim/embedded_engine.rb +++ b/lib/slim/embedded_engine.rb @@ -40,11 +40,17 @@ def collect_text(body) end end + def collect_newlines(body) + body[1..-1].inject([:multi]) do |multi, exp| + exp[0] == :newline ? (multi << exp) : multi + end + end + # Basic tilt engine class TiltEngine < EmbeddedEngine def on_slim_embedded(engine, body) engine = Tilt[engine] || raise("Tilt engine #{engine} is not available.") - render(engine, collect_text(body)) + [:multi, render(engine, collect_text(body)), collect_newlines(body)] end end @@ -118,7 +124,7 @@ def on_slim_embedded(engine, body) # Embeds ruby code class RubyEngine < EmbeddedEngine def on_slim_embedded(engine, body) - [:code, collect_text(body)] + [:code, "\n" + collect_text(body)] end end diff --git a/test/slim/test_ruby_errors.rb b/test/slim/test_ruby_errors.rb index 3f82bb96..cd37e7fc 100644 --- a/test/slim/test_ruby_errors.rb +++ b/test/slim/test_ruby_errors.rb @@ -82,7 +82,32 @@ def test_embedded_ruby = unknown_ruby_method } - assert_ruby_error NameError,"(__TEMPLATE__):5", source + assert_ruby_error NameError,"(__TEMPLATE__):6", source + end + + def test_embedded_markdown + source = %q{ +markdown: + #Header + Hello from #{"Markdown!"} + "Second Line!" += unknown_ruby_method +} + + assert_ruby_error NameError,"(__TEMPLATE__):6", source + end + + def test_embedded_liquid + source = %q{ +- text = 'before liquid block' +liquid: + First + {{text}} + Third += unknown_ruby_method +} + + assert_ruby_error NameError,"(__TEMPLATE__):7", source end def test_embedded_javascript