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