lib/runeblog.rb in runeblog-0.2.72 vs lib/runeblog.rb in runeblog-0.2.73
- old
+ new
@@ -10,17 +10,18 @@
require 'default'
require 'view'
require 'publish'
require 'post'
-# require 'pathmagic'
+require 'pathmagic'
###
class RuneBlog
DotDir = ".blogs"
+ ConfigFile = "config"
Themes = RuneBlog::Path/"../themes"
make_exception(:FileNotFound, "File $1 was not found")
make_exception(:BlogRepoAlreadyExists, "Blog repo $1 already exists")
make_exception(:CantAssignView, "$1 is not a view")
@@ -54,21 +55,22 @@
def self.create_new_blog_repo(root = ".blogs")
log!(enter: __method__, args: [root])
raise ArgumentError unless root.is_a?(String) && ! root.empty?
root_dir = Dir.pwd/root
- # Crude - FIXME later - # What views are there? Publishing, etc.
self.blog = self # Weird. Like a singleton - dumbass circular dependency?
root = Dir.pwd/root
raise BlogRepoAlreadyExists if Dir.exist?(root)
create_dirs(root)
Dir.chdir(root) do
- create_dirs(:data, :drafts, :views, :posts)
- copy_data(:config, "./data/")
- File.write("data/ROOT", Dir.pwd + "\n")
+ create_dirs(:drafts, :views, :posts)
new_sequence
end
+ x = OpenStruct.new
+ x.root, x.current_view, x.editor = root, "test_view", "/usr/bin/vim " # dumb - FIXME later
+ write_config(x, root/ConfigFile)
+ write_repo_config
@blog = self.new(root)
@blog
rescue => err
puts "Can't create blog repo: '#{root}' - #{err}"
puts err.backtrace.join("\n")
@@ -88,17 +90,20 @@
log!(enter: "initialize", args: [root_dir])
# Crude - FIXME later - # What views are there? Publishing, etc.
self.class.blog = self # Weird. Like a singleton - dumbass circular dependency?
@root = root_dir
- read_config
- @views = get_views
+ file = @root/ConfigFile
+ errmsg = "No config file! file = #{file.inspect} dir = #{Dir.pwd}"
+ raise errmsg unless File.exist?(file)
+
+ get_repo_config
+ @root, @view_name, @editor = read_config(file, :root, :current_view, :editor)
md = Dir.pwd.match(%r[.*/views/(.*?)/])
- if md
- @view_name = md[1]
- @view = str2view(@view_name)
- end
+ @view_name = md[1] if md
+ @views = get_views
+ @view = str2view(@view_name)
@sequence = get_sequence
@post_views = []
@post_tags = []
end
@@ -191,11 +196,10 @@
_tmp_error(err)
end
def view=(arg)
log!(enter: __method__, args: [arg], level: 2)
- # FIXME should write VIEW file?
case arg
when RuneBlog::View
@view = arg
_set_publisher
when String
@@ -374,11 +378,11 @@
entry = index_entry(postid)
entries << entry
text << entry
end
text << "</body></html>"
- File.write(@vdir/:remote/file, text + "\n")
+ File.write(@vdir/:remote/file, text)
return posts.size
rescue => err
_tmp_error(err)
end
@@ -386,19 +390,14 @@
pubdate: Time.now.strftime("%Y-%m-%d"), views: [])
log!(enter: __method__, args: [title, testing, teaser, body, views], level: 1, stderr: true)
meta = nil
views = views + [self.view.to_s]
views.uniq!
-p :cnp1
Dir.chdir(@root/"posts") do
-p :cnp2
post = Post.create(title: title, teaser: teaser, body: body, pubdate: pubdate, views: views)
-p :cnp3
post.edit unless testing
-p :cnp4
post.build
-p :cnp5
meta = post.meta
end
return meta.num
rescue => err
_tmp_error(err)
@@ -422,11 +421,13 @@
def change_view(view)
log!(enter: __method__, args: [view], level: 3)
raise ArgumentError unless view.is_a?(String) || view.is_a?(RuneBlog::View)
x = OpenStruct.new
- File.write(@root/"data/VIEW", view.to_s + "\n")
+ x.root, x.current_view, x.editor = @root, view.to_s, @editor # dumb - FIXME later
+ copy_data(:config, @root/:data)
+ write_config(x, @root/ConfigFile)
self.view = view # error checking?
end
def generate_index(view)
log!(enter: __method__, args: [view], pwd: true, dir: true)
@@ -485,28 +486,20 @@
end
def _post_metadata(draft, pdraft)
log!(enter: __method__, args: [draft, pdraft], level: 2)
# FIXME store this somewhere
-p :pm1
fname = File.basename(draft) # 0001-this-is-a-post.lt3
nslug = fname.sub(/.lt3$/, "") # 0001-this-is-a-post
aslug = nslug.sub(/\d\d\d\d-/, "") # this-is-a-post
pnum = nslug[0..3] # 0001
-p :pm2
Dir.chdir(pdraft) do
-p :pm3
excerpt = File.read("teaser.txt")
-p :pm4
date = _retrieve_metadata(:date)
-p :pm5
longdate = ::Date.parse(date).strftime("%B %e, %Y")
-p :pm6
title = _retrieve_metadata(:title)
-p :pm7
tags = _retrieve_metadata(:tags)
-p :pm8
# FIXME simplify
vars = <<~LIVE
.set post.num = #{pnum}
.heredoc post.aslug
#{aslug}
@@ -522,13 +515,11 @@
.end
.heredoc longdate
#{longdate}
.end
LIVE
-p :pm9
File.open(pdraft/"vars.lt3", "w") {|f| f.puts vars }
-p :pma
end
rescue => err
_tmp_error(err)
end
@@ -560,57 +551,42 @@
aslug = nslug.sub(/\d\d\d\d-/, "") # this-is-a-post
ahtml = aslug + ".html" # this-is-a-post.html
pdraft = @root/:posts/nslug
remote = @root/:views/view_name/:remote
@theme = @root/:views/view_name/:themes/:standard
-p :hp1
# Step 1...
create_dirs(pdraft)
-p :hp2
# FIXME dependencies?
xlate cwd: pdraft, src: draft, dst: "guts.html" # , debug: true
-p :hp3
_post_metadata(draft, pdraft)
-p :hp4
# Step 2...
vposts = @root/:views/view_name/:posts
copy!(pdraft, vposts) # ??
-p :hp5
# Step 3..
copy(pdraft/"guts.html", @theme/:post)
copy(pdraft/"vars.lt3", @theme/:post)
-p :hp5
# Step 4...
# FIXME dependencies?
xlate cwd: @theme/:post, src: "generate.lt3", force: true,
dst: remote/ahtml, copy: @theme/:post # , debug: true
-p :hp7
# FIXME dependencies?
xlate cwd: @theme/:post, src: "permalink.lt3",
dst: remote/:permalink/ahtml # , debug: true
-p :hp8
copy_widget_html(view_name)
-p :hp9
rescue => err
_tmp_error(err)
end
def generate_post(draft)
log!(enter: __method__, args: [draft], level: 1)
-p :gp1
views = _get_views(draft)
-p :gp2
views.each do |view|
-p :gp3
unless self.view?(view)
puts "Warning: '#{view}' is not a view"
next
end
-p :gp4
_handle_post(draft, view)
-p :gp5
end
-p :gp6
rescue => err
_tmp_error(err)
end
def rebuild_post(file)