exception-track 0.6.0 → 1.2.0

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: d153785e412ef19575e9fa1c1c09efd6e4c6641ca6b7ef0f2874ed8c48ded09a
4
- data.tar.gz: ec5ffb28de5d0e292edcd088156163158ace9068487759df0aaaf8e658595c90
3
+ metadata.gz: 032c9ba1ad0589f704bedbff866d3bab2aae870abc44251b2e8b5f504732fe77
4
+ data.tar.gz: 72946a5e0284dac9fd318671aa46f2322c10522010a6d2c076024801d7749be9
5
5
  SHA512:
6
- metadata.gz: 2570f322779022af1c78361dff981300b7967c0fb4fa1710be7571945fc56431d9c54bf2a2ac9aa0a5d8d02d7e6c351ac6ced157d9dd992d43d4396da1a4cc4c
7
- data.tar.gz: 32544198077f5147a86adafdd65f5dad1a71c82f893bb80a9ed2f2bb432f2ffd081e277cbe580ae4b10c7ab44097537a9f66021eff4368dbc721f77aa203232c
6
+ metadata.gz: 4e2fe6f4660aec15140e9fa70f1876a51d78e1c61fdc98cfadfaaee08a5426fc3ddba66e6b3b858cc119293add6503a95bd3934de779bdcb22cb23ad0bfbfe61
7
+ data.tar.gz: 3807967a319b57e6e7a1fe1dc0647e3bbb4496729b47ddd392d9a36973f4d76c7470dfb646c085a841d9921b5295e8e6e6de170534a55d51bcd739295cdebbb6
data/README.md CHANGED
@@ -1,5 +1,4 @@
1
- ExceptionTrack
2
- --------------
1
+ ## ExceptionTrack
3
2
 
4
3
  Tracking exceptions for Rails application store them in database.
5
4
 
