lib/runeblog.rb in runeblog-0.0.62 vs lib/runeblog.rb in runeblog-0.0.63
- old
+ new
@@ -1,11 +1,11 @@
require 'find'
require 'yaml'
require 'livetext'
class RuneBlog
- VERSION = "0.0.62"
+ VERSION = "0.0.63"
Path = File.expand_path(File.join(File.dirname(__FILE__)))
DefaultData = Path + "/../data"
BlogHeaderPath = DefaultData + "/custom/blog_header.html"
@@ -14,12 +14,12 @@
BlogHeader = File.read(BlogHeaderPath) rescue "not found"
BlogTrailer = File.read(BlogTrailerPath) rescue "not found"
BlogTemplate = File.read(BlogTemplatePath) rescue "not found"
- attr_reader :root, :views, :view, :sequence
- attr_writer :view # FIXME
+ attr_reader :root, :views, :sequence
+ attr_accessor :view # FIXME
def self.create_new_blog
#-- what if data already exists?
result = system("cp -r #{RuneBlog::DefaultData} .")
raise "Error copying default data" unless result
@@ -71,10 +71,17 @@
File.write(dir + "custom/post_template.html", RuneBlog::BlogTemplate)
File.write(dir + "last_deployed", "Initial creation")
self.views << arg
end
+ def delete_view(name, force = false)
+ if force
+ system("rm -rf #@root/views/#{name}")
+ @views -= [name]
+ end
+ end
+
def deployment_url
return nil unless @deploy[@view]
lines = @deploy[@view]
user, server, sroot, spath = *@deploy[@view]
url = "http://#{server}/#{spath}"
@@ -87,17 +94,18 @@
files += Dir.entries(vdir).grep(/^\d\d\d\d/).map {|x| "#{vdir}/#{x}" }
files.reject! {|f| File.mtime(f) < File.mtime("#{vdir}/last_deployed") }
end
def files_by_id(id)
- files = Find.find(@root).to_a
+ files = Find.find(self.root).to_a
tag = "#{'%04d' % id}"
- files.grep(/#{tag}-/)
+ result = files.grep(/#{tag}-/)
+ result
end
- def create_new_post(title, view=nil)
- view ||= @view
+ def create_new_post(title, testing = false)
+ view = @view
date = Time.now.strftime("%Y-%m-%d")
@template = <<-EOS
.mixin liveblog
.title #{title}
@@ -108,18 +116,19 @@
Teaser goes here.
.end
Remainder of post goes here.
EOS
- @slug = make_slug(title)
+ num, @slug = make_slug(title)
@fname = @slug + ".lt3"
File.open("#@root/src/#@fname", "w") {|f| f.puts @template }
- edit_initial_post(@fname) # How eliminate for testing?
- process_post(@fname) #- FIXME handle each view
+ edit_initial_post(@fname) unless testing
+ process_post(@fname) #- FIXME handle each view
publish_post(@meta)
+ num
rescue => err
- error(err)
+ puts err # error(err)
end
def edit_initial_post(file)
result = system("vi #@root/src/#{file} +8 ")
raise "Problem editing #@root/src/#{file}" unless result
@@ -147,29 +156,25 @@
@main.main.output = File.new("/tmp/WHOA","w")
path = @root + "/src/#{file}"
@meta = @main.process_file(path, binding)
raise "process_file returned nil" if @meta.nil?
- slug = self.make_slug(@meta.title, self.sequence)
+ num, slug = self.make_slug(@meta.title, self.sequence)
slug = file.sub(/.lt3$/, "")
@meta.slug = slug
@meta
rescue => err
error(err)
end
def publish_post(meta)
- puts " #{colored_slug(meta.slug)}"
+ puts " #{colored_slug(meta.slug)}" rescue nil # puts(meta.slug) # FIXME
# First gather the views
views = meta.views
- print " Views: "
- views.each do |view|
- print "#{view} "
- link_post_view(view)
- end
+ views.each {|view| link_post_view(view) }
# assets = find_all_assets(@meta.assets, views)
- puts
+ nil
rescue => err
error(err)
end
def link_post_view(view)
@@ -207,10 +212,14 @@
end
rescue => err
error(err)
end
+ def relink
+ self.views.each {|view| generate_index(view) }
+ end
+
def reload_post(file)
@main ||= Livetext.new
@main.main.output = File.new("/tmp/WHOA","w") # FIXME srsly?
@meta = process_post(file)
@meta.slug = file.sub(/.lt3$/, "")
@@ -239,17 +248,54 @@
publish_post(@meta) # FIXME ??
rescue => err
error(err)
end
- def make_slug(title, seq=nil)
- num = '%04d' % (seq || self.next_sequence) # FIXME can do better
+ def remove_post(num)
+ list = files_by_id(num)
+ result = system("rm -rf #{list.join(' ')}")
+ error_cant_delete(files) unless result
+ end
+
+ def post_exists?(num)
+ list = files_by_id(num)
+ list.empty? ? nil : list
+ end
+
+ def make_slug(title, postnum = nil)
+ postnum ||= self.next_sequence
+ num = '%04d' % postnum # FIXME can do better
slug = title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')
- "#{num}-#{slug}"
+ [postnum, "#{num}-#{slug}"]
end
def subdirs(dir)
dirs = Dir.entries(dir) - %w[. ..]
dirs.reject! {|x| ! File.directory?("#@root/views/#{x}") }
dirs
end
+
+ def create_dir(dir)
+ cmd = "mkdir -p #{dir} >/dev/null 2>&1"
+ result = system(cmd)
+ raise "Can't create #{dir}" unless result
+ end
+
+ def error(err) # FIXME - this is duplicated
+ str = "\n Error: #{err}"
+ puts str
+ puts err.backtrace # [0]
+ end
+
+ def interpolate(str)
+ wrap = "<<-EOS\n#{str}\nEOS"
+ eval wrap
+ end
+
+ def find_src_slugs
+ files = Dir.entries("#@root/src/").grep /\d\d\d\d.*.lt3$/
+ files.map! {|f| File.basename(f) }
+ files = files.sort.reverse
+ files
+ end
+
end