lib/compiler.rb in nanoc-1.2 vs lib/compiler.rb in nanoc-1.3

- old
+ new

@@ -37,35 +37,27 @@ # Compile all pages pages = compile_pages(uncompiled_pages) # Put pages in their layouts pages.each do |page| - # Prepare layout content - content = nil - context = { :page => page.merge(:_content_filename => nil), :pages => pages } - layout = layout_for_page(page) + # Skip pages that should not be outputed + next if page.skip_output + begin - case layout[:type] - when :eruby - content = layout[:content].eruby(context) - when :haml - content = layout[:content].haml(context) - when :markaby - content = layout[:content].markaby(context) - when :liquid - content = layout[:content].liquid(context) - end + # Prepare layout content + content = layouted_page(page, pages) + + # Write page with layout + FileManager.create_file(path_for_page(page)) { content } rescue => exception - $stderr.puts "Exception occured while layouting page" + + $stderr.puts "Exception occured while layouting page " + "'#{page[:_content_filename]}' in layout '#{page[:layout]}':" unless $quiet $stderr.puts exception unless $quiet $stderr.puts exception.backtrace.join("\n") unless $quiet exit end - # Write page with layout - FileManager.create_file(path_for_page(page)) { content } end end private @@ -131,30 +123,64 @@ end end # Compiles the given pages and returns the compiled pages def compile_pages(a_pages) - a_pages.inject([]) do |pages, page| + # Create page objects from given pages + given_pages = [] + a_pages.each { |page| given_pages << Page.new(page) } + + # Create arrays for two kinds of pages + compiled_pages = [] + uncompiled_pages = [] + given_pages.each { |page| uncompiled_pages << page } + + # Compile all pages + given_pages.each do |page| # Read page - content = File.read(page[:_content_filename]) + content = File.read(page._content_filename) - # Filter page + # Compile page begin - content = content.filter(page[:filters], :assigns => { :page => Page.new(page), :pages => pages }) + content = content.filter(page.filters, :assigns => { :page => page, :pages => uncompiled_pages + compiled_pages }) rescue Exception => exception - $stderr.puts "Exception occured while compiling page" + + $stderr.puts "Exception occured while compiling page " + "'#{page[:_content_filename]}':" unless $quiet $stderr.puts exception unless $quiet $stderr.puts exception.backtrace.join("\n") unless $quiet exit end + # Move from uncompiled to compiled + uncompiled_pages -= [ page ] + compiled_pages += [ page ] + # Create compiled page - compiled_page = page.merge( :content => content ) + page[:content] = content + end - # Remember page - pages + [ Page.new(compiled_page) ] + # Return all pages + compiled_pages + end + + # Layouts the page + def layouted_page(a_page, a_pages) + context = { :page => a_page.merge(:_content_filename => nil), :pages => a_pages } + layout = layout_for_page(a_page) + + content = nil + case layout[:type] + when :eruby + content = layout[:content].eruby(context) + when :haml + content = layout[:content].haml(context) + when :markaby + content = layout[:content].markaby(context) + when :liquid + content = layout[:content].liquid(context) end + + content end end end