Skip to content

Instantly share code, notes, and snippets.

@gadimbaylisahil
Created January 5, 2022 07:47
Show Gist options
  • Save gadimbaylisahil/f5f61a92c68be0afc0da8f9ae785c1e5 to your computer and use it in GitHub Desktop.
Save gadimbaylisahil/f5f61a92c68be0afc0da8f9ae785c1e5 to your computer and use it in GitHub Desktop.
Gems to CSV exporter script
# Script to get list of gems installed on servers in a CSV file,
# with their licenses.
require 'csv'
class GemFinder
ROWS = %w[
name
added_date
removed_date
location
application
license
source
description
]
def initialize(app_name, server)
@app_name = app_name
@server = server
end
def run!
list = `bundle list`
gems = list.split("\n")
gems.shift
@name_and_version = gems.map do |gem|
name = gem.split[1]
version = gem.split[2]
[name, version]
end
@summaries = gems.map do |gem|
info = `bundle info #{gem.split[1]}`
info.split("\n\t")[1]
end
licenses = `bundle licenses`.split("\n")
licenses.shift
@licenses = licenses.each_with_object({}) do |gem, license_hash|
license_hash[gem.split(":")[0]] = gem.split(":")[1]&.strip
end
end
def write_to_csv!
CSV.open(@app_name + ".csv", "wb", col_sep: ";") do |csv|
csv << ROWS
@name_and_version.each_with_index do |name_and_version, index|
csv << [name_and_version[0], "", "", @server, @app_name, @licenses.fetch(name_and_version[0], "unknown"), "https://rubygems.org/gems/#{name_and_version[0]}", @summaries[index]]
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment