Skip to content

Commit

Permalink
FEATURE: Try to load plugin gems platform variants (discourse#21643)
Browse files Browse the repository at this point in the history
  • Loading branch information
xfalcox authored Jun 26, 2023
1 parent fa047d9 commit 3f7105e
Showing 1 changed file with 16 additions and 6 deletions.
22 changes: 16 additions & 6 deletions lib/plugin_gem.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,8 @@ def self.load(path, name, version, opts = nil)
spec_path = gems_path + "/specifications"

spec_file = spec_path + "/#{name}-#{version}"
spec_file += "-#{opts[:platform]}" if opts[:platform]
spec_file += ".gemspec"

unless File.exist? spec_file
unless platform_variants(spec_file).find(&File.method(:exist?)).present?
command =
"gem install #{name} -v #{version} -i #{gems_path} --no-document --ignore-dependencies --no-user-install"
command += " --source #{opts[:source]}" if opts[:source]
Expand All @@ -21,15 +19,27 @@ def self.load(path, name, version, opts = nil)
Bundler.with_unbundled_env { puts `#{command}` }
end

if File.exist? spec_file
spec_file_variant = platform_variants(spec_file).find(&File.method(:exist?))
if spec_file_variant.present?
Gem.path << gems_path
Gem::Specification.load(spec_file).activate
Gem::Specification.load(spec_file_variant).activate

require opts[:require_name] ? opts[:require_name] : name unless opts[:require] == false
else
puts "You are specifying the gem #{name} in #{path}, however it does not exist!"
puts "Looked for: #{spec_file}"
puts "Looked for: \n- #{platform_variants(spec_file).join("\n- ")}"
exit(-1)
end
end

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"

[platform_less, platform_full, platform_version_less]
end
end

0 comments on commit 3f7105e

Please sign in to comment.