From c43a7bb23bfd2b8a87e88ce496581b6de3d418de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9gis=20Hanol?= Date: Fri, 16 Apr 2021 10:21:39 +0200 Subject: [PATCH] FIX: ensure plugin's gems are in the gem path (#12727) Let's say you want to use a gem in a plugin that has a dependencie. You would write something like this: ```ruby gem 'dependency-gem', '1.2.3' gem 'amazing-gem', '4.5.6' ``` However, since when we install a plugin gem we install it in the `gems` directory created inside the plugins directory, when it comes the time to install the `amazing-gem`, it won't be able to find the `dependency-gem`. This fixes that issue by adding the `gems` plugins directory to the global gem path. Also fixed a frozen string error when specifying a source. --- lib/plugin_gem.rb | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/lib/plugin_gem.rb b/lib/plugin_gem.rb index 1ca1fd9176c..855d1aca2c1 100644 --- a/lib/plugin_gem.rb +++ b/lib/plugin_gem.rb @@ -5,21 +5,24 @@ module PluginGem opts ||= {} gems_path = File.dirname(path) + "/gems/#{RUBY_VERSION}" + spec_path = gems_path + "/specifications" - spec_file = spec_path + "/#{name}-#{version}" + + spec_file = spec_path + "/#{name}-#{version}" spec_file += "-#{opts[:platform]}" if opts[:platform] spec_file += ".gemspec" + unless File.exists? spec_file - command = "gem install #{name} -v #{version} -i #{gems_path} --no-document --ignore-dependencies --no-user-install" - if opts[:source] - command << " --source #{opts[:source]}" - end + command = "gem install #{name} -v #{version} -i #{gems_path} --no-document --ignore-dependencies --no-user-install" + command += " --source #{opts[:source]}" if opts[:source] puts command puts `#{command}` end + if File.exists? spec_file - spec = Gem::Specification.load spec_file - spec.activate + Gem.path << gems_path + Gem::Specification.load(spec_file).activate + unless opts[:require] == false require opts[:require_name] ? opts[:require_name] : name end