Skip to content

Instantly share code, notes, and snippets.

@jtimberman
Forked from ahoward/polluted.rb
Created November 8, 2012 17:21
Show Gist options
  • Select an option

  • Save jtimberman/4040195 to your computer and use it in GitHub Desktop.

Select an option

Save jtimberman/4040195 to your computer and use it in GitHub Desktop.
ruby libs have *got* to stop doing this...
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
}
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