marginalia 1.5.0 → 1.9.0

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
- SHA1:
3
- metadata.gz: b4d1334e6fae088b614c33883053c675e8ce3208
4
- data.tar.gz: ea48070a0ad0b210045ff6cc8eb485d9db115e3a
2
+ SHA256:
3
+ metadata.gz: 31ba959aad96344c36a5044e5eed7affc9e837c1ebf6fefe204dc401e3c02cff
4
+ data.tar.gz: 5c84a52e9828ff87940bad7ca82ba495f59159fd2154793cc4eeafaacd47da50
5
5
  SHA512:
6
- metadata.gz: 06d3dc8986bdfc70351ece60860aa79e4822f83e0cbcc0cb8211c9197dbf4fa8320f1017f15cbfa9aac40c296ae6a37f8054aa566fac832fe2f02d628d65d073
7
- data.tar.gz: fdee2ee3f3e0bec89b52e54c22056811d7bd4e4cd167d6ef38e00446f25c16cc03f3cd730f4e8456a32ba67ff66b39046a2adb289acb0c9d4a8fc149b75957ba
6
+ metadata.gz: 422739201b1a3e455b233d37500795fb80c4d92e167e4f5c8b7f70a9ee9f5db510fcee7e6623cdea951a8c8db7929b0ce8fcf2fcc5f7fbc15af8c8cd2445a45a
7
+ data.tar.gz: f89615ffdfd2cdffe9cef3edabbaf7bc2a9f5fb4124ec03cb3b402a0a0f1368c1616ade7b2f8a18d2292324d9e63589a70b366f1fb1ec7bc72a4ce8a90f498e4
@@ -1,21 +1,24 @@
1
1
  language: ruby
2
+ sudo: false
3
+
4
+ services:
5
+ - mysql
6
+ - postgresql
2
7
 
3
8
  rvm:
4
- - 2.1
5
9
  - 2.2
6
- - 2.3.1
10
+ - 2.3
11
+ - 2.4
7
12
 
8
- sudo: false
13
+ services:
14
+ - mysql
15
+ - postgresql
9
16
 
10
- script: bundle exec rake db:reset test:all
17
+ script: "bundle exec rake db:reset test:all"
11
18
 
12
- env:
13
- - "RAILS_VERSION=3.1.12"
14
- - "RAILS_VERSION=3.2.19"
15
- - "RAILS_VERSION=4.0.8"
16
- - "RAILS_VERSION=4.1.8"
17
- - "RAILS_VERSION=4.2.0"
18
- - "RAILS_VERSION=3.2.19 TEST_RAILS_API=true"
19
- - "RAILS_VERSION=4.0.8 TEST_RAILS_API=true"
20
- - "RAILS_VERSION=4.1.8 TEST_RAILS_API=true"
21
- - "RAILS_VERSION=4.2.0 TEST_RAILS_API=true"
19
+ gemfile:
20
+ - gemfiles/4.2.gemfile
21
+ - gemfiles/4.2.api.gemfile
22
+ - gemfiles/5.0.gemfile
23
+ - gemfiles/5.1.gemfile
24
+ - gemfiles/5.2.gemfile
data/Gemfile CHANGED
@@ -9,6 +9,8 @@ if "4.2.5" > version
9
9
  else
10
10
  gem 'mysql2', '>= 0.3.13', '< 0.5'
11
11
  end
12
+ gem 'pg', '~> 0.15'
13
+ gem 'sqlite3', '~> 1.3.6'
12
14
 
13
15
  rails = case version
14
16
  when "master"
@@ -22,3 +24,7 @@ gem "rails", rails
22
24
  if ENV["TEST_RAILS_API"] == "true"
23
25
  gem "rails-api", "~> 0.2.1"
24
26
  end
27
+
28
+ if RUBY_VERSION.start_with?('2.3')
29
+ gem 'mysql'
30
+ end
data/README.md CHANGED
@@ -56,6 +56,8 @@ Optionally, you can set the application name shown in the log like so in an init
56
56
  For Rails 3 applications, the name will default to your Rails application name.
57
57
  For Rails 2 applications, "rails" is used as the default application name.
58
58
 
59
+ #### Components
60
+
59
61
  You can also configure the components of the comment that will be appended,
60
62
  by setting `Marginalia::Comment.components`. By default, this is set to:
61
63
 
@@ -100,6 +102,37 @@ With ActiveRecord >= 3.2.19:
100
102
 
101
103
  Pull requests for other included comment components are welcome.
102
104
 
105
+ #### Prepend comments
106
+
107
+ By default marginalia appends the comments at the end of the query. Certain databases, such as MySQL will truncate
108
+ the query text. This is the case for slow query logs and the results of querying some InnoDB internal tables where the
109
+ length of the query is more than 1024 bytes.
110
+
111
+ In order to not lose the marginalia comments from your logs, you can prepend the comments using this option:
112
+
113
+ Marginalia::Comment.prepend_comment = true
114
+
115
+ #### Inline query annotations
116
+
117
+ In addition to the request or job-level component-based annotations,
118
+ Marginalia may be used to add inline annotations to specific queries using a
119
+ block-based API.
120
+
121
+ For example, the following code:
122
+
123
+ Marginalia.with_annotation("foo") do
124
+ Account.where(queenbee_id: 1234567890).first
125
+ end
126
+
127
+ will issue this query:
128
+
129
+ Account Load (0.3ms) SELECT `accounts`.* FROM `accounts`
130
+ WHERE `accounts`.`queenbee_id` = 1234567890
131
+ LIMIT 1
132
+ /*application:BCX,controller:project_imports,action:show*/ /*foo*/
133
+
134
+ Nesting `with_annotation` blocks will concatenate the comment strings.
135
+
103
136
  ## Contributing
104
137
 
105
138
  Start by bundling and creating the test database:
data/Rakefile CHANGED
@@ -5,26 +5,26 @@ task :default => ['test:all']
5
5
 
6
6
  namespace :test do
7
7
  desc "test all drivers"
8
- task :all => [:mysql, :mysql2, :postgresql, :sqlite]
8
+ task :all => [:mysql2, :postgresql, :sqlite]
9
9
 
10
10
  desc "test mysql driver"
11
11
  task :mysql do
12
- sh "DRIVER=mysql ruby -Ilib -Itest test/*_test.rb"
12
+ sh "DRIVER=mysql bundle exec ruby -Ilib -Itest test/*_test.rb"
13
13
  end
14
14
 
15
15
  desc "test mysql2 driver"
16
16
  task :mysql2 do
17
- sh "DRIVER=mysql2 ruby -Ilib -Itest test/*_test.rb"
17
+ sh "DRIVER=mysql2 bundle exec ruby -Ilib -Itest test/*_test.rb"
18
18
  end
19
-
19
+
20
20
  desc "test PostgreSQL driver"
21
21
  task :postgresql do
22
- sh "DRIVER=postgresql DB_USERNAME=postgres ruby -Ilib -Itest test/*_test.rb"
22
+ sh "DRIVER=postgresql DB_USERNAME=postgres bundle exec ruby -Ilib -Itest test/*_test.rb"
23
23
  end
24
-
24
+
25
25
  desc "test sqlite3 driver"
26
26
  task :sqlite do
27
- sh "DRIVER=sqlite3 ruby -Ilib -Itest test/*_test.rb"
27
+ sh "DRIVER=sqlite3 bundle exec ruby -Ilib -Itest test/*_test.rb"
28
28
  end
29
29
  end
30
30
 
@@ -62,5 +62,4 @@ namespace :db do
62
62
  sh 'psql -d postgres -U postgres -c "DROP DATABASE IF EXISTS marginalia_test"'
63
63
  end
64
64
  end
65
-
66
65
  end
@@ -0,0 +1,9 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem "mysql2", "~> 0.3.13"
4
+ gem "pg", "~> 0.15"
5
+ gem "sqlite3", "~> 1.3.6"
6
+ gem "rails", "= 4.2.11.1"
7
+ gem "rails-api", "~> 0.2.1"
8
+
9
+ gemspec :path => "../"
@@ -0,0 +1,8 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem "mysql2", "~> 0.3.13"
4
+ gem "pg", "~> 0.15"
5
+ gem "sqlite3", "~> 1.3.6"
6
+ gem "rails", "= 4.2.11.1"
7
+
8
+ gemspec :path => "../"
@@ -0,0 +1,8 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem "mysql2", "~> 0.3.13"
4
+ gem "pg", "~> 0.15"
5
+ gem "sqlite3", "~> 1.3.6"
6
+ gem "rails", "= 5.0.7.2"
7
+
8
+ gemspec :path => "../"
@@ -0,0 +1,8 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem "mysql2", "~> 0.3.13"
4
+ gem "pg", "~> 0.15"
5
+ gem "sqlite3", "~> 1.3.6"
6
+ gem "rails", "= 5.1.6.2"
7
+
8
+ gemspec :path => "../"
@@ -0,0 +1,8 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem "mysql2", "~> 0.4.10"
4
+ gem "pg", "~> 0.15"
5
+ gem "sqlite3", "~> 1.3.6"
6
+ gem "rails", "= 5.2.2.1"
7
+
8
+ gemspec :path => "../"
@@ -1,5 +1,6 @@
1
1
  require 'marginalia/railtie'
