class CatTree::Observer

Public Class Methods

check(&block) click to toggle source
# File lib/cat_tree/observer.rb, line 7
def self.check(&block)
  self.new.check(&block)
end
new() click to toggle source
# File lib/cat_tree/observer.rb, line 11
def initialize
  @target_set = TargetSet.new
end

Public Instance Methods

ar_base_count() click to toggle source
# File lib/cat_tree/observer.rb, line 19
def ar_base_count
  @target_set.object_count
end
check() { || ... } click to toggle source
# File lib/cat_tree/observer.rb, line 27
def check
  ActiveRecord::Base.add_cat_tree_observer(self)
  yield
ensure
  ActiveRecord::Base.remove_cat_tree_observer
  output_message
end
notice(object) click to toggle source
# File lib/cat_tree/observer.rb, line 15
def notice(object)
  @target_set.notice(object)
end
same_ar_base_objects() click to toggle source
# File lib/cat_tree/observer.rb, line 23
def same_ar_base_objects
  @target_set.same_objects
end

Private Instance Methods

output_message() click to toggle source
# File lib/cat_tree/observer.rb, line 37
def output_message
  return if @target_set.empty?

  msg = ["", "[CatTree]"]
  msg << "  ActiveRecord::Base:\t#{ar_base_count}"

  unless (same_objects = same_ar_base_objects).empty?
    msg << "  Same objects:"
    same_objects.each do |same_obj|
      msg << "    #{same_obj.title}:\t#{same_obj.count}"

      if Config.backtrace
        same_obj.callers.each do |cal|
          cal.each{|c| msg << "      #{c}"}
          msg << ""
        end
      end
    end
  end
  msg << ""

  Logger.warn msg.join("\n")
end