lib/zine.rb in zine-0.1.0 vs lib/zine.rb in zine-0.2.0

- old
+ new

@@ -1,10 +1,9 @@ require 'erb' require 'rainbow' require 'zine/data_page' require 'zine/page' -require 'zine/feed' require 'zine/post' require 'zine/server' require 'zine/tag' require 'zine/templates' require 'zine/version' @@ -39,41 +38,37 @@ end def build_site read_post_markdown_files sort_posts_by_date - write_posts + write_posts_and_headlines housekeeping_copy write_other_markdown_pages - write_feed preview end def clean_option_paths + directories = @options['directories'] %w(assets posts styles templates).each do |dir| - @options['directories'][dir] = - File.join @options['directories']['source'], - @options['directories'][dir] + directories[dir] = File.join directories['source'], directories[dir] end - @options['directories']['blog'] = - File.join @options['directories']['build'], - @options['directories']['blog'] + directories['blog'] = File.join directories['build'], directories['blog'] end def housekeeping_copy - src_dir = @options['directories']['source'] + directories = @options['directories'] + src_dir = directories['source'] search = File.join src_dir, '**', '*.*' - dir_options = @options['directories'] possible = Dir.glob(search, File::FNM_DOTMATCH).reject do |found| found =~ /^.+\.md$|^.+\.erb$|^\.DS_Store$|^\.$|^\.\.$'/ || - File.directory?(found) || found[dir_options['posts']] || - found[dir_options['templates']] + File.directory?(found) || found[directories['posts']] || + found[directories['templates']] end possible.each do |file| dir = Pathname(File.dirname(file)).relative_path_from(Pathname(src_dir)) filename = File.basename file - dest = File.join @options['directories']['build'], dir + dest = File.join directories['build'], dir FileUtils.mkdir_p dest FileUtils.cp file, File.join(dest, filename) end end @@ -93,13 +88,14 @@ Server.new File.absolute_path(@options['directories']['build']) end def read_post_markdown_files file_name_array = Dir[File.join(@options['directories']['posts'], '*.md')] + post_name = @options['templates']['post'] file_name_array.each do |file| @post_array << Zine::Post.new(file, - make_template_bundle('post'), + make_template_bundle(post_name), @options) end end def sort_posts_by_date @@ -107,50 +103,69 @@ post.formatted_data.page[:date_rfc3339] end.reverse! @post_array.freeze end - def write_feed - number = @options['options']['number_items_in_RSS'] - feed = Zine::Feed.new(@post_array.first(number), @options) - feed.process + def headline_pages + dir = @options['directories']['build'] + options = @options['options'] + templates = @options['templates'] + [{ build_dir: dir, name: 'articles', number: @post_array.size, + suffix: '.html', template_name: templates['articles'], + title: 'Articles' }, + { build_dir: dir, name: 'index', + number: options['num_items_on_home'], suffix: '.html', + template_name: templates['home'], title: 'Home' }, + { build_dir: dir, name: 'rss', + number: options['number_items_in_RSS'], suffix: '.xml', + template_name: templates['rss'], title: '' }] end - def write_homepage - homepage_data = { build_dir: @options['directories']['build'], - name: 'index', title: 'Home', post_array: [] } - @post_array.first(@options['options']['num_items_on_home']).each do |post| - homepage_data[:post_array] << { page: post.formatted_data.page, - html: post.formatted_data.html } + def wrangle_headlines + headline_pages.each do |page| + write_headline page end - home_page = DataPage.new(homepage_data, make_template_bundle('home'), - @options) - home_page.write end + def write_headline(page) + data = page + data[:post_array] = [] + @post_array.first(page[:number]).each do |post| + post_data = post.formatted_data + data[:post_array] << { page: post_data.page, html: post_data.html, + uri: post_data.uri } + end + data_page = DataPage.new(data, make_template_bundle(data[:template_name]), + @options, data[:suffix]) + data_page.write + end + def write_other_markdown_pages dir_options = @options['directories'] src_dir = dir_options['source'] search = File.join src_dir, '**', '*.md' + default_name = @options['templates']['default'] Dir[search].reject { |found| found[dir_options['posts']] }.each do |file| dir = Pathname(File.dirname(file)).relative_path_from(Pathname(src_dir)) file_name = "#{File.basename(file, '.*')}.html" dest = File.join dir_options['build'], dir FileUtils.mkdir_p dest page = Zine::Page.new(file, File.join(dest, file_name), - make_template_bundle('default'), @options) + make_template_bundle(default_name), @options) page.process end end - def write_posts + def write_posts_and_headlines tags_by_post = [] @post_array.each do |post| tags_by_post << post.process end - tags = Zine::Tag.new tags_by_post, make_template_bundle('tag'), - make_template_bundle('tag_index'), @options + tag_name = @options['templates']['tag'] + tag_index_name = @options['templates']['tag_index'] + tags = Zine::Tag.new tags_by_post, make_template_bundle(tag_name), + make_template_bundle(tag_index_name), @options tags.write_tags - write_homepage + wrangle_headlines end end end