2
2
  require 'marginalia/comment'
3
+ require 'marginalia/sidekiq_instrumentation'
3
4
 
4
5
  module Marginalia
5
6
  mattr_accessor :application_name
@@ -48,10 +49,22 @@ module Marginalia
48
49
  Marginalia::Comment.update_adapter!(self)
49
50
  comment = Marginalia::Comment.construct_comment
50
51
  if comment.present? && !sql.include?(comment)
51
- "#{sql} /*#{comment}*/"
52
- else
53
- sql
52
+ sql = if Marginalia::Comment.prepend_comment
53
+ "/*#{comment}*/ #{sql}"
54
+ else
55
+ "#{sql} /*#{comment}*/"
56
+ end
57
+ end
58
+ inline_comment = Marginalia::Comment.construct_inline_comment
59
+ if inline_comment.present? && !sql.include?(inline_comment)
60
+ sql = if Marginalia::Comment.prepend_comment
61
+ "/*#{inline_comment}*/ #{sql}"
62
+ else
63
+ "#{sql} /*#{inline_comment}*/"
64
+ end
54
65
  end
66
+
67
+ sql
55
68
  end
56
69
 
57
70
  def execute_with_marginalia(sql, name = nil)
@@ -63,9 +76,9 @@ module Marginalia
63
76
  end
64
77
 
65
78
  if ActiveRecord::VERSION::MAJOR >= 5
66
- def exec_query_with_marginalia(sql, name = 'SQL', binds = [], options = {})
79
+ def exec_query_with_marginalia(sql, name = 'SQL', binds = [], **options)
67
80
  options[:prepare] ||= false
68
- exec_query_without_marginalia(annotate_sql(sql), name, binds, options)
81
+ exec_query_without_marginalia(annotate_sql(sql), name, binds, **options)
69
82
  end
70
83
  end
71
84
 
@@ -100,4 +113,11 @@ module Marginalia
100
113
  Marginalia::Comment.clear!
101
114
  end
102
115
  end
116
+
117
+ def self.with_annotation(comment, &block)
118
+ Marginalia::Comment.inline_annotations.push(comment)
119
+ block.call if block.present?
120
+ ensure
121
+ Marginalia::Comment.inline_annotations.pop
122
+ end
103
123
  end
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'socket'
2
4
 
3
5
  module Marginalia
4
6
  module Comment
5
- mattr_accessor :components, :lines_to_ignore
7
+ mattr_accessor :components, :lines_to_ignore, :prepend_comment
6
8
  Marginalia::Comment.components ||= [:application, :controller, :action]
7
9
 
8
10
  def self.update!(controller = nil)
@@ -18,17 +20,30 @@ module Marginalia
18
20
  end
19
21
 
20
22
  def self.construct_comment
21
- ret = ''
23
+ ret = String.new
22
24
  self.components.each do |c|
23
25
  component_value = self.send(c)
24
26
  if component_value.present?
25
- ret << "#{c.to_s}:#{component_value.to_s},"
27
+ ret << "#{c}:#{component_value},"
26
28
  end
27
29
  end
28
30
  ret.chop!
31
+ ret = self.escape_sql_comment(ret)
29
32
  ret
30
33
  end
31
34
 
35
+ def self.construct_inline_comment
36
+ return nil if inline_annotations.none?
37
+ escape_sql_comment(inline_annotations.join)
38
+ end
39
+
40
+ def self.escape_sql_comment(str)
41
+ while str.include?('/*') || str.include?('*/')
42
+ str = str.gsub('/*', '').gsub('*/', '')
43
+ end
44
+ str
45
+ end
46
+
32
47
  def self.clear!
33
48
  self.marginalia_controller = nil
34
49
  end
