Está claro. Lo dije por que era muuuuuuuuuy simple (igual me gustó el
ejercicio).
Aunque más de una vez me pasó querer resolver algo y no encontrar cómo (o
sea, yo sabía la mejor forma pero no encontraba el nombre del método)...
recientemente, tenía un array de elementos (gnomos, digamos). Me interesaba
separar el gnomo emperador del resto para que una view los muestre por
separado. Yo buscaba una clasificación de elementos o algo así. Terminé
haciendo algo como
  emperador = gnomos.detect &:emperador?
  [ emperador, gnomos - emperador ]
Ayer me crucé con el método
Enumerable.partition*.........................................................
.

* notar que no es exactamente lo mismo, pero eso era lo que buscaba en un
ppio... Ver http://corelib.rubyonrails.org/classes/Enumerable.html#M002183

nachokb

On 8/31/07, Emmanuel Oga <[EMAIL PROTECTED]> wrote:
>
> 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
>
>
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Responder a