-
-
Save jtimberman/4040195 to your computer and use it in GitHub Desktop.
ruby libs have *got* to stop doing this...
This file contains hidden or 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
| libs = ARGV.size == 0 ? all_gems : ARGV | |
| list = | |
| libs. | |
| forkify(16){|lib| puts "#{ lib }..."; [lib, polluted_by(lib)]}. | |
| sort_by{|pair| pair.last} | |
| list.each do |lib, polluted| | |
| puts "polluted_by('#{ lib }') #=> #{ polluted }" | |
| end | |
| BEGIN { | |
| require 'forkify' | |
| STDOUT.sync = true | |
| def all_gems | |
| `gem list --local`.split(/\n/).map{|line| line.scan(/[^\s]+/).first}.uniq - stupidly_loading_gems | |
| end | |
| def stupidly_loading_gems | |
| %w[ | |
| ] | |
| end | |
| def polluted_by(lib) | |
| before = Methods.summary | |
| required = false | |
| open('/dev/null', 'w+') do |fd| | |
| stderr = STDERR.dup | |
| #STDERR.reopen(fd) | |
| begin | |
| libnames = [lib, lib.gsub('-', '_'), lib.gsub('-', '/')] | |
| loaded = false | |
| libnames.each do |libname| | |
| begin | |
| require(libname) | |
| break(loaded = true) | |
| rescue Object | |
| next | |
| end | |
| end | |
| return -1 unless loaded | |
| ensure | |
| STDERR.reopen(stderr) | |
| end | |
| end | |
| after = Methods.summary | |
| before.polluted_by(after) | |
| end | |
| class Methods | |
| attr_accessor :klass | |
| attr_accessor :class_methods | |
| attr_accessor :instance_methods | |
| def initialize(klass) | |
| @klass = klass | |
| @class_methods = klass.methods | |
| @instance_methods = klass.instance_methods(false) | |
| end | |
| def polluted_by(other) | |
| (other.class_methods - class_methods).size + (other.instance_methods - instance_methods).size | |
| end | |
| class Summary < ::Hash | |
| def polluted_by(other) | |
| total = 0 | |
| each do |klass, methods| | |
| if other.has_key?(klass) | |
| total += methods.polluted_by(other[klass]) | |
| end | |
| end | |
| total | |
| end | |
| end | |
| def Methods.summary | |
| summary = Summary.new | |
| ObjectSpace.each_object(Class){|klass| summary[klass] = Methods.new(klass)} | |
| summary | |
| end | |
| end | |
| } | |
This file contains hidden or 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
| polluted_by('actionmailer') #=> -1 | |
| polluted_by('actionpack') #=> -1 | |
| polluted_by('activemodel') #=> -1 | |
| polluted_by('activerecord') #=> -1 | |
| polluted_by('activeresource') #=> -1 | |
| polluted_by('activesupport') #=> -1 | |
| polluted_by('addressable') #=> -1 | |
| polluted_by('yajl-ruby') #=> -1 | |
| polluted_by('minitar') #=> -1 | |
| polluted_by('xiki') #=> -1 | |
| polluted_by('minitest') #=> -1 | |
| polluted_by('knife-windows') #=> -1 | |
| polluted_by('knife-rackspace') #=> -1 | |
| polluted_by('knife-openstack') #=> -1 | |
| polluted_by('knife-essentials') #=> -1 | |
| polluted_by('knife-ec2') #=> -1 | |
| polluted_by('knife-community') #=> -1 | |
| polluted_by('trogdoro-el4r') #=> -1 | |
| polluted_by('json_pure') #=> -1 | |
| polluted_by('jruby-pageant') #=> -1 | |
| polluted_by('jquery-rails') #=> -1 | |
| polluted_by('pry-doc') #=> -1 | |
| polluted_by('railties') #=> -1 | |
| polluted_by('therubyracer') #=> -1 | |
| polluted_by('google-spreadsheet-ruby') #=> -1 | |
| polluted_by('rb-fchange') #=> -1 | |
| polluted_by('rb-inotify') #=> -1 | |
| polluted_by('gemcutter') #=> -1 | |
| polluted_by('test-kitchen') #=> -1 | |
| polluted_by('gem-man') #=> -1 | |
| polluted_by('ruby-ole') #=> -1 | |
| polluted_by('chef-handler-updated-resources') #=> -1 | |
| polluted_by('ruby-openid') #=> -1 | |
| polluted_by('fl-rocco') #=> -1 | |
| polluted_by('ruby-rc4') #=> -1 | |
| polluted_by('ruby-vnc') #=> -1 | |
| polluted_by('rubyntlm') #=> -1 | |
| polluted_by('rubyzip') #=> -1 | |
| polluted_by('simplecov-html') #=> -1 | |
| polluted_by('pdf-reader') #=> 0 | |
| polluted_by('contest') #=> 0 | |
| polluted_by('sprockets') #=> 0 | |
| polluted_by('mime-types') #=> 0 | |
| polluted_by('spiceweasel') #=> 0 | |
| polluted_by('slop') #=> 0 | |
| polluted_by('dep_selector') #=> 0 | |
| polluted_by('diff-lcs') #=> 0 | |
| polluted_by('colored') #=> 0 | |
| polluted_by('archive-tar-minitar') #=> 0 | |
| polluted_by('log_switch') #=> 0 | |
| polluted_by('coderay') #=> 0 | |
| polluted_by('rubypants') #=> 0 | |
| polluted_by('erubis') #=> 0 | |
| polluted_by('escape_utils') #=> 0 | |
| polluted_by('syntax') #=> 0 | |
| polluted_by('log4r') #=> 0 | |
| polluted_by('minitest-reporters') #=> 0 | |
| polluted_by('ruby_gntp') #=> 0 | |
| polluted_by('listen') #=> 0 | |
| polluted_by('mixlib-cli') #=> 0 | |
| polluted_by('method_source') #=> 0 | |
| polluted_by('ffi') #=> 0 | |
| polluted_by('file-tail') #=> 0 | |
| polluted_by('tailor') #=> 0 | |
| polluted_by('libxml-ruby') #=> 0 | |
| polluted_by('childprocess') #=> 0 | |
| polluted_by('term-ansicolor') #=> 0 | |
| polluted_by('forkify') #=> 0 | |
| polluted_by('formatador') #=> 0 | |
| polluted_by('fssm') #=> 0 | |
| polluted_by('terminal-notifier') #=> 0 | |
| polluted_by('text-format') #=> 0 | |
| polluted_by('ruby-hmac') #=> 0 | |
| polluted_by('rspec-mocks') #=> 0 | |
| polluted_by('ronn') #=> 0 | |
| polluted_by('ghost') #=> 0 | |
| polluted_by('rocco') #=> 0 | |
| polluted_by('redcarpet') #=> 0 | |
| polluted_by('rdoc') #=> 0 | |
| polluted_by('rdiscount') #=> 0 | |
| polluted_by('github-markdown') #=> 0 | |
| polluted_by('github-markup') #=> 0 | |
| polluted_by('text-hyphen') #=> 0 | |
| polluted_by('rb-fsevent') #=> 0 | |
| polluted_by('libv8') #=> 0 | |
| polluted_by('bunny') #=> 0 | |
| polluted_by('rak') #=> 0 | |
| polluted_by('raindrops') #=> 0 | |
| polluted_by('gssapi') #=> 0 | |
| polluted_by('builder') #=> 0 | |
| polluted_by('rack-protection') #=> 0 | |
| polluted_by('guard-rocco') #=> 0 | |
| polluted_by('rack-cache') #=> 0 | |
| polluted_by('rack') #=> 0 | |
| polluted_by('bluecloth') #=> 0 | |
| polluted_by('hashie') #=> 0 | |
| polluted_by('progressbar') #=> 0 | |
| polluted_by('mixlib-config') #=> 0 | |
| polluted_by('hike') #=> 0 | |
| polluted_by('popen4') #=> 0 | |
| polluted_by('Platform') #=> 0 | |
| polluted_by('htmlentities') #=> 0 | |
| polluted_by('http_parser.rb') #=> 0 | |
| polluted_by('pkglookup') #=> 0 | |
| polluted_by('pdfkit') #=> 0 | |
| polluted_by('moneta') #=> 0 | |
| polluted_by('parslet') #=> 0 | |
| polluted_by('open4') #=> 0 | |
| polluted_by('i18n') #=> 0 | |
| polluted_by('kramdown') #=> 0 | |
| polluted_by('ipaddress') #=> 0 | |
| polluted_by('nokogiri') #=> 0 | |
| polluted_by('mustache') #=> 0 | |
| polluted_by('journey') #=> 0 | |
| polluted_by('thor') #=> 0 | |
| polluted_by('wasabi') #=> 0 | |
| polluted_by('multipart-post') #=> 0 | |
| polluted_by('bigdecimal') #=> 0 | |
| polluted_by('multi_json') #=> 0 | |
| polluted_by('kgio') #=> 0 | |
| polluted_by('ttfunk') #=> 0 | |
| polluted_by('knife-config') #=> 0 | |
| polluted_by('useragent') #=> 0 | |
| polluted_by('Ascii85') #=> 0 | |
| polluted_by('virtualbox') #=> 0 | |
| polluted_by('aruba') #=> 0 | |
| polluted_by('tilt') #=> 0 | |
| polluted_by('oauth') #=> 1 | |
| polluted_by('compass') #=> 1 | |
| polluted_by('posix-spawn') #=> 1 | |
| polluted_by('cane') #=> 1 | |
| polluted_by('choice') #=> 1 | |
| polluted_by('fast-stemmer') #=> 1 | |
| polluted_by('faraday') #=> 1 | |
| polluted_by('ruby_parser') #=> 1 | |
| polluted_by('excon') #=> 1 | |
| polluted_by('sanitize') #=> 1 | |
| polluted_by('simple_oauth') #=> 1 | |
| polluted_by('albino') #=> 1 | |
| polluted_by('cri') #=> 1 | |
| polluted_by('chunky_png') #=> 1 | |
| polluted_by('fastercsv') #=> 2 | |
| polluted_by('text-table') #=> 2 | |
| polluted_by('httpauth') #=> 2 | |
| polluted_by('git') #=> 2 | |
| polluted_by('prawn') #=> 2 | |
| polluted_by('mixlib-shellout') #=> 2 | |
| polluted_by('rack-ssl') #=> 3 | |
| polluted_by('rest-client') #=> 3 | |
| polluted_by('blockenspiel') #=> 3 | |
| polluted_by('unicorn') #=> 3 | |
| polluted_by('launchy') #=> 4 | |
| polluted_by('eventmachine') #=> 4 | |
| polluted_by('em-twitter') #=> 4 | |
| polluted_by('em-socksify') #=> 4 | |
| polluted_by('httpi') #=> 4 | |
| polluted_by('chozo') #=> 4 | |
| polluted_by('aruba-doubles') #=> 5 | |
| polluted_by('hashr') #=> 5 | |
| polluted_by('io-console') #=> 23 | |
| polluted_by('gyoku') #=> 102 | |
| polluted_by('jeweler') #=> 102 | |
| polluted_by('arel') #=> 102 | |
| polluted_by('highline') #=> 103 | |
| polluted_by('net-ssh') #=> 104 | |
| polluted_by('net-sftp') #=> 104 | |
| polluted_by('net-ssh-multi') #=> 104 | |
| polluted_by('net-ssh-gateway') #=> 104 | |
| polluted_by('net-scp') #=> 107 | |
| polluted_by('capistrano') #=> 108 | |
| polluted_by('mixlib-authentication') #=> 115 | |
| polluted_by('mixlib-log') #=> 115 | |
| polluted_by('tzinfo') #=> 115 | |
| polluted_by('ubuntu_ami') #=> 115 | |
| polluted_by('simplecov') #=> 115 | |
| polluted_by('akami') #=> 115 | |
| polluted_by('daemons') #=> 115 | |
| polluted_by('cookiejar') #=> 115 | |
| polluted_by('uuidtools') #=> 116 | |
| polluted_by('uber-s3') #=> 116 | |
| polluted_by('httpclient') #=> 116 | |
| polluted_by('rack-test') #=> 118 | |
| polluted_by('grit') #=> 119 | |
| polluted_by('powerbar') #=> 119 | |
| polluted_by('git-up') #=> 119 | |
| polluted_by('thin') #=> 119 | |
| polluted_by('ansi') #=> 119 | |
| polluted_by('em-http-request') #=> 119 | |
| polluted_by('sinatra') #=> 119 | |
| polluted_by('spreadsheet') #=> 127 | |
| polluted_by('CFPropertyList') #=> 133 | |
| polluted_by('retryable') #=> 276 | |
| polluted_by('polyglot') #=> 276 | |
| polluted_by('hpricot') #=> 276 | |
| polluted_by('little-plugger') #=> 276 | |
| polluted_by('ruby2ruby') #=> 277 | |
| polluted_by('sexp_processor') #=> 277 | |
| polluted_by('sass') #=> 278 | |
| polluted_by('haml') #=> 278 | |
| polluted_by('systemu') #=> 279 | |
| polluted_by('treetop') #=> 282 | |
| polluted_by('ruby-graphviz') #=> 283 | |
| polluted_by('uglifier') #=> 283 | |
| polluted_by('execjs') #=> 283 | |
| polluted_by('sourcify') #=> 286 | |
| polluted_by('classifier') #=> 297 | |
| polluted_by('ohai') #=> 395 | |
| polluted_by('liquid') #=> 402 | |
| polluted_by('twitter') #=> 404 | |
| polluted_by('tweetstream') #=> 407 | |
| polluted_by('blankslate') #=> 551 | |
| polluted_by('org-ruby') #=> 551 | |
| polluted_by('pygments.rb') #=> 551 | |
| polluted_by('rubypython') #=> 551 | |
| polluted_by('solve') #=> 552 | |
| polluted_by('json') #=> 554 | |
| polluted_by('vagrant') #=> 555 | |
| polluted_by('jwt') #=> 555 | |
| polluted_by('rspec-expectations') #=> 555 | |
| polluted_by('pry') #=> 559 | |
| polluted_by('yard') #=> 560 | |
| polluted_by('rake') #=> 563 | |
| polluted_by('sdoc') #=> 669 | |
| polluted_by('gist') #=> 670 | |
| polluted_by('showoff') #=> 673 | |
| polluted_by('t') #=> 680 | |
| polluted_by('todonotes') #=> 828 | |
| polluted_by('gherkin') #=> 831 | |
| polluted_by('awesome_print') #=> 860 | |
| polluted_by('spruz') #=> 1110 | |
| polluted_by('backports') #=> 1121 | |
| polluted_by('tins') #=> 1212 | |
| polluted_by('maruku') #=> 1401 | |
| polluted_by('RedCloth') #=> 1762 | |
| polluted_by('gli') #=> 1762 | |
| polluted_by('hirb') #=> 1762 | |
| polluted_by('gems') #=> 1762 | |
| polluted_by('guard') #=> 1762 | |
| polluted_by('stringex') #=> 1763 | |
| polluted_by('librarian') #=> 1763 | |
| polluted_by('hub') #=> 1765 | |
| polluted_by('directory_watcher') #=> 1766 | |
| polluted_by('versionomy') #=> 1766 | |
| polluted_by('travis-lint') #=> 1767 | |
| polluted_by('multi_xml') #=> 1775 | |
| polluted_by('httparty') #=> 1776 | |
| polluted_by('fog') #=> 1777 | |
| polluted_by('nanoc') #=> 1778 | |
| polluted_by('cheat') #=> 1779 | |
| polluted_by('bundler') #=> 1783 | |
| polluted_by('rspec-core') #=> 1936 | |
| polluted_by('geokit') #=> 2044 | |
| polluted_by('nori') #=> 2051 | |
| polluted_by('savon') #=> 2055 | |
| polluted_by('mail') #=> 2064 | |
| polluted_by('foodcritic') #=> 2233 | |
| polluted_by('gollum') #=> 2332 | |
| polluted_by('github_api') #=> 2333 | |
| polluted_by('google_drive') #=> 2333 | |
| polluted_by('oauth2') #=> 2333 | |
| polluted_by('roo') #=> 2358 | |
| polluted_by('rspec') #=> 2490 | |
| polluted_by('cucumber') #=> 2594 | |
| polluted_by('guard-cucumber') #=> 2594 | |
| polluted_by('rspec_junit_formatter') #=> 2605 | |
| polluted_by('logging') #=> 2609 | |
| polluted_by('github') #=> 2609 | |
| polluted_by('chef-handler-growl') #=> 2610 | |
| polluted_by('chef') #=> 2615 | |
| polluted_by('winrm') #=> 2900 | |
| polluted_by('sinatra-contrib') #=> 2902 | |
| polluted_by('em-winrm') #=> 2903 | |
| polluted_by('fission') #=> 2909 | |
| polluted_by('jekyll') #=> 3465 | |
| polluted_by('veewee') #=> 3715 | |
| polluted_by('extlib') #=> 4594 | |
| polluted_by('mocha') #=> 5351 | |
| polluted_by('rails') #=> 9289 | |
| polluted_by('haml-rails') #=> 9566 | |
| polluted_by('ridley') #=> 19250 | |
| polluted_by('berkshelf') #=> 19533 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment