lib/repl.rb in runeblog-0.0.34 vs lib/repl.rb in runeblog-0.0.35

- old
+ new

@@ -54,18 +54,22 @@ def new_blog! unless File.exist?(".blog") yn = ask(red(" No .blog found. Create new blog? ")) if yn.upcase == "Y" #-- what if data already exists? - system("cp -r #{RuneBlog::DefaultData} .") + result = system("cp -r #{RuneBlog::DefaultData} .") + raise "Error copying default data" unless result + File.open(".blog", "w") do |f| f.puts "data" f.puts "no_default" end File.open("data/VERSION", "a") {|f| f.puts "\nBlog created: " + Time.now.to_s } end end + rescue => err + puts red("\n Error: (line #{__LINE__} of #{File.basename(__FILE__)}) ") + err.to_s end ### make_slug def make_slug(title, seq=nil) @@ -83,62 +87,78 @@ @config = RuneBlog::Config.new(cfg_file) @view = @config.view # current view @sequence = @config.sequence @root = @config.root + rescue => err + puts red("\n Error: (line #{__LINE__} of #{File.basename(__FILE__)}) ") + err.to_s end ### create_empty_post def create_empty_post @template = <<-EOS - .mixin liveblog +.mixin liveblog - .liveblog_version +.liveblog_version - .title #@title - .pubdate #@date - .views #@view +.title #@title +.pubdate #@date +.views #@view - Teaser goes here. - .readmore - Remainder of post goes here. +.teaser +Teaser goes here. +.end +Remainder of post goes here. EOS @slug = make_slug(@title) @fname = @slug + ".lt3" File.open("#@root/src/#@fname", "w") {|f| f.puts @template } @fname + rescue => err + puts red("\n Error: (line #{__LINE__} of #{File.basename(__FILE__)}) ") + err.to_s end ### edit_initial_post def edit_initial_post(file) - system("vi #@root/src/#{file} +8 ") + result = system("vi #@root/src/#{file} +8 ") + raise "Problem editing #@root/src/#{file}" unless result + rescue => err + puts red("\n Error: (line #{__LINE__} of #{File.basename(__FILE__)}) ") + err.to_s end ### open_remote def open_remote @deploy ||= {} return puts red("\n Deploy first.") unless @deploy[@view] lines = @deploy[@view] user, server, sroot, spath = *lines - system("open 'http://#{server}/#{spath}'") + result = system("open 'http://#{server}/#{spath}'") + raise "Problem opening http://#{server}/#{spath}" unless result + rescue => err + puts red("\n Error: (line #{__LINE__} of #{File.basename(__FILE__)}) ") + err.to_s end ### open_local def open_local system("open #{@config.viewdir(@view)}/index.html") + raise "Problem opening #{@config.viewdir(@view)}/index.html" unless result + rescue => err + puts red("\n Error: (line #{__LINE__} of #{File.basename(__FILE__)}) ") + err.to_s end def deploy # TBD clunky FIXME @deploy ||= {} deployment = @config.viewdir(@view) + "deploy" + raise "File '#{deployment}' not found" unless File.exist?(deployment) + lines = File.readlines(deployment).map {|x| x.chomp } @deploy[@view] = lines user, server, sroot, spath = *lines vdir = @config.viewdir(@view) files = ["#{vdir}/index.html"] @@ -146,39 +166,51 @@ files.reject! {|f| File.mtime(f) < File.mtime("#{vdir}/last_deployed") } puts "\n Files:" files.each {|f| puts " " + f } puts dir = "#{sroot}/#{spath}" + # FIXME - may or may not already exist + result = system("ssh root@#{server} mkdir #{dir}") + cmd = "scp -r #{files.join(' ')} root@#{server}:#{dir} >/dev/null 2>&1" print red("\n Deploying #{files.size} files... ") - # puts cmd - system(cmd) + result = system(cmd) + raise "Problem occurred in deployment" unless result + File.write("#{vdir}/last_deployed", files) puts red("finished.") + rescue => err + puts red("\n Error: (line #{__LINE__} of #{File.basename(__FILE__)}) ") + err.to_s end ### process_post def process_post(file) @main ||= Livetext.new @main.main.output = File.new("/tmp/WHOA","w") # puts " Processing: #{Dir.pwd} :: #{file}" path = @root + "/src/#{file}" @meta = @main.process_file(path) + raise "process_file returned nil" if @meta.nil? + @meta.slug = make_slug(@meta.title, @config.sequence) @meta.slug = file.sub(/.lt3$/, "") @meta + rescue => err + puts red("\n Error: (line #{__LINE__} of #{File.basename(__FILE__)}) ") + err.to_s end ### reload_post def reload_post(file) @main ||= Livetext.new @main.main.output = File.new("/tmp/WHOA","w") @meta = process_post(file) @meta.slug = file.sub(/.lt3$/, "") @meta + rescue => err + puts red("\n Error: (line #{__LINE__} of #{File.basename(__FILE__)}) ") + err.to_s end ### posting def posting(view, meta) @@ -214,26 +246,31 @@ File.open("#{vdir}/index.html", "w") do |f| f.puts @bloghead posts.each {|post| f.puts posting(view, post) } f.puts @blogtail end + rescue => err + puts red("\n Error: (line #{__LINE__} of #{File.basename(__FILE__)}) ") + err.to_s end ### link_post_view def link_post_view(view) # Create dir using slug (index.html, metadata?) vdir = @config.viewdir(view) dir = vdir + @meta.slug + "/" cmd = "mkdir -p #{dir}" - system(cmd) unless File.exist?(dir) and File.directory?(dir) + result = system(cmd) unless File.exist?(dir) and File.directory?(dir) + raise "Can't create #{dir}" unless result File.write("#{dir}/metadata.yaml", @meta.to_yaml) template = File.read(vdir + "custom/post_template.html") post = interpolate(template) File.write(dir + "index.html", post) generate_index(view) + rescue => err + puts red("\n Error: (line #{__LINE__} of #{File.basename(__FILE__)}) ") + err.to_s end ### link_post def link_post(meta) @@ -244,34 +281,42 @@ views.each do |view| print "#{view} " link_post_view(view) end puts + rescue => err + puts red("\n Error: (line #{__LINE__} of #{File.basename(__FILE__)}) ") + err.to_s end ### rebuild_post def rebuild_post(file) reload_post(file) link_post(@meta) # FIXME ?? publish_post + rescue => err + puts red("\n Error: (line #{__LINE__} of #{File.basename(__FILE__)}) ") + err.to_s end ### rebuild def rebuild puts files = Dir.entries("#@root/src/").grep /\d\d\d\d.*.lt3$/ files.map! {|f| File.basename(f) } files = files.sort.reverse files.each {|file| rebuild_post(file) } + rescue => err + puts red("\n Error: (line #{__LINE__} of #{File.basename(__FILE__)}) ") + err.to_s end ### relink def relink @config.views.each {|view| generate_index(view) } + rescue => err + puts red("\n Error: (line #{__LINE__} of #{File.basename(__FILE__)}) ") + err.to_s end ### publish? def publish? @@ -291,10 +336,12 @@ def list_views abort "Config file not read" unless @config puts @config.views.each {|v| puts " #{v}" } + rescue => err + puts red("\n Error: (line #{__LINE__} of #{File.basename(__FILE__)}) ") + err.to_s end ### change_view def change_view(arg = nil) @@ -303,10 +350,12 @@ elsif @config.views.include?(arg) @view = arg else puts "view #{arg.inspect} does not exist" end + rescue => err + puts red("\n Error: (line #{__LINE__} of #{File.basename(__FILE__)}) ") + err.to_s end ### new_view def new_view(arg = nil) @@ -315,15 +364,19 @@ arg ||= ask("New view: ") # check validity later raise "view #{arg} already exists" if @config.views.include?(arg) dir = @root + "/views/" + arg + "/" cmd = "mkdir -p #{dir + 'custom'}" - system(cmd) + result = system(cmd) + raise "Could not create #{dir}/custom" unless result + File.write(dir + "custom/blog_header.html", RuneBlog::BlogHeader) File.write(dir + "custom/blog_trailer.html", RuneBlog::BlogTrailer) File.write(dir + "last_deployed", "Initial creation") @config.views << arg + rescue => err + puts red("\n Error: (line #{__LINE__} of #{File.basename(__FILE__)}) ") + err.to_s end ### import def import(arg = nil) @@ -333,17 +386,21 @@ name = arg grep = `grep ^.title #{name}` @title = grep.sub(/^.title /, "") @slug = make_slug(@title) @fname = @slug + ".lt3" - system("cp #{name} #@root/src/#@fname") + result = system("cp #{name} #@root/src/#@fname") + raise "Could not copy #{name} to #@root/src/#@fname" unless result + edit_initial_post(@fname) process_post(@fname) if publish? link_post(@meta) publish_post end + rescue => err + puts red("\n Error: (line #{__LINE__} of #{File.basename(__FILE__)}) ") + err.to_s end ### new_post def new_post @@ -358,10 +415,12 @@ process_post(file) #- FIXME handle each view if publish? link_post(@meta) publish_post end + rescue => err + puts red("\n Error: (line #{__LINE__} of #{File.basename(__FILE__)}) ") + err.to_s end ### remove_post #-- FIXME affects linking, building, deployment... @@ -376,11 +435,13 @@ puts files.each {|f| puts " #{f}" } ques = files.size > 1 ? "\n Delete all these? " : "\n Delete? " yn = ask red(ques) if yn.downcase == "y" #-- maybe implement trash later? - system("rm -rf #{files.join(' ')}") + result = system("rm -rf #{files.join(' ')}") + raise "Problem deleting file(s)" unless result + puts red("\n Deleted") else puts red("\n No action taken") end rescue => err @@ -400,10 +461,12 @@ files = files.map {|f| File.basename(f) } return puts red("Multiple files: #{files}") if files.size > 1 return puts red("\n No such post found") if files.empty? file = files.first - system("vi #@root/src/#{file}") + result = system("vi #@root/src/#{file}") + raise "Problem editing #{file}" unless result + rebuild_post(file) rescue => err puts err puts end