load_tracer 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
+

|
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: []
|