diff --git a/spec/asset/hello_with_content_for.ecr b/spec/asset/hello_with_content_for.ecr
new file mode 100644
index 0000000..cc3beba
--- /dev/null
+++ b/spec/asset/hello_with_content_for.ecr
@@ -0,0 +1,6 @@
+Hello <%= name %>
+
+<% content_for "custom" do |io| %>
+ io << "
Hello from otherside
"
+ io
+<% end %>
\ No newline at end of file
diff --git a/spec/asset/layout_with_yield.ecr b/spec/asset/layout_with_yield.ecr
new file mode 100644
index 0000000..035cc8d
--- /dev/null
+++ b/spec/asset/layout_with_yield.ecr
@@ -0,0 +1,3 @@
+<%= content %>
+
+<%= yield_content "custom" %>
\ No newline at end of file
diff --git a/spec/view_spec.cr b/spec/view_spec.cr
index ab17b60..1821c60 100644
--- a/spec/view_spec.cr
+++ b/spec/view_spec.cr
@@ -34,4 +34,14 @@ describe "Views" do
client_response = call_request_on_app(request)
client_response.body.should contain("Hello world")
end
+
+ it "renders layout with content_for" do
+ get "/view" do
+ name = "Kemal"
+ render "spec/asset/hello_with_content_for.ecr", "spec/asset/layout_with_yield.ecr"
+ end
+ request = HTTP::Request.new("GET", "/view")
+ client_response = call_request_on_app(request)
+ client_response.body.should contain("Hello world")
+ end
end
diff --git a/src/kemal/helpers.cr b/src/kemal/helpers.cr
index bf6f4c6..48863b9 100644
--- a/src/kemal/helpers.cr
+++ b/src/kemal/helpers.cr
@@ -1,5 +1,18 @@
require "kilt"
+CONTENTS = {} of String => MemoryIO -> String
+
+def content_for(name : String, &block : MemoryIO -> String)
+ puts "Called content_for"
+ CONTENTS[name] = block
+ # CONTENTS[name] = block
+end
+
+def yield_content(name)
+ puts "Called yield_content"
+ CONTENTS[name].call
+end
+
# Uses built-in ECR to render views.
# # Usage
# get '/' do
@@ -7,7 +20,12 @@ require "kilt"
# end
macro render(filename, layout)
content = render {{filename}}
- render {{layout}}
+ if CONTENTS.size > 0
+ puts "CONTENTS greater than 0"
+ render {{layout}}
+ else
+ render {{layout}}
+ end
end
macro render(filename, *args)
@@ -20,6 +38,9 @@ macro return_with(env, status_code = 200, response = "")
next
end
+
+
+
# Adds given HTTP::Handler+ to handlers.
def add_handler(handler)
Kemal.config.add_handler handler