class MDir def initialize(path) @path=path @files=[] @dirs=[] end def file(f) @files << f end def files(*f) @files += f end def dir(name,&p) dir = MDir.new(name) dir.instance_eval(&p) @dirs << dir end def dirs(*names,&p) names.each{|name| dir=MDir.new(name) dir.instance_eval(&p) @dirs << dir } end def gather(base="") a=[] @files.each{|f| a+=Dir[File.join(@path,f)] } @dirs.each{|dir| a+=dir.gather(@path) } a end end def dir(path,&p) d=MDir.new(path) d.instance_eval(&p) d.gather end