module Remnant::Discover::ClassMethods

Public Instance Methods

_inject(key, klass, method, instance) click to toggle source
# File lib/remnant/discover.rb, line 9
      def _inject(key, klass, method, instance)
        klass.class_eval <<-EOL, __FILE__, __LINE__
          #{"class << self" unless instance}
          alias_method :#{method}_without_remnant, :#{method}

          def #{method}(*args, &block)
            ::Remnant::Discover.measure(#{key.inspect}) do
              #{method}_without_remnant(*args, &block)
            end
          end

          #{"end" unless instance}
        EOL
      end
find(key, klass, method, instance = true) click to toggle source
# File lib/remnant/discover.rb, line 4
def find(key, klass, method, instance = true)
  rediscover(key, klass, method, instance) if ActiveSupport::Dependencies.will_unload?(klass)
  _inject(key, klass, method, instance)
end
find_with(klass, &block) click to toggle source
# File lib/remnant/discover.rb, line 24
def find_with(klass, &block)
  rediscover(klass, block) if ActiveSupport::Dependencies.will_unload?(klass)
  block.call
end
measure(key) { || ... } click to toggle source
# File lib/remnant/discover.rb, line 29
def measure(key, &block)
  if Remnant::Discover.running.include?(key)
    yield
  else
    result = nil
    Remnant::Discover.running << key
    begin
      Remnant::Discover.results[key] += Benchmark.ms { result = yield }.to_i
    rescue
      raise
    ensure
      Remnant::Discover.running.delete(key)
    end
    result
  end
end
rediscover(*args) click to toggle source
# File lib/remnant/discover.rb, line 58
def rediscover(*args)
  remnants_to_rediscover << args unless remnants_to_rediscover.include?(args)
end
rediscover!() click to toggle source
# File lib/remnant/discover.rb, line 62
def rediscover!
  remnants_to_rediscover.map do |remnant|
    if remnant.size == 4
      key, klass_name, method, instance = remnant
      _inject(key, klass_name.constantize, method, instance)
    else
      remant.first.call
    end
  end
end
remnants_to_rediscover() click to toggle source
# File lib/remnant/discover.rb, line 54
def remnants_to_rediscover
  @remnants_to_rediscover ||= []
end
results() click to toggle source
# File lib/remnant/discover.rb, line 46
def results
  Thread.current[:result] ||= Hash.new(0)
end
running() click to toggle source
# File lib/remnant/discover.rb, line 50
def running
  Thread.current[:running] ||= []
end