lib/spontaneous/publishing/steps/render_revision.rb
module Spontaneous::Publishing::Steps
class RenderRevision < BaseStep
# Wrap any exceptions raised during the render with information
# about the page+output that raised the error (preserving the
# stack trace)
class RenderException < Spontaneous::Error
def initialize(output, exception)
super("Exception rendering page #{output.url_path.inspect}: #{exception}")
set_backtrace(exception.backtrace)
end
end
def call
progress.stage('rendering')
render_pages
end
def count
renderable_pages.map { |page| page.outputs.length }.inject(0, :+)
end
def rollback
end
def render_pages
renderable_pages.each do |page|
render_page(page)
end
end
def render_page(page)
page.outputs.each do |output|
render_output(output)
end
end
def render_output(output)
output.publish_page(renderer(output), revision, transaction)
progress.step(1, output.url_path.inspect)
rescue => e
raise RenderException.new(output, e)
end
def renderer(output)
format = output.format
return renderer_cache[format] if renderer_cache.key?(format)
renderer_cache[format] = output.publish_renderer(transaction)
end
def renderer_cache
@renderer_cache ||= Hash.new
end
def renderable_pages
site.pages
end
end
end