rorvswild 1.6.2 → 1.6.3

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: 34fc75a952dcdd5b7291e2227f2f59da531413338f0fb91ea64a61245b9368af
4
- data.tar.gz: daab97444a9876ef871ca0c2832afd667cfb986fc1e101c36c97f3880f700b1a
3
+ metadata.gz: 3d75bdcf83d7aa718c5055d7860d870a79d815901d627e9829f60cc93f5288d2
4
+ data.tar.gz: 3b6d6e61cff88594c4d6d888a9597c8f2db4a600d8d260514d93c5a4e1ff7b04
5
5
  SHA512:
6
- metadata.gz: 3986c7c35162a29f6f4173fa4ce6728fea1eac8d2c4293fc275f850b885fb0eb472c4a3be85a473761295322aa10c490f2ad1e4ae198b4528075033eb8c977db
7
- data.tar.gz: 94ecd7c5f04ecbf7608f5fd37467ebfa5d49e8f6f5e50d2be4822d4cb695c65e15daa325c8843a2f04b6c841803040dfdb020e055bb961f6122101119e1e04df
6
+ metadata.gz: 7157d2f6925a01ebac1e54fb08db8017405cd00df633a736b7fcbbdfd11a9886b708ec9680c499540b36b22130744338efd1fab7159bc38fea19f333704cd619
7
+ data.tar.gz: ee290b637cba8ff57439ca673ea681d2d32fa9823127b66cf6418cbe298525c9a873bf941c40a8d37586e132df036628fdcf3c4d7d53a4e4e78ee3b2522ed061
@@ -36,7 +36,6 @@ module RorVsWild
36
36
  RorVsWild.logger.debug("Start RorVsWild #{RorVsWild::VERSION}")
37
37
  setup_plugins
38
38
  cleanup_data
39
- send_deployment
40
39
  end
41
40
 
42
41
  def load_features
@@ -160,10 +159,6 @@ module RorVsWild
160
159
  config[:ignore_exceptions].any? { |str_or_regex| str_or_regex === exception.class.to_s }
161
160
  end
162
161
 
163
- def send_deployment
164
- client.post("/deployments", deployment: Deployment.to_h)
165
- end
166
-
167
162
  #######################
168
163
  ### Private methods ###
169
164
  #######################
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "set"
2
4
  require "uri"
3
5
  require "json/ext"
@@ -27,6 +29,7 @@ module RorVsWild
27
29
  "X-Ruby-Version" => RUBY_VERSION,
28
30
  }
29
31
  @headers["X-Rails-Version"] = Rails.version if defined?(Rails)
32
+ @http_unauthorized = false
30
33
  end
31
34
 
32
35
  def post(path, data)
@@ -60,8 +63,10 @@ module RorVsWild
60
63
  end
61
64
 
62
65
  def transmit(request)
63
- if http = take_or_create_connection
64
- http.request(request)
66
+ if !@http_unauthorized && http = take_or_create_connection
67
+ response = http.request(request)
68
+ @http_unauthorized = true if response.code == "401"
69
+ response
65
70
  end
66
71
  rescue Exception => ex
67
72
  RorVsWild.logger.error(ex.full_message)
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "open3"
4
+
3
5
  module RorVsWild
4
6
  module Deployment
5
7
  def self.load_config(config)
@@ -57,15 +59,13 @@ module RorVsWild
57
59
  end
58
60
 
59
61
  def self.read_from_scalingo
60
- return unless ENV["SOURCE_VERSION"]
61
62
  @revision = ENV["SOURCE_VERSION"]
62
63
  end
63
64
 
64
65
  def self.read_from_git
65
- @revision = normalize_string(`git rev-parse HEAD`) rescue nil
66
- return unless @revision
67
- lines = `git log -1 --pretty=%an%n%ae%n%B`.lines rescue nil
68
- return unless lines
66
+ return unless @revision = normalize_string(shell("git rev-parse HEAD"))
67
+ return @revision unless log_stdout = shell("git log -1 --pretty=%an%n%ae%n%B")
68
+ lines = log_stdout.lines
69
69
  @author = normalize_string(lines[0])
70
70
  @email = normalize_string(lines[1])
