rshade 0.1.9 → 0.1.9.1

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: e5ef0c31c59c3ed46f44326e1e28f6a5b2b2ccbdbce32152e6b54233f875d6d0
4
- data.tar.gz: f394a28db1cda3274954309996eaea895bf715737f34aecbb09c0d0873fd09fb
3
+ metadata.gz: 91ab4d11c9af8066bff925ab208f10e20c5bf7fd5685418b0c8ef01880c13d2f
4
+ data.tar.gz: 7c0e95c99b1707e5290440cf3459e02cd465c653bdbfbfdc3f216d77a3647c66
5
5
  SHA512:
6
- metadata.gz: 956a68bec41feea89513eab5e0002fadb70d9d0f9e57f1c47f316d2c30c6e801cb510a80312e54b9d075c4fa7f768ad6b2acc881dc3db03680a9351abe56dda4
7
- data.tar.gz: 4bafb27714ffaf13734f99522897b3057da42f5bf4eb05929b824af9c67f19076f304373ab835f1cf0b0bb3ef5a253a1fd23ec343236596255b64f34290702b3
6
+ metadata.gz: 21fe1fa50bf9c63261fbed6651ad8999edc22734567c3f33b2ba872ba95640cb70b3cff8fa0c640fd13faa8cf73371bb107ee8d0303e3e1322bba06a87f30d58
7
+ data.tar.gz: 2b657588399858bcc1aa9f60cac2baf92ea3427b341542c40f15c7a7a26cbfb17cabfa3b98a2c5465c1905a3c8dfeb9500ed772351d89bdd7c2b6ca3ac223392
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rshade (0.1.9)
4
+ rshade (0.1.9.1)
5
5
  colorize
6
6
 
7
7
  GEM
@@ -2,7 +2,7 @@
2
2
  module RShade
3
3
  class Config
4
4
  class Store
5
- attr_reader :filter_composition, :formatter, :tp_events
5
+ attr_reader :filter_composition, :formatter, :tp_events, :custom_serializers
6
6
 
7
7
  # @param [Hash] options
8
8
  # @option options [RShade::Filter::FilterComposition] :filter_composition
@@ -12,12 +12,20 @@ module RShade
12
12
  @filter_composition = options.fetch(:filter_composition, default_filter_composition)
13
13
  @formatter = options.fetch(:formatter, ::RShade::Formatter::Stdout)
14
14
  @tp_events = options.fetch(:tp_events, [:call, :return])
15
+ @custom_serializers = options.fetch(:custom_serializers, {})
15
16
  end
16
17
 
17
18
  def set_tp_events(tp_events)
18
19
  @tp_events = tp_events
20
+ self
19
21
  end
20
22
 
23
+ def add_custom_serializers(hash)
24
+ custom_serializers.merge!(hash)
25
+ self
26
+ end
27
+
28
+
21
29
  def config_filter(filter_type, &block)
22
30
  filter_composition.config_filter(filter_type, &block)
23
31
  self
data/lib/rshade/config.rb CHANGED
@@ -51,6 +51,11 @@ module RShade
51
51
  self
52
52
  end
53
53
 
54
+ def add_custom_serializers(hash)
55
+ @config_store.add_custom_serializers(hash)
56
+ self
57
+ end
58
+
54
59
  def value
55
60
  @config_store
56
61
  end
data/lib/rshade/event.rb CHANGED
@@ -47,10 +47,6 @@ module RShade
47
47
  new(hash)
48
48
  end
49
49
 
50
- def self.create_blank(level)
51
- new({level: level}, true)
52
- end
53
-
54
50
  private
55
51
 
56
52
  def fetch(key)
@@ -3,9 +3,10 @@ module RShade
3
3
  class EventProcessor
4
4
  attr_reader :store
5
5
 
6
- def initialize(store)
6
+ def initialize(store, config)
7
7
  @store = store
8
- @var_serializer = BindingSerializer.new
8
+ custom_serializers = config.custom_serializers
9
+ @var_serializer = ::RShade::Serializer::Traversal.new(custom_serializers)
9
10
  end
10
11
 
11
12
  # @param [RShade::Event] event
@@ -11,14 +11,15 @@ module RShade
11
11
  0
12
12
  end
13
13
 
14
- private
15
- def str?(str, event_path)
16
- !event_path.include?(str)
14
+ def call(event)
15
+ event_path = event.path
16
+ !paths.any? do |path|
17
+ next str?(path, event_path) if path.is_a? String
18
+ next regexp?(path, event_path) if path.is_a? Regexp
19
+ false
20
+ end
17
21
  end
18
22
 
19
- def regexp?(regex, event_path)
20
- !regex.match?(event_path)
21
- end
22
23
  end
23
24
  end
24
25
  end
