2019-05-02 17:17:27 -05:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2017-01-09 16:10:14 -06:00
|
|
|
module PluginGem
|
2017-07-27 20:20:09 -05:00
|
|
|
def self.load(path, name, version, opts = nil)
|
2017-01-09 16:10:14 -06:00
|
|
|
opts ||= {}
|
|
|
|
|
|
|
|
gems_path = File.dirname(path) + "/gems/#{RUBY_VERSION}"
|
2021-04-16 03:21:39 -05:00
|
|
|
|
2017-01-09 16:10:14 -06:00
|
|
|
spec_path = gems_path + "/specifications"
|
2021-04-16 03:21:39 -05:00
|
|
|
|
2023-01-09 06:10:19 -06:00
|
|
|
spec_file = spec_path + "/#{name}-#{version}"
|
2021-04-16 03:21:39 -05:00
|
|
|
|
2024-05-27 05:27:13 -05:00
|
|
|
if platform_variants(spec_file).find(&File.method(:exist?)).blank?
|
2023-01-09 06:10:19 -06:00
|
|
|
command =
|
|
|
|
"gem install #{name} -v #{version} -i #{gems_path} --no-document --ignore-dependencies --no-user-install"
|
2021-04-16 03:21:39 -05:00
|
|
|
command += " --source #{opts[:source]}" if opts[:source]
|
2017-01-09 16:10:14 -06:00
|
|
|
puts command
|
2022-03-06 23:20:43 -06:00
|
|
|
|
2023-01-09 06:10:19 -06:00
|
|
|
Bundler.with_unbundled_env { puts `#{command}` }
|
2017-01-09 16:10:14 -06:00
|
|
|
end
|
2021-04-16 03:21:39 -05:00
|
|
|
|
2023-06-26 13:11:35 -05:00
|
|
|
spec_file_variant = platform_variants(spec_file).find(&File.method(:exist?))
|
|
|
|
if spec_file_variant.present?
|
2021-04-16 03:21:39 -05:00
|
|
|
Gem.path << gems_path
|
2023-06-26 13:11:35 -05:00
|
|
|
Gem::Specification.load(spec_file_variant).activate
|
2021-04-16 03:21:39 -05:00
|
|
|
|
2023-01-09 06:10:19 -06:00
|
|
|
require opts[:require_name] ? opts[:require_name] : name unless opts[:require] == false
|
2017-01-09 16:10:14 -06:00
|
|
|
else
|
|
|
|
puts "You are specifying the gem #{name} in #{path}, however it does not exist!"
|
2023-06-26 13:11:35 -05:00
|
|
|
puts "Looked for: \n- #{platform_variants(spec_file).join("\n- ")}"
|
2017-01-09 16:10:14 -06:00
|
|
|
exit(-1)
|
|
|
|
end
|
|
|
|
end
|
2023-06-26 13:11:35 -05:00
|
|
|
|
|
|
|
def self.platform_variants(spec_file)
|
|
|
|
platform_less = "#{spec_file}.gemspec"
|
|
|
|
platform_full = "#{spec_file}-#{RUBY_PLATFORM}.gemspec"
|
|
|
|
platform_version_less =
|
|
|
|
"#{spec_file}-#{Gem::Platform.local.cpu}-#{Gem::Platform.local.os}.gemspec"
|
|
|
|
|
2024-06-05 07:58:02 -05:00
|
|
|
variants = [platform_less, platform_full, platform_version_less]
|
|
|
|
variants << "#{spec_file}-#{RUBY_PLATFORM}-gnu.gemspec" if RUBY_PLATFORM.end_with?("-linux")
|
|
|
|
|
|
|
|
variants.uniq
|
2023-06-26 13:11:35 -05:00
|
|
|
end
|
2017-01-09 16:10:14 -06:00
|
|
|
end
|