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