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