rshade 0.1.7 → 0.1.8

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: 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