71
71
  @description = lines[2..-1] && normalize_string(lines[2..-1].join)
@@ -75,8 +75,8 @@ module RorVsWild
75
75
  def self.read_from_capistrano
76
76
  return unless File.readable?("REVISION")
77
77
  return unless @revision = File.read("REVISION")
78
- lines = `git --git-dir ../../repo log --format=%an%n%ae%n%B -n 1 #{@revision}`.lines rescue nil
79
- return unless lines
78
+ return unless stdout = shell("git --git-dir ../../repo log --format=%an%n%ae%n%B -n 1 #{@revision}")
79
+ lines = stdout.lines
80
80
  @author = normalize_string(lines[0])
81
81
  @email = normalize_string(lines[1])
82
82
  @description = lines[2..-1] && normalize_string(lines[2..-1].join)
@@ -89,5 +89,10 @@ module RorVsWild
89
89
  string.empty? ? nil : string
90
90
  end
91
91
  end
92
+
93
+ def self.shell(command)
94
+ stdout, stderr, process = Open3.capture3(command) rescue nil
95
+ stdout if process && process.success?
96
+ end
92
97
  end
93
98
  end
@@ -55,8 +55,7 @@
55
55
  {{/currentRequest}}
56
56
  </div>
57
57
  <div class="rorvswild-local-panel__footer">
58
- This data is not sent to rorvswild.com. To Monitor your production environment,
59
- <a href="https://www.rorvswild.com" class="rorvswild-local-panel__footer__link">create an account</a>.
58
+ This data is not sent to rorvswild.com. <a href="https://www.rorvswild.com" class="rorvswild-local-panel__footer__link">Create an account</a> to monitor your production environment.
60
59
  </div>
61
60
  </div>
62
61
 
@@ -3,10 +3,11 @@
3
3
  /********************************************/
4
4
 
5
5
  .rorvswild-local-toggler {
6
- background: #1d242f !important;
7
- color: #80abe3 !important;
8
- box-shadow: 0 0 0 1px rgba(159, 169, 187, 0.3), 0 1px 4px 0px rgba(25, 32, 42, 0.9) !important;
9
- border-radius: 4px !important;
6
+ background: rgb(16, 20, 28) !important;
7
+ color: rgb(135,173,250) !important;
8
+ font-weight: 700 !important;
9
+ box-shadow: 0 0 0 1px rgba(69,74,84,1) inset, 0 1px 4px 0px rgba(14,18,26,0.96) !important;
10
+ border-radius: 2px !important;
10
11
  font-family: SF Mono, Menlo, Consolas, DejaVu Sans Mono, monospace !important;
11
12
  font-size: 15px !important;
12
13
  line-height: 24px !important;
@@ -19,8 +20,9 @@
19
20
  }
20
21
 
21
22
  .rorvswild-local-toggler small {
22
- color: #9fa9bb !important;
23
- font-size: 12px !important;
23
+ color: rgb(133,139,150) !important;
24
+ font-weight: 400 !important;
25
+ font-size: 10px !important;
24
26
  margin-left: 4px !important;
25
27
  display: inline-block !important;
26
28
  }
@@ -54,9 +56,10 @@
54
56
  /********************************************/
55
57
 
56
58
  .rorvswild-local-panel {
57
- background: #1d242f !important;
58
- box-shadow: 0 0 0 48px rgba(25, 32, 42, 0.9) !important;
59
- color: #eceef1 !important;
59
+ background: rgb(16,20,28) !important;
60
+ box-shadow: 0 0 0 48px rgba(69,74,84, 0.95),
61
+ 0 1px 16px 2px rgba(14,18,26,0.96) !important;
62
+ color: rgb(168,174,186) !important;
60
63
  font-family: SF Mono, Menlo, Consolas, DejaVu Sans Mono, monospace !important;
61
64
  font-size: 15px !important;
62
65
  line-height: 24px !important;
@@ -88,34 +91,35 @@
88
91
  }
89
92
 
90
93
  .rorvswild-local-panel ::-moz-selection {
91
- background: #eceef1 !important;
92
- color: #222835 !important;
94
+ background: rgb(69,74,84) !important;
95
+ color: rgb(219,234,241) !important;
93
96
  }
94
97
 
