Gracias!! Igual sigo deprimido...
On 8/31/07, Emmanuel Oga <[EMAIL PROTECTED]> wrote: > > Nacho: > > Dir.[] o Dir.glob toman como parametro un "glob pattern" ( > http://en.wikipedia.org/wiki/Glob_pattern) que es un patron similar a una > expresion regular pero menos poderoso que generalmente se usa para describir > archivos. > > El glob Dir[/directorio/**/*'] recorre todos los archivos en el directorio > "directorio" __Y__ sus subdirectorios, por lo que no hace falta que lo > implementes por tu cuenta. Otra cosa buena es que a Dir.[] le podes pasar > mas de un glob pattern si queres, ejemplo: > > Dir.glob ["/tmp/**/*", "/etc/**/*"].each do |file| > ... > end > > que busca todos los archivos en /tmp y sus subdirectorios __y__ todos los > archivos /etc y susu subdirectorios. > > *NachoKB <[EMAIL PROTECTED]>* escribió: > > Cuidado que Find no es una clase, sino un módulo. > > O sea, no es para usarlo directamente... normalmente es para incorporarlo > en una clase (para componer comportamiento). Lo mismo con FileTest. > > Me parece que lo que querés hacer lo podés hacer sólo usando File y Dir... > > > Básicamente, vos querés agarrar todos los archivos a partir de un root > dado (recursivamente) y calcularle el MD5: > > Dir.new(directorio).map do |fullpath| > > [name, Digest::MD5.hexdigest (File.read(fullpath))] > > end > > > > El problema es que (1) si bien Dir es Enumerable, enumera sólo los hijos > directo (no rescursivamente) y (2) "fullpath" no quedaría realmente el path > completo... Por lo tanto hice esto, ver qué opinan: > > class TraversableDir > > include Enumerable > > def initialize(*args, &block) > > @dir = Dir.new *args, &block > > end > > def each(&block) > > @dir.each do |name| > > unless ['.', '..'].include? name > > fullpath = self.fullpath(name) > > case > > when File.directory?(fullpath) > > TraversableDir.new(fullpath).each &block > > when File.file?(fullpath) > > block.call fullpath > > else > > p "Ojo ni dir ni file: #{fullpath} (hay que hacer algo?)" > > end > > end > > end > > end > > def fullpath(name) > > File.expand_path "[EMAIL PROTECTED]/#{name}" > > end > > end > > > > Entonces queda: > > > TraversableDir.new(directorio).map do |fullpath| > > [name, Digest::MD5.hexdigest (File.read(fullpath))] > > end > > > > Lo que te daria un array de esta forma: > > > [ > > [ "/path/a1", "ABDCE" ], > > [ "/path/a2", "DEADBEEF" ] > > ] > > > > Que es un idiom usado en Ruby (es similar a un Hash pero a veces se usa > así, por ejemplo cuando no necesitás acceder a un elemento, sino que lo vas > a iterar). > > On 8/31/07, Damian Janowski <[EMAIL PROTECTED]> wrote: > > > > On 8/31/07, Martin Sagastume <[EMAIL PROTECTED]> wrote: > > > Excelente, eso era lo que necesitaba...muchas gracias!! > > > > > > Estuve mirando si el "API" de Rails...creo que no vi eso :P ..una > > > cosa que me llamó la atención es que la clase Find tenga programado el > > > método find ...como que es medio desprolijo el hecho de tener un > > > metodo que se llame igual que la clase (ya que en ruby no es el > > > constructor) Buscar.buscar en lugar de Buscador.buscar o algo asi > > > ... es por algo en especial ? > > > > Nu sé :) > > > > Pero me parece que suele pasar con esas pequeñas funcionalidades que > > son casi "helper" y muchas veces quedan como métodos de clase, etc. > > > > Por ejemplo: Iconv.iconv > > > > Saludos! > > _______________________________________________ > > Ruby mailing list > > [email protected] > > http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar > > > > _______________________________________________ > Ruby mailing list > [email protected] > http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar > > > ------------------------------ > > ¡Sé un mejor fotógrafo! > Perfeccioná tu técnica y encontrá las mejores fotos. > Visitá http://ar.yahoo.com/promos/mejorfotografo.html > > > _______________________________________________ > Ruby mailing list > [email protected] > http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar > >
_______________________________________________ Ruby mailing list [email protected] http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
