bogdanrada
6/3/2016 - 3:40 PM

Hacky script to show bundled dependencies of rails app

Hacky script to show bundled dependencies of rails app

#!/usr/bin/env ruby

require 'bundler'
require 'hirb'
require 'csv'

lock_file = Bundler::LockfileParser.new(Bundler.read_file("Gemfile.lock"))

def url_for(spec)
  case spec.source
    when Bundler::Source::Rubygems
      "http://rubygems.org/gems/#{spec.name}"
    when Bundler::Source::Git
      if spec.source.uri.include? "github.com"
        "https:" + spec.source.uri.sub(/^\w+:/,'').sub(/\.git$/,'')
      else
        spec.source.uri
      end
  end
end

dependencies = lock_file.specs.sort_by{|spec| spec.name}.map do |spec|
  {
    name: spec.name,
    version: spec.version.to_s,
    source: spec.source.class.to_s.split("::").last,
    url: url_for(spec)
  }
end

if $stdout.tty?
  # dump a pretty table
  extend Hirb::Console
  table dependencies, :fields => [:name, :version, :source, :url]
else
  # dump tp csv
  puts CSV.generate_line %w{ Name Version Source Url }
  dependencies.each do |d|
    puts CSV.generate_line [ d[:name], d[:version], d[:source], d[:url] ]
  end
end