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 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