class Ratch::Help

Support class for displaying command help lists.

Public Class Methods

header(file, opts={}) click to toggle source

Scan script for description header.

# File lib/ratch/script/help.rb, line 60
def self.header(file, opts={})
  #next if FileTest.directory?(file)
  #next if opts[:exe] and !FileTest.executable?(file)
  desc = "\n"
  File.open(file) do |f|
    line = ''
    until f.eof?
      line = f.gets
      case line
      when /^(#!|\s*$)/
        next
      when /^\s*#\s?(.*)/
        desc << $1.rstrip + "\n"
      else
        break
      end
    end
  end
  desc + "\n"
end
list(*dirs) click to toggle source
# File lib/ratch/script/help.rb, line 7
def self.list(*dirs)
  tasks = script_descriptions(*dirs)
  tmax  = tasks.keys.max{ |a,b| a.size <=> b.size }.size
  #dmax  = dirs.flatten.max{ |a,b| a.size <=> b.size }.size
  #if dir == ''
  #  max += 4 + 2
  #else
    max = tmax + 4
  #end
  tasks = tasks.sort_by{|k,v| k }
  tasks.each do |name, sum|
    #if dir == ''
    #  cmd = "ratch #{name}"
    #else
      cmd = name
    #end
    puts "%-#{max}s # %s" % [cmd, sum]
  end
end
script_descriptions(*dirs) click to toggle source

Scan task scripts for descriptions.

# File lib/ratch/script/help.rb, line 28
def self.script_descriptions(*dirs)
  opts  = Hash === dirs.last ? dirs.pop : {}
  dirs  = dirs.flatten
  help  = {}
  dirs.each do |dir|
    files = Dir.glob(File.join(dir,'**/*'))
    files.each do |fname|
      next if FileTest.directory?(fname)
      next if opts[:exe] and !FileTest.executable?(fname)
      desc = ''
      File.open(fname) do |f|
        line = ''
        until f.eof?
          line = f.gets
          case line
          when /^(#!|\s*$)/
            next
          when /^\s*#(.*)/
            desc = $1.strip; break
          else
            desc = nil; break
          end
        end
      end
      key = opts[:exe] ? fname : fname.sub(dir+'/', '')
      help[key] = desc
    end
  end
  help
end