95
98
  .rorvswild-local-panel ::selection {
96
- background: #eceef1 !important;
97
- color: #222835 !important;
99
+ background: rgb(69,74,84) !important;
100
+ color: rgb(219,234,241) !important;
98
101
  }
99
102
 
100
103
  .rorvswild-local-panel small {
101
- color: #9fa9bb !important;
102
- font-size: 12px !important;
103
- margin-left: 4px !important;
104
+ color: rgb(133,139,150) !important;
105
+ font-size: 10px !important;
106
+ font-weight: 400 !important;
107
+ margin-left: 2px !important;
104
108
  }
105
109
 
106
110
  /* Panel Header */
107
111
  .rorvswild-local-panel__header {
108
- background: #212834 !important;
112
+ background: rgb(24,28,36) !important;
109
113
  z-index: 100000000000000005 !important;
110
114
  padding: 12px !important;
111
- box-shadow: 0 1px 2px 0 rgba(25, 32, 42, .8) !important;
115
+ box-shadow: 0 1px 2px 0 rgba(14,18,26, .8) !important;
112
116
  display: -webkit-box;
113
117
  display: -ms-flexbox;
114
118
  display: flex;
115
119
  }
116
120
 
117
121
  .rorvswild-local-panel__header__title {
118
- color: #9fa9bb !important;
122
+ color: rgb(168,174,186) !important;
119
123
  text-transform: uppercase !important;
120
124
  font-size: 12px !important;
121
125
  letter-spacing: 2px !important;
@@ -131,13 +135,13 @@
131
135
  stroke-width: 2 !important;
132
136
  fill: none !important;
133
137
  stroke-linecap: square !important;
134
- stroke: #9fa9bb !important;
138
+ stroke: rgb(133,139,150) !important;
135
139
  stroke-miterlimit: 10 !important;
136
140
  vertical-align: middle !important;
137
141
  }
138
142
 
139
143
  .rorvswild-local-panel svg:hover {
140
- stroke: #eceef1 !important;
144
+ stroke: rgb(193,204,214) !important;
141
145
  }
142
146
 
143
147
  .rorvswild-local-panel__logo {
@@ -161,12 +165,12 @@
161
165
 
162
166
  .rorvswild-local-panel__github svg {
163
167
  stroke: none !important;
164
- fill: #9fa9bb !important;
168
+ fill: rgb(133,139,150) !important;
165
169
  }
166
170
 
167
171
  .rorvswild-local-panel__github svg:hover {
168
172
  stroke: none !important;
169
- fill: #eceef1 !important;
173
+ fill: rgb(193,204,214) !important;
170
174
  }
171
175
 
172
176
  /* Panel Content */
@@ -179,7 +183,7 @@
179
183
  overflow-x: auto !important;
180
184
  }
181
185
 
182
- .rorvswild-local-panel__content::-webkit-scrollbar { width: 3px !important; }
186
+ .rorvswild-local-panel__content::-webkit-scrollbar { width: 4px !important; }
183
187
 
184
188
  .rorvswild-local-panel__content::-webkit-scrollbar-corner { background: transparent !important; }
185
189
 
@@ -189,8 +193,8 @@
189
193
  }
190
194
 
191
195
  .rorvswild-local-panel__content::-webkit-scrollbar-thumb {
192
- background-color: #9fa9bb !important;
193
- outline: 1px solid #9fa9bb !important;
196
+ background-color: rgb(100,106,116) !important;
197
+ outline: 1px solid rgb(100,106,116) !important;
194
198
  }
195
199
 
196
200
  /* Panel request summary */
@@ -200,30 +204,36 @@
200
204
  display: -ms-flexbox !important;
201
205
  display: flex !important;
202
206
  padding: 12px 12px 11px !important;
203
- border-bottom: 1px solid rgba(25, 32, 42, 1) !important;
207
+ border-bottom: 1px solid rgb(24,28,36) !important;
204
208
  cursor: pointer !important;
205
209
  -ms-flex-wrap: wrap !important;
206
210
  flex-wrap: wrap !important;
207
211
  }
208
212
 
