rshade 0.1.1 → 0.1.2
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 +6 -0
- data/lib/rshade.rb +8 -6
- data/lib/rshade/rspec.rb +2 -2
- data/lib/rshade/source.rb +53 -0
- data/lib/rshade/source_node.rb +16 -62
- data/lib/rshade/trace.rb +28 -9
- data/lib/rshade/tree.rb +30 -0
- data/lib/rshade/version.rb +1 -1
- metadata +4 -4
- data/lib/rshade/filter.rb +0 -23
- data/lib/rshade/helper.rb +0 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bf8737edb621544556bb58751c0513b17fe1d9f47a6d36fc77c57cac7cb00ef4
|
4
|
+
data.tar.gz: 13beabd1a6b22e62efc8c4bec6d0a7931ddd2960b8a4ec9cf0eeac6c0c2b8b95
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d2e84b206dc81d4dad3af68cee691f22ec65749de2971ba5ec4c6001187333a17ea2e36c42cdb8341605cfbbbbc459add8355af29fc097e2108b96eb5c9e233c
|
7
|
+
data.tar.gz: cd41a6538fad5193dfcf4888da29ba1bfc0e216a5d2023e47291425546d8633660af24cffbd196960d6896e4b2b077ff549f4a57392164b8b625a54b90947f66
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
data/lib/rshade.rb
CHANGED
@@ -1,10 +1,12 @@
|
|
1
1
|
require 'colorize'
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
2
|
+
require 'rshade/source'
|
3
|
+
require 'rshade/tree'
|
4
|
+
require 'rshade/source_node'
|
5
|
+
require 'rshade/trace'
|
6
|
+
require 'rshade/rspec'
|
7
|
+
require 'rshade/version'
|
8
8
|
|
9
9
|
module RShade
|
10
|
+
APP_TRACE = :app_trace
|
11
|
+
FULL_TRACE = :full_trace
|
10
12
|
end
|
data/lib/rshade/rspec.rb
CHANGED
@@ -2,7 +2,7 @@ module RShade
|
|
2
2
|
REPORTS = []
|
3
3
|
|
4
4
|
module RSpecHelper
|
5
|
-
def rshade_reveal(
|
5
|
+
def rshade_reveal(type = ::RShade::APP_TRACE)
|
6
6
|
raise 'No block given' unless block_given?
|
7
7
|
|
8
8
|
trace = Trace.new
|
@@ -10,7 +10,7 @@ module RShade
|
|
10
10
|
yield
|
11
11
|
end
|
12
12
|
|
13
|
-
REPORTS.push trace.show
|
13
|
+
REPORTS.push trace.show(type)
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module RShade
|
2
|
+
# nodoc
|
3
|
+
class Source
|
4
|
+
RUBY_VERSION_PATTERN = /ruby-[0-9.]*/
|
5
|
+
|
6
|
+
def initialize(hash)
|
7
|
+
@hash = hash
|
8
|
+
end
|
9
|
+
|
10
|
+
def klass
|
11
|
+
@hash[:klass]
|
12
|
+
end
|
13
|
+
|
14
|
+
def lib_code?
|
15
|
+
!app_code?
|
16
|
+
end
|
17
|
+
|
18
|
+
def app_code?
|
19
|
+
@app_code ||= exclude_path.none? { |item| path.include? item }
|
20
|
+
end
|
21
|
+
|
22
|
+
def path
|
23
|
+
@hash[:path]
|
24
|
+
end
|
25
|
+
|
26
|
+
def lineno
|
27
|
+
@hash[:lineno]
|
28
|
+
end
|
29
|
+
|
30
|
+
def method_name
|
31
|
+
@hash[:method_name]
|
32
|
+
end
|
33
|
+
|
34
|
+
def exclude_path
|
35
|
+
@path_arr ||= begin
|
36
|
+
[ENV['GEM_PATH'].split(':'), parse_ruby_version].flatten.compact
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def parse_ruby_version
|
41
|
+
val = RUBY_VERSION_PATTERN.match(ENV['GEM_PATH'])
|
42
|
+
return nil unless val
|
43
|
+
|
44
|
+
val[0]
|
45
|
+
end
|
46
|
+
|
47
|
+
def pretty
|
48
|
+
class_method = "#{klass}##{method_name}".colorize(:green)
|
49
|
+
full_path = "#{path}:#{lineno}".colorize(:blue)
|
50
|
+
"#{class_method} -> #{full_path}"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/lib/rshade/source_node.rb
CHANGED
@@ -1,69 +1,23 @@
|
|
1
1
|
module RShade
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
def valid?
|
17
|
-
@value[:valid]
|
18
|
-
end
|
19
|
-
|
20
|
-
def toggle_valid(state)
|
21
|
-
@value[:valid] = state
|
22
|
-
end
|
23
|
-
|
24
|
-
def level
|
25
|
-
@value[:level] || 0
|
26
|
-
end
|
27
|
-
|
28
|
-
def klass
|
29
|
-
@value[:klass]
|
30
|
-
end
|
31
|
-
|
32
|
-
def method_name
|
33
|
-
@value[:method_name]
|
34
|
-
end
|
35
|
-
|
36
|
-
def path
|
37
|
-
@value[:path]
|
38
|
-
end
|
39
|
-
|
40
|
-
def lineno
|
41
|
-
@value[:lineno]
|
42
|
-
end
|
43
|
-
|
44
|
-
def pretty
|
45
|
-
class_method = "#{klass}##{method_name}".colorize(:green)
|
46
|
-
full_path = "#{path}:#{lineno}".colorize(:blue)
|
47
|
-
"#{class_method} -> #{full_path}"
|
48
|
-
end
|
49
|
-
|
50
|
-
def filter(node = self, &block)
|
51
|
-
return unless block_given?
|
52
|
-
|
53
|
-
node.nodes.each do |item|
|
54
|
-
filter(item, &block)
|
2
|
+
# nodoc
|
3
|
+
class SourceNode < Tree
|
4
|
+
def initialize(value = nil)
|
5
|
+
super(value)
|
6
|
+
end
|
7
|
+
|
8
|
+
def clone_by(new_tree = SourceNode.new(nil), &block)
|
9
|
+
if yield(self)
|
10
|
+
new_tree.value = value
|
11
|
+
node = SourceNode.new(nil)
|
12
|
+
node.parent = new_tree
|
13
|
+
new_tree << node
|
14
|
+
new_tree = node
|
55
15
|
end
|
56
16
|
|
57
|
-
|
58
|
-
|
17
|
+
nodes.each do |item|
|
18
|
+
item.clone_by(new_tree, &block)
|
59
19
|
end
|
60
|
-
|
61
|
-
|
62
|
-
def traverse(node = self, &block)
|
63
|
-
return unless block_given?
|
64
|
-
|
65
|
-
yield(node)
|
66
|
-
node.nodes.each { |leaf| traverse(leaf, &block) }
|
20
|
+
new_tree
|
67
21
|
end
|
68
22
|
end
|
69
23
|
end
|
data/lib/rshade/trace.rb
CHANGED
@@ -1,13 +1,11 @@
|
|
1
1
|
module RShade
|
2
2
|
class Trace
|
3
|
-
include RShade::Helper
|
4
3
|
attr_accessor :source_tree, :open, :close, :set
|
5
4
|
EVENTS = %i[call return].freeze
|
6
5
|
|
7
6
|
def initialize
|
8
7
|
@source_tree = SourceNode.new(nil)
|
9
8
|
@tp = TracePoint.new(*EVENTS, &method(:process_trace))
|
10
|
-
@filter = RShade::Filter.new
|
11
9
|
@stack = [@source_tree]
|
12
10
|
end
|
13
11
|
|
@@ -20,21 +18,42 @@ module RShade
|
|
20
18
|
@tp.disable
|
21
19
|
end
|
22
20
|
|
23
|
-
def show
|
24
|
-
|
25
|
-
next true unless node.parent
|
21
|
+
def show(type = ::RShade::APP_TRACE)
|
22
|
+
return show_app_trace if type == ::RShade::APP_TRACE
|
26
23
|
|
27
|
-
|
24
|
+
show_full_trace
|
25
|
+
end
|
26
|
+
|
27
|
+
def show_full_trace(tree = nil)
|
28
|
+
buffer = StringIO.new
|
29
|
+
tree ||= source_tree
|
30
|
+
tree.pre_order_traverse do |node, depth|
|
31
|
+
if node.root?
|
32
|
+
buffer << "---\n"
|
33
|
+
next
|
34
|
+
end
|
35
|
+
|
36
|
+
buffer << "#{' ' * depth} #{node.value.pretty}\n" if node.value
|
37
|
+
end
|
38
|
+
puts buffer.string
|
39
|
+
end
|
40
|
+
|
41
|
+
def show_app_trace
|
42
|
+
clone = source_tree.clone_by do |node|
|
43
|
+
next true if node.root?
|
44
|
+
|
45
|
+
node.value.app_code?
|
28
46
|
end
|
29
|
-
|
47
|
+
show_full_trace(clone)
|
30
48
|
end
|
31
49
|
|
32
50
|
def process_trace(tp)
|
33
51
|
if tp.event == :call
|
34
52
|
parent = @stack.last
|
35
53
|
hash = { level: @stack.size, path: tp.path, lineno: tp.lineno, klass: tp.defined_class, method_name: tp.method_id }
|
36
|
-
node = SourceNode.new(
|
37
|
-
parent
|
54
|
+
node = SourceNode.new(Source.new(hash))
|
55
|
+
node.parent = parent
|
56
|
+
parent << node
|
38
57
|
@stack.push node
|
39
58
|
end
|
40
59
|
|
data/lib/rshade/tree.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
module RShade
|
2
|
+
# nodoc
|
3
|
+
class Tree
|
4
|
+
attr_accessor :parent, :value
|
5
|
+
attr_reader :nodes
|
6
|
+
|
7
|
+
def initialize(value = nil)
|
8
|
+
@value = value
|
9
|
+
@nodes = []
|
10
|
+
@parent = nil
|
11
|
+
end
|
12
|
+
|
13
|
+
def root?
|
14
|
+
!parent
|
15
|
+
end
|
16
|
+
|
17
|
+
def <<(node)
|
18
|
+
@nodes << node
|
19
|
+
end
|
20
|
+
|
21
|
+
def pre_order_traverse(depth = 0, &block)
|
22
|
+
return unless block_given?
|
23
|
+
|
24
|
+
yield(self, depth)
|
25
|
+
nodes.each do |item|
|
26
|
+
item.pre_order_traverse(depth + 1, &block)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/rshade/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rshade
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ivan Lopatin
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-08-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colorize
|
@@ -84,11 +84,11 @@ files:
|
|
84
84
|
- bin/console
|
85
85
|
- bin/setup
|
86
86
|
- lib/rshade.rb
|
87
|
-
- lib/rshade/filter.rb
|
88
|
-
- lib/rshade/helper.rb
|
89
87
|
- lib/rshade/rspec.rb
|
88
|
+
- lib/rshade/source.rb
|
90
89
|
- lib/rshade/source_node.rb
|
91
90
|
- lib/rshade/trace.rb
|
91
|
+
- lib/rshade/tree.rb
|
92
92
|
- lib/rshade/version.rb
|
93
93
|
- rshade.gemspec
|
94
94
|
- shade.jpg
|
data/lib/rshade/filter.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
module RShade
|
2
|
-
class Filter
|
3
|
-
RUBY_VERSION_PATTERN = /ruby-[0-9.]*/
|
4
|
-
def call(path)
|
5
|
-
return false unless path
|
6
|
-
|
7
|
-
exclude_path.none? { |item| path.include? item }
|
8
|
-
end
|
9
|
-
|
10
|
-
def exclude_path
|
11
|
-
@path_arr ||= begin
|
12
|
-
[ENV['GEM_PATH'].split(':'), parse_ruby_version].flatten.compact
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def parse_ruby_version
|
17
|
-
val = RUBY_VERSION_PATTERN.match(ENV['GEM_PATH'])
|
18
|
-
return nil unless val
|
19
|
-
|
20
|
-
val[0]
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
data/lib/rshade/helper.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
module RShade
|
2
|
-
module Helper
|
3
|
-
def pretty_print(root)
|
4
|
-
str = StringIO.new
|
5
|
-
str.write "\n\n"
|
6
|
-
str.write "---\n".colorize(:yellow)
|
7
|
-
root.traverse do |node|
|
8
|
-
str.write"#{' ' * node.level}#{node.pretty}\n" if node.valid?
|
9
|
-
end
|
10
|
-
str.write '---'.colorize(:yellow)
|
11
|
-
str.string
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|