load_tracer 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +9 -1
- data/exe/rutrace +21 -0
- data/images/example.png +0 -0
- data/lib/load_tracer.rb +24 -18
- data/lib/load_tracer/formatter/json.rb +14 -0
- data/lib/load_tracer/version.rb +1 -1
- data/load_tracer.gemspec +2 -2
- metadata +9 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bdcf72ff4eb8378b4450689b64b9b6bf5a97a679baa47709414834ecb87f705b
|
4
|
+
data.tar.gz: 387db21e56a184a66f308b59b761641f3142702f29a3e47d3dbbdef65db5cf85
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c3458986d97707e5e4324095d16c51e1c157b437efca8664cdc0cd269dac08676494c8d420934dee9fb101dbdcce145c09d095afa17ea3504c1a35f058d44dcf
|
7
|
+
data.tar.gz: 73ebe3f5d161787a283bfe3e65f91d77a42841e386d303055ca1fb719723c4006639a80d90d27c64a366b53e29d3ab5a76b030adb087a1adba5bcde5094d8151
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -6,6 +6,12 @@ require `RUBY_VERSION` >= 2.7.0
|
|
6
6
|
|
7
7
|
## Installation
|
8
8
|
|
9
|
+
```
|
10
|
+
gem install load_tracer
|
11
|
+
```
|
12
|
+
|
13
|
+
### build local
|
14
|
+
|
9
15
|
clone this repository.
|
10
16
|
|
11
17
|
```
|
@@ -21,7 +27,7 @@ bundle exec rake build
|
|
21
27
|
install gem.
|
22
28
|
|
23
29
|
```
|
24
|
-
gem install pkg/load_tracer-0.
|
30
|
+
gem install pkg/load_tracer-0.3.0.gem
|
25
31
|
```
|
26
32
|
|
27
33
|
|
@@ -50,6 +56,8 @@ puts LoadTracer.trace(format: :dot) { require 'prime' }
|
|
50
56
|
ruby example.rb | dot -Tpng -o example.png | open example.png
|
51
57
|
```
|
52
58
|
|
59
|
+
![](images/example.png)
|
60
|
+
|
53
61
|
## License
|
54
62
|
|
55
63
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/exe/rutrace
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'load_tracer'
|
4
|
+
require 'optparse'
|
5
|
+
|
6
|
+
options = { format: :json }
|
7
|
+
|
8
|
+
opt_parse = OptionParser.new do |opt|
|
9
|
+
opt.banner = 'Usage: rutrace programfile'
|
10
|
+
opt.on('-f', '-f format', 'specify output format.') { |format| options[:format] = format.to_sym }
|
11
|
+
|
12
|
+
opt.parse!(ARGV)
|
13
|
+
end
|
14
|
+
|
15
|
+
if ARGV.first.nil?
|
16
|
+
puts opt_parse
|
17
|
+
else
|
18
|
+
path = File.expand_path(ARGV.first, Dir.pwd)
|
19
|
+
|
20
|
+
puts LoadTracer.trace(format: options[:format], exclude_files: ['rutrace']) { require_relative path }
|
21
|
+
end
|
data/images/example.png
ADDED
Binary file
|
data/lib/load_tracer.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'binding_of_caller'
|
2
2
|
require 'load_tracer/formatter/default'
|
3
3
|
require 'load_tracer/formatter/dot'
|
4
|
+
require 'load_tracer/formatter/json'
|
4
5
|
require 'load_tracer/version'
|
5
6
|
|
6
7
|
module Kernel
|
@@ -42,43 +43,43 @@ class LoadTracer
|
|
42
43
|
|
43
44
|
LOAD_METHODS = %i(require require_relative load autoload)
|
44
45
|
|
45
|
-
def self.trace(format: nil)
|
46
|
-
instance = new
|
46
|
+
def self.trace(format: nil, exclude_files: [])
|
47
|
+
instance = new(exclude_files: exclude_files)
|
47
48
|
instance.tracer.enable { yield }
|
48
49
|
instance.report(format: format)
|
49
50
|
end
|
50
51
|
|
51
|
-
def initialize
|
52
|
+
def initialize(exclude_files: [])
|
52
53
|
@dependencies = Hash.new { |hash, key| hash[key] = [] }
|
53
54
|
@reverse_dependencies = Hash.new { |hash, key| hash[key] = [] }
|
55
|
+
@exclude_files = exclude_files
|
54
56
|
@not_found_features = []
|
55
57
|
end
|
56
58
|
|
57
59
|
def tracer
|
58
|
-
TracePoint.new(:
|
60
|
+
TracePoint.new(:call) do |tp|
|
59
61
|
next unless LOAD_METHODS.include?(tp.method_id)
|
60
62
|
next if tp.defined_class != ::Kernel
|
61
63
|
next if tp.path != __FILE__
|
62
64
|
|
63
|
-
|
64
|
-
|
65
|
-
bl = caller_locations[1]
|
66
|
-
feature = get_feature(tp)
|
65
|
+
bl = caller_locations[1]
|
66
|
+
feature = get_feature(tp)
|
67
67
|
|
68
|
-
|
69
|
-
|
70
|
-
|
68
|
+
if bl.absolute_path.nil?
|
69
|
+
bl = find_caller_of_internal_library(feature)
|
70
|
+
end
|
71
71
|
|
72
|
-
|
72
|
+
next if @exclude_files.include?(File.basename(bl.absolute_path))
|
73
73
|
|
74
|
-
|
75
|
-
@not_found_features << feature
|
76
|
-
next
|
77
|
-
end
|
74
|
+
path = find_path(feature) || find_path(File.expand_path(feature, File.dirname(bl.path)))
|
78
75
|
|
79
|
-
|
80
|
-
@
|
76
|
+
if path.nil?
|
77
|
+
@not_found_features << feature
|
78
|
+
next
|
81
79
|
end
|
80
|
+
|
81
|
+
@dependencies[bl.absolute_path] << path
|
82
|
+
@reverse_dependencies[path] << bl.absolute_path
|
82
83
|
end
|
83
84
|
end
|
84
85
|
|
@@ -88,6 +89,11 @@ class LoadTracer
|
|
88
89
|
DotFormatter.export(
|
89
90
|
dependencies: @dependencies
|
90
91
|
)
|
92
|
+
when :json
|
93
|
+
JsonFormatter.export(
|
94
|
+
dependencies: @dependencies,
|
95
|
+
reverse_dependencies: @reverse_dependencies
|
96
|
+
)
|
91
97
|
else
|
92
98
|
DefaultFormatter.export(
|
93
99
|
dependencies: @dependencies,
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
class LoadTracer
|
4
|
+
class JsonFormatter
|
5
|
+
def self.export(dependencies:, reverse_dependencies:)
|
6
|
+
report = DefaultFormatter.export(
|
7
|
+
dependencies: dependencies,
|
8
|
+
reverse_dependencies: reverse_dependencies
|
9
|
+
)
|
10
|
+
|
11
|
+
report.map(&:to_h).to_json
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/lib/load_tracer/version.rb
CHANGED
data/load_tracer.gemspec
CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.authors = ['Shuichi Tamayose']
|
9
9
|
spec.email = ['tmshuichi@gmail.com']
|
10
10
|
|
11
|
-
spec.summary = %q{
|
12
|
-
spec.description = %q{
|
11
|
+
spec.summary = %q{This gem can check the dependency files.}
|
12
|
+
spec.description = %q{This gem can check the dependency files.}
|
13
13
|
spec.homepage = 'https://github.com/siman-man/load_tracer'
|
14
14
|
spec.license = 'MIT'
|
15
15
|
spec.required_ruby_version = '> 2.6.99'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: load_tracer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shuichi Tamayose
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-03-
|
11
|
+
date: 2019-03-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: binding_of_caller
|
@@ -66,10 +66,11 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 3.8.0
|
69
|
-
description:
|
69
|
+
description: This gem can check the dependency files.
|
70
70
|
email:
|
71
71
|
- tmshuichi@gmail.com
|
72
|
-
executables:
|
72
|
+
executables:
|
73
|
+
- rutrace
|
73
74
|
extensions: []
|
74
75
|
extra_rdoc_files: []
|
75
76
|
files:
|
@@ -84,9 +85,12 @@ files:
|
|
84
85
|
- Rakefile
|
85
86
|
- bin/console
|
86
87
|
- bin/setup
|
88
|
+
- exe/rutrace
|
89
|
+
- images/example.png
|
87
90
|
- lib/load_tracer.rb
|
88
91
|
- lib/load_tracer/formatter/default.rb
|
89
92
|
- lib/load_tracer/formatter/dot.rb
|
93
|
+
- lib/load_tracer/formatter/json.rb
|
90
94
|
- lib/load_tracer/formatter/templates/default.dot.erb
|
91
95
|
- lib/load_tracer/version.rb
|
92
96
|
- load_tracer.gemspec
|
@@ -112,5 +116,5 @@ requirements: []
|
|
112
116
|
rubygems_version: 3.0.2
|
113
117
|
signing_key:
|
114
118
|
specification_version: 4
|
115
|
-
summary:
|
119
|
+
summary: This gem can check the dependency files.
|
116
120
|
test_files: []
|