Deprimido? porque? Teniendo en cuenta el contexto asumo que es por no conocer 
el uso recursivo del metodo glob de la clas Dir de la libreria core de ruby... 
no? :)

Bueno! creo que no tendrias que preocuparte mucho, si tenes en cuenta que la 
libreria core y la libreria estandar de ruby comprenden decenas de clases, cada 
una con decenas de metodos, dificilmente podrias conocer y recordar de memoria 
el comportamiento exacto de cada uno de esos metodos. Para mi la clave esta en 
compartir la info: lo que no se yo, alguien mas lo sabra!!!

:)

NachoKB <[EMAIL PROTECTED]> escribió: 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


       
---------------------------------

¡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

Responder a