Могу ли я определить, какие пути RubyGems добавлены в путь загрузки для работы моего приложения командной строки? - PullRequest
4 голосов
/ 26 марта 2012

В gemspec я могу указать require_paths, который представляет пути, которые я хочу иметь во время выполнения. Они попадают в $LOAD_PATH от RubyGems.

Мой вопрос: есть ли способ, которым я могу определить, что это за пути во время выполнения? Могу ли я изучить элементы $LOAD_PATH и узнать, какие из них были добавлены только для моего драгоценного камня?

Обновление : В конечном счете, я хотел бы динамически загружать рубиновые файлы изнутри самоцвета, например,

load_from 'foo/bar'

И эта находка $MY_GEMS_LIB_DIR/foo/bar/*.rb. Я, конечно, могу пройти через весь $LOAD_PATH в поисках foo/bar, но я бы предпочел ограничить его только самоцветом.

Ответы [ 4 ]

1 голос
/ 12 апреля 2012

Если я правильно вас понимаю, это должно сделать (Ruby 1.9.3):

before = $LOAD_PATH.dup
require 'the_gem'
added_paths = $LOAD_PATH - before

Конечно, это будет включать пути, добавленные зависимостями.

1 голос
/ 11 апреля 2012

Я не знаю, понял ли я, что вам нужно (мой английский плохой: - /);в любом случае, если проблема заключается в определении каталогов, которые будут загружены, когда вам потребуется гем, вы можете использовать Gem::Specification.lib_dirs_glob:

Gem::Specification.find_by_name('irbtools').lib_dirs_glob
#=> "/home/my_user/.rvm/gems/ruby-1.9.3-p125/gems/irbtools-1.2.2/lib"

Gem::Specification.find_by_name('xyz').lib_dirs_glob
# raises a Gem::LoadError

Так что возможная реализация load_from можетбыть:

def load_from(gem_name, path)
  path_to_load = File.join(Gem::Specification.find_by_name(gem_name).lib_dirs_glob, path)
  Dir.glob(path_to_load).each(&method(:load))
end

Попытка загрузить Thor::CoreExt:

Thor::CoreExt #=> NameError: uninitialized constant Thor
load_from 'thor', 'thor/core_ext/*.rb'
Thor::CoreExt #=> Thor::CoreExt

Это работает на моей машине с ruby ​​1.9.3 и gem 1.8.21.

0 голосов
/ 10 апреля 2012

Похоже, Gem.find_files может вам помочь.

0 голосов
/ 26 марта 2012

Вы можете использовать глобальный $: в irb.Также есть команда gem which, которая дает вам путь к библиотеке, но я не уверен, включает ли он именно то, что вы хотите.

...