rshade 0.1.8 → 0.1.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +4 -0
- data/Gemfile.lock +23 -22
- data/README.md +74 -19
- data/lib/rshade/binding_serializer.rb +35 -0
- data/lib/rshade/config/store.rb +38 -0
- data/lib/rshade/config.rb +71 -0
- data/lib/rshade/core_extensions/object/reveal.rb +8 -0
- data/lib/rshade/event.rb +39 -14
- data/lib/rshade/event_observer.rb +45 -0
- data/lib/rshade/event_processor.rb +35 -0
- data/lib/rshade/event_tree.rb +75 -0
- data/lib/rshade/filter/abstract_filter.rb +26 -0
- data/lib/rshade/filter/default.rb +28 -0
- data/lib/rshade/filter/exclude_path_filter.rb +24 -0
- data/lib/rshade/filter/filter_builder.rb +28 -0
- data/lib/rshade/filter/filter_composition.rb +57 -0
- data/lib/rshade/filter/include_path_filter.rb +43 -0
- data/lib/rshade/filter/variable_filter.rb +33 -0
- data/lib/rshade/formatter/file.rb +6 -6
- data/lib/rshade/formatter/html.rb +9 -7
- data/lib/rshade/formatter/json.rb +14 -15
- data/lib/rshade/formatter/stdout.rb +3 -3
- data/lib/rshade/formatter/string.rb +17 -11
- data/lib/rshade/trace.rb +19 -39
- data/lib/rshade/trace_observable.rb +40 -0
- data/lib/rshade/version.rb +1 -1
- data/lib/rshade.rb +18 -20
- data/rshade.gemspec +1 -1
- metadata +22 -13
- data/lib/rshade/base.rb +0 -13
- data/lib/rshade/configuration.rb +0 -43
- data/lib/rshade/event_serializer.rb +0 -41
- data/lib/rshade/event_store.rb +0 -23
- data/lib/rshade/filter/app_filter.rb +0 -20
- data/lib/rshade/storage.rb +0 -4
@@ -0,0 +1,28 @@
|
|
1
|
+
module RShade
|
2
|
+
module Filter
|
3
|
+
class FilterBuilder
|
4
|
+
def self.build(arr)
|
5
|
+
new.traverse(arr)
|
6
|
+
end
|
7
|
+
|
8
|
+
def map
|
9
|
+
{
|
10
|
+
or: [RShade::Filter::FilterComposition::OR_OP, 2],
|
11
|
+
and: [RShade::Filter::FilterComposition::AND_OP, 2],
|
12
|
+
unary: [RShade::Filter::FilterComposition::UNARY_OP, 1]
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
def traverse(arr)
|
17
|
+
op, arity = map[arr[0]]
|
18
|
+
arg1 = arr[1]
|
19
|
+
arg2 = nil
|
20
|
+
arg2 = arr[2] if arity == 2
|
21
|
+
arg1 = traverse(arg1) if arg1.is_a?(Array)
|
22
|
+
arg2 = traverse(arg2) if arg2.is_a?(Array)
|
23
|
+
|
24
|
+
RShade::Filter::FilterComposition.new(op, arg1, arg2)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module RShade
|
2
|
+
module Filter
|
3
|
+
class FilterComposition
|
4
|
+
include Enumerable
|
5
|
+
AND_OP = :and
|
6
|
+
OR_OP = :or
|
7
|
+
UNARY_OP = :unary
|
8
|
+
attr_reader :op, :left, :right, :parent
|
9
|
+
attr_accessor :parent
|
10
|
+
|
11
|
+
# @param [#call, Enumerable] left
|
12
|
+
# @param [#call, Enumerable] right
|
13
|
+
def initialize(op=UNARY_OP, left=nil, right=nil)
|
14
|
+
@op = op
|
15
|
+
@left = left
|
16
|
+
@right = right
|
17
|
+
end
|
18
|
+
|
19
|
+
def call(event)
|
20
|
+
case op
|
21
|
+
when UNARY_OP
|
22
|
+
return left&.call(event)
|
23
|
+
when AND_OP
|
24
|
+
return left&.call(event) && right&.call(event)
|
25
|
+
when OR_OP
|
26
|
+
l = left&.call(event)
|
27
|
+
r = right&.call(event)
|
28
|
+
# puts "#{left} => #{l} OR #{right} => #{r}"
|
29
|
+
return l || r
|
30
|
+
else
|
31
|
+
raise 'undefined op'
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def each(&block)
|
36
|
+
if left&.respond_to?(:each)
|
37
|
+
left&.each(&block)
|
38
|
+
else
|
39
|
+
yield left
|
40
|
+
end
|
41
|
+
|
42
|
+
if right&.respond_to?(:each)
|
43
|
+
right&.each(&block)
|
44
|
+
else
|
45
|
+
yield right
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def config_filter(type, &block)
|
50
|
+
filter = find do |filter|
|
51
|
+
filter.is_a? type
|
52
|
+
end
|
53
|
+
filter.config(&block) if filter
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module RShade
|
2
|
+
module Filter
|
3
|
+
class IncludePathFilter < AbstractFilter
|
4
|
+
attr_reader :paths
|
5
|
+
|
6
|
+
NAME = :include_paths
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@paths = []
|
10
|
+
end
|
11
|
+
|
12
|
+
def name
|
13
|
+
NAME
|
14
|
+
end
|
15
|
+
|
16
|
+
def priority
|
17
|
+
1
|
18
|
+
end
|
19
|
+
|
20
|
+
def call(event)
|
21
|
+
event_path = event.path
|
22
|
+
paths.any? do |path|
|
23
|
+
next str?(path, event_path) if path.is_a? String
|
24
|
+
next regexp?(path, event_path) if path.is_a? Regexp
|
25
|
+
false
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def config_call(&block)
|
30
|
+
block.call(@paths)
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
def str?(str, event_path)
|
35
|
+
event_path.include?(str)
|
36
|
+
end
|
37
|
+
|
38
|
+
def regexp?(regex, event_path)
|
39
|
+
regex.match?(event_path)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module RShade
|
2
|
+
module Filter
|
3
|
+
class VariableFilter < AbstractFilter
|
4
|
+
attr_reader :matchers
|
5
|
+
NAME = :variable_filter
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@matchers = []
|
9
|
+
end
|
10
|
+
|
11
|
+
def name
|
12
|
+
:variable_filter
|
13
|
+
end
|
14
|
+
|
15
|
+
def priority
|
16
|
+
2
|
17
|
+
end
|
18
|
+
|
19
|
+
def call(event)
|
20
|
+
matchers.each do |match|
|
21
|
+
event.vars.each do |name, value|
|
22
|
+
return true if match.call(name, value)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
false
|
26
|
+
end
|
27
|
+
|
28
|
+
def config_call(&block)
|
29
|
+
matchers << block
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -1,15 +1,15 @@
|
|
1
1
|
module RShade
|
2
2
|
module Formatter
|
3
|
-
class File
|
4
|
-
attr_reader :formatter
|
3
|
+
class File
|
4
|
+
attr_reader :formatter
|
5
5
|
FILE_NAME = 'stacktrace.json'.freeze
|
6
6
|
|
7
|
-
def initialize(
|
8
|
-
@event_store = event_store
|
7
|
+
def initialize(args={})
|
9
8
|
@formatter = args.fetch(:format, Json)
|
10
9
|
end
|
11
10
|
|
12
|
-
|
11
|
+
# @param [RShade::EventProcessor] event_store
|
12
|
+
def call(event_store)
|
13
13
|
data = formatter.call(event_store)
|
14
14
|
if formatter == Json
|
15
15
|
write_to_file(JSON.pretty_generate(data))
|
@@ -19,7 +19,7 @@ module RShade
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def write_to_file(data)
|
22
|
-
::File.open(::File.join(RShade.
|
22
|
+
::File.open(::File.join(RShade::Config.store_dir, FILE_NAME), "w+") do |f|
|
23
23
|
f.write data
|
24
24
|
end
|
25
25
|
end
|
@@ -1,16 +1,18 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
1
3
|
module RShade
|
2
4
|
module Formatter
|
3
|
-
class Html
|
4
|
-
attr_reader :formatter
|
5
|
+
class Html
|
6
|
+
attr_reader :formatter
|
5
7
|
FILE_NAME = 'stacktrace.html'.freeze
|
6
8
|
TEMPLATE = 'html/template.html.erb'
|
7
9
|
|
8
|
-
def initialize(
|
9
|
-
@event_store = event_store
|
10
|
+
def initialize(args={})
|
10
11
|
@formatter = args.fetch(:formatter, Json)
|
11
12
|
end
|
12
13
|
|
13
|
-
|
14
|
+
# @param [RShade::EventProcessor] event_store
|
15
|
+
def call(event_store)
|
14
16
|
data = formatter.call(event_store)
|
15
17
|
erb_template = ERB.new(template)
|
16
18
|
content = erb_template.result_with_hash({json: data.to_json})
|
@@ -18,13 +20,13 @@ module RShade
|
|
18
20
|
end
|
19
21
|
|
20
22
|
def write_to_file(data)
|
21
|
-
::File.open(::File.join(RShade.
|
23
|
+
::File.open(::File.join(RShade::Config.store_dir, FILE_NAME), "w+") do |f|
|
22
24
|
f.write data
|
23
25
|
end
|
24
26
|
end
|
25
27
|
|
26
28
|
def template
|
27
|
-
@template ||=::File.read(::File.join(::RShade.
|
29
|
+
@template ||=::File.read(::File.join(::RShade::Config.root_dir, TEMPLATE))
|
28
30
|
end
|
29
31
|
end
|
30
32
|
end
|
@@ -1,27 +1,26 @@
|
|
1
1
|
module RShade
|
2
2
|
module Formatter
|
3
|
-
class Json
|
4
|
-
attr_reader :
|
3
|
+
class Json
|
4
|
+
attr_reader :event_processor
|
5
5
|
|
6
|
-
|
6
|
+
# @param [RShade::EventProcessor] event_store
|
7
|
+
def call(event_store)
|
7
8
|
@event_store = event_store
|
8
|
-
end
|
9
|
-
|
10
|
-
def call
|
11
9
|
flat
|
12
10
|
end
|
13
11
|
|
14
12
|
def flat
|
15
13
|
arr = []
|
16
|
-
event_store.
|
17
|
-
arr << item(node)
|
14
|
+
event_store.each do |node|
|
15
|
+
arr << item(node.event)
|
18
16
|
end
|
19
|
-
arr.sort_by { |item| item[:
|
17
|
+
arr.sort_by { |item| item[:level]}
|
20
18
|
end
|
21
19
|
|
22
20
|
def hierarchical
|
23
21
|
hash = {}
|
24
|
-
event_store.
|
22
|
+
event_store.each do |node|
|
23
|
+
depth = node.level
|
25
24
|
ref = hash_iterate(hash, depth)
|
26
25
|
ref[:data] = item(node)
|
27
26
|
end
|
@@ -48,11 +47,11 @@ module RShade
|
|
48
47
|
|
49
48
|
def item(value)
|
50
49
|
{
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
50
|
+
class: value.klass.to_s,
|
51
|
+
method_name: value.method_name,
|
52
|
+
full_path: "#{value.path}:#{value.lineno}",
|
53
|
+
level: value.depth,
|
54
|
+
vars: value.vars
|
56
55
|
}
|
57
56
|
end
|
58
57
|
end
|
@@ -1,29 +1,35 @@
|
|
1
1
|
module RShade
|
2
2
|
module Formatter
|
3
|
-
class String
|
4
|
-
attr_reader :event_store
|
3
|
+
class String
|
5
4
|
ROOT_SEP = "---\n"
|
6
5
|
|
7
|
-
def initialize(
|
8
|
-
@event_store = event_store
|
6
|
+
def initialize(opts= {})
|
9
7
|
end
|
10
8
|
|
11
|
-
|
9
|
+
# @param [RShade::EventProcessor] event_store
|
10
|
+
def call(event_store)
|
12
11
|
buffer = StringIO.new
|
13
|
-
event_store.
|
12
|
+
event_store.each_with_index do |node, idx|
|
13
|
+
depth = node.level
|
14
|
+
event = node.value
|
14
15
|
if depth == 1
|
15
16
|
buffer << ROOT_SEP
|
16
17
|
next
|
17
18
|
end
|
18
|
-
|
19
|
+
next unless event
|
20
|
+
buffer.write line(idx, event, node.vlevel)
|
19
21
|
end
|
20
22
|
buffer.string
|
21
23
|
end
|
22
24
|
|
23
|
-
def line(value, depth)
|
24
|
-
|
25
|
-
|
26
|
-
|
25
|
+
def line(line_idx, value, depth)
|
26
|
+
vars = value.vars
|
27
|
+
returned = ColorizedString["=> |#{value.return_value}|"].colorize(:magenta)
|
28
|
+
|
29
|
+
class_method = ColorizedString["#{value.klass}##{value.method_name}"].colorize(:green)
|
30
|
+
full_path = ColorizedString["#{value.path}:#{value.lineno}"].colorize(:blue)
|
31
|
+
line_idx = ColorizedString["[#{line_idx}] "].colorize(:red)
|
32
|
+
"#{' ' * depth}#{line_idx}#{class_method}(#{vars}) #{returned} -> #{full_path}\n"
|
27
33
|
end
|
28
34
|
end
|
29
35
|
end
|
data/lib/rshade/trace.rb
CHANGED
@@ -1,54 +1,34 @@
|
|
1
1
|
module RShade
|
2
2
|
class Trace
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
def initialize(
|
7
|
-
@
|
8
|
-
@
|
9
|
-
@filter = options.fetch(:filter, RShade.config.filter)
|
10
|
-
@tp = TracePoint.new(*EVENTS, &method(:process_trace))
|
11
|
-
@level = 1
|
12
|
-
@stat = {}
|
13
|
-
@calls = 0
|
14
|
-
@returns = 0
|
3
|
+
attr_reader :config, :event_store
|
4
|
+
|
5
|
+
# @param [RShade::Config,RShade::Config::Store] config
|
6
|
+
def initialize(config)
|
7
|
+
@config = fetch_config(config)
|
8
|
+
@event_store = EventTree.new
|
15
9
|
end
|
16
10
|
|
17
|
-
def self.reveal(
|
18
|
-
new(
|
11
|
+
def self.reveal(config=nil, &block)
|
12
|
+
new(config).reveal(&block)
|
19
13
|
end
|
20
14
|
|
21
|
-
def reveal
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
15
|
+
def reveal(&block)
|
16
|
+
processor = EventProcessor.new(@event_store)
|
17
|
+
observer = EventObserver.new(config, processor)
|
18
|
+
observable = RShade::TraceObservable.new([observer], config)
|
19
|
+
observable.reveal &block
|
26
20
|
self
|
27
|
-
ensure
|
28
|
-
@tp.disable
|
29
21
|
end
|
30
22
|
|
31
23
|
def show
|
32
|
-
formatter.call(event_store)
|
24
|
+
config.formatter.call(event_store)
|
33
25
|
end
|
34
26
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
if tp.event == :call
|
41
|
-
@level +=1
|
42
|
-
hash = EventSerializer.call(tp, @level)
|
43
|
-
return unless filter.call(hash)
|
44
|
-
@calls += 1
|
45
|
-
event_store << Event.new(hash)
|
46
|
-
end
|
47
|
-
|
48
|
-
if tp.event == :return && @level > 0
|
49
|
-
@returns += 1
|
50
|
-
@level -=1
|
51
|
-
end
|
27
|
+
private
|
28
|
+
def fetch_config(config)
|
29
|
+
config = config || ::RShade::Config.default
|
30
|
+
config = config.value if config.is_a?(::RShade::Config)
|
31
|
+
config
|
52
32
|
end
|
53
33
|
end
|
54
34
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module RShade
|
2
|
+
class TraceObservable
|
3
|
+
include Observable
|
4
|
+
attr_reader :trace_p
|
5
|
+
CALL_EVENTS = Set[:call, :c_call, :b_call]
|
6
|
+
RETURN_EVENTS = Set[:return, :c_return, :b_return]
|
7
|
+
|
8
|
+
# @param [Enumerable<#call>, #call] observers
|
9
|
+
# @param [::RShade::Config::Store] config
|
10
|
+
def initialize(observers, config)
|
11
|
+
@trace_p = TracePoint.new(*config.tp_events, &method(:process))
|
12
|
+
observers = [observers] unless observers.is_a?(Enumerable)
|
13
|
+
|
14
|
+
observers.each do |observer|
|
15
|
+
add_observer(observer, :call)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def reveal
|
20
|
+
return unless block_given?
|
21
|
+
|
22
|
+
trace_p.enable
|
23
|
+
yield
|
24
|
+
self
|
25
|
+
ensure
|
26
|
+
trace_p.disable
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
# more info https://rubyapi.org/3.1/o/tracepoint
|
31
|
+
# @param [TracePoint] tp
|
32
|
+
def process(tp)
|
33
|
+
changed
|
34
|
+
event = Event.from_trace_point(tp)
|
35
|
+
return notify_observers(event, :enter) if CALL_EVENTS.include?(tp.event)
|
36
|
+
return notify_observers(event, :leave) if RETURN_EVENTS.include?(tp.event)
|
37
|
+
notify_observers(event, :other)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/rshade/version.rb
CHANGED
data/lib/rshade.rb
CHANGED
@@ -1,34 +1,32 @@
|
|
1
|
-
require '
|
1
|
+
require 'colorized_string'
|
2
2
|
require 'erb'
|
3
|
-
require '
|
4
|
-
require '
|
5
|
-
require '
|
6
|
-
require 'rshade/
|
3
|
+
require 'weakref'
|
4
|
+
require 'set'
|
5
|
+
require 'observer'
|
6
|
+
require 'rshade/config'
|
7
|
+
require 'rshade/config/store'
|
8
|
+
require 'rshade/event_tree'
|
9
|
+
require 'rshade/event_processor'
|
10
|
+
require 'rshade/binding_serializer'
|
11
|
+
require 'rshade/event_observer'
|
12
|
+
require 'rshade/trace_observable'
|
13
|
+
require 'rshade/filter/abstract_filter'
|
14
|
+
require 'rshade/filter/filter_builder'
|
15
|
+
require 'rshade/filter/filter_composition'
|
16
|
+
require 'rshade/filter/include_path_filter'
|
17
|
+
require 'rshade/filter/exclude_path_filter'
|
18
|
+
require 'rshade/filter/variable_filter'
|
19
|
+
require 'rshade/filter/default'
|
7
20
|
require 'rshade/formatter/string'
|
8
21
|
require 'rshade/formatter/json'
|
9
22
|
require 'rshade/formatter/file'
|
10
23
|
require 'rshade/formatter/html'
|
11
24
|
require 'rshade/formatter/stdout'
|
12
25
|
require 'rshade/event'
|
13
|
-
require 'rshade/event_store'
|
14
26
|
require 'rshade/trace'
|
15
27
|
require 'rshade/rspec/rspec'
|
16
28
|
require 'rshade/version'
|
17
29
|
|
18
30
|
|
19
31
|
module RShade
|
20
|
-
APP_TRACE = :app_trace
|
21
|
-
FULL_TRACE = :full_trace
|
22
|
-
|
23
|
-
class << self
|
24
|
-
attr_writer :config
|
25
|
-
|
26
|
-
def config
|
27
|
-
@config ||= Configuration.new
|
28
|
-
end
|
29
|
-
|
30
|
-
def configure
|
31
|
-
yield configuration
|
32
|
-
end
|
33
|
-
end
|
34
32
|
end
|
data/rshade.gemspec
CHANGED
@@ -38,7 +38,7 @@ Gem::Specification.new do |spec|
|
|
38
38
|
|
39
39
|
spec.add_runtime_dependency 'colorize'
|
40
40
|
|
41
|
-
spec.add_development_dependency "bundler", "~>
|
41
|
+
spec.add_development_dependency "bundler", "~> 2.2.33"
|
42
42
|
spec.add_development_dependency "rake", ">= 12.3.3"
|
43
43
|
spec.add_development_dependency "rspec", "~> 3.0"
|
44
44
|
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.
|
4
|
+
version: 0.1.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ivan Lopatin
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-03-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colorize
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 2.2.33
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 2.2.33
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -85,12 +85,21 @@ files:
|
|
85
85
|
- bin/setup
|
86
86
|
- html/template.html.erb
|
87
87
|
- lib/rshade.rb
|
88
|
-
- lib/rshade/
|
89
|
-
- lib/rshade/
|
88
|
+
- lib/rshade/binding_serializer.rb
|
89
|
+
- lib/rshade/config.rb
|
90
|
+
- lib/rshade/config/store.rb
|
91
|
+
- lib/rshade/core_extensions/object/reveal.rb
|
90
92
|
- lib/rshade/event.rb
|
91
|
-
- lib/rshade/
|
92
|
-
- lib/rshade/
|
93
|
-
- lib/rshade/
|
93
|
+
- lib/rshade/event_observer.rb
|
94
|
+
- lib/rshade/event_processor.rb
|
95
|
+
- lib/rshade/event_tree.rb
|
96
|
+
- lib/rshade/filter/abstract_filter.rb
|
97
|
+
- lib/rshade/filter/default.rb
|
98
|
+
- lib/rshade/filter/exclude_path_filter.rb
|
99
|
+
- lib/rshade/filter/filter_builder.rb
|
100
|
+
- lib/rshade/filter/filter_composition.rb
|
101
|
+
- lib/rshade/filter/include_path_filter.rb
|
102
|
+
- lib/rshade/filter/variable_filter.rb
|
94
103
|
- lib/rshade/formatter/file.rb
|
95
104
|
- lib/rshade/formatter/html.rb
|
96
105
|
- lib/rshade/formatter/json.rb
|
@@ -98,8 +107,8 @@ files:
|
|
98
107
|
- lib/rshade/formatter/string.rb
|
99
108
|
- lib/rshade/rails/rails.rb
|
100
109
|
- lib/rshade/rspec/rspec.rb
|
101
|
-
- lib/rshade/storage.rb
|
102
110
|
- lib/rshade/trace.rb
|
111
|
+
- lib/rshade/trace_observable.rb
|
103
112
|
- lib/rshade/version.rb
|
104
113
|
- rshade.gemspec
|
105
114
|
- shade.jpg
|
@@ -112,7 +121,7 @@ metadata:
|
|
112
121
|
homepage_uri: https://github.com/gingray/rshade
|
113
122
|
source_code_uri: https://github.com/gingray/rshade
|
114
123
|
changelog_uri: https://github.com/gingray/rshade/CHANGELOG.md
|
115
|
-
post_install_message:
|
124
|
+
post_install_message:
|
116
125
|
rdoc_options: []
|
117
126
|
require_paths:
|
118
127
|
- lib
|
@@ -128,7 +137,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
128
137
|
version: '0'
|
129
138
|
requirements: []
|
130
139
|
rubygems_version: 3.0.8
|
131
|
-
signing_key:
|
140
|
+
signing_key:
|
132
141
|
specification_version: 4
|
133
142
|
summary: https://github.com/gingray/rshade
|
134
143
|
test_files: []
|
data/lib/rshade/base.rb
DELETED
data/lib/rshade/configuration.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
module RShade
|
2
|
-
class Configuration
|
3
|
-
RUBY_VERSION_PATTERN = /ruby-[0-9.]*/
|
4
|
-
|
5
|
-
attr_accessor :track_gems, :filter, :formatter
|
6
|
-
|
7
|
-
def initialize
|
8
|
-
@track_gems = Set.new
|
9
|
-
end
|
10
|
-
|
11
|
-
def excluded_paths
|
12
|
-
@excluded_paths ||= begin
|
13
|
-
paths = [ENV['GEM_PATH'].split(':'), parse_ruby_version].flatten.compact
|
14
|
-
paths.reject do |v|
|
15
|
-
track_gems.any? { |gem_name| v.include? gem_name }
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def parse_ruby_version
|
21
|
-
val = RUBY_VERSION_PATTERN.match(ENV['GEM_PATH'])
|
22
|
-
return nil unless val
|
23
|
-
|
24
|
-
val[0]
|
25
|
-
end
|
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
|
38
|
-
|
39
|
-
def root_dir
|
40
|
-
@root_dir ||= File.expand_path('../../', __dir__)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|