diff --git a/lib/ruport/controller.rb b/lib/ruport/controller.rb index f28b4cf9..6515c9ec 100644 --- a/lib/ruport/controller.rb +++ b/lib/ruport/controller.rb @@ -479,6 +479,7 @@ def _run_ end finalize self.class.final_stage if self.class.final_stage + maybe :finalize end def execute_stages diff --git a/lib/ruport/formatter/pdf.rb b/lib/ruport/formatter/pdf.rb index a7223313..d3d2136f 100644 --- a/lib/ruport/formatter/pdf.rb +++ b/lib/ruport/formatter/pdf.rb @@ -382,6 +382,10 @@ def draw_text!(text,text_opts) text_opts[:font_size], text_opts[:angle] || 0) move_cursor_to(ypos) + end + + def finalize + render_pdf end end diff --git a/test/pdf_formatter_test.rb b/test/pdf_formatter_test.rb index d639ecb8..05eb193a 100644 --- a/test/pdf_formatter_test.rb +++ b/test/pdf_formatter_test.rb @@ -199,7 +199,7 @@ def test_draw_table_should_not_destroy_nested_rendering_options f.draw_table Table(%w[a b c], :data => [[1,2,3],[4,5,6]]) assert_equal({ :justification => :center }, f.options[:table_format][:column_options][:heading]) - end + end end @@ -326,4 +326,29 @@ def test_draw_text_retains_cursor a.draw_text "foo", :left => a.left_boundary + 50, :y => 500 assert_equal 100, a.cursor end +end + +class SimpleController < Ruport::Controller + stage :foo + + class PDF < Ruport::Formatter::PDF + renders :pdf, :for => SimpleController + + build :foo do + add_text "Blah" + end + end +end + +class TestPDFFinalize < Test::Unit::TestCase + + context "When rendering a PDF" do + def specify_finalize_should_be_called + SimpleController.render_pdf do |r| + r.formatter.expects(:render_pdf) + end + end + end + end + \ No newline at end of file diff --git a/test/renderer_test.rb b/test/renderer_test.rb index d9317dce..ec76e03c 100644 --- a/test/renderer_test.rb +++ b/test/renderer_test.rb @@ -84,8 +84,15 @@ def finalize_document; end class VanillaBinary < Ruport::Formatter renders :bin, :for => VanillaController save_as_binary_file -end +end +class SpecialFinalize < Ruport::Formatter + renders :with_finalize, :for => VanillaController + + def finalize + output << "I has been finalized" + end +end class TestController < Test::Unit::TestCase @@ -96,7 +103,14 @@ def teardown def test_trivial actual = OldSchoolController.render(:text) assert_equal "header\nbody\nfooter\n", actual - end + end + + context "when running a formatter with custom a finalize method" do + def specify_finalize_method_should_be_called + assert_equal "I has been finalized", + VanillaController.render_with_finalize + end + end context "when using templates" do def specify_apply_template_should_be_called