lib/compiler.rb in nanoc-1.0.1 vs lib/compiler.rb in nanoc-1.1

- old
+ new

@@ -1,96 +1,54 @@ module Nanoc - class Compiler - DEFAULT_CONFIG = { - :output_dir => 'output' - } + DEFAULT_CONFIG = { :output_dir => 'output' } + DEFAULT_PAGE = { :filters => [], :extension => 'html', :order => 0, :layout => "default" } - DEFAULT_PAGE = { - :layout => '<%= @content %>', - :filters => [], - :order => 0, - :extension => 'html' - } - def initialize Nanoc.ensure_in_site - - @config = DEFAULT_CONFIG.merge(File.read_clean_yaml('config.yaml')) - @global_page = DEFAULT_PAGE.merge(File.read_clean_yaml('meta.yaml')) - @default_layout = File.read_file('layouts/' + @global_page[:layout] + '.erb') + + @config = DEFAULT_CONFIG.merge(YAML.load_file_and_clean('config.yaml')) + @global_page = DEFAULT_PAGE.merge(YAML.load_file_and_clean('meta.yaml')) end def run - Nanoc.ensure_in_site - - # Require files in lib/ Dir.glob('lib/*.rb').each { |f| require f } - # Compile pages - pages = uncompiled_pages.sort { |x,y| x[:order].to_i <=> y[:order].to_i } - pages = compile_pages(pages) - - # Put pages in their layout + pages = compile_pages(uncompiled_pages) pages.each do |page| - content_with_layout = layout_for_page(page).eruby(page.merge({ :pages => pages })) - FileManager.create_file(path_for_page(page)) { content_with_layout } + content = (page[:layout].nil? ? '<%= @page[:content] %>' : File.read("layouts/#{page[:layout]}.erb")).eruby(page.merge({ :page => page, :pages => pages })) + FileManager.create_file(path_for_page(page)) { content } end end private def uncompiled_pages - # Get all meta file names - meta_filenames = Dir.glob('content/**/meta.yaml') + Dir.glob('content/**/meta.yaml').collect do |filename| + page = @global_page.merge(YAML.load_file_and_clean(filename)) + page[:path] = filename.sub(/^content/, '').sub('meta.yaml', '') - # Read all meta files - pages = meta_filenames.collect do |filename| - # Get meta file - page = @global_page.merge(File.read_clean_yaml(filename)).merge({:path => filename.sub(/^content/, '').sub('meta.yaml', '')}) + content_filenames = Dir.glob(filename.sub('meta.yaml', File.basename(File.dirname(filename)) + '.*')) + content_filenames += Dir.glob("#{File.dirname(filename)}/index.*") # fallback for nanoc 1.0 + content_filenames.ensure_single('content files', File.dirname(filename)) + page[:_content_filename] = content_filenames[0] - # Get index filename - index_filenames = Dir.glob(File.dirname(filename) + '/index.*') - index_filenames.ensure_single('index files', File.dirname(filename)) - page[:_index_filename] = index_filenames[0] - page + end.compact.reject { |page| page[:is_draft] }.sort do |x,y| + x[:order].to_i == y[:order].to_i ? x[:path] <=> y[:path] : x[:order].to_i <=> y[:order].to_i end end def path_for_page(a_page) - if a_page[:custom_path].nil? - @config[:output_dir] + a_page[:path] + 'index.' + a_page[:extension] - else - @config[:output_dir] + a_page[:custom_path] - end + @config[:output_dir] + ( a_page[:custom_path].nil? ? a_page[:path] + 'index.' + a_page[:extension] : a_page[:custom_path] ) end - def layout_for_page(a_page) - if a_page[:layout] == 'none' - '<%= @content %>' - elsif @global_page[:layout] != a_page[:layout] - File.read_file('layouts/' + a_page[:layout] + '.erb') - else - @default_layout - end - end - def compile_pages(a_pages) - pages = [] - - a_pages.each do |page| - # Read and filter page - content = File.read_file(page[:_index_filename]) - content.filter!(page[:filters], :eruby_context => { :pages => pages }) unless page[:filters].nil? - - # Store page - pages << page.merge( { :content => content }) + a_pages.inject([]) do |pages, page| + content = File.read(page[:_content_filename]).filter(page[:filters], :eruby_context => { :page => page, :pages => pages }) + pages + [ page.merge( { :content => content }) ] end - - pages end end - end