@@ -0,0 +1,47 @@
1
+ module RShade
2
+ module Serializer
3
+ class Traversal
4
+ attr_reader :types
5
+
6
+ def initialize(custom_types={})
7
+ @types = default_types.merge(custom_types)
8
+ end
9
+
10
+ def call(hash)
11
+ new_val = {}
12
+ hash.each do |name, value|
13
+ new_val[name] = traverse(value)
14
+ end
15
+ new_val
16
+ end
17
+
18
+ def default_types
19
+ {
20
+ default: ->(value) { value.to_s },
21
+ Integer => ->(value) { value },
22
+ Float => ->(value) { value },
23
+ Numeric => ->(value) { value },
24
+ String => ->(value) { value },
25
+ Hash => ->(value) do
26
+ hash = {}
27
+ value.each do |k,v|
28
+ hash[k] = traverse(v)
29
+ end
30
+ hash
31
+ end,
32
+ Array => ->(value) do
33
+ value.map { |item| traverse(item) }
34
+ end
35
+ }
36
+ end
37
+
38
+ def traverse(value)
39
+ klass = value
40
+ klass = value.class unless value.is_a?(Class)
41
+ serializer = types[klass]
42
+ serializer = types[:default] unless serializer
43
+ serializer.call(value)
44
+ end
45
+ end
46
+ end
47
+ end
data/lib/rshade/trace.rb CHANGED
@@ -13,7 +13,7 @@ module RShade
13
13
  end
14
14
 
15
15
  def reveal(&block)
16
- processor = EventProcessor.new(@event_store)
16
+ processor = EventProcessor.new(event_store, config)
17
17
  observer = EventObserver.new(config, processor)
18
18
  observable = RShade::TraceObservable.new([observer], config)
19
19
  observable.reveal &block
@@ -1,3 +1,3 @@
1
1
  module RShade
2
- VERSION = "0.1.9"
2
+ VERSION = "0.1.9.1"
3
3
  end
data/lib/rshade.rb CHANGED
@@ -5,9 +5,9 @@ require 'set'
5
5
  require 'observer'
6
6
  require 'rshade/config'
7
7
  require 'rshade/config/store'
8
+ require 'rshade/serializer/traversal'
8
9
  require 'rshade/event_tree'
9
10
  require 'rshade/event_processor'
10
- require 'rshade/binding_serializer'
11
11
  require 'rshade/event_observer'
12
12
  require 'rshade/trace_observable'
13
13
  require 'rshade/filter/abstract_filter'
@@ -27,6 +27,5 @@ require 'rshade/trace'
27
27
  require 'rshade/rspec/rspec'
28
28
  require 'rshade/version'
29
29
 
30
-
31
30
  module RShade
32
31
  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.9
4
+ version: 0.1.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Lopatin
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-03-27 00:00:00.000000000 Z
11
+ date: 2022-03-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize
@@ -85,7 +85,6 @@ files:
85
85
  - bin/setup
86
86
  - html/template.html.erb
87
87
  - lib/rshade.rb
88
- - lib/rshade/binding_serializer.rb
89
88
  - lib/rshade/config.rb
90
89
  - lib/rshade/config/store.rb
91
90
  - lib/rshade/core_extensions/object/reveal.rb
@@ -107,6 +106,7 @@ files:
107
106
  - lib/rshade/formatter/string.rb
108
107
  - lib/rshade/rails/rails.rb
109
108
  - lib/rshade/rspec/rspec.rb
109
+ - lib/rshade/serializer/traversal.rb
110
110
  - lib/rshade/trace.rb
111
111
  - lib/rshade/trace_observable.rb
112
112
  - lib/rshade/version.rb
@@ -1,35 +0,0 @@
1
- require 'date'
2
- module RShade
3
- class BindingSerializer
4
- SERIALIZE_CLASSES = [NilClass, TrueClass, FalseClass, Numeric, Time, Date, String, Symbol, Array]
5
-
6
- def initialize(opts={})
7
- end
8
-
9
- def call(trace_binding)
10
- vars = {}
11
- trace_binding.each do |name, value|
12
- if SERIALIZE_CLASSES.any? { |klass| value.is_a?(klass) }
13
- vars[name] = value
14
- elsif value.is_a?(Hash)
15
- copy = shallow_copy_of_hash(value)
16
- vars[name] = copy
17
- else
18
- class_name = value.is_a?(Class) ? value.to_s : value.class.to_s
19
- vars[name] = class_name
20
- end
21
- end
22
- vars
23
- end
24
-
25
- #TODO: work on more efficient way to serialize hash
26
- def shallow_copy_of_hash(hash)
27
- {}.tap do |new_hash|
28
- hash.each do |k,v|
29
- new_hash[k] = v.to_s
30
- end
31
- new_hash
32
- end
33
- end
34
- end
35
- end