Exporting to the Filesystem

Getting ready for a transition to sitefs, I wrote this script to export my site to files on disk.

require 'rubygems'
require 'activerecord'

ActiveRecord::Base.establish_connection(...)

class Page < ActiveRecord::Base
  has_many :page_versions
end

class PageVersion < ActiveRecord::Base
  has_many :comments
end

class Comment < ActiveRecord::Base
end

def write(filename, data, time = nil)
  File.open(filename, "w") do |f|
    f.write("#{data}\n")
  end
  unless time.nil?
    `touch -m -t #{time.strftime("%Y%m%d%H%M.%S")} #{filename}`
  end
end

Dir.mkdir("pages")

Page.find(:all).each do |page|
  Dir.mkdir("pages/#{page.slug}")
  Dir.mkdir("pages/#{page.slug}/comments")
  
  versions = page.page_versions.find(:all, :order => "publish_date ASC")
  front_page = versions.any? { |ver| ver.show_on_front_page }
  
  write "pages/#{page.slug}/title", page.title
  write "pages/#{page.slug}/front_page", (front_page ? "1" : "0")
  
  c = 1
  
  versions.each do |ver|
    write "pages/#{page.slug}/#{ver.version}", ver.body, ver.publish_date
    
    ver.comments.find(:all, :order => "created_on ASC").each do |comment|
      Dir.mkdir("pages/#{page.slug}/comments/#{c}")
      
      write "pages/#{page.slug}/comments/#{c}/name", comment.name
      write "pages/#{page.slug}/comments/#{c}/ip", comment.ip
      write "pages/#{page.slug}/comments/#{c}/moderated", "0"
      write "pages/#{page.slug}/comments/#{c}/body", comment.body, comment.created_on
      
      c += 1
    end
  end
end

Is this old-school, or what?


Comments

Click here to view the comments on this post.