209
- .rorvswild-local-panel__request:hover { background: #222835 !important; }
213
+ .rorvswild-local-panel__request:hover { background: rgb(21,25,34) !important; }
210
214
 
211
215
  .rorvswild-local-panel__request__name {
212
216
  word-break: break-all !important;
213
217
  overflow-wrap: break-word !important;
214
218
  width: 100% !important;
219
+ color: rgb(193,204,214) !important;
220
+ font-weight: 700;
215
221
  }
216
222
 
217
223
  .rorvswild-local-panel__request__path {
218
- color: #9fa9bb !important;
224
+ color: rgb(133,139,150) !important;
225
+ font-weight: 400;
219
226
  display: block !important;
220
227
  }
221
228
 
222
229
  .rorvswild-local-panel__request__started-at {
223
- color: #9fa9bb !important;
230
+ color: rgb(133,139,150) !important;
224
231
  margin-left: 12px !important;
225
232
  }
226
- .rorvswild-local-panel__request__runtime { color: #80abe3 !important; }
233
+ .rorvswild-local-panel__request__runtime {
234
+ color: rgb(135,173,250) !important;
235
+ font-weight: bold !important;
236
+ }
227
237
 
228
238
  /* Panel request details */
229
239
 
@@ -257,12 +267,12 @@ h2.rorvswild-local-panel__request__name__title {
257
267
 
258
268
  .rorvswild-local-panel__request-details__section {
259
269
  padding: 12px 12px 11px !important;
260
- border-bottom: 1px solid rgba(25, 32, 42, 1) !important;
270
+ border-bottom: 1px solid rgb(24,28,36) !important;
261
271
  display: block !important;
262
272
  }
263
273
 
264
274
  .rorvswild-local-panel__request-details__section:hover {
265
- background: #212834 !important;
275
+ background: rgb(21,25,34) !important;
266
276
  -webkit-transition: all .3s !important;
267
277
  transition: all .3s !important;
268
278
  }
@@ -281,22 +291,26 @@ h2.rorvswild-local-panel__request__name__title {
281
291
  word-break: break-all !important;
282
292
  overflow-wrap: break-word !important;
283
293
  min-width: 0 !important;
294
+ color: rgb(193,204,214) !important;
284
295
  }
285
296
 
286
297
  .rorvswild-local-panel__request-details__section__average {
287
- color: #80abe3 !important;
298
+ color: rgb(135,173,250) !important;
299
+ font-weight: 700 !important;
288
300
  width: 48px !important;
289
301
  margin:0 12px 0 0 !important;
290
302
  }
291
303
 
292
304
  .rorvswild-local-panel__request-details__section__calls {
293
- color: #9fa9bb !important;
305
+ color: rgb(168,174,186) !important;
294
306
  width: 48px !important;
295
307
  margin: 0 12px 0 0 !important;
296
308
  }
297
309
 
298
310
  .rorvswild-local-panel__request-details__section__impact {
311
+ color: rgb(193,204,214) !important;
299
312
  width: 48px !important;
313
+ font-weight: 700 !important;
300
314
  margin: 0 12px 0 0 !important;
301
315
  }
302
316
 
@@ -304,10 +318,12 @@ h2.rorvswild-local-panel__request__name__title {
304
318
  display: -webkit-box !important;
305
319
  display: -ms-flexbox !important;
306
320
  display: flex !important;
321
+ color: rgb(133,139,150) !important;
322
+ margin-top: 8px !important;
307
323
  }
308
324
 
309
325
  .rorvswild-local-panel__request-details__section__kind {
310
- background: rgba(25, 32, 42, 1) !important;
326
+ background: rgb(40,44,54) !important;
311
327
  font-size: 10px !important;
312
328
  text-transform: uppercase !important;
313
329
  text-align: center !important;
@@ -318,7 +334,7 @@ h2.rorvswild-local-panel__request__name__title {
318
334
  }
319
335
 
320
336
  .rorvswild-local-panel__request-details__section__command {
321
- color: #9fa9bb !important;
337
+ color: rgb(133,139,150) !important;
322
338
  -webkit-box-flex: 1 !important;
323
339
  -ms-flex: 1 !important;
324
340
  flex: 1 !important;
@@ -331,14 +347,14 @@ h2.rorvswild-local-panel__request__name__title {
331
347
 
332
348
  .rorvswild-local-panel__footer {
333
349
  width: 100% !important;
334
- background: #212834 !important;
335
- color: #9fa9bb !important;
350
+ background: rgb(40,44,54) !important;
351
+ color: rgb(168,174,186) !important;
336
352
  padding: 12px !important;
337
353
  text-align: center !important;
338
354
  }
339
355
 
340
356
  a.rorvswild-local-panel__footer__link {
341
- color: #eceef1 !important;
357
+ color: rgb(193,204,214) !important;
342
358
  text-decoration: underline !important;
343
359
  line-height: inherit !important;
344
360
  }
@@ -7,7 +7,7 @@ http://prismjs.com/download.html?themes=prism-twilight&languages=markup+css+clik
7
7
  */
8
8
  .rorvswild-local-panel code[class*="language-"],
9
9
  .rorvswild-local-panel pre[class*="language-"] {
10
- color: #9fa9bb !important;
10
+ color: rgb(133,139,150) !important;
11
11
  background: none !important;
12
12
  font-family: SF Mono, Menlo, Consolas, DejaVu Sans Mono, monospace !important;
13
13
  text-align: left !important;
@@ -60,7 +60,7 @@ http://prismjs.com/download.html?themes=prism-twilight&languages=markup+css+clik
60
60
  .rorvswild-local-panel .token.prolog,
61
61
  .rorvswild-local-panel .token.doctype,
62
62
  .rorvswild-local-panel .token.cdata {
63
- color: #9fa9bb !important;
63
+ color: rgb(133,139,150) !important;
64
64
  font-style: italic !important;
65
65
  opacity: 0.7 !important;
66
66
  }
@@ -77,7 +77,7 @@ http://prismjs.com/download.html?themes=prism-twilight&languages=markup+css+clik
77
77
  .rorvswild-local-panel .token.boolean,
78
78
  .rorvswild-local-panel .token.number,
79
79
  .rorvswild-local-panel .token.deleted {
80
- color: #e79199 !important;
80
+ color: rgb(195,116,112) !important;
81
81
  }
82
82
 
83
83
  .rorvswild-local-panel .token.property,
@@ -85,7 +85,7 @@ http://prismjs.com/download.html?themes=prism-twilight&languages=markup+css+clik
85
85
  .rorvswild-local-panel .token.symbol,
86
86
  .rorvswild-local-panel .token.builtin,
87
87
  .rorvswild-local-panel .token.string {
88
- color: #69b3c8 !important;
88
+ color: rgb(108,138,200) !important;
89
89
  }
90
90
 
91
91
  .rorvswild-local-panel .token.attr-name,
@@ -98,17 +98,17 @@ http://prismjs.com/download.html?themes=prism-twilight&languages=markup+css+clik
98
98
  .rorvswild-local-panel .token.atrule,
99
99
  .rorvswild-local-panel .token.attr-value,
100
100
  .rorvswild-local-panel .token.keyword {
101
- color: #e189e2 !important;
101
+ color: rgb(171,120,176) !important;
102
102
  }
103
103
 
104
104
  .rorvswild-local-panel .token.constant,
105
105
  .rorvswild-local-panel .token.regex,
106
106
  .rorvswild-local-panel .token.important {
107
- color: #bfa661 !important;
107
+ color: rgb(167,133,61) !important;
108
108
  }
109
109
 
110
110
  .rorvswild-local-panel .token.function {
111
- color: #80abe3 !important;
111
+ color: rgb(30,151,162) !important;
112
112
  }
113
113
 
114
114
  .rorvswild-local-panel .token.important,
@@ -132,5 +132,5 @@ http://prismjs.com/download.html?themes=prism-twilight&languages=markup+css+clik
132
132
  .rorvswild-local-panel .language-markup .token.tag,
133
133
  .rorvswild-local-panel .language-markup .token.attr-name,
134
134
  .rorvswild-local-panel .language-markup .token.punctuation {
135
- color: #9fa9bb !important;
135
+ color: rgb(133,139,150) !important;
136
136
  }
@@ -16,6 +16,8 @@ module RorVsWild
16
16
  section.file, section.line = job.method(:perform).source_location
17
17
  section.file = RorVsWild.agent.locator.relative_path(section.file)
18
18
  block.call
19
+ rescue Exception => ex
20
+ job.rescue_with_handler(ex) or raise
19
21
  ensure
20
22
  RorVsWild::Section.stop
21
23
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RorVsWild
2
4
  module Plugin
3
5
  class ActiveRecord
@@ -19,8 +21,8 @@ module RorVsWild
19
21
  return if IGNORED_QUERIES.include?(payload[:name])
20
22
  RorVsWild::Section.start do |section|
21
23
  section.appendable_command = APPENDABLE_QUERIES.include?(payload[:sql])
22
- section.command = payload[:sql]
23
- section.kind = "sql".freeze
24
+ section.command = normalize_sql_query(payload[:sql])
25
+ section.kind = "sql"
24
26
  end
25
27
  end
26
28
 
@@ -28,6 +30,24 @@ module RorVsWild
28
30
  return if IGNORED_QUERIES.include?(payload[:name])
29
31
  RorVsWild::Section.stop
30
32
  end
33
+
34
+ SQL_STRING_REGEX = /'((?:''|\\'|[^'])*)'/
35
+ SQL_NUMERIC_REGEX = /(?<!\w)\d+(\.\d+)?(?!\w)/
36
+ SQL_PARAMETER_REGEX = /\$\d+/
37
+ SQL_IN_REGEX = /(\bIN\s*\()([^)]+)(\))/i
38
+ SQL_ONE_LINE_COMMENT_REGEX =/--.*$/
39
+ SQL_MULTI_LINE_COMMENT_REGEX = /\/\*.*?\*\//m
40
+
41
+ def normalize_sql_query(sql)
42
+ sql = sql.to_s.gsub(SQL_STRING_REGEX, "?")
43
+ sql.gsub!(SQL_PARAMETER_REGEX, "?")
44
+ sql.gsub!(SQL_NUMERIC_REGEX, "?")
45
+ sql.gsub!(SQL_IN_REGEX, '\1?\3')
46
+ sql.gsub!(SQL_ONE_LINE_COMMENT_REGEX, "")
47
+ sql.gsub!(SQL_MULTI_LINE_COMMENT_REGEX, "")
48
+ sql.strip!
49
+ sql
50
+ end
31
51
  end
32
52
  end
33
53
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RorVsWild
2
4
  class Queue
3
5
  SLEEP_TIME = 10
@@ -56,6 +58,7 @@ module RorVsWild
56
58
  end
57
59
 
58
60
  def flush_indefinetely
61
+ client.post("/deployments", deployment: Deployment.to_h)
59
62
  sleep(SLEEP_TIME) and flush while true
60
63
  rescue Exception => ex
61
64
  RorVsWild.logger.error(ex)
@@ -61,7 +61,7 @@ module RorVsWild
61
61
  total_runtime - children_runtime
62
62
  end
63
63
 
64
- COMMAND_MAX_SIZE = 1000
64
+ COMMAND_MAX_SIZE = 1_000
65
65
 
66
66
  def command=(value)
67
67
  @command = value && value.size > COMMAND_MAX_SIZE ? value[0, COMMAND_MAX_SIZE] + " [TRUNCATED]" : value
@@ -1,3 +1,3 @@
1
1
  module RorVsWild
2
- VERSION = "1.6.2".freeze
2
+ VERSION = "1.6.3".freeze
3
3
  end
data/lib/rorvswild.rb CHANGED
@@ -68,6 +68,7 @@ module RorVsWild
68
68
 
69
69
  def self.check
70
70
  api_key = RorVsWild.agent.config[:api_key]
71
+ agent.client.instance_variable_set(:@http_unauthorized, false)
71
72
  return puts "You API key is missing and has to be defined in config/rorvswild.yml." if !api_key || api_key.empty?
72
73
  puts case response = agent.client.post("/jobs", jobs: [{sections: [], name: "RorVsWild.check", runtime: 0}])
73
74
  when Net::HTTPOK then "Connection to RorVsWild works fine !"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rorvswild
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.2
4
+ version: 1.6.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexis Bernard
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-02-23 00:00:00.000000000 Z
12
+ date: 2023-11-17 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Performances and errors insights for rails developers.
15
15
  email: