Подтвердить что ты не робот

Поиск корня жемчуга

Есть ли способ узнать корневой путь моего драгоценного камня? Я пытаюсь загрузить конфигурацию по умолчанию из yaml внутри пути драгоценных камней. Как получить корневой каталог gems с ruby?

4b9b3361

Ответ 1

Учитывая следующую структуру проекта:

your_gem/
  lib/
    your_gem.rb

Вот как бы я это сделал:

# your_gem.rb

module YourGem
  def self.root
    File.expand_path '../..', __FILE__
  end
end

Ruby 2.0 представил метод Kernel#__dir__; он позволяет значительно сократить решение:

# your_gem.rb

module YourGem
  def self.root
    File.dirname __dir__
  end
end

Если вам нужен доступ к другим каталогам, вы можете просто построить root:

module YourGem
  def self.bin
    File.join root, 'bin'
  end

  def self.lib
    File.join root, 'lib'
  end
end

Ответ 2

Это универсальное решение для исполняемых файлов и библиотек. Он загружает спецификацию с использованием API Gem, поэтому путь всегда правильный:

spec = Gem::Specification.find_by_name("your_gem_name")
gem_root = spec.gem_dir
yaml_obj = YAML.load(gem_root + "/file_name.yaml")

Ответ 3

gem list <gem> -d

Или, если вы используете bundler:

bundle show <gem>