Class: LoadTracer
- Inherits:
-
Object
show all
- Defined in:
- lib/load_tracer.rb,
lib/load_tracer/version.rb,
lib/load_tracer/formatter/dot.rb,
lib/load_tracer/formatter/json.rb,
lib/load_tracer/formatter/default.rb
Defined Under Namespace
Classes: DefaultFormatter, DotFormatter, FileSpec, JsonFormatter
Constant Summary
collapse
- LOAD_METHODS =
i(require require_relative load autoload)
- VERSION =
'0.3.0'
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(exclude_files: []) ⇒ LoadTracer
Returns a new instance of LoadTracer.
52
53
54
55
56
57
|
# File 'lib/load_tracer.rb', line 52
def initialize(exclude_files: [])
@dependencies = Hash.new { |hash, key| hash[key] = [] }
@reverse_dependencies = Hash.new { |hash, key| hash[key] = [] }
@exclude_files = exclude_files
@not_found_features = []
end
|
Class Method Details
.trace(format: nil, exclude_files: []) ⇒ Object
46
47
48
49
50
|
# File 'lib/load_tracer.rb', line 46
def self.trace(format: nil, exclude_files: [])
instance = new(exclude_files: exclude_files)
instance.tracer.enable { yield }
instance.report(format: format)
end
|
Instance Method Details
#report(format:) ⇒ Object
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
# File 'lib/load_tracer.rb', line 86
def report(format:)
case format
when :dot
DotFormatter.export(
dependencies: @dependencies
)
when :json
JsonFormatter.export(
dependencies: @dependencies,
reverse_dependencies: @reverse_dependencies
)
else
DefaultFormatter.export(
dependencies: @dependencies,
reverse_dependencies: @reverse_dependencies
)
end
end
|
#tracer ⇒ Object
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
# File 'lib/load_tracer.rb', line 59
def tracer
TracePoint.new(:call) do |tp|
next unless LOAD_METHODS.include?(tp.method_id)
next if tp.defined_class != ::Kernel
next if tp.path != __FILE__
bl = caller_locations[1]
feature = get_feature(tp)
if bl.absolute_path.nil?
bl = find_caller_of_internal_library(feature)
end
next if @exclude_files.include?(File.basename(bl.absolute_path))
path = find_path(feature) || find_path(File.expand_path(feature, File.dirname(bl.path)))
if path.nil?
@not_found_features << feature
next
end
@dependencies[bl.absolute_path] << path
@reverse_dependencies[path] << bl.absolute_path
end
end
|