From 76487a74ede3ab9ef4b5074b041c79c74e1eed13 Mon Sep 17 00:00:00 2001 From: Takashi Kokubun Date: Tue, 27 Oct 2015 01:02:54 +0900 Subject: [PATCH] Support runtime compilation --- lib/hamlit/filters/coffee.rb | 17 +++++++++++++++++ lib/hamlit/filters/tilt_base.rb | 8 +++----- test/hamlit/filters/coffee_test.rb | 1 - 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/lib/hamlit/filters/coffee.rb b/lib/hamlit/filters/coffee.rb index 8b77f3b2..953f4b96 100644 --- a/lib/hamlit/filters/coffee.rb +++ b/lib/hamlit/filters/coffee.rb @@ -4,12 +4,29 @@ module Hamlit class Filters class Coffee < TiltBase def compile(node) + if Haml::Util.contains_interpolation?(node.value[:text]) + return runtime_compile(node) + end + temple = [:multi] temple << [:static, "".freeze] temple end + + private + + def runtime_compile(node) + source = Haml::Util.unescape_interpolation(node.value[:text]) + code = "::Hamlit::Filters::TiltBase.render('coffee', #{source})" + + temple = [:multi] + temple << [:static, "".freeze] + temple + end end end end diff --git a/lib/hamlit/filters/tilt_base.rb b/lib/hamlit/filters/tilt_base.rb index fc0981b3..08961818 100644 --- a/lib/hamlit/filters/tilt_base.rb +++ b/lib/hamlit/filters/tilt_base.rb @@ -1,11 +1,9 @@ module Hamlit class Filters class TiltBase < Base - class << self - def render(name, source) - text = ::Tilt["t.#{name}"].new { source }.render - text.gsub!(/^/, ' '.freeze) - end + def self.render(name, source) + text = ::Tilt["t.#{name}"].new { source }.render + text.gsub!(/^/, ' '.freeze) end end end diff --git a/test/hamlit/filters/coffee_test.rb b/test/hamlit/filters/coffee_test.rb index ef013a03..2061d06c 100644 --- a/test/hamlit/filters/coffee_test.rb +++ b/test/hamlit/filters/coffee_test.rb @@ -41,7 +41,6 @@ describe Hamlit::Filters do end it 'renders coffeescript filter' do - skip assert_render(<<-'HAML', <<-HTML) :coffee foo = ->