From 50ce72abd8c34ccca1a5b32587a947fdd28f6759 Mon Sep 17 00:00:00 2001 From: minad Date: Fri, 6 May 2011 17:04:00 +0200 Subject: [PATCH] correct line number reporting for embedded engines * errors in interpolation in InterpolatedTiltEngines not yet working (e.g. markdown) * precompiled engines not yet working (e.g. liquid) --- lib/slim/embedded_engine.rb | 10 ++++++++-- test/slim/test_ruby_errors.rb | 27 ++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 3 deletions(-) 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