read posts

This commit is contained in:
Tom Preston-Werner 2008-10-19 20:12:49 -07:00
parent 6fb91f4f7d
commit 6c0eeb573e
5 changed files with 67 additions and 1 deletions

View File

@ -5,6 +5,7 @@ require 'rubygems'
# core # core
require 'fileutils' require 'fileutils'
require 'time'
# stdlib # stdlib

View File

@ -1,5 +1,27 @@
module AutoBlog module AutoBlog
class Post class Post
MATCHER = /^(\d+-\d+-\d+)-(.*)\.([^.]+)$/
def self.valid?(name)
name =~ MATCHER
end
attr_accessor :date, :slug, :ext
def initialize(base, name)
@base = base
@name = name
self.process(name)
end
def process(name)
m, date, slug, ext = *name.match(MATCHER)
self.date = Time.parse(date)
self.slug = slug
self.ext = ext
end
end end
end end

View File

@ -2,16 +2,18 @@ module AutoBlog
class Site class Site
attr_accessor :source, :dest attr_accessor :source, :dest
attr_accessor :layouts attr_accessor :layouts, :posts
def initialize(source, dest) def initialize(source, dest)
self.source = source self.source = source
self.dest = dest self.dest = dest
self.layouts = {} self.layouts = {}
self.posts = []
end end
def process def process
self.read_layouts self.read_layouts
self.read_posts
end end
def read_layouts def read_layouts
@ -26,6 +28,20 @@ module AutoBlog
rescue Errno::ENOENT => e rescue Errno::ENOENT => e
# ignore missing layout dir # ignore missing layout dir
end end
def read_posts
base = File.join(self.source, "posts")
entries = Dir.entries(base)
entries = entries.reject { |e| File.directory?(e) }
entries.each do |f|
self.posts << Post.new(base, f) if Post.valid?(f)
end
self.posts.sort!
rescue Errno::ENOENT => e
# ignore missing layout dir
end
end end
end end

21
test/test_post.rb Normal file
View File

@ -0,0 +1,21 @@
require File.dirname(__FILE__) + '/helper'
class TestPost < Test::Unit::TestCase
def setup
end
def test_valid
assert Post.valid?("2008-10-19-foo-bar.textile")
assert !Post.valid?("blah")
end
def test_site_init
p = Post.allocate
p.process("2008-10-19-foo-bar.textile")
assert_equal Time.parse("2008-10-19"), p.date
assert_equal "foo-bar", p.slug
assert_equal "textile", p.ext
end
end

View File

@ -15,4 +15,10 @@ class TestSite < Test::Unit::TestCase
assert_equal ["default"], @s.layouts.keys assert_equal ["default"], @s.layouts.keys
end end
def test_read_posts
@s.read_posts
assert_equal 1, @s.posts.size
end
end end