2011-04-27 12 views
7

FakeProfilePictures::Photo.all_large_names_2x (definido a continuación) devuelve una matriz de nombres de ruta absolutos, pero cuando hago Dir["picture_*@2x.*"] desde el directorio correcto en irb, obtengo los basenames (lo que quiero). ¿Cuál es la mejor manera de obtener los nombres básicos? Sé que podría hacerlo agregando .map { |f| File.basename(f) } como se muestra en el comentario, pero ¿hay algún modo más fácil/better/faster/stronger?¿Cómo obtener Ruby Dir # glob para devolver basenames, no absolute_paths?

module FakeProfilePictures 
    class Photo 
    DIR = File.expand_path(File.join(File.dirname(__FILE__), "photos")) 

    # ... 

    def self.all_large_names_2x 
     @@all_large_names_2x ||= Dir[File.join(DIR, "picture_*@2x.*")] # .map { |f| File.basename(f) } 
    end 
    end 
end 

Respuesta

19

Usted puede hacer

Dir.chdir(DIR) do 
    Dir["picture_*@2x.*"] 
end 

después del bloqueo, el directorio original se restaura.

+0

Agradable. '@@ all_large_names_2x || = Dir.chdir (DIR) {Dir [" imagen _ * @ 2x. * "]}' funcionó! ¡Gracias! Creo que iré con eso porque es menos código y probablemente más rápido? Quién sabe... – ma11hew28

2

Se podría chdir en DIR antes de comodines, pero me acaba de ejecutar todo a través de basename.

+0

¿Por qué? ¿Qué hay de la solución de @J -_- L? Creo que prefiero eso. – ma11hew28

Cuestiones relacionadas