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/static_checker.rb,
lib/load_tracer/formatter/default.rb
Defined Under Namespace
Classes: DefaultFormatter, DotFormatter, FileSpec, JsonFormatter, StaticChecker
Constant Summary
collapse
- LOAD_METHODS =
i(require require_relative load autoload)
- VERSION =
'0.6.1'
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(format: nil, exclude_files: []) ⇒ LoadTracer
Returns a new instance of LoadTracer.
52
53
54
|
# File 'lib/load_tracer.rb', line 52
def initialize(format: nil, exclude_files: [])
@exclude_files = exclude_files
end
|
Class Method Details
.trace(format: nil, exclude_files: [], &block) ⇒ Object
48
49
50
|
# File 'lib/load_tracer.rb', line 48
def self.trace(format: nil, exclude_files: [], &block)
new(exclude_files: exclude_files).trace(format: format, &block)
end
|
Instance Method Details
#report(format:, dependencies:, reverse_dependencies:) ⇒ Object
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
# File 'lib/load_tracer.rb', line 107
def report(format:, dependencies:, reverse_dependencies:)
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
|
#trace(format: nil) ⇒ Object
56
57
58
59
60
61
62
63
64
65
66
67
|
# File 'lib/load_tracer.rb', line 56
def trace(format: nil)
@dependencies = Hash.new { |hash, key| hash[key] = [] }
@reverse_dependencies = Hash.new { |hash, key| hash[key] = [] }
@load_checked_features = Hash.new
@not_found_features = []
bl = caller_locations[1]
@exclude_files << bl.absolute_path
tracer.enable { yield }
report(format: format, dependencies: @dependencies, reverse_dependencies: @reverse_dependencies)
end
|
#tracer ⇒ Object
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
# File 'lib/load_tracer.rb', line 69
def tracer
TracePoint.new(:return) 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?(bl.absolute_path)
path = find_path(feature) || find_path(File.expand_path(feature, File.dirname(bl.absolute_path)))
if path.nil?
@not_found_features << feature
next
end
@load_checked_features[bl.absolute_path] = true
@dependencies[bl.absolute_path] << path
@reverse_dependencies[path] << bl.absolute_path
if !tp.return_value && !@load_checked_features[path]
file_specs = StaticChecker.parse_file(path)
file_specs.each do |fs|
@dependencies[fs.path] |= fs.dependencies
@reverse_dependencies[fs.path] |= fs.reverse_dependencies
end
end
end
end
|