rshade 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 732ff0b4c056d8b8128994ad4093db4146eb1728958f095a910017ba0bf7650c
4
- data.tar.gz: 267e18db3d5a50cd2019990d216523b560baae47daf5e5dda36d300e593b49c8
3
+ metadata.gz: bf8737edb621544556bb58751c0513b17fe1d9f47a6d36fc77c57cac7cb00ef4
4
+ data.tar.gz: 13beabd1a6b22e62efc8c4bec6d0a7931ddd2960b8a4ec9cf0eeac6c0c2b8b95
5
5
  SHA512:
6
- metadata.gz: 7184d8bc3982149ddf6871a0ca47a0f883bb8c00fb85949ef16efbc910bf3c74cfa0037a55ee3a3dc441dc638f497db887c25990145e1847a90d73fbf3fd91ee
7
- data.tar.gz: af113a6e204ace9480bb42c2382b60d527c81fe18a4303dc538ce715acfe82932f601bdc20bb91f07a5072f5c5b5f65d00221ab221d8d9e8b2664d666225aa68
6
+ metadata.gz: d2e84b206dc81d4dad3af68cee691f22ec65749de2971ba5ec4c6001187333a17ea2e36c42cdb8341605cfbbbbc459add8355af29fc097e2108b96eb5c9e233c
7
+ data.tar.gz: cd41a6538fad5193dfcf4888da29ba1bfc0e216a5d2023e47291425546d8633660af24cffbd196960d6896e4b2b077ff549f4a57392164b8b625a54b90947f66
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rshade (0.1.1)
4
+ rshade (0.1.2)
5
5
  colorize
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -11,6 +11,12 @@ trace = RShade::Trace.new
11
11
  trace.reveal do
12
12
  #your code here
13
13
  end
14
+ trace.show
15
+ #rspec
16
+ rshade_reveal do
17
+ #code here
18
+ end
19
+
14
20
  ```
15
21
 
16
22
  ## Installation
@@ -1,10 +1,12 @@
1
1
  require 'colorize'
2
- require "rshade/helper"
3
- require "rshade/source_node"
4
- require "rshade/filter"
5
- require "rshade/trace"
6
- require "rshade/rspec"
7
- require "rshade/version"
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
@@ -2,7 +2,7 @@ module RShade
2
2
  REPORTS = []
3
3
 
4
4
  module RSpecHelper
5
- def rshade_reveal(&block)
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
@@ -1,69 +1,23 @@
1
1
  module RShade
2
- class SourceNode
3
- attr_accessor :nodes, :value, :parent
4
-
5
- def initialize(parent, value = nil)
6
- @nodes = []
7
- @value = value || { valid: true, level: 0 }
8
- @value[:valid] = true unless @value.has_key?(:valid)
9
- @parent = parent
10
- end
11
-
12
- def add(node)
13
- @nodes << node
14
- end
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
- unless yield(node)
58
- node.toggle_valid false
17
+ nodes.each do |item|
18
+ item.clone_by(new_tree, &block)
59
19
  end
60
- end
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
@@ -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
- @source_tree.filter do |node|
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
- @filter.call(node.path)
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
- pretty_print @source_tree
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(parent, hash)
37
- parent.add node
54
+ node = SourceNode.new(Source.new(hash))
55
+ node.parent = parent
56
+ parent << node
38
57
  @stack.push node
39
58
  end
40
59
 
@@ -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
@@ -1,3 +1,3 @@
1
1
  module RShade
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
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.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-06-28 00:00:00.000000000 Z
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
@@ -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
@@ -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