@@ -88,8 +103,13 @@ module Marginalia
88
103
  marginalia_controller.action_name if marginalia_controller.respond_to? :action_name
89
104
  end
90
105
 
106
+ def self.sidekiq_job
107
+ marginalia_job["class"] if marginalia_job && marginalia_job.respond_to?(:[])
108
+ end
109
+
91
110
  def self.line
92
- Marginalia::Comment.lines_to_ignore ||= /\.rvm|gem|vendor\/|marginalia|rbenv/
111
+ Marginalia::Comment.lines_to_ignore ||= /\.rvm|gem|vendor\/|marginalia|rbenv|monitor\.rb.*mon_synchronize/
112
+
93
113
  last_line = caller.detect do |line|
94
114
  line !~ Marginalia::Comment.lines_to_ignore
95
115
  end
@@ -146,6 +166,10 @@ module Marginalia
146
166
  marginalia_adapter.pool.spec.config
147
167
  end
148
168
  end
169
+
170
+ def self.inline_annotations
171
+ Thread.current[:marginalia_inline_annotations] ||= []
172
+ end
149
173
  end
150
174
 
151
175
  end
@@ -0,0 +1,25 @@
1
+ module Marginalia
2
+
3
+ # Alternative to ActiveJob Instrumentation for Sidekiq.
4
+ # Apt for Instrumenting Sidekiq with Rails version < 4.2.
5
+ module SidekiqInstrumentation
6
+
7
+ class Middleware
8
+ def call(worker, msg, queue)
9
+ Marginalia::Comment.update_job! msg
10
+ yield
11
+ ensure
12
+ Marginalia::Comment.clear_job!
13
+ end
14
+ end
15
+
16
+ def self.enable!
17
+ Sidekiq.configure_server do |config|
18
+ config.server_middleware do |chain|
19
+ chain.add Marginalia::SidekiqInstrumentation::Middleware
20
+ end
21
+ end
22
+ end
23
+ end
24
+
25
+ end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |gem|
2
2
  gem.authors = ["Noah Lorang", "Nick Quaranto", "Taylor Weibley"]
3
- gem.email = ["noah@37signals.com", "github@arthurnn.com"]
3
+ gem.email = ["arthurnn@github.com"]
4
4
  gem.homepage = "https://github.com/basecamp/marginalia"
5
5
 
6
6
  gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
@@ -8,18 +8,18 @@ Gem::Specification.new do |gem|
8
8
  gem.test_files = `git ls-files -- {test}/*`.split("\n")
9
9
  gem.name = "marginalia"
10
10
  gem.require_paths = ["lib"]
11
- gem.version = "1.5.0"
11
+ gem.version = "1.9.0"
12
12
  gem.license = "MIT"
13
13
 
14
14
  gem.add_runtime_dependency "actionpack", ">= 2.3"
15
15
  gem.add_runtime_dependency "activerecord", ">= 2.3"
16
16
  gem.add_development_dependency "rake"
17
- gem.add_development_dependency "mysql"
18
17
  gem.add_development_dependency "mysql2"
19
18
  gem.add_development_dependency "pg"
20
19
  gem.add_development_dependency "sqlite3"
21
20
  gem.add_development_dependency "minitest"
22
21
  gem.add_development_dependency "mocha"
22
+ gem.add_development_dependency "sidekiq"
23
23
 
24
24
  gem.summary = gem.description = %q{Attach comments to your ActiveRecord queries.}
25
25
  end
@@ -18,11 +18,13 @@ def adapter_pool_available?
18
18
  end
19
19
 
20
20
  require "minitest/autorun"
21
- require 'mocha/test_unit'
21
+ require "mocha/minitest"
22
22
  require 'logger'
23
23
  require 'pp'
24
24
  require 'active_record'
25
25
  require 'action_controller'
26
+ require 'sidekiq'
27
+ require 'sidekiq/testing'
26
28
 
27
29
  if request_id_available?
28
30
  require 'action_dispatch/middleware/request_id'
@@ -64,7 +66,11 @@ end
64
66
  class PostsController < ActionController::Base
65
67
  def driver_only
66
68
  ActiveRecord::Base.connection.execute "select id from posts"
67
- render :nothing => true
69
+ if Gem::Version.new(Rails::VERSION::STRING) >= Gem::Version.new('5')
70
+ render body: nil
71
+ else
72
+ render nothing: true
73
+ end
68
74
  end
