From 53e4ea19fdf0488c7575cd2fff60386015b37cd2 Mon Sep 17 00:00:00 2001 From: Bob McWhirter Date: Wed, 2 May 2012 18:27:25 -0400 Subject: [PATCH] Mix org-mode support back in. --- lib/awestruct/handler_chains.rb | 8 +++++ lib/awestruct/handlers/orgmode_handler.rb | 35 +++++++++++++++++++++ spec/orgmode_handler_spec.rb | 38 +++++++++++++++++++++++ spec/test-data/handlers/orgmode-page.org | 6 ++++ 4 files changed, 87 insertions(+) create mode 100644 lib/awestruct/handlers/orgmode_handler.rb create mode 100644 spec/orgmode_handler_spec.rb create mode 100644 spec/test-data/handlers/orgmode-page.org diff --git a/lib/awestruct/handler_chains.rb b/lib/awestruct/handler_chains.rb index f14ae779..1e30f7a4 100644 --- a/lib/awestruct/handler_chains.rb +++ b/lib/awestruct/handler_chains.rb @@ -3,6 +3,7 @@ require 'awestruct/handlers/front_matter_handler' require 'awestruct/handlers/interpolation_handler' require 'awestruct/handlers/markdown_handler' +require 'awestruct/handlers/orgmode_handler' require 'awestruct/handlers/textile_handler' require 'awestruct/handlers/haml_handler' require 'awestruct/handlers/sass_handler' @@ -30,6 +31,13 @@ class HandlerChains Awestruct::Handlers::TextileHandler, Awestruct::Handlers::LayoutHandler ), + HandlerChain.new( /\.org$/, + Awestruct::Handlers::FileHandler, + Awestruct::Handlers::FrontMatterHandler, + Awestruct::Handlers::InterpolationHandler, + Awestruct::Handlers::OrgmodeHandler, + Awestruct::Handlers::LayoutHandler + ), HandlerChain.new( /\.haml$/, Awestruct::Handlers::FileHandler, Awestruct::Handlers::FrontMatterHandler, diff --git a/lib/awestruct/handlers/orgmode_handler.rb b/lib/awestruct/handlers/orgmode_handler.rb new file mode 100644 index 00000000..78636345 --- /dev/null +++ b/lib/awestruct/handlers/orgmode_handler.rb @@ -0,0 +1,35 @@ + +require 'awestruct/handlers/base_handler' +require 'org-ruby' + +module Awestruct + module Handlers + class OrgmodeHandler < BaseHandler + + def initialize(site, delegate) + super( site, delegate ) + end + + def simple_name + File.basename( relative_source_path, '.org' ) + end + + def output_filename + File.basename( relative_source_path, '.org' ) + '.html' + end + + def output_extension + '.html' + end + + def content_syntax + :orgmode + end + + def rendered_content(context, with_layouts=true) + Orgmode::Parser.new(super( context, with_layouts) ).to_html + end + + end + end +end diff --git a/spec/orgmode_handler_spec.rb b/spec/orgmode_handler_spec.rb new file mode 100644 index 00000000..af055e72 --- /dev/null +++ b/spec/orgmode_handler_spec.rb @@ -0,0 +1,38 @@ + +require 'awestruct/handlers/file_handler' +require 'awestruct/handlers/orgmode_handler' + +require 'hashery/open_cascade' + +describe Awestruct::Handlers::OrgmodeHandler do + + before :all do + @site = OpenCascade.new :encoding=>false, :dir=>Pathname.new( File.dirname(__FILE__) + '/test-data/handlers' ) + end + + def handler_file(path) + "#{@site.dir}/#{path}" + end + + def create_context + OpenCascade.new :site=>@site + end + + it "should provide a simple name for the page" do + file_handler = Awestruct::Handlers::FileHandler.new( @site, handler_file( "orgmode-page.org" ) ) + orgmode_handler = Awestruct::Handlers::OrgmodeHandler.new( @site, file_handler ) + + orgmode_handler.simple_name.should == 'orgmode-page' + end + + it "should successfully render an org-mode page" do + file_handler = Awestruct::Handlers::FileHandler.new( @site, handler_file( "orgmode-page.org" ) ) + orgmode_handler = Awestruct::Handlers::OrgmodeHandler.new( @site, file_handler ) + + rendered = orgmode_handler.rendered_content( create_context ) + rendered.should_not be_nil + rendered.should =~ %r(

Fruit

) + rendered.should =~ %r(

Apples are red

) + end + +end diff --git a/spec/test-data/handlers/orgmode-page.org b/spec/test-data/handlers/orgmode-page.org new file mode 100644 index 00000000..1dc63f8c --- /dev/null +++ b/spec/test-data/handlers/orgmode-page.org @@ -0,0 +1,6 @@ +* Fruit +** Apples +Apples are red +** Oranges +Oranges are orange +*Vegetables