rshade 0.1.7 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5594d3ba4348f6f4c4b73a74c223a7b30f3b7eda7216c72d0d122079cae63bf7
4
- data.tar.gz: b071916008465bed00ff107b8b88fe778235a333e1a24c74af5ea62631ec4b75
3
+ metadata.gz: f10cfe61e925b1882ff42ea7580a2a6d72b5eadd4f18831a7e52813e22d1daea
4
+ data.tar.gz: cfe32fccff6bd61114bb86d0fd0d790d66c61ca41ce7bda0fc39e03af73ddb46
5
5
  SHA512:
6
- metadata.gz: b4a81694ecce4e7063a8a8d4cd5ed758ea93ca151aa0b09cd785e281d206c4cdcdfa389237523fe05f57441c6f4ad648f5cd60e1abb46793162b2ff182965555
7
- data.tar.gz: 756a618370faa424864563640ac0389124201bc5c49eb47fdb6cae0fe8f535dadc7c97c366b6c5dfaa330700a39d9e2eaa6e9caad9538209319a7da9587c142f
6
+ metadata.gz: 34222d8c0982a0af1ccbd37a2436f3dfa58d164ad4614a51db4c2074aff55f5adc873aa89008b173a065ec83975b3e67f9266437931efc1725baf50d04638bd5
7
+ data.tar.gz: 231f085edc963e287f1e8ae1b0843567ff5857cbfd50d80e240548e143148609c44d02d76204a6dd021765785c7ce347e6d7dcdeb49a388ff08197ce52074f45
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rshade (0.1.6)
4
+ rshade (0.1.7)
5
5
  colorize
6
6
 
7
7
  GEM
@@ -0,0 +1,72 @@
1
+ <!doctype html>
2
+
3
+ <html lang="en">
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <title>RShade call trace viewer</title>
7
+ <meta name="description" content="The HTML5 Herald">
8
+ <meta name="author" content="me">
9
+ <style>
10
+ body {
11
+ overflow-x: scroll;
12
+ }
13
+ .stacktrace-line {
14
+ color: #1c1c1c;
15
+ font-family: monospace;
16
+ border: 1px solid hsla(210,50%, 50%, 1);
17
+ margin-bottom: 10px;
18
+ width: fit-content;
19
+ }
20
+ .method-line {
21
+ font-size: 1.2rem;
22
+ padding: 10px;
23
+ background: hsla(210,50%, 50%, 0.1);
24
+ }
25
+
26
+ .path-line {
27
+ padding: 10px;
28
+ font-size: 0.9rem;
29
+ background: hsla(110,50%, 50%, 0.1);
30
+ }
31
+
32
+ .vars-line {
33
+ font-size: 0.7rem;
34
+ padding: 10px;
35
+ background: hsla(60,50%, 50%, 0.1);
36
+ }
37
+
38
+ </style>
39
+ </head>
40
+ <body>
41
+ <div class="stacktrace"></div>
42
+ <script>
43
+ var data = <%=json %>;
44
+ var el = document.querySelector(".stacktrace");
45
+ for(i=0; i < data.length; i++) {
46
+ var value = data[i];
47
+ var newEl = document.createElement('div');
48
+ newEl.setAttribute("class", "stacktrace-line");
49
+ newEl.style.marginLeft = `${value.depth * 10}px`
50
+
51
+ line1 = document.createElement('div');
52
+ line1.setAttribute("class", "method-line");
53
+ line1.innerText = `${value.class}#${value.method_name}`;
54
+
55
+ var line2 = document.createElement('div');
56
+ line2.setAttribute("class", "path-line");
57
+ line2.innerText = `${value.class}#${value.full_path}`;
58
+
59
+ var line3 = document.createElement('div');
60
+ line3.setAttribute("class", "vars-line");
61
+ line3.innerText = JSON.stringify(value.vars)
62
+
63
+ newEl.appendChild(line1);
64
+ newEl.appendChild(line2);
65
+ newEl.appendChild(line3);
66
+ el.appendChild(newEl)
67
+ }
68
+ console.log(data);
69
+ </script>
70
+
71
+ </body>
72
+ </html>
@@ -1,12 +1,14 @@
1
1
  require 'colorize'
2
+ require 'erb'
2
3
  require 'rshade/configuration'
3
4
  require 'rshade/base'
4
5
  require 'rshade/event_serializer'
5
6
  require 'rshade/filter/app_filter'
6
7
  require 'rshade/formatter/string'
7
8
  require 'rshade/formatter/json'
9
+ require 'rshade/formatter/file'
10
+ require 'rshade/formatter/html'
8
11
  require 'rshade/formatter/stdout'
9
- require 'rshade/formatter/http'
10
12
  require 'rshade/event'
11
13
  require 'rshade/event_store'
12
14
  require 'rshade/trace'
@@ -35,5 +35,9 @@ module RShade
35
35
  def store_dir
36
36
  File.expand_path('../../tmp', __dir__)
37
37
  end
38
+
39
+ def root_dir
40
+ @root_dir ||= File.expand_path('../../', __dir__)
41
+ end
38
42
  end
39
43
  end
@@ -2,7 +2,7 @@ require 'date'
2
2
  module RShade
3
3
  class EventSerializer < Base
4
4
  attr_reader :evt, :level
