Как заставить Ruby Dir # glob возвращать базовые имена, а не absolute_paths? - PullRequest
7 голосов
/ 28 апреля 2011

FakeProfilePictures::Photo.all_large_names_2x (определено ниже) возвращает массив имен абсолютных путей, но когда я делаю Dir["picture_*@2x.*"] из правильного каталога в irb, я получаю только базовые имена (что я хочу). Какой лучший способ получить базовые имена? Я знаю, что мог бы сделать это, добавив .map { |f| File.basename(f) }, как показано в комментарии, но есть ли более простой / лучше / быстрее / сильнее способ?

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

Ответы [ 2 ]

20 голосов
/ 28 апреля 2011

Вы можете сделать

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

после того, как блок восстановит исходный каталог.

2 голосов
/ 28 апреля 2011

Вы могли бы chdir в DIR до того, как пробиться, но я бы просто пропустил все через basename.

...