mirror of
https://github.com/samsonjs/samhuri.net.git
synced 2026-04-27 14:57:40 +00:00
add dirty checking and version support to HarpBlog
This commit is contained in:
parent
9028d805ae
commit
3546ab2952
5 changed files with 112 additions and 12 deletions
1
public/version.txt
Normal file
1
public/version.txt
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
890b1508c132cd5ee5db1c28e9dced538b504d96
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
require 'fileutils'
|
require 'fileutils'
|
||||||
require 'json'
|
require 'json'
|
||||||
require './web_title_finder'
|
require './web_title_finder'
|
||||||
|
require './web_version_finder'
|
||||||
|
|
||||||
class HarpBlog
|
class HarpBlog
|
||||||
|
|
||||||
|
|
@ -100,10 +101,31 @@ class HarpBlog
|
||||||
end # Post
|
end # Post
|
||||||
|
|
||||||
|
|
||||||
def initialize(path, dry_run = true, title_finder = nil)
|
def initialize(path, dry_run = true, title_finder = nil, version_finder = nil)
|
||||||
@path = path
|
@path = path
|
||||||
@dry_run = dry_run
|
@dry_run = dry_run
|
||||||
@title_finder = title_finder || WebTitleFinder.new
|
@title_finder = title_finder || WebTitleFinder.new
|
||||||
|
@version_finder = version_finder || WebVersionFinder.new
|
||||||
|
end
|
||||||
|
|
||||||
|
def local_version
|
||||||
|
git_sha
|
||||||
|
end
|
||||||
|
|
||||||
|
def remote_version
|
||||||
|
@version_finder.find_version
|
||||||
|
end
|
||||||
|
|
||||||
|
def dirty?
|
||||||
|
local_version != remote_version
|
||||||
|
end
|
||||||
|
|
||||||
|
def status
|
||||||
|
{
|
||||||
|
'local-version' => local_version,
|
||||||
|
'remote-version' => remote_version,
|
||||||
|
'dirty' => dirty?,
|
||||||
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
def years
|
def years
|
||||||
|
|
@ -353,6 +375,14 @@ class HarpBlog
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def git_sha
|
||||||
|
if output = run('git log -n1 | head -n1 | cut -d" " -f2')
|
||||||
|
output.strip
|
||||||
|
else
|
||||||
|
'fake-sha'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def git_commit(title, *files)
|
def git_commit(title, *files)
|
||||||
quoted_files = files.map { |f| "\"#{quote(f)}\"" }
|
quoted_files = files.map { |f| "\"#{quote(f)}\"" }
|
||||||
message = "linked '#{quote(title)}'"
|
message = "linked '#{quote(title)}'"
|
||||||
|
|
|
||||||
|
|
@ -143,7 +143,10 @@ RSpec.describe HarpBlog do
|
||||||
before :each do
|
before :each do
|
||||||
@test_blog_ref = git_sha(TEST_BLOG_PATH)
|
@test_blog_ref = git_sha(TEST_BLOG_PATH)
|
||||||
dry_run = false
|
dry_run = false
|
||||||
@blog = HarpBlog.new(TEST_BLOG_PATH, dry_run)
|
@mock_title = 'fancy title'
|
||||||
|
@mock_title_finder = mock_title_finder(@mock_title)
|
||||||
|
@mock_version_finder = mock_version_finder(@test_blog_ref)
|
||||||
|
@blog = HarpBlog.new(TEST_BLOG_PATH, dry_run, @mock_title_finder, @mock_version_finder)
|
||||||
end
|
end
|
||||||
|
|
||||||
after :each do
|
after :each do
|
||||||
|
|
@ -161,6 +164,40 @@ RSpec.describe HarpBlog do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '#local_version' do
|
||||||
|
it "should expose the local version" do
|
||||||
|
expect(@blog.local_version).to eq(@test_blog_ref)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '#remote_version' do
|
||||||
|
it "should expose the remote version" do
|
||||||
|
expect(@blog.remote_version).to eq(@test_blog_ref)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '#dirty?' do
|
||||||
|
it "should specify whether or not there are unpublished changes" do
|
||||||
|
expect(@blog.dirty?).to be_falsy
|
||||||
|
|
||||||
|
@blog.create_post('title', 'body', nil)
|
||||||
|
expect(@blog.dirty?).to be_truthy
|
||||||
|
|
||||||
|
@blog.publish
|
||||||
|
@mock_version_finder.version = @blog.local_version
|
||||||
|
expect(@blog.dirty?).to be_falsy
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '#status' do
|
||||||
|
it "should expose the local and remote versions, and dirty state" do
|
||||||
|
status = @blog.status
|
||||||
|
expect(status['local-version']).to eq(@blog.local_version)
|
||||||
|
expect(status['remote-version']).to eq(@blog.remote_version)
|
||||||
|
expect(status['dirty']).to eq(@blog.dirty?)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe '#years' do
|
describe '#years' do
|
||||||
it "should return all of the years with posts" do
|
it "should return all of the years with posts" do
|
||||||
# yup, if I don't blog for an entire year that's a bug!
|
# yup, if I don't blog for an entire year that's a bug!
|
||||||
|
|
@ -247,16 +284,11 @@ RSpec.describe HarpBlog do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should fetch titles if necessary" do
|
it "should fetch titles if necessary" do
|
||||||
class TitleFinder
|
post = @blog.create_post(nil, nil, 'http://samhuri.net')
|
||||||
def find_title(url) 'fancy title' end
|
expect(post.title).to eq(@mock_title)
|
||||||
end
|
@blog.delete_post(post.time.year.to_s, post.padded_month, post.slug)
|
||||||
dry_run = false
|
post = @blog.create_post(" \t\n", nil, 'http://samhuri.net')
|
||||||
blog = HarpBlog.new(TEST_BLOG_PATH, dry_run, TitleFinder.new)
|
expect(post.title).to eq(@mock_title)
|
||||||
post = blog.create_post(nil, nil, 'http://samhuri.net')
|
|
||||||
expect(post.title).to eq('fancy title')
|
|
||||||
blog.delete_post(post.time.year.to_s, post.padded_month, post.slug)
|
|
||||||
post = blog.create_post(" \t\n", nil, 'http://samhuri.net')
|
|
||||||
expect(post.title).to eq('fancy title')
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should push the new post to the origin repo" do
|
it "should push the new post to the origin repo" do
|
||||||
|
|
|
||||||
|
|
@ -42,4 +42,30 @@ module Helpers
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class TitleFinder
|
||||||
|
attr_accessor :title
|
||||||
|
def initialize(title)
|
||||||
|
@title = title
|
||||||
|
end
|
||||||
|
def find_title(url) @title end
|
||||||
|
end
|
||||||
|
|
||||||
|
def mock_title_finder(title)
|
||||||
|
TitleFinder.new(title)
|
||||||
|
end
|
||||||
|
|
||||||
|
class VersionFinder
|
||||||
|
attr_accessor :version
|
||||||
|
def initialize(version)
|
||||||
|
@version = version
|
||||||
|
end
|
||||||
|
def find_version(url = nil)
|
||||||
|
@version
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def mock_version_finder(version)
|
||||||
|
VersionFinder.new(version)
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
||||||
11
server/web_version_finder.rb
Normal file
11
server/web_version_finder.rb
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
require 'open-uri'
|
||||||
|
|
||||||
|
class WebVersionFinder
|
||||||
|
|
||||||
|
DEFAULT_URL = 'http://samhuri.net/version.txt'
|
||||||
|
|
||||||
|
def find_version(url = nil)
|
||||||
|
open(url || DEFAULT_URL).read.strip
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
Loading…
Reference in a new issue