69
75
  end
70
76
 
@@ -83,6 +89,13 @@ if active_job_available?
83
89
  end
84
90
  end
85
91
 
92
+ class PostsSidekiqJob
93
+ include Sidekiq::Worker
94
+ def perform
95
+ Post.first
96
+ end
97
+ end
98
+
86
99
  if using_rails_api?
87
100
  class PostsApiController < ActionController::API
88
101
  def driver_only
@@ -101,7 +114,6 @@ end
101
114
 
102
115
  Marginalia::Railtie.insert
103
116
 
104
-
105
117
  class MarginaliaTest < MiniTest::Test
106
118
  def setup
107
119
  @queries = []
@@ -109,6 +121,7 @@ class MarginaliaTest < MiniTest::Test
109
121
  @queries << args.last[:sql]
110
122
  end
111
123
  @env = Rack::MockRequest.env_for('/')
124
+ ActiveJob::Base.queue_adapter = :inline
112
125
  end
113
126
 
114
127
  def test_double_annotate
@@ -270,6 +283,89 @@ class MarginaliaTest < MiniTest::Test
270
283
  Post.first
271
284
  refute_match %{job:PostsJob}, @queries.last
272
285
  end
286
+
287
+ def test_active_job_with_sidekiq
288
+ Marginalia::Comment.components = [:job, :sidekiq_job]
289
+ PostsJob.perform_later
290
+ assert_match %{job:PostsJob}, @queries.first
291
+
292
+ Post.first
293
+ refute_match %{job:PostsJob}, @queries.last
294
+ end
295
+ end
296
+
297
+ def test_sidekiq_job
298
+ Marginalia::Comment.components = [:sidekiq_job]
299
+ Marginalia::SidekiqInstrumentation.enable!
300
+
301
+ # Test harness does not run Sidekiq middlewares by default so include testing middleware.
302
+ Sidekiq::Testing.server_middleware do |chain|
303
+ chain.add Marginalia::SidekiqInstrumentation::Middleware
304
+ end
305
+
306
+ Sidekiq::Testing.fake!
307
+ PostsSidekiqJob.perform_async
308
+ PostsSidekiqJob.drain
309
+ assert_match %{sidekiq_job:PostsSidekiqJob}, @queries.first
310
+
311
+ Post.first
312
+ refute_match %{sidekiq_job:PostsSidekiqJob}, @queries.last
313
+ end
314
+
315
+ def test_good_comment
316
+ assert_equal Marginalia::Comment.escape_sql_comment('app:foo'), 'app:foo'
317
+ end
318
+
319
+ def test_bad_comments
320
+ assert_equal Marginalia::Comment.escape_sql_comment('*/; DROP TABLE USERS;/*'), '; DROP TABLE USERS;'
321
+ assert_equal Marginalia::Comment.escape_sql_comment('**//; DROP TABLE USERS;/*'), '; DROP TABLE USERS;'
322
+ end
323
+
324
+ def test_inline_annotations
325
+ Marginalia.with_annotation("foo") do
326
+ Post.first
327
+ end
328
+ Post.first
329
+ assert_match %r{/\*foo\*/$}, @queries.first
330
+ refute_match %r{/\*foo\*/$}, @queries.last
331
+ # Assert we're not adding an empty comment, either
332
+ refute_match %r{/\*\s*\*/$}, @queries.last
333
+ end
334
+
335
+ def test_nested_inline_annotations
336
+ Marginalia.with_annotation("foo") do
337
+ Marginalia.with_annotation("bar") do
338
+ Post.first
339
+ end
340
+ end
341
+ assert_match %r{/\*foobar\*/$}, @queries.first
342
+ end
343
+
344
+ def test_bad_inline_annotations
345
+ Marginalia.with_annotation("*/; DROP TABLE USERS;/*") do
346
+ Post.first
347
+ end
348
+ Marginalia.with_annotation("**//; DROP TABLE USERS;//**") do
349
+ Post.first
350
+ end
351
+ assert_match %r{/\*; DROP TABLE USERS;\*/$}, @queries.first
352
+ assert_match %r{/\*; DROP TABLE USERS;\*/$}, @queries.last
353
+ end
354
+
355
+ def test_inline_annotations_are_deduped
356
+ Marginalia.with_annotation("foo") do
357
+ ActiveRecord::Base.connection.execute "select id from posts /*foo*/"
358
+ end
359
+ assert_match %r{select id from posts /\*foo\*/ /\*application:rails\*/$}, @queries.first
360
+ end
361
+
362
+ def test_add_comments_to_beginning_of_query
363
+ Marginalia::Comment.prepend_comment = true
364
+
365
+ ActiveRecord::Base.connection.execute "select id from posts"
366
+ assert_match %r{/\*application:rails\*/ select id from posts$}, @queries.first
367
+ ensure
368
+ Marginalia::Comment.prepend_comment = nil
273
369
  end
