From e417ccc1e77b30eeebe01240721c90e76d237e46 Mon Sep 17 00:00:00 2001 From: Konstantin Haase Date: Mon, 28 Mar 2011 16:56:54 +0200 Subject: [PATCH] add slim support to content_for --- sinatra-contrib/lib/sinatra/content_for.rb | 8 +++++--- sinatra-contrib/spec/content_for/different_key.slim | 2 ++ sinatra-contrib/spec/content_for/layout.slim | 1 + sinatra-contrib/spec/content_for/multiple_blocks.slim | 8 ++++++++ sinatra-contrib/spec/content_for/passes_values.slim | 1 + sinatra-contrib/spec/content_for/same_key.slim | 2 ++ sinatra-contrib/spec/content_for/takes_values.slim | 3 +++ sinatra-contrib/spec/content_for_spec.rb | 4 ++-- 8 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 sinatra-contrib/spec/content_for/different_key.slim create mode 100644 sinatra-contrib/spec/content_for/layout.slim create mode 100644 sinatra-contrib/spec/content_for/multiple_blocks.slim create mode 100644 sinatra-contrib/spec/content_for/passes_values.slim create mode 100644 sinatra-contrib/spec/content_for/same_key.slim create mode 100644 sinatra-contrib/spec/content_for/takes_values.slim diff --git a/sinatra-contrib/lib/sinatra/content_for.rb b/sinatra-contrib/lib/sinatra/content_for.rb index 1ecc6d2c..ee8767b4 100644 --- a/sinatra-contrib/lib/sinatra/content_for.rb +++ b/sinatra-contrib/lib/sinatra/content_for.rb @@ -93,12 +93,14 @@ module Sinatra # generated templates will be cached by Sinatra in production capture :haml, "!= capture_haml(*args, &block)" - capture :erb, "<% block.call(*args) %>" - capture :erubis, "<% eval '_buf.clear', block.binding %><%= block.call(*args) %>" + capture :erb, "<% yield(*args) %>" + capture :erubis, "<%= yield(*args) %>" + capture :slim, "== yield(*args)" def capture(engine, args, block) @_out_buf, buf_was = nil, @_out_buf - render(engine, Sinatra::ContentFor.capture(engine), {}, :args => args, :block => block) + eval '_buf.clear if defined? _buf', block.binding + render(engine, Sinatra::ContentFor.capture(engine), {}, :args => args, :block => block, &block) ensure @_out_buf = buf_was end diff --git a/sinatra-contrib/spec/content_for/different_key.slim b/sinatra-contrib/spec/content_for/different_key.slim new file mode 100644 index 00000000..c76a30c6 --- /dev/null +++ b/sinatra-contrib/spec/content_for/different_key.slim @@ -0,0 +1,2 @@ +- content_for :bar do + | bar diff --git a/sinatra-contrib/spec/content_for/layout.slim b/sinatra-contrib/spec/content_for/layout.slim new file mode 100644 index 00000000..aabdfaae --- /dev/null +++ b/sinatra-contrib/spec/content_for/layout.slim @@ -0,0 +1 @@ += yield_content :foo diff --git a/sinatra-contrib/spec/content_for/multiple_blocks.slim b/sinatra-contrib/spec/content_for/multiple_blocks.slim new file mode 100644 index 00000000..6a9eb468 --- /dev/null +++ b/sinatra-contrib/spec/content_for/multiple_blocks.slim @@ -0,0 +1,8 @@ +- content_for :foo do + | foo +- content_for :foo do + | bar +- content_for :baz do + | WON'T RENDER ME +- content_for :foo do + | baz diff --git a/sinatra-contrib/spec/content_for/passes_values.slim b/sinatra-contrib/spec/content_for/passes_values.slim new file mode 100644 index 00000000..24a1a55e --- /dev/null +++ b/sinatra-contrib/spec/content_for/passes_values.slim @@ -0,0 +1 @@ +== yield_content :foo, 1, 2 diff --git a/sinatra-contrib/spec/content_for/same_key.slim b/sinatra-contrib/spec/content_for/same_key.slim new file mode 100644 index 00000000..b8d0a9bf --- /dev/null +++ b/sinatra-contrib/spec/content_for/same_key.slim @@ -0,0 +1,2 @@ +- content_for :foo do + | foo diff --git a/sinatra-contrib/spec/content_for/takes_values.slim b/sinatra-contrib/spec/content_for/takes_values.slim new file mode 100644 index 00000000..e6684987 --- /dev/null +++ b/sinatra-contrib/spec/content_for/takes_values.slim @@ -0,0 +1,3 @@ +- content_for :foo do |a, b| + i= a + = b diff --git a/sinatra-contrib/spec/content_for_spec.rb b/sinatra-contrib/spec/content_for_spec.rb index b9ab2287..d5cd496e 100644 --- a/sinatra-contrib/spec/content_for_spec.rb +++ b/sinatra-contrib/spec/content_for_spec.rb @@ -2,8 +2,8 @@ require 'backports' require_relative 'spec_helper' describe Sinatra::ContentFor do - # TODO: slim liquid radius markaby builder nokogiri - engines = %w[erb erubis haml] + # TODO: liquid radius markaby builder nokogiri + engines = %w[erb erubis haml slim] engines.each do |inner| engines.each do |outer| describe "#{inner.capitalize} templates with #{outer.capitalize} layouts" do