rshade 0.2.0 → 0.2.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/.rubocop.yml +31 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +2 -2
- data/README.md +56 -16
- data/lib/rshade/config/event_store.rb +76 -0
- data/lib/rshade/config/registry.rb +29 -9
- data/lib/rshade/config/stack_store.rb +23 -17
- data/lib/rshade/core_extensions/object/reveal.rb +5 -2
- data/lib/rshade/event.rb +2 -2
- data/lib/rshade/event_observer.rb +2 -2
- data/lib/rshade/event_processor.rb +2 -2
- data/lib/rshade/event_tree.rb +5 -3
- data/lib/rshade/filter/default.rb +1 -1
- data/lib/rshade/filter/filter_composition.rb +6 -4
- data/lib/rshade/filter/include_path_filter.rb +1 -0
- data/lib/rshade/filter/variable_filter.rb +3 -2
- data/lib/rshade/formatter/stack/json.rb +8 -6
- data/lib/rshade/formatter/stack/stdout.rb +2 -2
- data/lib/rshade/formatter/stack/string.rb +18 -6
- data/lib/rshade/formatter/trace/html.rb +2 -4
- data/lib/rshade/formatter/trace/json.rb +21 -32
- data/lib/rshade/formatter/trace/stdout.rb +1 -1
- data/lib/rshade/rspec/rspec.rb +3 -1
- data/lib/rshade/serializer/traversal.rb +6 -7
- data/lib/rshade/stack.rb +2 -2
- data/lib/rshade/stack_frame.rb +4 -3
- data/lib/rshade/trace.rb +5 -13
- data/lib/rshade/trace_observable.rb +6 -6
- data/lib/rshade/utils.rb +19 -0
- data/lib/rshade/version.rb +1 -1
- data/lib/rshade.rb +2 -3
- data/rshade.gemspec +6 -7
- metadata +7 -49
- data/lib/rshade/config/store.rb +0 -47
- data/lib/rshade/config.rb +0 -77
- data/lib/rshade/formatter/trace/file.rb +0 -33
- data/lib/rshade/rails/rails.rb +0 -0
@@ -4,14 +4,18 @@ module RShade
|
|
4
4
|
module Formatter
|
5
5
|
module Stack
|
6
6
|
class String
|
7
|
+
attr_reader :colorize
|
8
|
+
|
7
9
|
ROOT_SEP = "---\n"
|
8
10
|
|
9
|
-
def initialize(
|
11
|
+
def initialize(colorize: true)
|
12
|
+
@colorize = colorize
|
13
|
+
end
|
10
14
|
|
11
|
-
# @param [RShade::EventProcessor]
|
12
|
-
def call(
|
15
|
+
# @param [RShade::EventProcessor] stack_frames
|
16
|
+
def call(stack_frames, variable_serializer: nil)
|
13
17
|
buffer = StringIO.new
|
14
|
-
|
18
|
+
stack_frames.each_with_index do |frame, idx|
|
15
19
|
if idx.zero?
|
16
20
|
buffer << ROOT_SEP
|
17
21
|
next
|
@@ -23,18 +27,26 @@ module RShade
|
|
23
27
|
buffer.string
|
24
28
|
end
|
25
29
|
|
30
|
+
private
|
31
|
+
|
26
32
|
# @param [RShade::StackFrame] frame
|
27
33
|
def line(line_idx, frame, depth)
|
28
|
-
source_location =
|
34
|
+
source_location = apply_color("(#{frame.source_location[:path]}:#{frame.source_location[:line]})", :green)
|
29
35
|
var_str = frame.local_vars.map do |_, val|
|
30
36
|
var_name = val[:name]
|
31
37
|
var_value = val[:value]
|
32
38
|
var_type = val[:type]
|
33
39
|
"#{var_type} #{var_name} => (#{var_value})"
|
34
40
|
end.join(', ')
|
35
|
-
colorized_var_str =
|
41
|
+
colorized_var_str = apply_color(var_str, :blue)
|
36
42
|
"#{' ' * depth}[frame: #{line_idx}]#{source_location} => local vars: (#{colorized_var_str})\n"
|
37
43
|
end
|
44
|
+
|
45
|
+
def apply_color(str, color)
|
46
|
+
return str unless colorize
|
47
|
+
|
48
|
+
ColorizedString[str].colorize(color)
|
49
|
+
end
|
38
50
|
end
|
39
51
|
end
|
40
52
|
end
|
@@ -24,13 +24,11 @@ module RShade
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def write_to_file(data)
|
27
|
-
::File.
|
28
|
-
f.write data
|
29
|
-
end
|
27
|
+
::File.write(::File.join(RShade::Utils.store_dir, FILE_NAME), data)
|
30
28
|
end
|
31
29
|
|
32
30
|
def template
|
33
|
-
@template ||= ::File.read(::File.join(::RShade::
|
31
|
+
@template ||= ::File.read(::File.join(::RShade::Utils.root_dir, TEMPLATE))
|
34
32
|
end
|
35
33
|
end
|
36
34
|
end
|
@@ -4,54 +4,43 @@ module RShade
|
|
4
4
|
module Formatter
|
5
5
|
module Trace
|
6
6
|
class Json
|
7
|
-
attr_reader :
|
7
|
+
attr_reader :filepath, :pretty
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
@
|
12
|
-
flat
|
9
|
+
def initialize(filepath:, pretty: false)
|
10
|
+
@filepath = filepath
|
11
|
+
@pretty = pretty
|
13
12
|
end
|
14
13
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
14
|
+
# @param [RShade::EventProcessor] event_store
|
15
|
+
def call(event_store)
|
16
|
+
::File.open(filepath, 'a+') do |file|
|
17
|
+
file.puts(convert_to_json(flat(event_store), pretty))
|
19
18
|
end
|
20
|
-
arr.sort_by { |item| item[:level] }
|
21
19
|
end
|
22
20
|
|
23
|
-
|
24
|
-
hash = {}
|
25
|
-
event_store.each do |node|
|
26
|
-
depth = node.level
|
27
|
-
ref = hash_iterate(hash, depth)
|
28
|
-
ref[:data] = item(node)
|
29
|
-
end
|
30
|
-
sort_hash(hash)
|
31
|
-
end
|
21
|
+
private
|
32
22
|
|
33
|
-
def
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
end
|
38
|
-
end
|
23
|
+
def convert_to_json(object, pretty)
|
24
|
+
return JSON.pretty_generate(object) if pretty
|
25
|
+
|
26
|
+
JSON.generate(object)
|
39
27
|
end
|
40
28
|
|
41
|
-
def
|
42
|
-
|
43
|
-
|
44
|
-
|
29
|
+
def flat(event_store)
|
30
|
+
arr = event_store.filter_map do |node|
|
31
|
+
next unless node.value
|
32
|
+
|
33
|
+
serialize(node.value)
|
45
34
|
end
|
46
|
-
|
35
|
+
arr.sort_by { |item| item[:level] }
|
47
36
|
end
|
48
37
|
|
49
|
-
def
|
38
|
+
def serialize(value)
|
50
39
|
{
|
51
40
|
class: value.klass.to_s,
|
52
41
|
method_name: value.method_name,
|
53
42
|
full_path: "#{value.path}:#{value.lineno}",
|
54
|
-
level: value.
|
43
|
+
level: value.level,
|
55
44
|
vars: value.vars
|
56
45
|
}
|
57
46
|
end
|
data/lib/rshade/rspec/rspec.rb
CHANGED
@@ -17,6 +17,10 @@ module RShade
|
|
17
17
|
new_val
|
18
18
|
end
|
19
19
|
|
20
|
+
def merge!(new_types)
|
21
|
+
@types.merge!(new_types)
|
22
|
+
end
|
23
|
+
|
20
24
|
def default_types
|
21
25
|
{
|
22
26
|
default: lambda(&:to_s),
|
@@ -26,14 +30,9 @@ module RShade
|
|
26
30
|
String => ->(value) { value },
|
27
31
|
Hash => lambda do |value|
|
28
32
|
hash = {}
|
29
|
-
|
30
|
-
|
31
|
-
hash[k] = traverse(v)
|
32
|
-
end
|
33
|
-
rescue Exception => e
|
34
|
-
binding.pry
|
33
|
+
value.each do |k, v|
|
34
|
+
hash[k] = traverse(v)
|
35
35
|
end
|
36
|
-
|
37
36
|
hash
|
38
37
|
end,
|
39
38
|
Array => lambda do |value|
|
data/lib/rshade/stack.rb
CHANGED
@@ -9,7 +9,7 @@ module RShade
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def self.trace(config: nil)
|
12
|
-
new(config:).trace
|
12
|
+
new(config: config).trace
|
13
13
|
end
|
14
14
|
|
15
15
|
def trace
|
@@ -20,7 +20,7 @@ module RShade
|
|
20
20
|
|
21
21
|
frame
|
22
22
|
end.compact.reverse
|
23
|
-
config.formatter.call(result)
|
23
|
+
config.formatter.call(result, variable_serializer: config.variable_serializer)
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
data/lib/rshade/stack_frame.rb
CHANGED
@@ -30,7 +30,7 @@ module RShade
|
|
30
30
|
type = value.is_a?(Class) ? value : value.class
|
31
31
|
memo[var_name] = {
|
32
32
|
name: var_name,
|
33
|
-
value
|
33
|
+
value: value,
|
34
34
|
type: type.to_s
|
35
35
|
}
|
36
36
|
end
|
@@ -39,11 +39,12 @@ module RShade
|
|
39
39
|
type = value.is_a?(Class) ? value : value.class
|
40
40
|
memo[var_name] = {
|
41
41
|
name: var_name,
|
42
|
-
value
|
42
|
+
value: value,
|
43
43
|
type: type.to_s
|
44
44
|
}
|
45
45
|
end
|
46
|
-
hash = { source_location
|
46
|
+
hash = { source_location: source_location, local_vars: local_vars, source: {},
|
47
|
+
receiver_variables: receiver_variables }
|
47
48
|
new(hash)
|
48
49
|
end
|
49
50
|
|
data/lib/rshade/trace.rb
CHANGED
@@ -4,14 +4,14 @@ module RShade
|
|
4
4
|
class Trace
|
5
5
|
attr_reader :config, :event_store
|
6
6
|
|
7
|
-
# @param [RShade::Config,RShade::Config::
|
8
|
-
def initialize(config)
|
9
|
-
@config =
|
7
|
+
# @param [RShade::Config,RShade::Config::EventStore] config
|
8
|
+
def initialize(config: ::RShade::Config::Registry.instance.default_trace_config)
|
9
|
+
@config = config
|
10
10
|
@event_store = EventTree.new
|
11
11
|
end
|
12
12
|
|
13
|
-
def self.reveal(config
|
14
|
-
new(config).reveal(&block)
|
13
|
+
def self.reveal(config: ::RShade::Config::Registry.instance.default_trace_config, &block)
|
14
|
+
new(config: config).reveal(&block)
|
15
15
|
end
|
16
16
|
|
17
17
|
def reveal(&block)
|
@@ -25,13 +25,5 @@ module RShade
|
|
25
25
|
def show
|
26
26
|
config.formatter.call(event_store)
|
27
27
|
end
|
28
|
-
|
29
|
-
private
|
30
|
-
|
31
|
-
def fetch_config(config)
|
32
|
-
config ||= ::RShade::Config.default
|
33
|
-
config = config.value if config.is_a?(::RShade::Config)
|
34
|
-
config
|
35
|
-
end
|
36
28
|
end
|
37
29
|
end
|
@@ -9,7 +9,7 @@ module RShade
|
|
9
9
|
RETURN_EVENTS = Set[:return, :c_return, :b_return]
|
10
10
|
|
11
11
|
# @param [Enumerable<#call>, #call] observers
|
12
|
-
# @param [::RShade::Config::
|
12
|
+
# @param [::RShade::Config::EventStore] config
|
13
13
|
def initialize(observers, config)
|
14
14
|
@trace_p = TracePoint.new(*config.tp_events, &method(:process))
|
15
15
|
observers = [observers] unless observers.is_a?(Enumerable)
|
@@ -32,12 +32,12 @@ module RShade
|
|
32
32
|
private
|
33
33
|
|
34
34
|
# more info https://rubyapi.org/3.1/o/tracepoint
|
35
|
-
# @param [TracePoint]
|
36
|
-
def process(
|
35
|
+
# @param [TracePoint] trace_point
|
36
|
+
def process(trace_point)
|
37
37
|
changed
|
38
|
-
event = Event.from_trace_point(
|
39
|
-
return notify_observers(event, :enter) if CALL_EVENTS.include?(
|
40
|
-
return notify_observers(event, :leave) if RETURN_EVENTS.include?(
|
38
|
+
event = Event.from_trace_point(trace_point)
|
39
|
+
return notify_observers(event, :enter) if CALL_EVENTS.include?(trace_point.event)
|
40
|
+
return notify_observers(event, :leave) if RETURN_EVENTS.include?(trace_point.event)
|
41
41
|
|
42
42
|
notify_observers(event, :other)
|
43
43
|
end
|
data/lib/rshade/utils.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RShade
|
4
|
+
module Utils
|
5
|
+
RUBY_VERSION_PATTERN = /ruby-[0-9.]*/.freeze
|
6
|
+
|
7
|
+
def self.store_dir
|
8
|
+
File.expand_path('../../tmp', __dir__)
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.root_dir
|
12
|
+
@root_dir ||= File.expand_path('../../', __dir__)
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.default_excluded_path
|
16
|
+
[ENV['GEM_PATH'].split(':'), RUBY_VERSION_PATTERN, /internal/, %r{/gems/}].flatten.compact
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/rshade/version.rb
CHANGED
data/lib/rshade.rb
CHANGED
@@ -23,7 +23,6 @@ require 'rshade/filter/default'
|
|
23
23
|
|
24
24
|
require 'rshade/formatter/trace/string'
|
25
25
|
require 'rshade/formatter/trace/json'
|
26
|
-
require 'rshade/formatter/trace/file'
|
27
26
|
require 'rshade/formatter/trace/html'
|
28
27
|
require 'rshade/formatter/trace/stdout'
|
29
28
|
|
@@ -31,8 +30,8 @@ require 'rshade/formatter/stack/string'
|
|
31
30
|
require 'rshade/formatter/stack/stdout'
|
32
31
|
require 'rshade/formatter/stack/json'
|
33
32
|
|
34
|
-
require 'rshade/
|
35
|
-
require 'rshade/config/
|
33
|
+
require 'rshade/utils'
|
34
|
+
require 'rshade/config/event_store'
|
36
35
|
require 'rshade/config/stack_store'
|
37
36
|
require 'rshade/config/registry'
|
38
37
|
|
data/rshade.gemspec
CHANGED
@@ -25,7 +25,7 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.metadata['changelog_uri'] = 'https://github.com/gingray/rshade/CHANGELOG.md'
|
26
26
|
else
|
27
27
|
raise 'RubyGems 2.0 or newer is required to protect against ' \
|
28
|
-
|
28
|
+
'public gem pushes.'
|
29
29
|
end
|
30
30
|
|
31
31
|
# Specify which files should be added to the gem when it is released.
|
@@ -36,12 +36,11 @@ Gem::Specification.new do |spec|
|
|
36
36
|
spec.bindir = 'exe'
|
37
37
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
38
38
|
spec.require_paths = ['lib']
|
39
|
+
spec.required_ruby_version = '>= 2.7.0'
|
39
40
|
|
40
|
-
spec.
|
41
|
-
spec.
|
42
|
-
spec.
|
41
|
+
spec.add_dependency 'binding_of_caller'
|
42
|
+
spec.add_dependency 'colorize'
|
43
|
+
spec.add_dependency 'prism'
|
43
44
|
|
44
|
-
spec.
|
45
|
-
spec.add_development_dependency 'rake', '>= 12.3.3'
|
46
|
-
spec.add_development_dependency 'rspec', '~> 3.0'
|
45
|
+
spec.metadata['rubygems_mfa_required'] = 'true'
|
47
46
|
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.2.
|
4
|
+
version: 0.2.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: 2025-01-
|
11
|
+
date: 2025-01-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: binding_of_caller
|
@@ -52,48 +52,6 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: bundler
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 2.2.33
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: 2.2.33
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: rake
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - ">="
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: 12.3.3
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - ">="
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: 12.3.3
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: rspec
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - "~>"
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '3.0'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - "~>"
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '3.0'
|
97
55
|
description: https://github.com/gingray/rshade
|
98
56
|
email:
|
99
57
|
- gingray.dev@gmail.com
|
@@ -103,6 +61,7 @@ extra_rdoc_files: []
|
|
103
61
|
files:
|
104
62
|
- ".gitignore"
|
105
63
|
- ".rspec"
|
64
|
+
- ".rubocop.yml"
|
106
65
|
- ".travis.yml"
|
107
66
|
- Gemfile
|
108
67
|
- Gemfile.lock
|
@@ -113,10 +72,9 @@ files:
|
|
113
72
|
- bin/setup
|
114
73
|
- html/template.html.erb
|
115
74
|
- lib/rshade.rb
|
116
|
-
- lib/rshade/config.rb
|
75
|
+
- lib/rshade/config/event_store.rb
|
117
76
|
- lib/rshade/config/registry.rb
|
118
77
|
- lib/rshade/config/stack_store.rb
|
119
|
-
- lib/rshade/config/store.rb
|
120
78
|
- lib/rshade/core_extensions/object/reveal.rb
|
121
79
|
- lib/rshade/event.rb
|
122
80
|
- lib/rshade/event_observer.rb
|
@@ -132,18 +90,17 @@ files:
|
|
132
90
|
- lib/rshade/formatter/stack/json.rb
|
133
91
|
- lib/rshade/formatter/stack/stdout.rb
|
134
92
|
- lib/rshade/formatter/stack/string.rb
|
135
|
-
- lib/rshade/formatter/trace/file.rb
|
136
93
|
- lib/rshade/formatter/trace/html.rb
|
137
94
|
- lib/rshade/formatter/trace/json.rb
|
138
95
|
- lib/rshade/formatter/trace/stdout.rb
|
139
96
|
- lib/rshade/formatter/trace/string.rb
|
140
|
-
- lib/rshade/rails/rails.rb
|
141
97
|
- lib/rshade/rspec/rspec.rb
|
142
98
|
- lib/rshade/serializer/traversal.rb
|
143
99
|
- lib/rshade/stack.rb
|
144
100
|
- lib/rshade/stack_frame.rb
|
145
101
|
- lib/rshade/trace.rb
|
146
102
|
- lib/rshade/trace_observable.rb
|
103
|
+
- lib/rshade/utils.rb
|
147
104
|
- lib/rshade/version.rb
|
148
105
|
- rshade.gemspec
|
149
106
|
- shade.jpg
|
@@ -156,6 +113,7 @@ metadata:
|
|
156
113
|
homepage_uri: https://github.com/gingray/rshade
|
157
114
|
source_code_uri: https://github.com/gingray/rshade
|
158
115
|
changelog_uri: https://github.com/gingray/rshade/CHANGELOG.md
|
116
|
+
rubygems_mfa_required: 'true'
|
159
117
|
post_install_message:
|
160
118
|
rdoc_options: []
|
161
119
|
require_paths:
|
@@ -164,7 +122,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
164
122
|
requirements:
|
165
123
|
- - ">="
|
166
124
|
- !ruby/object:Gem::Version
|
167
|
-
version:
|
125
|
+
version: 2.7.0
|
168
126
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
169
127
|
requirements:
|
170
128
|
- - ">="
|
data/lib/rshade/config/store.rb
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RShade
|
4
|
-
class Config
|
5
|
-
class Store
|
6
|
-
attr_reader :filter_composition, :formatter, :tp_events, :custom_serializers
|
7
|
-
|
8
|
-
# @param [Hash] options
|
9
|
-
# @option options [RShade::Filter::FilterComposition] :filter_composition
|
10
|
-
# @option options [#call(event_store)] :formatter
|
11
|
-
# @option options [Array<Symbol>] :tp_events
|
12
|
-
def initialize(options = {})
|
13
|
-
@filter_composition = options.fetch(:filter_composition, default_filter_composition)
|
14
|
-
@formatter = options.fetch(:formatter, ::RShade::Formatter::Trace::Stdout)
|
15
|
-
@tp_events = options.fetch(:tp_events, %i[call return])
|
16
|
-
@custom_serializers = options.fetch(:custom_serializers, {})
|
17
|
-
end
|
18
|
-
|
19
|
-
def set_tp_events(tp_events)
|
20
|
-
@tp_events = tp_events
|
21
|
-
self
|
22
|
-
end
|
23
|
-
|
24
|
-
def add_custom_serializers(hash)
|
25
|
-
custom_serializers.merge!(hash)
|
26
|
-
self
|
27
|
-
end
|
28
|
-
|
29
|
-
def config_filter(filter_type, &block)
|
30
|
-
filter_composition.config_filter(filter_type, &block)
|
31
|
-
self
|
32
|
-
end
|
33
|
-
|
34
|
-
def set_formatter(formatter)
|
35
|
-
@formatter = formatter
|
36
|
-
self
|
37
|
-
end
|
38
|
-
|
39
|
-
private
|
40
|
-
|
41
|
-
def default_filter_composition
|
42
|
-
RShade::Filter::FilterBuilder.build([:or,
|
43
|
-
[:or, RShade::Filter::VariableFilter.new, RShade::Filter::IncludePathFilter.new], RShade::Filter::ExcludePathFilter.new])
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
data/lib/rshade/config.rb
DELETED
@@ -1,77 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RShade
|
4
|
-
class Config
|
5
|
-
RUBY_VERSION_PATTERN = /ruby-[0-9.]*/
|
6
|
-
|
7
|
-
def self.default
|
8
|
-
::RShade::Config::Store.new.set_formatter(::RShade::Formatter::Trace::Stdout.new)
|
9
|
-
.config_filter(::RShade::Filter::ExcludePathFilter) do |paths|
|
10
|
-
default_excluded_path.each do |path|
|
11
|
-
paths << path
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
# @param [RShade::Config::Store] config_store
|
17
|
-
def initialize(config_store)
|
18
|
-
@config_store = config_store
|
19
|
-
end
|
20
|
-
|
21
|
-
# @param [Hash] options
|
22
|
-
# @option options [RShade::Filter::FilterComposition] :filter_composition
|
23
|
-
# @option options [#call(event_store)] :formatter
|
24
|
-
# @option options [Array<Symbol>] :tp_events
|
25
|
-
def self.create(options = {})
|
26
|
-
new(Config::Store.new(options))
|
27
|
-
end
|
28
|
-
|
29
|
-
def tp_events(&block)
|
30
|
-
events = block.call
|
31
|
-
@config_store.set_tp_events(events)
|
32
|
-
self
|
33
|
-
end
|
34
|
-
|
35
|
-
def include_paths(&block)
|
36
|
-
@config_store.config_filter(::RShade::Filter::IncludePathFilter, &block)
|
37
|
-
self
|
38
|
-
end
|
39
|
-
|
40
|
-
def exclude_paths(&block)
|
41
|
-
@config_store.config_filter(::RShade::Filter::ExcludePathFilter, &block)
|
42
|
-
self
|
43
|
-
end
|
44
|
-
|
45
|
-
def match_variable(&block)
|
46
|
-
@config_store.config_filter(::RShade::Filter::VariableFilter, &block)
|
47
|
-
self
|
48
|
-
end
|
49
|
-
|
50
|
-
def formatter(&block)
|
51
|
-
formatter = block.call
|
52
|
-
@config_store.set_formatter(formatter)
|
53
|
-
self
|
54
|
-
end
|
55
|
-
|
56
|
-
def add_custom_serializers(hash)
|
57
|
-
@config_store.add_custom_serializers(hash)
|
58
|
-
self
|
59
|
-
end
|
60
|
-
|
61
|
-
def value
|
62
|
-
@config_store
|
63
|
-
end
|
64
|
-
|
65
|
-
def self.store_dir
|
66
|
-
File.expand_path('../../tmp', __dir__)
|
67
|
-
end
|
68
|
-
|
69
|
-
def self.root_dir
|
70
|
-
@root_dir ||= File.expand_path('../../', __dir__)
|
71
|
-
end
|
72
|
-
|
73
|
-
def self.default_excluded_path
|
74
|
-
[ENV['GEM_PATH'].split(':'), RUBY_VERSION_PATTERN, /internal/].flatten.compact
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RShade
|
4
|
-
module Formatter
|
5
|
-
module Trace
|
6
|
-
class File
|
7
|
-
attr_reader :formatter
|
8
|
-
|
9
|
-
FILE_NAME = 'stacktrace.json'
|
10
|
-
|
11
|
-
def initialize(args = {})
|
12
|
-
@formatter = args.fetch(:format, Json)
|
13
|
-
end
|
14
|
-
|
15
|
-
# @param [RShade::EventProcessor] event_store
|
16
|
-
def call(event_store)
|
17
|
-
data = formatter.call(event_store)
|
18
|
-
if formatter == Json
|
19
|
-
write_to_file(JSON.pretty_generate(data))
|
20
|
-
else
|
21
|
-
write_to_file(data.to_s)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def write_to_file(data)
|
26
|
-
::File.open(::File.join(RShade::Config.store_dir, FILE_NAME), 'w+') do |f|
|
27
|
-
f.write data
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
data/lib/rshade/rails/rails.rb
DELETED
File without changes
|