274
370
 
275
371
  def teardown
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: marginalia
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Noah Lorang
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2017-09-19 00:00:00.000000000 Z
13
+ date: 2020-08-05 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: actionpack
@@ -55,7 +55,7 @@ dependencies:
55
55
  - !ruby/object:Gem::Version
56
56
  version: '0'
57
57
  - !ruby/object:Gem::Dependency
58
- name: mysql
58
+ name: mysql2
59
59
  requirement: !ruby/object:Gem::Requirement
60
60
  requirements:
61
61
  - - ">="
@@ -69,7 +69,7 @@ dependencies:
69
69
  - !ruby/object:Gem::Version
70
70
  version: '0'
71
71
  - !ruby/object:Gem::Dependency
72
- name: mysql2
72
+ name: pg
73
73
  requirement: !ruby/object:Gem::Requirement
74
74
  requirements:
75
75
  - - ">="
@@ -83,7 +83,7 @@ dependencies:
83
83
  - !ruby/object:Gem::Version
84
84
  version: '0'
85
85
  - !ruby/object:Gem::Dependency
86
- name: pg
86
+ name: sqlite3
87
87
  requirement: !ruby/object:Gem::Requirement
88
88
  requirements:
89
89
  - - ">="
@@ -97,7 +97,7 @@ dependencies:
97
97
  - !ruby/object:Gem::Version
98
98
  version: '0'
99
99
  - !ruby/object:Gem::Dependency
100
- name: sqlite3
100
+ name: minitest
101
101
  requirement: !ruby/object:Gem::Requirement
102
102
  requirements:
103
103
  - - ">="
@@ -111,7 +111,7 @@ dependencies:
111
111
  - !ruby/object:Gem::Version
112
112
  version: '0'
113
113
  - !ruby/object:Gem::Dependency
114
- name: minitest
114
+ name: mocha
115
115
  requirement: !ruby/object:Gem::Requirement
116
116
  requirements:
117
117
  - - ">="
@@ -125,7 +125,7 @@ dependencies:
125
125
  - !ruby/object:Gem::Version
126
126
  version: '0'
127
127
  - !ruby/object:Gem::Dependency
128
- name: mocha
128
+ name: sidekiq
129
129
  requirement: !ruby/object:Gem::Requirement
130
130
  requirements:
131
131
  - - ">="
@@ -140,8 +140,7 @@ dependencies:
140
140
  version: '0'
141
141
  description: Attach comments to your ActiveRecord queries.
142
142
  email:
143
- - noah@37signals.com
144
- - github@arthurnn.com
143
+ - arthurnn@github.com
145
144
  executables: []
146
145
  extensions: []
147
146
  extra_rdoc_files: []
@@ -153,10 +152,16 @@ files:
153
152
  - LICENSE
154
153
  - README.md
155
154
  - Rakefile
155
+ - gemfiles/4.2.api.gemfile
156
+ - gemfiles/4.2.gemfile
157
+ - gemfiles/5.0.gemfile
158
+ - gemfiles/5.1.gemfile
159
+ - gemfiles/5.2.gemfile
156
160
  - init.rb
157
161
  - lib/marginalia.rb
158
162
  - lib/marginalia/comment.rb
159
163
  - lib/marginalia/railtie.rb
164
+ - lib/marginalia/sidekiq_instrumentation.rb
160
165
  - marginalia.gemspec
161
166
  - test/query_comments_test.rb
162
167
  homepage: https://github.com/basecamp/marginalia
@@ -178,8 +183,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
178
183
  - !ruby/object:Gem::Version
179
184
  version: '0'
180
185
  requirements: []
181
- rubyforge_project:
182
- rubygems_version: 2.6.11
186
+ rubygems_version: 3.1.2
183
187
  signing_key:
184
188
  specification_version: 4
185
189
  summary: Attach comments to your ActiveRecord queries.