Сделайте так, чтобы Gem :: Specification.find_by_name возвращал правильную версию гема - PullRequest
0 голосов
/ 04 мая 2018

У меня есть рубиновый гем (назовем его my_gem), который предоставляет исполняемый файл (назовем его my_exe). Когда я добавляю gem "my_gem", "0.0.1" в Gemfile приложения и запускаю bundle exec my_exe, я правильно получаю спецификацию gem для версии 0.0.1 при вызове Gem::Specification.find_by_name("my_gem").

Мне нужен этот исполняемый файл для работы без участия упаковщика. Когда я выполню

my_gem _0.0.1_

и посмотрите на значение Gem::Specification.find_by_name("my_gem"), я получу обратно спецификации для последней установленной версии my_gem в системе.

Как мне получить Gem::Specification.find_by_name, чтобы вернуть спецификацию драгоценного камня, которая соответствует значению, которое я передаю в execuable?

Обновление

Есть часть информации, которую я забыл упомянуть. Я не могу изменить код, который вызывает Gem::Specification.find_by_name("my_gem"). Эта конкретная строка кода вызывается в сторонней библиотеке, которую вызывает my_exe. (Библиотека RuboCop, и здесь RuboCop пытается загрузить спецификацию (https://github.com/bbatsov/rubocop/blob/v0.55.0/lib/rubocop/config_loader_resolver.rb#L186) Я пытаюсь настроить среду, поэтому Gem::Specification.find_by_name("my_gem") возвращает спецификацию для версии my_gem, которая находится на $LOAD_PATH Должен быть способ сделать это, так как bundler способен сделать это.

1 Ответ

0 голосов
/ 04 мая 2018
Gem::Specification.find_by_name("my_gem", "0.0.1")

Если спецификация, соответствующая требованию, не может быть найдена, возникнет ошибка. Проверьте https://ruby -doc.org / stdlib-2.2.3 / libdoc / rubygems / rdoc / Gem / Specification.html # find_by_name-method

Обновление

Обновление моего ответа в ответ на ваше обновление.

Возможно, вам лучше сказать, что ваша работа на более высоком уровне. Bundler - лучший инструмент для управления пакетами, вы действительно не хотите делать это самостоятельно. Не зная, что вы делаете или как вы пытаетесь реализовать свой код, возможно, вы могли бы встроить Bundler

require 'bundler/inline'

gemfile 
  gem 'my-gem', '0.0.1'
end

# Do my work 
...