@@ -7,7 +6,7 @@ This gem is base on [exception_notification](https://github.com/smartinez87/exce
7
6
 
8
7
  [中文介绍和使用说明](https://ruby-china.org/topics/32325)
9
8
 
10
- [![Gem Version](https://badge.fury.io/rb/exception-track.svg)](https://badge.fury.io/rb/exception-track) [![Build Status](https://travis-ci.org/rails-engine/exception-track.svg)](https://travis-ci.org/rails-engine/exception-track) [![Code Climate](https://codeclimate.com/github/rails-engine/exception-track/badges/gpa.svg)](https://codeclimate.com/github/rails-engine/exception-track) [![codecov.io](https://codecov.io/github/rails-engine/exception-track/coverage.svg?branch=master)](https://codecov.io/github/rails-engine/exception-track?branch=master) [![](http://inch-ci.org/github/rails-engine/exception-track.svg?branch=master)](http://inch-ci.org/github/rails-engine/exception-track?branch=master)
9
+ [![Gem Version](https://badge.fury.io/rb/exception-track.svg)](https://badge.fury.io/rb/exception-track) [![build](https://github.com/rails-engine/exception-track/workflows/build/badge.svg)](https://github.com/rails-engine/exception-track/actions?query=workflow%3Abuild) [![codecov.io](https://codecov.io/github/rails-engine/exception-track/coverage.svg?branch=master)](https://codecov.io/github/rails-engine/exception-track?branch=master)
11
10
 
12
11
  ![2017-02-17 12 35 18](https://cloud.githubusercontent.com/assets/5518/23052599/8e267c02-f50d-11e6-8d6e-cef0cc1991b7.png)
13
12
 
@@ -41,6 +40,12 @@ Rails.application.routes.draw do
41
40
  end
42
41
  ```
43
42
 
43
+ Migrate database:
44
+
45
+ ```shell
46
+ bundle exec rails db:migrate
47
+ ```
48
+
44
49
  Now you can open: http://localhost:3000/exception-track
45
50
 
46
51
  ## Configuration
@@ -1,2 +0,0 @@
1
- //= link_directory ../javascripts/exception-track.js
2
- //= link_directory ../stylesheets/exception-track.css
@@ -1,27 +1,78 @@
1
+ :root {
2
+ --body-background-color: #eee;
3
+ --card-background-color: #fff;
4
+ --card-border-color: #fff;
5
+ --card-shadow-color: rgba(200, 200, 200, 0.26);
6
+ --text-color: #333;
7
+ --text-color1: #666;
8
+ --text-color2: #999;
9
+ --link-color: #364cc9;
10
+ --table-background-color1: #f5f5f5;
11
+ --table-border-color: #f0f0f0;
12
+ --input-border-color: #ddd;
13
+ --button-background-color: #fff;
14
+ --button-border-color: #eee;
15
+ --button-text-color: #555;
16
+ --button-hover-background-color: #f7f7f7;
17
+ --button-hover-border-color: #eee;
18
+ --button-danger-color: #f85149;
19
+ --button-danger-hover-background-color: #f85149;
20
+ --button-danger-hover-color: #fff;
21
+ --pre-background-color: #f7f7f7;
22
+ --notice-color: #fff;
23
+ --notice-background-color: #3CBD46;
24
+ }
25
+
26
+ @media (prefers-color-scheme: dark) {
27
+ :root {
28
+ --body-background-color: #0d1117;
29
+ --card-background-color: rgba(200, 200, 200, 0.02);
30
+ --card-border-color: #30363d;
31
+ --card-shadow-color: rgba(0, 0, 0, 0.16);
32
+ --text-color: #c9d1d9;
33
+ --text-color1: #999;
34
+ --text-color2: #888;
35
+ --link-color: #58a6ff;
36
+ --table-background-color1: #161b22;
37
+ --table-border-color: #30363d;
38
+ --input-border-color: #333;
39
+ --button-background-color: #21262d;
40
+ --button-border-color: #30363d;
41
+ --button-text-color: #c9d1d9;
42
+ --button-hover-background-color: #30363d;
43
+ --button-hover-border-color: #8b949e;
44
+ --pre-background-color: #161b22;
45
+ --notice-color: #3CBD46;
46
+ --notice-background-color: #3cbd4621;
47
+ }
48
+ }
1
49
 
2
50
  body {
3
51
  margin: 0;
4
52
  padding: 20px 0;
5
- background-color: #eee;
53
+ background-color: var(--body-background-color);
6
54
  }
7
55
 
8
56
  body, textarea {
9
57
  font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", Arial, Helvetica, sans-serif;
10
58
  font-size: 14px;
11
59
  line-height: 1.4;
12
- color: #333;
60
+ color: var(--text-color);
13
61
  }
14
62
 
15
63
  .footer {
16
64
  padding: 15px;
17
65
  text-align: center;
18
- color: #999;
66
+ color: var(--text-color2);
67
+ }
68
+
69
+ .footer a:link, .footer a:visited {
70
+ color: var(--text-color1);
71
+ text-decoration: underline;
19
72
  }
20
- .footer a:link,
21
- .footer a:visited { color: #666; text-decoration: underline;}
22
73
 
23
74
  a, a:visited, a:active {
24
- color: #364cc9;
75
+ color: var(--link-color);
25
76
  text-decoration: none;
26
77
  }
27
78
 
@@ -34,15 +85,15 @@ table {
34
85
  border-collapse: collapse;
35
86
  border-spacing: 0;
36
87
  margin-bottom: 20px;
88
+ border: 1px solid var(--table-border-color);
89
+ border-radius: 3px;
37
90
  }
38
91
 
39
- th {
40
- text-align: left;
41
- border-bottom: solid 1px #e0e0e0;
92
+ td.date {
93
+ width: 170px;
94
+ font-size: 12px;
42
95
  }
43
96
 
44
- td.date { width: 150px; font-size: 12px; }
45
-
46
97
  h1 {
47
98
  margin-top: 0;
48
99
  font-size: 20px;
@@ -66,29 +117,28 @@ ul {
66
117
  table td, table th {
67
118
  padding: 10px 15px;
68
119
  }
69
- th { background: #f5f5f5; border-bottom: 1px solid #e0e0e0; }
70
- td {
71
- border-top: solid 1px #e0e0e0;
120
+
121
+ th {
122
+ text-align: left;
123
+ background: var(--table-background-color1);
124
+ border-bottom: 1px solid var(--table-border-color);
72
125
  }
73
126
 
74
- pre {
75
- background-color: #eee;
76
- padding: 10px;
77
- white-space: pre-wrap;
78
- word-break: break-word;
127
+ td {
128
+ border-top: solid 1px var(--table-border-color);
79
129
  }
80
130
 
81
131
  textarea {
82
132
  width: 100%;
83
133
  height: 100px;
84
- border: solid 1px #ddd;
134
+ border: solid 1px var(--input-border-color);
85
135
  padding: 10px;
86
136
  }
87
137
 
88
138
  hr {
89
139
  border: none;
90
140
  height: 0;
91
- border-top: solid 1px #ddd;
141
+ border-top: solid 1px var(--input-border-color);
92
142
  margin-bottom: 15px;
93
143
  }
94
144
 
@@ -107,16 +157,29 @@ hr {
107
157
  -ms-user-select: none;
108
158
  user-select: none;
109
159
  border-radius: 3px;
110
- border: 1px solid #ccc;
160
+ transition: .2s cubic-bezier(.3, 0, .5, 1);
161
+ transition-property: color, background-color, border-color;
162
+ border: 1px solid var(--button-border-color);
111
163
  padding: 6px 16px;
112
- color: #555 !important;
164
+ color: var(--button-text-color) !important;
113
165
  outline: 0 !important;
114
- background: #FFF;
166
+ background: var(--button-background-color);
115
167
  }
116
- .btn:hover { text-decoration: none !important; background: #f7f7f7; }
117
- .btn-danger { background: #fff; color: #E33F00 !important; border-color: #E33F00;}
168
+
169
+ .btn:hover {
170
+ text-decoration: none !important;
171
+ background: var(--button-hover-background-color);
172
+ }
173
+
174
+ .btn-danger {
175
+ background: var(--button-background-color);
176
+ color: var(--button-danger-color) !important;
177
+ border-color: var(--button-border-color);
178
+ }
179
+
118
180
  .btn-danger:hover {
119
- background: #FCEDEC;
181
+ background: var(--button-danger-hover-background-color);
182
+ color: var(--button-danger-hover-color) !important;
120
183
  }
121
184
 
122
185
  .container {
@@ -124,8 +187,9 @@ hr {
124
187
  margin-left: auto;
125
188
  margin-right: auto;
126
189
  padding: 20px;
127
- background-color: #fff;
128
- box-shadow: 0 1px 8px rgba(200, 200, 200, 0.26);
190
+ background-color: var(--card-background-color);
191
+ box-shadow: 0 1px 8px var(--card-shadow-color);
192
+ border: 1px solid var(--card-border-color);
129
193
  border-radius: 3px;
130
194
  }
131
195
 
@@ -140,49 +204,67 @@ hr {
140
204
  height: 34px;
141
205
  line-height: 34px;
142
206
  }
143
- .toolbar form { display: inline; }
144
- .toolbar .pull-right { float: right; }
207
+
208
+ .toolbar form {
209
+ display: inline;
210
+ }
211
+
212
+ .toolbar .pull-right {
213
+ float: right;
214
+ }
145
215
 
146
216
  #notice {
147
217
  padding: 8px 15px;
148
- background: #3CBD46;
149
- color: #fff;
218
+ background: var(--notice-background-color);
219
+ color: var(--notice-color);
150
220
  margin-bottom: 15px;
151
221
  border-radius: 3px;
152
222
  }
153
223
 
154
224
  pre {
155
- background: #f7f7f7;
225
+ white-space: pre-wrap;
226
+ word-break: break-word;
227
+ background: var(--pre-background-color);
156
228
  padding: 25px;
157
229
  border-radius: 3px;
158
230
  font-size: 12px;
159
231
  font-family: Menlo, Monaco, Consolas, monospace;
160
232
  }
161
233
 
162
- h1 { font-size: 16px; }
234
+ h1 {
235
+ font-size: 16px;
236
+ }
163
237
 
164
238
  .pagination {
165
239
  padding-bottom: 15px;
166
240
  font-size: 14px;
167
241
  }
168
242
 
169
- .pagination li { display: inline; }
243
+ .pagination li {
244
+ display: inline;
245
+ }
170
246
 
171
247
  .pagination a {
172
248
  display: inline-block;
173
249
  padding: 5px 10px;
174
- border: 1px solid #eee;
175
- color: #555;
250
+ border-radius: 3px;
251
+ border: 1px solid var(--button-border-color);
252
+ color: var(--button-text-color);
253
+ background: var(--button-background-color);
176
254
  text-decoration: none;
177
255
  }
256
+
178
257
  .pagination a:hover {
179
- background: #f7f7f7;
258
+ background: var(--button-hover-background-color);
259
+ color: var(--button-hover-color);
260
+ border-color: var(--button-hover-border-color);
180
261
  }
181
- .pagination em,
182
- .pagination .current {
262
+
263
+ .pagination em, .pagination .current {
264
+ border-radius: 3px;
183
265
  display: inline-block;
184
266
  padding: 5px 10px;
185
- border: 1px solid #f0f0f0;
186
- background: #f0f0f0;
267
+ border: 1px solid var(--button-hover-border-color);
268
+ background: var(--button-hover-background-color);
187
269
  font-style: normal;
188
- }
270
+ }
@@ -3,7 +3,7 @@
3
3
  module ExceptionTrack
4
4
  class LogsController < ActionController::Base
5
5
  layout "exception-track/application"
6
- before_action :set_log, only: %i[show destroy]
6
+ before_action :set_log, only: :show
7
7
 
8
8
  # GET /exception_logs
9
9
  def index
@@ -12,7 +12,7 @@ module ExceptionTrack
12
12
 
13
13
  def export
14
14
  @logs = Log.order("id desc").where("created_at >= ?", 3.months.ago)
15
- send_data JSON.pretty_generate(@logs.as_json(only: [:title, :body, :created_at, :updated_at])), filename: "#{Date.current}.json", disposition: "attachment"
15
+ send_data JSON.pretty_generate(@logs.as_json(only: %i[title body created_at updated_at])), filename: "#{Date.current}.json", disposition: "attachment"
16
16
  end
17
17
 
18
18
  # GET /exception_logs/1
@@ -25,7 +25,6 @@ module ExceptionTrack
25
25
  end
26
26
 
27
27
  private
28
-
29
28
  # Use callbacks to share common setup or constraints between actions.
30
29
  def set_log
31
30
  @log = Log.find(params[:id])
@@ -6,7 +6,7 @@
6
6
  }
7
7
  </script>
8
8
  <div class="toolbar">
9
- <%= @logs.total_count %> exceptions
9
+ <a class="btn" href="/">Back to App</a>
10
10
 
11
11
  <div class="pull-right">
12
12
  <%= form_tag(export_logs_path, method: 'post') do %>
@@ -21,6 +21,7 @@
21
21
  <% if @logs.blank? %>
22
22
  <div class="no-record">No exceptions.</div>
23
23
  <% else %>
24
+ <h1><%= pluralize(@logs.total_count, 'exception') %></h1>
24
25
  <%= paginate @logs %>
25
26
 
26
27
  <table class="table table-borded tabl">
@@ -9,10 +9,15 @@ ExceptionTrack.configure do
9
9
  end
10
10
 
11
11
  # ExceptionNotification.configure do |config|
12
- # config.ignored_exceptions += %w(ActionView::TemplateError
13
- # ActionController::InvalidAuthenticityToken
14
- # ActionController::BadRequest
15
- # ActionView::MissingTemplate
16
- # ActionController::UrlGenerationError
17
- # ActionController::UnknownFormat)
12
+ # config.ignored_exceptions += %w[
13
+ # ActionView::TemplateError
14
+ # ActionController::InvalidAuthenticityToken
15
+ # ActionController::BadRequest
16
+ # ActionView::MissingTemplate
17
+ # ActionController::UrlGenerationError
18
+ # ActionController::UnknownFormat
19
+ # ActionController::InvalidCrossOriginRequest
20
+ # ActionController::ParameterMissing
21
+ # Mime::Type::InvalidMimeType
22
+ # ]
18
23
  # end
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class CreateExceptionTrackLogs < ActiveRecord::Migration[5.0]
3
+ class CreateExceptionTrackLogs < ActiveRecord::Migration[5.2]
4
4
  def change
5
5
  create_table :exception_tracks do |t|
6
6
  t.string :title
7
- t.text :body, limit: 16777215
7
+ t.text :body, limit: 16_777_215
8
8
 
9
9
  t.timestamps
10
10
  end
@@ -2,6 +2,7 @@
2
2
 
3
3
  require "exception-track/version"
4
4
  require "exception-track/configuration"
5
+ require "exception-track/log_subscriber"
5
6
  require "exception-track/engine"
6
7
 
7
8
  require "exception_notification"
@@ -14,13 +15,14 @@ module ExceptionTrack
14
15
  class << self
15
16
  def config
16
17
  return @config if defined?(@config)
18
+
17
19
  @config = Configuration.new
18
20
  @config.environments = %i[development production]
19
21
  @config
20
22
  end
21
23
 
22
24
  def configure(&block)
23
- config.instance_exec(&block)
25
+ config.instance_eval(&block)
24
26
  end
25
27
  end
26
28
  end
@@ -8,6 +8,7 @@ module ExceptionTrack
8
8
 
9
9
  def enabled_env?(env)
10
10
  return false if env.blank?
11
+
11
12
  environments.include?(env.to_sym)
12
13
  end
13
14
  end
@@ -3,5 +3,11 @@
3
3
  module ExceptionTrack
4
4
  class Engine < ::Rails::Engine
5
5
  isolate_namespace ExceptionTrack
6
+
7
+ initializer "exception-track.assets.precompile", group: :all do |app|
8
+ app.config.assets.precompile += %w[exception-track/application.css]
9
+ end
10
+
11
+ ExceptionTrack::LogSubscriber.attach_to :exception_track
6
12
  end
7
13
  end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ExceptionTrack
4
+ class LogSubscriber < ActiveSupport::LogSubscriber
5
+ # ActiveSupport::Notifications.instrument('track.exception_track', action: action)
6
+ def track(event)
7
+ prefix = color("ExceptionTrack", CYAN)
8
+ title = color(event.payload[:title], RED)
9
+ debug " #{prefix} track db (#{event.duration.round(1)}ms)"
10
+ end
11
+ end
12
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ExceptionTrack
4
- VERSION = "0.6.0"
4
+ VERSION = "1.2.0"
5
5
  end
@@ -2,27 +2,31 @@
2
2
 
3
3
  module ExceptionNotifier
4
4
  class ExceptionTrackNotifier < ExceptionNotifier::BaseNotifier
5
- def initialize(_options); end
5
+ def initialize(_opts); end
6
6
 
7
- def call(exception, _options = {})
7
+ def call(exception, opts = {})
8
8
  return unless ExceptionTrack.config.enabled_env?(Rails.env)
9
9
 
10
10
  # send the notification
11
11
  title = exception.message || "None"
12
-
13
12
  messages = []
14
- messages << headers_for_env(_options[:env])
15
- messages << ""
16
- messages << "--------------------------------------------------"
17
- messages << ""
18
- messages << exception.inspect
19
- unless exception.backtrace.blank?
20
- messages << "\n"
21
- messages << exception.backtrace
22
- end
23
13
 
24
- ExceptionTrack::Log.create(title: title[0, 200], body: messages.join("\n"))
25
- rescue => e
14
+ ActiveSupport::Notifications.instrument("track.exception_track", title: title) do
15
+ messages << headers_for_env(opts[:env])
16
+ messages << ""
17
+ messages << "--------------------------------------------------"
18
+ messages << ""
19
+ messages << exception.inspect
20
+ unless exception.backtrace.blank?
21
+ messages << "\n"
22
+ messages << exception.backtrace
23
+ end
24
+
25
+ Rails.logger.silence do
26
+ ExceptionTrack::Log.create(title: title[0, 200], body: messages.join("\n"))
27
+ end
28
+ end
29
+ rescue StandardError => e
26
30
  errs = []
27
31
  errs << "-- [ExceptionTrack] create error ---------------------------"
28
32
  errs << e.message.indent(2)
@@ -43,9 +47,7 @@ module ExceptionNotifier
43
47
  headers = []
44
48
  headers << "Method: #{env['REQUEST_METHOD']}"
45
49
  headers << "URL: #{env['REQUEST_URI']}"
46
- if env['REQUEST_METHOD'].downcase != "get"
47
- headers << "Parameters:\n#{pretty_hash(parameters.except(:controller, :action), 13)}"
48
- end
50
+ headers << "Parameters:\n#{pretty_hash(parameters.except(:controller, :action), 13)}" if env["REQUEST_METHOD"].downcase != "get"
49
51
  headers << "Controller: #{parameters['controller']}##{parameters['action']}"
50
52
  headers << "RequestId: #{env['action_dispatch.request_id']}"
51
53
  headers << "User-Agent: #{env['HTTP_USER_AGENT']}"
@@ -59,11 +61,11 @@ module ExceptionNotifier
59
61
 
60
62
  def filter_parameters(env)
61
63
  parameters = env["action_dispatch.request.parameters"] || {}
62
- parameter_filter = ActionDispatch::Http::ParameterFilter.new(env["action_dispatch.parameter_filter"] || [])
63
- return parameter_filter.filter(parameters)
64
- rescue => e
64
+ parameter_filter = ActiveSupport::ParameterFilter.new(env["action_dispatch.parameter_filter"] || [])
65
+ parameter_filter.filter(parameters)
66
+ rescue StandardError => e
65
67
  Rails.logger.error "filter_parameters error: #{e.inspect}"
66
- return parameters
68
+ parameters
67
69
  end
68
70
 
69
71
  def pretty_hash(params, indent = 0)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exception-track
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Lee
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-31 00:00:00.000000000 Z
11
+ date: 2020-12-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: exception_notification
@@ -44,28 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '4.0'
47
+ version: '5.2'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '4.0'
55
- - !ruby/object:Gem::Dependency
56
- name: mysql2
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
54
+ version: '5.2'
69
55
  description: Tracking exceptions for Rails application store them in database by exception_notification
70
56
  gem.
71
57
  email:
@@ -89,6 +75,7 @@ files:
89
75
  - lib/exception-track.rb
90
76
  - lib/exception-track/configuration.rb
91
77
  - lib/exception-track/engine.rb
78
+ - lib/exception-track/log_subscriber.rb
92
79
  - lib/exception-track/version.rb
93
80
  - lib/exception_notifier/exception_track_notifier.rb
94
81
  - lib/generators/exception_track/install_generator.rb
@@ -96,7 +83,7 @@ homepage: https://github.com/rails-engine/exception-track
96
83
  licenses:
97
84
  - MIT
98
85
  metadata: {}
99
- post_install_message:
86
+ post_install_message:
100
87
  rdoc_options: []
101
88
  require_paths:
102
89
  - lib
@@ -111,8 +98,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
111
98
  - !ruby/object:Gem::Version
112
99
  version: '0'
113
100
  requirements: []
114
- rubygems_version: 3.0.1
115
- signing_key:
101
+ rubygems_version: 3.1.4
102
+ signing_key:
116
103
  specification_version: 4
117
104
  summary: Tracking exceptions for Rails application store them in database.
118
105
  test_files: []