diff --git a/spec/blueprint/html/hooks_spec.cr b/spec/blueprint/html/around_render_spec.cr similarity index 59% rename from spec/blueprint/html/hooks_spec.cr rename to spec/blueprint/html/around_render_spec.cr index db53826..686e7aa 100644 --- a/spec/blueprint/html/hooks_spec.cr +++ b/spec/blueprint/html/around_render_spec.cr @@ -7,18 +7,10 @@ private class ExampleWithBlock h1 { yield } end - private def before_render(&) - span { "Before render" } - end - private def around_render(&) - span { "Around start" } + span { "Before" } yield - span { "Around end" } - end - - private def after_render(&) - span { "After render" } + span { "After" } end end @@ -29,31 +21,21 @@ private class ExampleWithoutBlock h1 { "Without block" } end - private def before_render(&) - span { "Before render" } - end - private def around_render(&) - span { "Around start" } + span { "Before" } yield - span { "Around end" } - end - - private def after_render(&) - span { "After render" } + span { "After" } end end -describe "hooks" do +describe "around render" do context "with block" do it "allows defining hooks before_render, around_render, after_render" do actual_html = ExampleWithBlock.new.to_s { "With block" } expected_html = normalize_html <<-HTML - Before render - Around start + Before

With block

- Around end - After render + After HTML actual_html.should eq expected_html @@ -64,11 +46,9 @@ describe "hooks" do it "allows defining hooks before_render, around_render, after_render" do actual_html = ExampleWithoutBlock.new.to_s expected_html = normalize_html <<-HTML - Before render - Around start + Before

Without block

- Around end - After render + After HTML actual_html.should eq expected_html diff --git a/src/blueprint/html.cr b/src/blueprint/html.cr index c7d9b8b..3eb9a07 100644 --- a/src/blueprint/html.cr +++ b/src/blueprint/html.cr @@ -36,19 +36,7 @@ module Blueprint::HTML @buffer = buffer - {% if @type.has_method?(:before_render) %} - before_render { } - {% end %} - - {% if @type.has_method?(:around_render) %} - around_render { blueprint } - {% else %} - blueprint - {% end %} - - {% if @type.has_method?(:after_render) %} - after_render { } - {% end %} + around_render { blueprint } end def to_s(buffer : String::Builder, &) : Nil @@ -56,27 +44,19 @@ module Blueprint::HTML @buffer = buffer - {% if @type.has_method?(:before_render) %} - before_render { yield } - {% end %} - - {% if @type.has_method?(:around_render) %} - around_render do - blueprint { BufferRenderer.render(to: @buffer) { yield } } - end - {% else %} + around_render do blueprint { BufferRenderer.render(to: @buffer) { yield } } - {% end %} - - {% if @type.has_method?(:after_render) %} - after_render { yield } - {% end %} + end end def render? : Bool true end + def around_render(&) + yield + end + def element(tag_name : String | Symbol, **attributes, &) : Nil @buffer << "<" @buffer << tag_name