On 8/31/07, NachoKB <[EMAIL PROTECTED]> wrote:
> 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

Muy bueno Nacho!

Una pregunta, ¿por alguna razón la clase no hereda de Dir?

Igual se le puede agregar el method_missing para redirigir todos los
mensajes a @dir.

Gracias por compartirlo ;)
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Responder a