trace_graph 0.1.0 → 0.1.1
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 +48 -4
- data/lib/trace_graph/trace_node.rb +3 -1
- data/lib/trace_graph/tracer.rb +13 -1
- data/lib/trace_graph/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5e2e5ebf7e939d4bf028dad7f11ff1afe26ee16f69925b007413a5f81f63ae76
|
4
|
+
data.tar.gz: 863b4f213222ee2fdf1c22c3d2dd504e9e5a169adadfbf99ad44265b5c7d4a87
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 724f8e037289823034a7ff94e8fa49b6839a43d22e29d5bab8b32def090ea4fc98b855502c057c8ee206610b6f1699c906fd999e2265f3a58fadbd7ea8d8ff97
|
7
|
+
data.tar.gz: 6c38689b930461cb9ab57c1b86522a73c65fd0a75ee7ec25c3ef1154fadf5f7a6fbaaa36d707bc74aeb6d88df2a5dfdfc95c6a138467a17a8837df656b519fc7
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -5,12 +5,55 @@ trying to form a mental picture of it, let TraceGraph draw you a picture like th
|
|
5
5
|
|
6
6
|
![Document Worker Trace](docs/images/document_worker_trace.png)
|
7
7
|
|
8
|
+
Or it can generate a text based graph, like this:
|
9
|
+
|
10
|
+
```
|
11
|
+
trace
|
12
|
+
└─DocumentGenerationWorker#perform
|
13
|
+
└─DocumentGenerator#generate_and_store_documents
|
14
|
+
└─OutputGenerationWorker#perform
|
15
|
+
└─OutputGenerator#generate_and_store_output
|
16
|
+
├─OutputOwnerUtils#current_output
|
17
|
+
│ └─OutputOwnerUtils#current_outputs
|
18
|
+
├─OutputGenerator#find_creator
|
19
|
+
├─OutputUtils#local_path
|
20
|
+
│ └─Output#local_file_prefix
|
21
|
+
├─Output#s3_path
|
22
|
+
│ └─OutputUtils#s3_filename
|
23
|
+
└─OutputGenerator#generate_and_store_output_implementation
|
24
|
+
├─OutputUtils#markdown_path
|
25
|
+
│ └─Output#local_file_prefix (#2)
|
26
|
+
├─OutputGenerator#generate_output
|
27
|
+
│ ├─Style#template_variable_hash
|
28
|
+
│ │ ├─Style#template_variables
|
29
|
+
│ │ └─Style#template
|
30
|
+
│ ├─Document#importurlsupported
|
31
|
+
│ ├─Account#current_subscription
|
32
|
+
│ │ └─Account#active_subscriptions
|
33
|
+
│ ├─Account#current_subscription (#2)
|
34
|
+
│ │ └─Account#active_subscriptions (#2)
|
35
|
+
│ ├─OutputUtils#markdown_path (#2)
|
36
|
+
│ │ └─Output#local_file_prefix (#3)
|
37
|
+
│ └─PdfCreator#create_pdf
|
38
|
+
│ ├─PdfCreator#localize_images
|
39
|
+
│ │ └─PdfCreator#find_image_tags_and_urls
|
40
|
+
│ ├─PdfCreator#process_liquid
|
41
|
+
│ ├─LatexHelper#make_dollars_safe
|
42
|
+
│ └─PdfCreator#build_pandoc_string
|
43
|
+
│ ├─PdfCreator#merged_variable_options
|
44
|
+
│ ├─PdfCreator#class_options
|
45
|
+
│ └─PdfCreator#add_pandoc_options
|
46
|
+
└─OutputGenerator#notify_output
|
47
|
+
└─PusherOutputNotifier#notify_output
|
48
|
+
└─Account#pusher_channel
|
49
|
+
```
|
50
|
+
|
8
51
|
## Installation
|
9
52
|
|
10
53
|
Add this line to your application's Gemfile:
|
11
54
|
|
12
55
|
```ruby
|
13
|
-
gem 'trace_graph'
|
56
|
+
gem 'trace_graph', group: [:development, :test]
|
14
57
|
```
|
15
58
|
|
16
59
|
And then execute:
|
@@ -76,7 +119,8 @@ in the graph.
|
|
76
119
|
* `excluded_paths` - A list of paths to exclude. Maybe `["my_app/some_utility_helper"]`. Default
|
77
120
|
value is `nil`.
|
78
121
|
|
79
|
-
* `png` - A string path where to write a png graph.
|
122
|
+
* `png` - A string path where to write a png graph. If no value is passed a png will not be generated
|
123
|
+
and only a text representation will be written to standar out.
|
80
124
|
|
81
125
|
* `mark_duplicate_calls` - Either `true` or `false`. Default value is `false`. When `true` any
|
82
126
|
repeat calls to a method will be marked with a count, and will be colored red on the png.
|
@@ -92,8 +136,8 @@ A robust tracer might look like this:
|
|
92
136
|
|
93
137
|
```ruby
|
94
138
|
tracer = TraceGraph::Tracer.new({
|
95
|
-
included_paths: ["my_app/app"],
|
96
|
-
excluded_paths: ["my_app/app/helpers"],
|
139
|
+
included_paths: ["my_app/app", "my_app/lib"], # See everything local to a rails app
|
140
|
+
excluded_paths: ["my_app/app/helpers"], # Except the helpers
|
97
141
|
mark_duplicate_calls: true,
|
98
142
|
show_arguments: true,
|
99
143
|
show_return_values: true,
|
@@ -6,14 +6,16 @@ module TraceGraph
|
|
6
6
|
attr_accessor :label
|
7
7
|
attr_accessor :sub_nodes
|
8
8
|
attr_accessor :is_duplicate
|
9
|
+
attr_accessor :class_name
|
9
10
|
|
10
11
|
alias_method :label_for_tree_graph, :label
|
11
12
|
alias_method :children_for_tree_graph, :sub_nodes
|
12
13
|
|
13
|
-
def initialize(label, is_duplicate: false)
|
14
|
+
def initialize(label, is_duplicate: false, class_name: nil)
|
14
15
|
self.label = label
|
15
16
|
self.is_duplicate = is_duplicate
|
16
17
|
self.sub_nodes = []
|
18
|
+
self.class_name = class_name
|
17
19
|
end
|
18
20
|
|
19
21
|
def << child_node
|
data/lib/trace_graph/tracer.rb
CHANGED
@@ -11,6 +11,7 @@ module TraceGraph
|
|
11
11
|
@mark_duplicate_calls = options.key?(:mark_duplicate_calls) ? options[:mark_duplicate_calls] : true
|
12
12
|
@show_arguments = options[:show_arguments] || false
|
13
13
|
@show_return_values = options[:show_return_values] || false
|
14
|
+
@only_class_transitions = options[:only_class_transitions] || false
|
14
15
|
|
15
16
|
@trace_point = build_trace_point
|
16
17
|
@top_node = TraceGraph::TraceNode.new("trace")
|
@@ -90,6 +91,10 @@ module TraceGraph
|
|
90
91
|
|
91
92
|
def build_node_label(tp, for_call: true)
|
92
93
|
label = "#{tp.defined_class}##{tp.method_id}"
|
94
|
+
if tp.defined_class.name != tp.self.class.name
|
95
|
+
label = "#{tp.self.class.name} -> #{label}"
|
96
|
+
end
|
97
|
+
|
93
98
|
args = extract_arguments(tp)
|
94
99
|
if @show_arguments && args.any?
|
95
100
|
label = "#{label} →(#{args})"
|
@@ -112,9 +117,15 @@ module TraceGraph
|
|
112
117
|
end
|
113
118
|
|
114
119
|
def handle_call(tp)
|
120
|
+
if @only_class_transitions
|
121
|
+
last_node = @stack.last
|
122
|
+
if last_node && last_node.class_name == tp.self.class.name
|
123
|
+
return
|
124
|
+
end
|
125
|
+
end
|
115
126
|
parent = @stack.last
|
116
127
|
label, is_duplicate = build_node_label(tp)
|
117
|
-
new_node = TraceGraph::TraceNode.new(label, is_duplicate: is_duplicate)
|
128
|
+
new_node = TraceGraph::TraceNode.new(label, is_duplicate: is_duplicate, class_name: tp.self.class.name)
|
118
129
|
@stack << new_node
|
119
130
|
@all_nodes << new_node
|
120
131
|
if parent
|
@@ -160,6 +171,7 @@ module TraceGraph
|
|
160
171
|
unless public_methods.include?(method) || @include_protected
|
161
172
|
should_include = false
|
162
173
|
end
|
174
|
+
|
163
175
|
return should_include
|
164
176
|
end
|
165
177
|
end
|
data/lib/trace_graph/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trace_graph
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremy Green
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-05-
|
11
|
+
date: 2020-05-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: tree_graph
|