lib/runeblog.rb in runeblog-0.2.10 vs lib/runeblog.rb in runeblog-0.2.11
- old
+ new
@@ -58,11 +58,11 @@
root = Dir.pwd + "/" + root
raise BlogRepoAlreadyExists if Dir.exist?(root)
create_dirs(root)
Dir.chdir(root) do
system("cp #{RuneBlog::Path}/../empty_view.tgz .")
- create_dirs(:drafts, :views)
+ create_dirs(:drafts, :views, :posts)
new_sequence
end
put_config(root: root)
@blog = self.new(root)
@blog.create_view("test_view")
@@ -97,10 +97,27 @@
@sequence = get_sequence
@post_views = []
@post_tags = []
end
+ def _deploy_local(dir)
+ log!(enter: __method__, args: [dir])
+ Dir.chdir(dir) do
+ views = File.readlines("metadata.txt").grep(/^.views /).first[7..-1].split
+ views.each {|v| system("cp *html #@root/views/#{v}/remote") }
+ end
+ end
+
+ def process_post(sourcefile)
+ log!(enter: __method__, args: [dir])
+ nslug = sourcefile.sub(/.lt3/, "")
+ dir = @root + "/posts/#{nslug}"
+ create_dir(dir)
+ xlate cwd: dir, src: sourcefile, debug: true
+ _deploy_local(dir)
+ end
+
def inspect
log!(enter: __method__)
str = "blog: "
ivars = ["@root", "@sequence"] # self.instance_variables
ivars.each do |iv|
@@ -175,49 +192,63 @@
def self.exist?
log!(enter: __method__)
Dir.exist?(DotDir) && File.exist?(DotDir + "/" + ConfigFile)
end
- def _copy_to_staging
- copy!("themes/standard/", "staging/")
- copy!("themes/standard/widgets/", "staging/")
+ def make_dummy_publish_file(view_name)
+ log!(enter: __method__, args: [view_name])
+ vdir = "#@root/views/#{view_name}"
+ pub = [:user, :server, :docroot, :path, :proto]
+ pub = pub.map {|x| x.to_s + ": undefined" }
+ pub = pub.join("\n") + "\n"
+ dump(pub, "#{vdir}/publish")
end
- def _copy_to_remote
- copy!("themes/standard/etc", "remote/")
- copy!("themes/standard/assets", "remote/")
- copy!("themes/standard/widgets", "remote/")
+ def mark_last_published(str)
+ log!(enter: __method__, args: [str])
+ dump(str, "last_published")
end
- def create_view(arg)
- log!(enter: __method__, args: [arg])
- raise ArgumentError unless arg.is_a?(String) && ! arg.empty?
+ def add_view(view_name)
+ log!(enter: __method__, args: [view_name])
+ view = RuneBlog::View.new(view_name)
+ @view = view # current view
+ @views << view # all views
+ view
+ end
- names = self.views.map(&:to_s)
- raise ViewAlreadyExists(arg) if names.include?(arg)
-
- vdir = arg.dup
- raise DirAlreadyExists(vdir) if Dir.exist?(vdir)
-
+ def make_empty_view_tree(view_name)
+ log!(enter: __method__, args: [view_name])
Dir.chdir(@root) do
cmd1 = "tar zxvf empty_view.tgz >/dev/null 2>&1"
- cmd2 = "cp -r empty_view views/#{arg}"
+ cmd2 = "cp -r empty_view views/#{view_name}"
system(cmd1)
system(cmd2)
end
+ end
- Dir.chdir("#@root/views/#{vdir}") do
- livetext "generate", "../../../remote/index", "themes/standard/blog"
- pub = "user: xxx\nserver: xxx\ndocroot: xxx\npath: xxx\nproto: xxx\n"
- dump(pub, "publish")
+ def check_valid_new_view(view_name)
+ log!(enter: __method__, args: [view_name])
+ raise ArgumentError unless view_name.is_a?(String)
+ raise ArgumentError if view_name.empty?
+ names = self.views.map(&:to_s)
+ bad = names.include?(view_name)
+ raise ViewAlreadyExists(view_name) if bad
+ vdir = "@root/views/#{view_name}"
+ raise DirAlreadyExists(view_name) if Dir.exist?(vdir)
+ return true # hm?
+ end
- view = RuneBlog::View.new(arg)
- self.view = view
- dump("Initial creation", "last_published")
- end
- @views << view
- @views
+ def create_view(view_name)
+ log!(enter: __method__, args: [view_name])
+ check_valid_new_view(view_name)
+ make_empty_view_tree(view_name)
+# xlate cwd: "#@root/views/#{view_name}/themes/standard/blog",
+# src: "generate", dst: "../../../remote/index"
+ make_dummy_publish_file(view_name)
+ mark_last_published("Initial creation")
+ add_view(view_name)
end
def delete_view(name, force = false)
log!(enter: __method__, args: [name, force])
raise ArgumentError unless name.is_a?(String) && ! name.empty?
@@ -302,11 +333,11 @@
end
def create_new_post(title, testing = false, teaser: nil, body: nil, other_views: [])
log!(enter: __method__, args: [title, testing, teaser, body, other_views])
meta = nil
- Dir.chdir(self.view.dir) do
+ Dir.chdir("#@root/posts/") do
post = Post.create(title: title, teaser: teaser, body: body, other_views: other_views)
post.edit unless testing
post.build
meta = post.meta
end
@@ -320,10 +351,11 @@
log!(enter: __method__, args: [file, testing])
debug "=== edit_initial_post #{file.inspect} => #{sourcefile}"
sourcefile = "#@root/drafts/#{file}"
result = system("#@editor #{sourcefile} +8") unless testing
raise EditorProblem(sourcefile) unless result
+ process_post(sourcefile)
nil
rescue => err
error(err)
end
@@ -357,13 +389,13 @@
end
def generate_view(view) # huh?
log!(enter: __method__, args: [view])
generate_index(view) # recent posts (recent.html)
- Dir.chdir(@root + "/views/#{view}/themes/standard") do
- livetext "blog/generate.lt3", "../../remote/index.html"
- end
+ vdir = "#@root/views/#{view}"
+ xlate cwd: "#{vdir}/themes/standard",
+ src: "blog/generate.lt3", dst: "#{vdir}/remote/index.html"
end
def _get_views(draft)
log!(enter: __method__, args: [draft])
# FIXME dumb code
@@ -386,76 +418,69 @@
viewdir, slugdir, aslug = vdir, dir, noext[5..-1]
theme = viewdir + "/themes/standard"
[noext, viewdir, slugdir, aslug, theme]
end
- def _handle_post(draft, view)
- noext, viewdir, slugdir, aslug, @theme = _copy_get_dirs(draft, view)
- html = noext[5..-1] # strip "nnnn-"
- remote = viewdir + "/remote"
- Dir.chdir(slugdir) do
- copy(draft, ".") # copy source into slugdir
- lt3 = draft.split("/")[-1] # Remember: Some posts may be in more than
- copy(lt3, remote) # one view -- careful with links back
-STDERR.puts "1 pwd = #{Dir.pwd}"
- livetext! draft, html
-STDERR.puts " copy #{html}, #{remote}/#{html}"
- copy(html, "#{remote}/#{html}")
-
- title_line = File.readlines(draft).grep(/^.title /).first
- title = title_line.split(" ", 2)[1]
+ def _post_metadata(draft, pdraft)
+ log!(enter: __method__, args: [draft, pdraft])
+ title_line = File.readlines(draft).grep(/^.title /).first
+ title = title_line.split(" ", 2)[1]
+# pdir = "
+ Dir.chdir(pdraft) do
excerpt = File.read("teaser.txt")
vars = %[.set title="#{title.chomp}"\n] +
%[.set teaser="#{excerpt.chomp}"]
- theme = "#{viewdir}/themes/standard"
- File.open("#{theme}/post/vars.lt3", "w") {|f| f.puts vars }
+ File.open("#{pdraft}/vars.lt3", "w") {|f| f.puts vars }
+ end
+ end
- livetext! "generate.lt3", "#{remote}/html", "#{theme}/post"
- copy("#{remote}/#{html}", "#{theme}/post")
-
- livetext! "permalink.lt3", "#{remote}/permalink/#{html}", "#{theme}/post"
- log!(str: "About to enter remote/", pwd: true, dir: true)
- Dir.chdir(remote) do
- log!(str: "Now in remote/", pwd: true, dir: true)
- system("cp -r ../themes/standard/widgets .")
- log!(str: "finished with remote/", pwd: true, dir: true)
- end
+ def copy_widget_html # FIXME make better?
+ log!(enter: __method__)
+ wdir = "../themes/standard/widgets"
+ widgets = Dir["#{wdir}/*"].select {|w| File.directory?(w) }
+ widgets.each do |w|
+ dir = File.basename(w)
+ rem = "#{remote}/#{w}"
+ create_dirs(rem)
+ system("cp #{w}/*html #{rem}")
end
end
+ def _handle_post(draft, view)
+ log!(enter: __method__, args: [draft, view])
+
+ 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
+ ahtml = aslug + ".html" # this-is-a-post.html
+ pdraft = "#@root/posts/#{nslug}"
+ remote = "#@root/views/#{view}/remote"
+ @theme = "#@root/views/#{view}/themes/standard"
+ # Step 1...
+ create_dirs(pdraft)
+ xlate cwd: pdraft, src: draft, dst: "guts.html"
+ _post_metadata(draft, pdraft)
+ # Step 2...
+ vposts = "#@root/views/#{view}/posts/"
+ copy!(pdraft, vposts) # ??
+ # Step 3..
+ copy(pdraft + "/guts.html", "#@theme/post")
+ copy(pdraft + "/vars.lt3", "#@theme/post")
+ # Step 4...
+ xlate cwd: "#{@theme}/post", src: "generate.lt3",
+ dst: "#{remote}/#{ahtml}", copy: "#{@theme}/post"
+ xlate cwd: "#{@theme}/post", src: "permalink.lt3",
+ dst: "#{remote}/permalink/#{ahtml}"
+ copy_widget_html
+ end
+
def generate_post(draft)
log!(enter: __method__, args: [draft])
views = _get_views(draft)
- views.each do |view|
+ views.each do |view|
_handle_post(draft, view)
+ generate_view(view)
end
-# noext, viewdir, slugdir, aslug, @theme = _copy_get_dirs(draft, view)
-# remote = viewdir + "/remote"
-# Dir.chdir(slugdir) do
-# copy(draft, ".")
-# lt3 = draft.split("/")[-1]
-# # Remember: Some posts may be in more than one view -- careful with links back
-# copy(lt3, remote)
-# html = noext[5..-1] # strip "nnnn-"
-# livetext! draft, html
-# copy(html, "#{remote}/#{html}")
-# title_line = File.readlines(draft).grep(/^.title /).first
-# title = title_line.split(" ", 2)[1]
-# excerpt = File.read("teaser.txt")
-# vars = %[.set title="#{title.chomp}"\n] +
-# %[.set teaser="#{excerpt.chomp}"]
-# theme = "#{viewdir}/themes/standard"
-# File.open("#{theme}/post/vars.lt3", "w") {|f| f.puts vars }
-# livetext! "generate.lt3", "#{remote}/html", "#{theme}/post"
-# copy("#{remote}/html", "#{theme}/post")
-# livetext! "permalink.lt3", "#{remote}/permalink/#{html}", "#{theme}/post"
-# log!(str: "About to enter remote/", pwd: true, dir: true)
-# Dir.chdir(remote) do
-# log!(str: "Now in remote/", pwd: true, dir: true)
-# system("cp -r ../themes/standard/widgets .")
-# log!(str: "finished with remote/", pwd: true, dir: true)
-# end
-# end
end
def relink
log!(enter: __method__)
self.views.each {|view| generate_index(view) }