Class: Ratch::Help

Inherits:
Object show all
Defined in:
lib/ratch/script/help.rb

Overview

Support class for displaying command help lists.

Class Method Summary collapse

Class Method Details

.header(file, opts = {}) ⇒ Object

Scan script for description header.



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# 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) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 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) ⇒ Object

Scan task scripts for descriptions.



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# 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