module Profilizer::ClassMethods::ProfilizerModule

Public Instance Methods

define_profilized_method!(klass, method_name, time: nil, gc: nil, memory: nil) click to toggle source
Calls superclass method
# File lib/profilizer.rb, line 55
def define_profilized_method!(klass, method_name, time: nil, gc: nil, memory: nil)
  original_visibility = method_visibility(klass, method_name)

  define_method method_name do |*args, &block|
    result = nil
    Profiler.new.profile_method(time: time, gc: gc, memory: memory) do
      result = super(*args, &block)
    end
    result
  end

  ruby2_keywords method_name

  send original_visibility, method_name
end

Private Instance Methods

method_visibility(klass, method_name) click to toggle source
# File lib/profilizer.rb, line 73
def method_visibility(klass, method_name)
  if klass.private_method_defined?(method_name)
    :private
  elsif klass.protected_method_defined?(method_name)
    :protected
  elsif klass.public_method_defined?(method_name)
    :public
  else
    raise ArgumentError, "Method #{method_name} is not defined on #{klass}"
  end
end