From e44afbe80d919a127420808f48dca39f8158f6b7 Mon Sep 17 00:00:00 2001 From: Sami Samhuri Date: Sun, 19 Apr 2015 10:41:47 -0700 Subject: [PATCH] implement previewing posts & drafts --- server/harp_blog.rb | 27 +++++++++++++++++++-------- server/server.rb | 4 ++-- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/server/harp_blog.rb b/server/harp_blog.rb index b99350e..415fe7e 100644 --- a/server/harp_blog.rb +++ b/server/harp_blog.rb @@ -80,16 +80,16 @@ class HarpBlog read_post(File.join(year, month), id) end - def get_post_html(year, month, id) - raise 'unimplemented' - end - def get_draft(id) read_post('drafts', id, draft: true) end - def get_draft_html(id) - raise 'unimplemented' + def preview_post(year, month, id) + read_rendered_post(File.join(year, month), id) + end + + def preview_draft(id) + read_rendered_post('drafts', id) end def create_post(title, body, url, extra_fields = nil) @@ -191,8 +191,8 @@ class HarpBlog path_for(*args) end - def drafts_path(*components) - post_path('drafts', *components) + def rendered_post_path(dir, id) + path_for('www/posts', dir, id, 'index.html') end def read_posts(post_dir, extra_fields = nil) @@ -235,6 +235,17 @@ class HarpBlog end end + def read_rendered_post(post_dir, id) + post_filename = rendered_post_path(post_dir, id) + if File.exists?(post_filename) + File.read(post_filename) + else + message = "missing rendered HTML for post #{post_dir}/#{id} at path #{post_filename}" + $stderr.puts "[HarpBlog#read_rendered_post] #{message}" + raise InvalidDataError.new(message) + end + end + def save_post(action, post) git_fetch git_reset_hard('origin/master') diff --git a/server/server.rb b/server/server.rb index a148cc6..5247239 100755 --- a/server/server.rb +++ b/server/server.rb @@ -174,7 +174,7 @@ get '/posts/:year/:month/:id' do |year, month, id| elsif request.accept?('text/html') status 200 headers 'Content-Type' => 'text/html' - blog.get_post_html(year, month, id) + blog.preview_post(year, month, id) else status 400 "content not available in an acceptable format: #{request.accept.join(', ')}" @@ -202,7 +202,7 @@ get '/drafts/:id' do |id| elsif request.accept?('text/html') status 200 headers 'Content-Type' => 'text/html' - blog.get_draft_html(id) + blog.preview_draft(id) else status 400 "content not available in an acceptable format: #{request.accept.join(', ')}"