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