Class: DiverDown::Trace::ModuleSet

Inherits:
Object
  • Object
show all
Defined in:
lib/diver_down/trace/module_set.rb,
lib/diver_down/trace/module_set/array_module_set.rb,
lib/diver_down/trace/module_set/const_source_location_module_set.rb

Overview

A class to quickly determine if a TracePoint is a module to be traced.

Defined Under Namespace

Classes: ArrayModuleSet, ConstSourceLocationModuleSet

Instance Method Summary collapse

Constructor Details

#initialize(modules: nil, paths: nil) ⇒ ModuleSet

Returns a new instance of ModuleSet.

Parameters:

  • modules (Array<Module, String>, Set<Module, String>, nil) (defaults to: nil)
  • include (Array<String>, Set<String>, nil)


12
13
14
15
16
# File 'lib/diver_down/trace/module_set.rb', line 12

def initialize(modules: nil, paths: nil)
  @cache = {}
  @array_module_set = DiverDown::Trace::ModuleSet::ArrayModuleSet.new(modules) unless modules.nil?
  @const_source_location_module_set = DiverDown::Trace::ModuleSet::ConstSourceLocationModuleSet.new(paths:) unless paths.nil?
end

Instance Method Details

#include?(mod) ⇒ Boolean

Parameters:

  • mod (Module)

Returns:

  • (Boolean)


20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/diver_down/trace/module_set.rb', line 20

def include?(mod)
  unless @cache.key?(mod)
    if DiverDown::Helper.class?(mod)
      # class
      begin
        dig_superclass(mod)
      rescue TypeError => e
        # https://github.com/ruby/ruby/blob/f42164e03700469a7000b4f00148a8ca01d75044/object.c#L2232
        return false if e.message == 'uninitialized class'

        raise
      end
    else
      # module
      @cache[mod] = !!_include?(mod)
    end
  end

  @cache.fetch(mod)
end