Tom Says: Code something crazy every day you feel like it!
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?
Posted Jan 16, 2008, in the early morning.