lib/repl.rb in runeblog-0.0.57 vs lib/repl.rb in runeblog-0.0.58

- old
+ new

@@ -3,67 +3,53 @@ require 'helpers-repl' # FIXME structure module RuneBlog::REPL def cmd_quit(arg) - raise "Glitch: #{__callee__} got arg #{arg.inspect}" unless arg.nil? - puts "\n " - exit + check_empty(arg) + abort "\n " end def cmd_version(arg) - raise "Glitch: #{__callee__} got arg #{arg.inspect}" unless arg.nil? - return "\n " + RuneBlog::VERSION + reset_output + check_empty(arg) + output RuneBlog::VERSION + return @out end - def new_blog!(arg) # FIXME weird? - raise "Glitch: #{__callee__} got arg #{arg.inspect}" unless arg.nil? - return if RuneBlog.exist? - yn = yesno(red(" No .blog found. Create new blog? ")) - RuneBlog.create_new_blog if yn - rescue => err - error(err) - end - - def open_blog # Crude - FIXME later - @blog = RuneBlog.new - @view = @blog.view # current view - @sequence = @blog.sequence - @root = @blog.root - @blog - rescue => err - error(err) - end - def cmd_browse - raise "Glitch: #{__callee__} got arg #{arg.inspect}" unless arg.nil? + reset_output + check_empty(arg) @deploy ||= {} return puts red("\n Deploy first.") unless @deploy[@view] lines = @deploy[@view] user, server, sroot, spath = *lines - result = system("open 'http://#{server}/#{spath}'") - raise "Problem opening http://#{server}/#{spath}" unless result + url = "http://#{server}/#{spath}" + result = system("open '#{url}'") + raise CantOpen, url unless result nil rescue => err error(err) end def cmd_open_local - result = system("open #{@blog.viewdir(@view)}/index.html") - raise "Problem opening #{@blog.viewdir(@view)}/index.html" unless result - nil + reset_output + local = @blog.viewdir(@view) + "/index.html" + result = system("open #{local}") + raise CantOpen, local unless result rescue => err error(err) end def cmd_deploy(arg) # FIXME non-string return expected in caller? # TBD clunky FIXME - raise "Glitch: #{__callee__} got arg #{arg.inspect}" unless arg.nil? + reset_output + check_empty(arg) @deploy ||= {} deployment = @blog.viewdir(@view) + "deploy" - raise "File '#{deployment}' not found" unless File.exist?(deployment) + check_file_exists(deployment) lines = File.readlines(deployment).map {|x| x.chomp } @deploy[@view] = lines user, server, sroot, spath = *lines vdir = @blog.viewdir(@view) @@ -73,31 +59,32 @@ if files.empty? puts red("\n No files to deploy") return nil end - out = "\n Files:" - files.each {|f| out << (" " + f + "\n") } - out << "\n" + output "Files:" + files.each {|f| output " #{f}\n" } + output_newline 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" - out << red("\n Deploying #{files.size} files...\n") + output! "Deploying #{files.size} files...\n" result = system(cmd) raise "Problem occurred in deployment" unless result File.write("#{vdir}/last_deployed", files) - out << red("finished.\n") - out + output! "...finished.\n" + @out rescue => err error(err) end def cmd_rebuild(arg) - raise "Glitch: #{__callee__} got arg #{arg.inspect}" unless arg.nil? + reset_output + check_empty(arg) 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) } @@ -105,46 +92,49 @@ rescue => err error(err) end def cmd_relink(arg) - raise "Glitch: #{__callee__} got arg #{arg.inspect}" unless arg.nil? + reset_output + check_empty(arg) @blog.views.each {|view| generate_index(view) } nil rescue => err error(err) end def cmd_list_views(arg) + reset_output("\n") + check_empty(arg) abort "Config file not read" unless @blog - raise "Glitch: #{__callee__} got arg #{arg.inspect}" unless arg.nil? - out = "\n" - @blog.views.each {|v| out << " #{v}\n" } - out + @blog.views.each {|v| outstr " #{v}\n" } + @out rescue => err error(err) end def cmd_change_view(arg) + reset_output if arg.nil? - return "\n #{@blog.view}" + output "#{@blog.view}" + return @out else - out = "" list = @blog.views.grep /^#{arg}/ if list.size == 1 @view = @blog.view = list.first - out << red("\n View: #{@view}\n") if arg != @view + output! "View: #{@view}\n" if arg != @view else - out << "view #{arg.inspect} does not exist\n" + output! "view #{arg.inspect} does not exist\n" end end - out + @out rescue => err error(err) end def cmd_new_view(arg) + reset_output @blog ||= open_blog arg ||= ask("New view: ") # check validity later raise "view #{arg} already exists" if @blog.views.include?(arg) dir = @root + "/views/" + arg + "/" @@ -160,68 +150,77 @@ rescue => err error(err) end def cmd_new_post(arg) - raise "Glitch: #{__callee__} got arg #{arg.inspect}" unless arg.nil? + reset_output + check_empty(arg) open_blog unless @blog # duh? @title = ask("Title: ") @blog.create_new_post(@title) rescue => err error(err) end def cmd_kill(arg) + reset_output args = arg.split args.each {|x| cmd_remove_post([x], false) } nil rescue => err error(err) end #-- FIXME affects linking, building, deployment... def cmd_remove_post(arg, safe=true) - out = "" - id = Integer(arg) rescue raise("'#{arg}' is not an integer") + reset_output + err = "'#{arg}' is not an integer" + id = get_integer(arg) tag = "#{'%04d' % id}" files = Find.find(@root).to_a files = files.grep(/#{tag}-/) if files.empty? - out = red("\n No such post found (#{id})") - return out + output! "No such post found (#{id})" + return @out end if safe - out << "\n" - files.each {|f| out << " #{f}\n" } - puts out - out = "" - ques = files.size > 1 ? "\n Delete all these?\n " : "\n Delete?\n " + output_newline + files.each {|f| outstr " #{f}\n" } + puts @out # ?? + reset_output + ques = "\n Delete?\n " + ques.sub!(/\?/, " all these?") if files.size > 1 yn = ask red(ques) if yn.downcase == "y" result = system("rm -rf #{files.join(' ')}") - raise "Problem deleting file(s)" unless result - out << red("\n Deleted\n") + error_cant_delete(files) unless result + output! "Deleted\n" else - out << red("\n No action taken\n") + output! "No action taken\n" end else result = system("rm -rf #{files.join(' ')}") - out << red("\n Deleted:\n") - files.each {|f| out << " #{f}\n" } - raise "Problem mass-deleting file(s)" unless result + error_cant_delete(files) unless result + output! "Deleted:\n" + files.each {|f| output " #{f}\n" } end - out + @out + rescue ArgumentError => err + puts err + rescue CantDelete => err + puts err rescue => err error(err) end #-- FIXME affects linking, building, deployment... def cmd_edit_post(arg) - id = Integer(arg) rescue raise("'#{arg}' is not an integer") + reset_output + id = get_integer(arg) tag = "#{'%04d' % id}" files = Find.find(@root+"/src").to_a files = files.grep(/#{tag}-/) files = files.map {|f| File.basename(f) } return red("Multiple files: #{files}") if files.size > 1 @@ -236,56 +235,61 @@ rescue => err error(err) end def cmd_list_posts(arg) - raise "Glitch: #{__callee__} got arg #{arg.inspect}" unless arg.nil? - out = "" + check_empty(arg) + reset_output @view = @blog.view dir = @blog.viewdir(@view) Dir.chdir(dir) do posts = Dir.entries(".").grep(/^0.*/) + output @view + ":\n" if posts.empty? - out << ("\n " + @view + ":" + red(" No posts\n")) + output! "No posts\n" else - out << ("\n " + @view + ":\n ") - posts.each {|post| out << " #{colored_slug(post)}\n" } + posts.each {|post| outstr " #{colored_slug(post)}\n" } end end - out + @out rescue => err error(err) end def cmd_list_drafts(arg) - raise "Glitch: #{__callee__} got arg #{arg.inspect}" unless arg.nil? - out = "" + check_empty(arg) + reset_output dir = "#@root/src" Dir.chdir(dir) do posts = Dir.entries(".").grep(/^0.*.lt3/) - out << "\n" + output_newline if posts.empty? - return red(" No posts") + output! "No posts" + return @out else - posts.each {|post| out << " #{colored_slug(post.sub(/.lt3$/, ""))}\n" } + posts.each do |post| + str = " #{colored_slug(post.sub(/.lt3$/, ""))}\n" + outstr str + end end end - out + @out rescue => err error(err) end def cmd_INVALID(arg) - return "\n Command '#{red(arg)}' was not understood." + reset_output "\n Command '#{red(arg)}' was not understood." + return @out end def cmd_help(arg) - raise "Glitch: #{__callee__} got arg #{arg.inspect}" unless arg.nil? - out = <<-EOS + reset_output + check_empty(arg) + output(<<-EOS) + Commands: - Commands: - #{red('h, help ')} This message #{red('q, quit ')} Exit the program #{red('v, version ')} Print version information #{red('change view VIEW ')} Change current view @@ -306,9 +310,30 @@ #{red('browse ')} Look at current (deployed) view in browser #{red('relink ')} Regenerate index for all views #{red('rebuild ')} Regenerate all posts and relink #{red('deploy ')} Deploy (current view) EOS - out + @out + end + + ## Funky stuff -- needs to move? + + def new_blog!(arg) # FIXME weird? + check_empty(arg) + return if RuneBlog.exist? + yn = yesno(red(" No .blog found. Create new blog? ")) + RuneBlog.create_new_blog if yn + rescue => err + error(err) + end + + def open_blog # Crude - FIXME later + @blog = RuneBlog.new + @view = @blog.view # current view + @sequence = @blog.sequence + @root = @blog.root + @blog + rescue => err + error(err) end end