Class: Ratch::Help
Overview
Support class for displaying command help lists.
Class Method Summary collapse
-
.header(file, opts = {}) ⇒ Object
Scan script for description header.
- .list(*dirs) ⇒ Object
-
.script_descriptions(*dirs) ⇒ Object
Scan task scripts for descriptions.
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 |