read posts
This commit is contained in:
parent
6fb91f4f7d
commit
6c0eeb573e
|
@ -5,6 +5,7 @@ require 'rubygems'
|
||||||
|
|
||||||
# core
|
# core
|
||||||
require 'fileutils'
|
require 'fileutils'
|
||||||
|
require 'time'
|
||||||
|
|
||||||
# stdlib
|
# stdlib
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
Loading…
Reference in New Issue