# Measure the amount bloat you're adding by requiring libraries. # # Usage: # # Bloat.measure do # require 'rubygems' # require 'activesupport' # end # # A report will be printed that tells you how many methods were # added, along with a list of names. class Bloat def self.measure(klass=Object) new(klass).measure { yield } end def initialize(klass) @klass = klass end def delta(m) added(m).length end def added(m) @new_methods[m].reject { |sym| @old_methods[m].include?(sym) }.sort end def measure @old_methods = count yield @new_methods = count report end private def report puts "#{delta(:total)} total methods added to #{@klass}:" puts "- #{delta(:instance)} instance methods." added(:instance).each { |m| puts " - #{m}" } puts "- #{delta(:class)} class methods." added(:class).each { |m| puts " - #{m}" } end def count [:total, :instance, :class].inject({ }) do |memo, m| memo[m] = send("#{m}_methods") memo end end def total_methods class_methods + instance_methods end def class_methods @klass.methods end def instance_methods @klass.instance_methods end end