rshade 0.1.6 → 0.1.7
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 +3 -3
- data/README.md +1 -2
- data/lib/rshade.rb +11 -5
- data/lib/rshade/base.rb +13 -0
- data/lib/rshade/configuration.rb +14 -7
- data/lib/rshade/event.rb +35 -0
- data/lib/rshade/event_serializer.rb +29 -0
- data/lib/rshade/event_store.rb +23 -0
- data/lib/rshade/filter/app_filter.rb +20 -0
- data/lib/rshade/formatter/http.rb +8 -0
- data/lib/rshade/formatter/json.rb +70 -0
- data/lib/rshade/formatter/stdout.rb +10 -0
- data/lib/rshade/formatter/string.rb +30 -0
- data/lib/rshade/rails/rails.rb +0 -0
- data/lib/rshade/{rspec.rb → rspec/rspec.rb} +4 -6
- data/lib/rshade/storage.rb +4 -0
- data/lib/rshade/trace.rb +27 -42
- data/lib/rshade/version.rb +1 -1
- data/rshade.gemspec +1 -1
- data/todo.md +8 -0
- metadata +20 -12
- data/lib/rshade/source.rb +0 -46
- data/lib/rshade/source_node.rb +0 -23
- data/lib/rshade/tree.rb +0 -30
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5594d3ba4348f6f4c4b73a74c223a7b30f3b7eda7216c72d0d122079cae63bf7
|
4
|
+
data.tar.gz: b071916008465bed00ff107b8b88fe778235a333e1a24c74af5ea62631ec4b75
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b4a81694ecce4e7063a8a8d4cd5ed758ea93ca151aa0b09cd785e281d206c4cdcdfa389237523fe05f57441c6f4ad648f5cd60e1abb46793162b2ff182965555
|
7
|
+
data.tar.gz: 756a618370faa424864563640ac0389124201bc5c49eb47fdb6cae0fe8f535dadc7c97c366b6c5dfaa330700a39d9e2eaa6e9caad9538209319a7da9587c142f
|
data/Gemfile.lock
CHANGED
@@ -14,7 +14,7 @@ GEM
|
|
14
14
|
pry (0.12.2)
|
15
15
|
coderay (~> 1.1.0)
|
16
16
|
method_source (~> 0.9.0)
|
17
|
-
rake (
|
17
|
+
rake (13.0.1)
|
18
18
|
rspec (3.8.0)
|
19
19
|
rspec-core (~> 3.8.0)
|
20
20
|
rspec-expectations (~> 3.8.0)
|
@@ -35,9 +35,9 @@ PLATFORMS
|
|
35
35
|
DEPENDENCIES
|
36
36
|
bundler (~> 1.16)
|
37
37
|
pry
|
38
|
-
rake (
|
38
|
+
rake (>= 12.3.3)
|
39
39
|
rshade!
|
40
40
|
rspec (~> 3.0)
|
41
41
|
|
42
42
|
BUNDLED WITH
|
43
|
-
1.
|
43
|
+
1.17.3
|
data/README.md
CHANGED
data/lib/rshade.rb
CHANGED
@@ -1,10 +1,16 @@
|
|
1
1
|
require 'colorize'
|
2
2
|
require 'rshade/configuration'
|
3
|
-
require 'rshade/
|
4
|
-
require 'rshade/
|
5
|
-
require 'rshade/
|
3
|
+
require 'rshade/base'
|
4
|
+
require 'rshade/event_serializer'
|
5
|
+
require 'rshade/filter/app_filter'
|
6
|
+
require 'rshade/formatter/string'
|
7
|
+
require 'rshade/formatter/json'
|
8
|
+
require 'rshade/formatter/stdout'
|
9
|
+
require 'rshade/formatter/http'
|
10
|
+
require 'rshade/event'
|
11
|
+
require 'rshade/event_store'
|
6
12
|
require 'rshade/trace'
|
7
|
-
require 'rshade/rspec'
|
13
|
+
require 'rshade/rspec/rspec'
|
8
14
|
require 'rshade/version'
|
9
15
|
|
10
16
|
|
@@ -15,7 +21,7 @@ module RShade
|
|
15
21
|
class << self
|
16
22
|
attr_writer :config
|
17
23
|
|
18
|
-
def
|
24
|
+
def config
|
19
25
|
@config ||= Configuration.new
|
20
26
|
end
|
21
27
|
|
data/lib/rshade/base.rb
ADDED
data/lib/rshade/configuration.rb
CHANGED
@@ -2,21 +2,17 @@ module RShade
|
|
2
2
|
class Configuration
|
3
3
|
RUBY_VERSION_PATTERN = /ruby-[0-9.]*/
|
4
4
|
|
5
|
-
attr_accessor :
|
5
|
+
attr_accessor :track_gems, :filter, :formatter
|
6
6
|
|
7
7
|
def initialize
|
8
|
-
@
|
9
|
-
end
|
10
|
-
|
11
|
-
def default_arg_print(args)
|
12
|
-
|
8
|
+
@track_gems = Set.new
|
13
9
|
end
|
14
10
|
|
15
11
|
def excluded_paths
|
16
12
|
@excluded_paths ||= begin
|
17
13
|
paths = [ENV['GEM_PATH'].split(':'), parse_ruby_version].flatten.compact
|
18
14
|
paths.reject do |v|
|
19
|
-
|
15
|
+
track_gems.any? { |gem_name| v.include? gem_name }
|
20
16
|
end
|
21
17
|
end
|
22
18
|
end
|
@@ -28,5 +24,16 @@ module RShade
|
|
28
24
|
val[0]
|
29
25
|
end
|
30
26
|
|
27
|
+
def filter
|
28
|
+
@filter ||= ::RShade::Filter::AppFilter
|
29
|
+
end
|
30
|
+
|
31
|
+
def formatter
|
32
|
+
@formatter ||= ::RShade::Formatter::Stdout
|
33
|
+
end
|
34
|
+
|
35
|
+
def store_dir
|
36
|
+
File.expand_path('../../tmp', __dir__)
|
37
|
+
end
|
31
38
|
end
|
32
39
|
end
|
data/lib/rshade/event.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
module RShade
|
2
|
+
# nodoc
|
3
|
+
class Event
|
4
|
+
attr_reader :hash
|
5
|
+
attr_accessor :depth
|
6
|
+
|
7
|
+
def initialize(hash)
|
8
|
+
@hash = hash
|
9
|
+
end
|
10
|
+
|
11
|
+
def level
|
12
|
+
@hash[:level]
|
13
|
+
end
|
14
|
+
|
15
|
+
def klass
|
16
|
+
@hash[:klass]
|
17
|
+
end
|
18
|
+
|
19
|
+
def path
|
20
|
+
@hash[:path]
|
21
|
+
end
|
22
|
+
|
23
|
+
def lineno
|
24
|
+
@hash[:lineno]
|
25
|
+
end
|
26
|
+
|
27
|
+
def method_name
|
28
|
+
@hash[:method_name]
|
29
|
+
end
|
30
|
+
|
31
|
+
def vars
|
32
|
+
@hash[:vars]
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'date'
|
2
|
+
module RShade
|
3
|
+
class EventSerializer < Base
|
4
|
+
attr_reader :evt, :level
|
5
|
+
SERIALIZE_CLASSES = [NilClass, TrueClass, FalseClass, Numeric, Time, Date, String, Symbol, Array, Hash]
|
6
|
+
def initialize(evt, level)
|
7
|
+
@evt = evt
|
8
|
+
@level = level
|
9
|
+
end
|
10
|
+
|
11
|
+
def call
|
12
|
+
{ level: @level, path: evt.path, lineno: evt.lineno, klass: evt.defined_class, method_name: evt.method_id, vars: process_locals(evt) }
|
13
|
+
end
|
14
|
+
|
15
|
+
def process_locals(evt)
|
16
|
+
vars = {}
|
17
|
+
evt.binding.local_variables.each do |var|
|
18
|
+
local_var = evt.binding.local_variable_get var
|
19
|
+
if SERIALIZE_CLASSES.any? { |klass| local_var.is_a?(klass) }
|
20
|
+
vars[var] = local_var
|
21
|
+
else
|
22
|
+
class_name = local_var.is_a?(Class) ? local_var.to_s : local_var.class.to_s
|
23
|
+
vars[var] = "FILTERED[#{class_name}]"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
vars
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module RShade
|
2
|
+
# nodoc
|
3
|
+
class EventStore
|
4
|
+
attr_reader :events
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@events = []
|
8
|
+
end
|
9
|
+
|
10
|
+
def <<(event)
|
11
|
+
events << event
|
12
|
+
end
|
13
|
+
|
14
|
+
def iterate(&block)
|
15
|
+
pos_map = {}
|
16
|
+
@events.map {|item| item.level }.uniq.sort.each_with_index { |item, index| pos_map[item] = index}
|
17
|
+
@events.uniq{|item| [item.level, "#{item.klass}##{item.method_name}"]}.sort_by { |item| item.depth }.each do |item|
|
18
|
+
item.depth = pos_map[item.level]
|
19
|
+
yield(item, item.depth)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module RShade
|
2
|
+
module Filter
|
3
|
+
class AppFilter < ::RShade::Base
|
4
|
+
attr_reader :data
|
5
|
+
|
6
|
+
def initialize(data)
|
7
|
+
@data = data
|
8
|
+
end
|
9
|
+
|
10
|
+
def call
|
11
|
+
valid?(data[:path])
|
12
|
+
end
|
13
|
+
|
14
|
+
def valid?(path)
|
15
|
+
return true if RShade.config.track_gems.any? { |item| path.include? item }
|
16
|
+
RShade.config.excluded_paths.none? { |item| path.include? item }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
module RShade
|
2
|
+
module Formatter
|
3
|
+
class Json < ::RShade::Base
|
4
|
+
attr_reader :event_store
|
5
|
+
FILE_NAME = 'stacktrace.json'.freeze
|
6
|
+
|
7
|
+
def initialize(event_store)
|
8
|
+
@event_store = event_store
|
9
|
+
end
|
10
|
+
|
11
|
+
def call
|
12
|
+
flat
|
13
|
+
end
|
14
|
+
|
15
|
+
def flat
|
16
|
+
arr = []
|
17
|
+
event_store.iterate do |node, depth|
|
18
|
+
arr << item(node)
|
19
|
+
end
|
20
|
+
write_to_file(JSON.pretty_generate(arr.sort_by { |item| item[:depth]}))
|
21
|
+
arr
|
22
|
+
end
|
23
|
+
|
24
|
+
def hierarchical
|
25
|
+
hash = {}
|
26
|
+
event_store.iterate do |node, depth|
|
27
|
+
ref = hash_iterate(hash, depth)
|
28
|
+
ref[:data] = item(node)
|
29
|
+
end
|
30
|
+
hash = sort_hash(hash)
|
31
|
+
write_to_file(JSON.pretty_generate(hash))
|
32
|
+
hash
|
33
|
+
end
|
34
|
+
|
35
|
+
def write_to_file(data)
|
36
|
+
File.open(File.join(RShade.config.store_dir, FILE_NAME), "w+") do |f|
|
37
|
+
f.write data
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def sort_hash(h)
|
42
|
+
{}.tap do |h2|
|
43
|
+
h.sort.each do |k,v|
|
44
|
+
h2[k] = v.is_a?(Hash) ? sort_hash(v) : v
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def hash_iterate(hash, depth)
|
50
|
+
(0..depth).each do |lvl|
|
51
|
+
unless hash[:inner]
|
52
|
+
hash[:inner] = {}
|
53
|
+
end
|
54
|
+
hash = hash[:inner]
|
55
|
+
end
|
56
|
+
hash
|
57
|
+
end
|
58
|
+
|
59
|
+
def item(value)
|
60
|
+
{
|
61
|
+
class: value.klass.to_s,
|
62
|
+
method_name: value.method_name,
|
63
|
+
full_path: "#{value.path}:#{value.lineno}",
|
64
|
+
depth: value.depth,
|
65
|
+
vars: value.vars
|
66
|
+
}
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module RShade
|
2
|
+
module Formatter
|
3
|
+
class String < ::RShade::Base
|
4
|
+
attr_reader :event_store
|
5
|
+
ROOT_SEP = "---\n"
|
6
|
+
|
7
|
+
def initialize(event_store)
|
8
|
+
@event_store = event_store
|
9
|
+
end
|
10
|
+
|
11
|
+
def call
|
12
|
+
buffer = StringIO.new
|
13
|
+
event_store.iterate do |node, depth|
|
14
|
+
if depth == 1
|
15
|
+
buffer << ROOT_SEP
|
16
|
+
next
|
17
|
+
end
|
18
|
+
puts line(node, depth)
|
19
|
+
end
|
20
|
+
buffer.string
|
21
|
+
end
|
22
|
+
|
23
|
+
def line(value, depth)
|
24
|
+
class_method = "#{value.klass}##{value.method_name}".colorize(:green)
|
25
|
+
full_path = "#{value.path}:#{value.lineno}".colorize(:blue)
|
26
|
+
"#{' ' * depth}#{class_method}(#{value.vars}) -> #{full_path}\n"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
File without changes
|
@@ -2,15 +2,13 @@ module RShade
|
|
2
2
|
REPORTS = []
|
3
3
|
|
4
4
|
module RSpecHelper
|
5
|
-
def rshade_reveal(
|
5
|
+
def rshade_reveal(options = {})
|
6
6
|
raise 'No block given' unless block_given?
|
7
|
-
|
8
|
-
|
9
|
-
trace.reveal(options) do
|
7
|
+
options.merge!(formatter: Formatter::String) { |_key,v1, _v2| v1 }
|
8
|
+
result = Trace.reveal(options) do
|
10
9
|
yield
|
11
10
|
end
|
12
|
-
|
13
|
-
REPORTS.push trace.show(type)
|
11
|
+
REPORTS.push result.show
|
14
12
|
end
|
15
13
|
end
|
16
14
|
end
|
data/lib/rshade/trace.rb
CHANGED
@@ -1,68 +1,53 @@
|
|
1
1
|
module RShade
|
2
2
|
class Trace
|
3
|
-
attr_accessor :
|
3
|
+
attr_accessor :event_store, :formatter, :filter
|
4
4
|
EVENTS = %i[call return].freeze
|
5
5
|
|
6
|
-
def initialize
|
7
|
-
@
|
6
|
+
def initialize(options={})
|
7
|
+
@event_store = EventStore.new
|
8
|
+
@formatter = options.fetch(:formatter, RShade.config.formatter)
|
9
|
+
@filter = options.fetch(:filter, RShade.config.filter)
|
8
10
|
@tp = TracePoint.new(*EVENTS, &method(:process_trace))
|
9
|
-
@
|
11
|
+
@level = 1
|
12
|
+
@stat = {}
|
13
|
+
@calls = 0
|
14
|
+
@returns = 0
|
10
15
|
end
|
11
16
|
|
12
|
-
def reveal(options
|
17
|
+
def self.reveal(options={}, &block)
|
18
|
+
new(options).reveal(&block)
|
19
|
+
end
|
20
|
+
|
21
|
+
def reveal
|
13
22
|
return unless block_given?
|
14
23
|
|
15
24
|
@tp.enable
|
16
25
|
yield
|
26
|
+
self
|
17
27
|
ensure
|
18
28
|
@tp.disable
|
19
29
|
end
|
20
30
|
|
21
|
-
def show
|
22
|
-
|
23
|
-
|
24
|
-
show_full_trace
|
31
|
+
def show
|
32
|
+
formatter.call(event_store)
|
25
33
|
end
|
26
34
|
|
27
|
-
def
|
28
|
-
|
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?
|
46
|
-
end
|
47
|
-
show_full_trace(clone)
|
35
|
+
def stat
|
36
|
+
{ calls: @calls, returns: @returns }
|
48
37
|
end
|
49
38
|
|
50
39
|
def process_trace(tp)
|
51
40
|
if tp.event == :call
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
hash = { level: @stack.size, path: tp.path, lineno: tp.lineno, klass: tp.defined_class, method_name: tp.method_id, vars: vars }
|
58
|
-
node = SourceNode.new(Source.new(hash))
|
59
|
-
node.parent = parent
|
60
|
-
parent << node
|
61
|
-
@stack.push node
|
41
|
+
@level +=1
|
42
|
+
hash = EventSerializer.call(tp, @level)
|
43
|
+
return unless filter.call(hash)
|
44
|
+
@calls += 1
|
45
|
+
event_store << Event.new(hash)
|
62
46
|
end
|
63
47
|
|
64
|
-
if tp.event == :return && @
|
65
|
-
@
|
48
|
+
if tp.event == :return && @level > 0
|
49
|
+
@returns += 1
|
50
|
+
@level -=1
|
66
51
|
end
|
67
52
|
end
|
68
53
|
end
|
data/lib/rshade/version.rb
CHANGED
data/rshade.gemspec
CHANGED
@@ -39,6 +39,6 @@ Gem::Specification.new do |spec|
|
|
39
39
|
spec.add_runtime_dependency 'colorize'
|
40
40
|
|
41
41
|
spec.add_development_dependency "bundler", "~> 1.16"
|
42
|
-
spec.add_development_dependency "rake", "
|
42
|
+
spec.add_development_dependency "rake", ">= 12.3.3"
|
43
43
|
spec.add_development_dependency "rspec", "~> 3.0"
|
44
44
|
end
|
data/todo.md
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
1. Should I use rails way organizing module/file naming or not?
|
2
|
+
2. Reduce global state usage
|
3
|
+
3. Problem with stack deep
|
4
|
+
4. Problem when have binary values error in serialization (Encoding problems)
|
5
|
+
5. Make filter while tracing that will be more efficient
|
6
|
+
6. sort depth and than replace values
|
7
|
+
7. tree not working bcz of vars serialization
|
8
|
+
8. Some classes in Rails can't serialize safely produce StackTraceTooDeep
|
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.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ivan Lopatin
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-06-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colorize
|
@@ -42,16 +42,16 @@ dependencies:
|
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 12.3.3
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 12.3.3
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -84,15 +84,24 @@ files:
|
|
84
84
|
- bin/console
|
85
85
|
- bin/setup
|
86
86
|
- lib/rshade.rb
|
87
|
+
- lib/rshade/base.rb
|
87
88
|
- lib/rshade/configuration.rb
|
88
|
-
- lib/rshade/
|
89
|
-
- lib/rshade/
|
90
|
-
- lib/rshade/
|
89
|
+
- lib/rshade/event.rb
|
90
|
+
- lib/rshade/event_serializer.rb
|
91
|
+
- lib/rshade/event_store.rb
|
92
|
+
- lib/rshade/filter/app_filter.rb
|
93
|
+
- lib/rshade/formatter/http.rb
|
94
|
+
- lib/rshade/formatter/json.rb
|
95
|
+
- lib/rshade/formatter/stdout.rb
|
96
|
+
- lib/rshade/formatter/string.rb
|
97
|
+
- lib/rshade/rails/rails.rb
|
98
|
+
- lib/rshade/rspec/rspec.rb
|
99
|
+
- lib/rshade/storage.rb
|
91
100
|
- lib/rshade/trace.rb
|
92
|
-
- lib/rshade/tree.rb
|
93
101
|
- lib/rshade/version.rb
|
94
102
|
- rshade.gemspec
|
95
103
|
- shade.jpg
|
104
|
+
- todo.md
|
96
105
|
homepage: https://github.com/gingray/rshade
|
97
106
|
licenses:
|
98
107
|
- MIT
|
@@ -116,8 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
116
125
|
- !ruby/object:Gem::Version
|
117
126
|
version: '0'
|
118
127
|
requirements: []
|
119
|
-
|
120
|
-
rubygems_version: 2.7.8
|
128
|
+
rubygems_version: 3.0.8
|
121
129
|
signing_key:
|
122
130
|
specification_version: 4
|
123
131
|
summary: https://github.com/gingray/rshade
|
data/lib/rshade/source.rb
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
module RShade
|
2
|
-
# nodoc
|
3
|
-
class Source
|
4
|
-
|
5
|
-
def initialize(hash)
|
6
|
-
@hash = hash
|
7
|
-
end
|
8
|
-
|
9
|
-
def klass
|
10
|
-
@hash[:klass]
|
11
|
-
end
|
12
|
-
|
13
|
-
def lib_code?
|
14
|
-
!app_code?
|
15
|
-
end
|
16
|
-
|
17
|
-
def app_code?
|
18
|
-
return true if RShade.configuration.included_gems.any? { |item| path.include? item }
|
19
|
-
|
20
|
-
@app_code ||= RShade.configuration.excluded_paths.none? { |item| path.include? item }
|
21
|
-
end
|
22
|
-
|
23
|
-
def path
|
24
|
-
@hash[:path]
|
25
|
-
end
|
26
|
-
|
27
|
-
def lineno
|
28
|
-
@hash[:lineno]
|
29
|
-
end
|
30
|
-
|
31
|
-
def method_name
|
32
|
-
@hash[:method_name]
|
33
|
-
end
|
34
|
-
|
35
|
-
def vars
|
36
|
-
@hash[:vars]
|
37
|
-
end
|
38
|
-
|
39
|
-
|
40
|
-
def pretty
|
41
|
-
class_method = "#{klass}##{method_name}".colorize(:green)
|
42
|
-
full_path = "#{path}:#{lineno}".colorize(:blue)
|
43
|
-
"#{class_method}(#{vars.to_json}) -> #{full_path}"
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
data/lib/rshade/source_node.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
module RShade
|
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
|
15
|
-
end
|
16
|
-
|
17
|
-
nodes.each do |item|
|
18
|
-
item.clone_by(new_tree, &block)
|
19
|
-
end
|
20
|
-
new_tree
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
data/lib/rshade/tree.rb
DELETED
@@ -1,30 +0,0 @@
|
|
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
|