5
- SERIALIZE_CLASSES = [NilClass, TrueClass, FalseClass, Numeric, Time, Date, String, Symbol, Array, Hash]
5
+ SERIALIZE_CLASSES = [NilClass, TrueClass, FalseClass, Numeric, Time, Date, String, Symbol, Array]
6
6
  def initialize(evt, level)
7
7
  @evt = evt
8
8
  @level = level
@@ -18,6 +18,8 @@ module RShade
18
18
  local_var = evt.binding.local_variable_get var
19
19
  if SERIALIZE_CLASSES.any? { |klass| local_var.is_a?(klass) }
20
20
  vars[var] = local_var
21
+ elsif local_var.is_a?(Hash)
22
+ vars[var] = shallow_copy_of_hash(local_var)
21
23
  else
22
24
  class_name = local_var.is_a?(Class) ? local_var.to_s : local_var.class.to_s
23
25
  vars[var] = "FILTERED[#{class_name}]"
@@ -25,5 +27,15 @@ module RShade
25
27
  end
26
28
  vars
27
29
  end
30
+
31
+ #TODO: work on more efficient way to serialize hash
32
+ def shallow_copy_of_hash(hash)
33
+ {}.tap do |new_hash|
34
+ hash.each do |k,v|
35
+ new_hash[k] = v.to_s
36
+ end
37
+ new_hash
38
+ end
39
+ end
28
40
  end
29
41
  end
@@ -0,0 +1,28 @@
1
+ module RShade
2
+ module Formatter
3
+ class File < ::RShade::Base
4
+ attr_reader :formatter, :event_store
5
+ FILE_NAME = 'stacktrace.json'.freeze
6
+
7
+ def initialize(event_store, args={})
8
+ @event_store = event_store
9
+ @formatter = args.fetch(:format, Json)
10
+ end
11
+
12
+ def call
13
+ data = formatter.call(event_store)
14
+ if formatter == Json
15
+ write_to_file(JSON.pretty_generate(data))
16
+ else
17
+ write_to_file(data.to_s)
18
+ end
19
+ end
20
+
21
+ def write_to_file(data)
22
+ ::File.open(::File.join(RShade.config.store_dir, FILE_NAME), "w+") do |f|
23
+ f.write data
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,31 @@
1
+ module RShade
2
+ module Formatter
3
+ class Html < ::RShade::Base
4
+ attr_reader :formatter, :event_store
5
+ FILE_NAME = 'stacktrace.html'.freeze
6
+ TEMPLATE = 'html/template.html.erb'
7
+
8
+ def initialize(event_store, args={})
9
+ @event_store = event_store
10
+ @formatter = args.fetch(:formatter, Json)
11
+ end
12
+
13
+ def call
14
+ data = formatter.call(event_store)
15
+ erb_template = ERB.new(template)
16
+ content = erb_template.result_with_hash({json: data.to_json})
17
+ write_to_file(content)
18
+ end
19
+
20
+ def write_to_file(data)
21
+ ::File.open(::File.join(RShade.config.store_dir, FILE_NAME), "w+") do |f|
22
+ f.write data
23
+ end
24
+ end
25
+
26
+ def template
27
+ @template ||=::File.read(::File.join(::RShade.config.root_dir, TEMPLATE))
28
+ end
29
+ end
30
+ end
31
+ end
@@ -2,7 +2,6 @@ module RShade
2
2
  module Formatter
3
3
  class Json < ::RShade::Base
4
4
  attr_reader :event_store
5
- FILE_NAME = 'stacktrace.json'.freeze
6
5
 
7
6
  def initialize(event_store)
8
7
  @event_store = event_store
@@ -17,8 +16,7 @@ module RShade
17
16
  event_store.iterate do |node, depth|
18
17
  arr << item(node)
19
18
  end
20
- write_to_file(JSON.pretty_generate(arr.sort_by { |item| item[:depth]}))
21
- arr
19
+ arr.sort_by { |item| item[:depth]}
22
20
  end
23
21
 
24
22
  def hierarchical
@@ -27,15 +25,7 @@ module RShade
27
25
  ref = hash_iterate(hash, depth)
28
26
  ref[:data] = item(node)
29
27
  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
28
+ sort_hash(hash)
39
29
  end
40
30
 
41
31
  def sort_hash(h)
@@ -1,3 +1,3 @@
1
1
  module RShade
2
- VERSION = "0.1.7"
2
+ VERSION = "0.1.8"
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.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Lopatin
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-06-24 00:00:00.000000000 Z
11
+ date: 2020-06-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize
@@ -83,6 +83,7 @@ files:
83
83
  - Rakefile
84
84
  - bin/console
85
85
  - bin/setup
86
+ - html/template.html.erb
86
87
  - lib/rshade.rb
87
88
  - lib/rshade/base.rb
88
89
  - lib/rshade/configuration.rb
@@ -90,7 +91,8 @@ files:
90
91
  - lib/rshade/event_serializer.rb
91
92
  - lib/rshade/event_store.rb
92
93
  - lib/rshade/filter/app_filter.rb
93
- - lib/rshade/formatter/http.rb
94
+ - lib/rshade/formatter/file.rb
95
+ - lib/rshade/formatter/html.rb
94
96
  - lib/rshade/formatter/json.rb
95
97
  - lib/rshade/formatter/stdout.rb
96
98
  - lib/rshade/formatter/string.rb
@@ -1,8 +0,0 @@
1
- module RShade
2
- module Formatter
3
- class Http < ::RShade::Base
4
- def call
5
- end
6
- end
7
- end
8
- end