class Dimples::Site
A class representing a single generated website.
Attributes
config[RW]
Public Class Methods
generate(config = {})
click to toggle source
# File lib/dimples/site.rb, line 13 def self.generate(config = {}) new(config).generate end
new(config = {})
click to toggle source
# File lib/dimples/site.rb, line 17 def initialize(config = {}) @config = Config.new(config) end
Public Instance Methods
categories()
click to toggle source
# File lib/dimples/site.rb, line 49 def categories @categories ||= {}.tap do |categories| posts.each do |post| post.categories.each do |category| categories[category] ||= [] categories[category].append(post) end end end end
generate()
click to toggle source
# File lib/dimples/site.rb, line 21 def generate prepare_output_directory generate_posts generate_categories generate_pages copy_assets end
layouts()
click to toggle source
# File lib/dimples/site.rb, line 43 def layouts @layouts ||= Dir.glob(File.join(@config[:sources][:layouts], '**', '*.erb')).to_h do |path| [File.basename(path, '.erb'), Dimples::Sources::Layout.new(self, path)] end end
metadata()
click to toggle source
# File lib/dimples/site.rb, line 60 def metadata @metadata ||= Metadata.new(posts: posts, categories: categories) end
pages()
click to toggle source
# File lib/dimples/site.rb, line 37 def pages @pages ||= Dir.glob(File.join(@config[:sources][:pages], '**', '*.erb')).map do |path| Dimples::Sources::Page.new(self, path) end end
posts()
click to toggle source
# File lib/dimples/site.rb, line 31 def posts @posts ||= Dir.glob(File.join(@config[:sources][:posts], '**', '*.markdown')).map do |path| Dimples::Sources::Post.new(self, path) end.sort_by!(&:date).reverse! end
Private Instance Methods
copy_assets()
click to toggle source
# File lib/dimples/site.rb, line 99 def copy_assets return unless Dir.exist?(@config[:sources][:static]) FileUtils.cp_r(File.join(@config[:sources][:static], '.'), @config[:output][:root]) end
generate_categories()
click to toggle source
# File lib/dimples/site.rb, line 72 def generate_categories categories.each do |category, posts| metadata = { title: category.capitalize, category: category } Pager.paginate(self, "/categories/#{category}/", posts, metadata) generate_feed(File.join(@config[:output][:root], 'categories', category), posts) end end
generate_feed(output_path, posts)
click to toggle source
# File lib/dimples/site.rb, line 84 def generate_feed(output_path, posts) return if layouts['feed'].nil? layouts['feed'].write( File.join(output_path, 'feed.atom'), posts: posts.slice(0, 10) ) end
generate_pages()
click to toggle source
# File lib/dimples/site.rb, line 80 def generate_pages pages.each(&:write) end
generate_posts()
click to toggle source
# File lib/dimples/site.rb, line 66 def generate_posts posts.each(&:write) Pager.paginate(self, @config[:output][:posts].gsub(@config[:output][:root], '').concat('/'), posts) generate_feed(@config[:output][:root], posts) end
prepare_output_directory()
click to toggle source
# File lib/dimples/site.rb, line 93 def prepare_output_directory raise "The site directory (#{@config[:output][:root]}) already exists." if Dir.exist?(@config[:output][:root]) Dir.mkdir(@config[:output][:root]) end