Class: AppMap::Config::LookupPackage

Inherits:
Struct
  • Object
show all
Defined in:
lib/appmap/config.rb

Overview

Looks up a class and method in the config, to find the matching Package configuration. This class is only used after path_enabled? has returned ‘true`.

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#clsObject

Returns the value of attribute cls



303
304
305
# File 'lib/appmap/config.rb', line 303

def cls
  @cls
end

#configObject

Returns the value of attribute config



303
304
305
# File 'lib/appmap/config.rb', line 303

def config
  @config
end

#methodObject

Returns the value of attribute method



303
304
305
# File 'lib/appmap/config.rb', line 303

def method
  @method
end

Instance Method Details

#packageObject



304
305
306
307
308
309
# File 'lib/appmap/config.rb', line 304

def package
  # Global "excludes" configuration can be used to ignore any class/method.
  return if config.never_hook?(cls, method)

  package_for_code_object || package_for_location
end

#package_for_code_objectObject

Hook a method which is specified by class and method name.



312
313
314
315
316
317
# File 'lib/appmap/config.rb', line 312

def package_for_code_object
  Array(config.hooked_methods[cls.name])
    .compact
    .find { |hook| hook.include_method?(method.name) }
    &.package
end

#package_for_locationObject

Hook a method which is specified by code location (i.e. path).



320
321
322
323
324
325
326
327
328
329
330
331
332
333
# File 'lib/appmap/config.rb', line 320

def package_for_location
  location = method.source_location
  location_file, = location
  return unless location_file

  location_file = AppMap::Util.normalize_path(location_file)
  config
    .packages
    .select { |pkg| pkg.path }
    .find do |pkg|
      (location_file.index(pkg.path) == 0) &&
        !pkg.exclude.find { |p| location_file.index(p) }
    end
end