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