tasks/site.rake
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
require 'rubygems' require 'extlib' require 'pathname' require 'fileutils' require 'nanoc3' require 'lib/utils.rb' include SiteUtils namespace :site do task :clean do output = Pathname.new(Dir.pwd)/'output' puts "Deleting all files in output dir..." output.rmtree (output/'data').mkpath end task :update => [:copy_resources] do system "nanoc3 co" end task :run => [:copy_resources] do system "nanoc3 aco -s thin" end task :rebuild => [:clean, :update] do end task :tags do site = Nanoc3::Site.new('.') site.load_data dir = Pathname(Dir.pwd)/'content/tags' dir.rmtree if dir.exist? dir.mkpath tags = {} # Collect tag and page data site.items.each do |p| next unless p.attributes[:tags] p.attributes[:tags].each do |t| if tags[t] tags[t] = tags[t]+1 else tags[t] = 1 end end end # Write pages tags.each_pair do |k, v| write_tag_page dir, k, v write_tag_feed_page dir, k, 'RSS' write_tag_feed_page dir, k, 'Atom' end end task :archives do site = Nanoc3::Site.new('.') site.load_data dir = Pathname(Dir.pwd)/'content/archives' dir.rmtree if dir.exist? dir.mkpath m_articles = [] index = -1 current_month = "" # Collect month and page data articles = site.items.select{|p| p.attributes[:date] && p.attributes[:type] == 'article'}.sort{|a, b| a.attributes[:date] <=> b.attributes[:date]}.reverse articles.each do |a| month = a.attributes[:date].strftime("%B %Y") if current_month != month then # new month m_articles << [month, [a]] index = index + 1 current_month = month else # same month m_articles[index][1] << a end end # Write pages m_articles.each do |m| write_archive_page dir, m[0], m[1].length end end task :copy_resources do pwd = Pathname.new Dir.pwd copy_f = lambda do |src| if src.file? then rel_path = src.relative_path_from(pwd/'resources').to_s dst = Pathname.new(pwd/"output/#{rel_path}") if !dst.exist? || dst.exist? && !FileUtils.cmp(dst.to_s, src.to_s) then dst.parent.mkpath FileUtils.cp src.to_s, dst.to_s puts "Copied '#{src}'." end end end file_dirs = [Pathname.new(pwd/'resources/images'), Pathname.new(pwd/'resources/js'), Pathname.new(pwd/'resources/img'), Pathname.new(pwd/'resources/files'), Pathname.new(pwd/'resources/css')] files = [pwd/'resources/.htaccess', pwd/'resources/robots.txt', pwd/'resources/favicon.ico'] files.each { |f| copy_f.call f } file_dirs.each do |d| d.find do |src| copy_f.call src end end end end |