|
|
@@ -5,6 +5,8 @@ |
|
|
require "json" |
|
|
require "date" |
|
|
|
|
|
# Dir.chdir '...' |
|
|
|
|
|
bundle = `bundle list` |
|
|
|
|
|
yearly_stats = {} |
|
|
@@ -14,23 +16,48 @@ |
|
|
gem_name, gem_version = /\s+\*\s+([^ ]+)\s+\((.*)\)/.match(line).to_a[1..-1] |
|
|
|
|
|
begin |
|
|
gem_json = `curl -s https://rubygems.org/api/v2/rubygems/#{gem_name}/versions/#{gem_version}.json` |
|
|
built_at = JSON.parse(gem_json)["built_at"] |
|
|
release_date = Date.parse(built_at).to_date |
|
|
gem_releases = JSON.parse(`curl -s https://rubygems.org/api/v1/versions/#{gem_name}.json`) |
|
|
|
|
|
gem = gem_releases.find { |gem_release| gem_release['number'] == gem_version } |
|
|
release_date = Date.parse(gem["built_at"]).to_date |
|
|
puts "Current: #{gem_name}, #{gem['number']}, #{release_date.strftime("%Y-%m-%d")}" |
|
|
|
|
|
release_year = release_date.strftime("%Y") |
|
|
yearly_stats[release_year] ||= {} |
|
|
yearly_stats[release_year][:current_count] ||= 0 |
|
|
yearly_stats[release_year][:current_gems] ||= [] |
|
|
|
|
|
yearly_stats[release_year][:current_count] += 1 |
|
|
yearly_stats[release_year][:current_gems] << gem_name |
|
|
|
|
|
puts "#{gem_name},#{gem_version},#{release_date.strftime("%Y-%m-%d")}" |
|
|
gem = gem_releases.find { |gem_release| gem_release['prerelease'] == false } |
|
|
release_date = Date.parse(gem["built_at"]).to_date |
|
|
puts "Latest: #{gem_name}, #{gem['number']}, #{release_date.strftime("%Y-%m-%d")}" unless gem['number'] == gem_version |
|
|
|
|
|
release_year = release_date.strftime("%Y") |
|
|
yearly_stats[release_year] ||= { count: 0, gems: [] } |
|
|
yearly_stats[release_year][:count] += 1 |
|
|
yearly_stats[release_year][:gems] << gem_name |
|
|
rescue => e |
|
|
puts "#{gem_name},#{gem_version},???" |
|
|
yearly_stats[release_year] ||= {} |
|
|
yearly_stats[release_year][:latest_count] ||= 0 |
|
|
yearly_stats[release_year][:latest_gems] ||= [] |
|
|
|
|
|
yearly_stats[release_year][:latest_count] += 1 |
|
|
yearly_stats[release_year][:latest_gems] << gem_name |
|
|
|
|
|
puts '' |
|
|
rescue => e |
|
|
puts "Current: #{gem_name}, #{gem_version}, ???\n\n" |
|
|
end |
|
|
end |
|
|
|
|
|
puts |
|
|
puts "Yearly summary:" |
|
|
puts 'Year, Current, Latest, Current Gems, Latest Gems, Diff' |
|
|
yearly_stats.sort.each do |year, data| |
|
|
puts "#{year},#{data[:count]},#{data[:gems].join(' ')}" |
|
|
puts [ |
|
|
year, |
|
|
data[:current_count].to_i, |
|
|
data[:latest_count].to_i, |
|
|
Array(data[:current_gems]).join(' '), |
|
|
Array(data[:latest_gems]).join(' '), |
|
|
(Array(data[:latest_gems]) - Array(data[:current_gems])).join(' ') |
|
|
].join(", ") |
|
|
end |