# spec/spec_helper.rb config.after(:all, db: true) do puts puts FactoryPolice.report end # spec/support/factory_police.rb module FactoryGirl class << self alias_method :__create__, :create def create(*args) FactoryPolice.new __create__(*args) end end end class FactoryPolice < BasicObject @@proxies = [] def self.report @@proxies.each(&:report) end def initialize(model) @created_at = caller[3].split(':').take(2).join(':') @model = model @@proxies << self end def report if useless? puts "[ #{@created_at} ] - #{@model} is never interacted with directly" end end def method_missing(m, *args, &block) calls[m] += 1 @model.send m, *args, &block end private def useless? (@calls.keys - ignore).empty? end def ignore [:puts, :caller] end def calls @calls ||= ::Hash.new { |h, k| h[k] = 0 } end end