Skip to content

Instantly share code, notes, and snippets.

@kirikak2
Created January 10, 2019 03:54
Show Gist options
  • Save kirikak2/915dba663a239320eb66f2c6aa7eed87 to your computer and use it in GitHub Desktop.
Save kirikak2/915dba663a239320eb66f2c6aa7eed87 to your computer and use it in GitHub Desktop.
Search for gem which supports only ruby 2.6
require 'rubygems'
require 'open-uri'
require 'ruby-progressbar'
require 'pry'
specs = Marshal.load(Gem.gunzip(File.read("./latest_specs.4.8.gz")))
total = specs.length
pb = ProgressBar.create(
:title => "Searching",
:starting_at => 0,
:progress_mark => '>',
:remainder_mark => '#',
:format => '%t(%c/%C): S%BE :%t',
:total => total,
:length => 50
)
specs.each do |gem_name, gem_version, _|
pb.progress += 1
begin
compressed = open("https://rubygems.org/quick/Marshal.4.8/#{gem_name}-#{gem_version}.gemspec.rz").read
inflated = Gem.inflate(compressed)
spec = Marshal.load(inflated)
ruby1_8 = Gem::Version.new("1.8.7")
ruby1_9 = Gem::Version.new("1.9.3")
ruby2_0 = Gem::Version.new("2.0.0")
ruby2_1 = Gem::Version.new("2.1.0")
ruby2_2 = Gem::Version.new("2.2.0")
ruby2_3 = Gem::Version.new("2.3.0")
ruby2_4 = Gem::Version.new("2.4.0")
ruby2_5 = Gem::Version.new("2.5.0")
ruby2_5_1 = Gem::Version.new("2.5.1")
ruby2_5_2 = Gem::Version.new("2.5.2")
ruby2_5_3 = Gem::Version.new("2.5.3")
ruby2_6 = Gem::Version.new("2.6.0")
old_versions = [ruby1_8, ruby1_9, ruby2_0, ruby2_1,
ruby2_2, ruby2_3, ruby2_4, ruby2_5,
ruby2_5_1, ruby2_5_2, ruby2_5_3]
required = spec.required_ruby_version
if old_versions.all?{|v| !required.satisfied_by?(v) } && required.satisfied_by?(ruby2_6)
puts "#{gem_name}-#{gem_version}"
end
rescue => e
puts "#{gem_name}: #{e.message}"
end
end
pb.finish
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment