Last active
December 3, 2018 06:30
-
-
Save iyuuya/398461e7dbaffcf7b7321d0200918de6 to your computer and use it in GitHub Desktop.
outdatedなgemリストをmajor, minor, tiny以下でグルーピングして出力するスクリプト
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# frozen_string_literal: true | |
# outdatedなgemリストをmajor, minor, tiny以下でグルーピングして出力するスクリプト | |
# usage: bundle outdated | ruby grouped_outdated.rb | |
# | |
# NOTE: なぐり書き | |
def collect_geminfo_from_bundle_outdated_text(str) | |
str.lines.map do |line| | |
matched = line =~ /\s*\* ([\w\-]+) \((.+)\).*/ | |
next unless matched | |
name = Regexp.last_match(1) | |
versions = Regexp.last_match(2) | |
.split(',') | |
.select { |str| str =~ /newest|installed/ } | |
.inject({}) do |res, str| | |
key = case str | |
when /newest/ | |
:newest | |
when /installed/ | |
:installed | |
end | |
m = str.match(Gem::Version::VERSION_PATTERN) | |
res[key] = m[0].split('.').map(&:to_i) | |
res | |
end | |
{ | |
name: name, | |
versions: versions | |
} | |
end.compact | |
end | |
def grouping_version(collected_geminfo) | |
collected_geminfo.group_by do |geminfo| | |
if geminfo[:versions][:newest][0] > geminfo[:versions][:installed][0] | |
:major | |
elsif geminfo[:versions][:newest][1] > geminfo[:versions][:installed][1] | |
:minor | |
else | |
:tiny | |
end | |
end | |
end | |
str = STDIN.read | |
a = collect_geminfo_from_bundle_outdated_text(str) | |
grouped = grouping_version(a) | |
grouped.each do |key, geminfos| | |
puts "## #{key}" | |
geminfos.each do |geminfo| | |
puts "- [ ] #{geminfo[:name]} : #{geminfo[:versions][:newest].join('.')} <- #{geminfo[:versions][:installed].join('.')}" | |
end | |
puts | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment