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