sidekiq 5.0.0 → 6.0.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of sidekiq might be problematic. Click here for more details.

Files changed (79) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +61 -0
  3. data/.github/issue_template.md +3 -1
  4. data/.gitignore +1 -1
  5. data/.standard.yml +20 -0
  6. data/6.0-Upgrade.md +70 -0
  7. data/COMM-LICENSE +12 -10
  8. data/Changes.md +169 -1
  9. data/Ent-2.0-Upgrade.md +37 -0
  10. data/Ent-Changes.md +76 -0
  11. data/Gemfile +16 -21
  12. data/Gemfile.lock +196 -0
  13. data/LICENSE +1 -1
  14. data/Pro-4.0-Upgrade.md +35 -0
  15. data/Pro-5.0-Upgrade.md +25 -0
  16. data/Pro-Changes.md +137 -1
  17. data/README.md +18 -30
  18. data/Rakefile +6 -8
  19. data/bin/sidekiqload +28 -24
  20. data/bin/sidekiqmon +9 -0
  21. data/lib/generators/sidekiq/templates/worker_spec.rb.erb +1 -1
  22. data/lib/generators/sidekiq/templates/worker_test.rb.erb +1 -1
  23. data/lib/generators/sidekiq/worker_generator.rb +12 -14
  24. data/lib/sidekiq.rb +69 -49
  25. data/lib/sidekiq/api.rb +216 -160
  26. data/lib/sidekiq/cli.rb +174 -207
  27. data/lib/sidekiq/client.rb +55 -51
  28. data/lib/sidekiq/delay.rb +24 -4
  29. data/lib/sidekiq/exception_handler.rb +12 -16
  30. data/lib/sidekiq/extensions/action_mailer.rb +10 -20
  31. data/lib/sidekiq/extensions/active_record.rb +9 -7
  32. data/lib/sidekiq/extensions/class_methods.rb +9 -7
  33. data/lib/sidekiq/extensions/generic_proxy.rb +4 -4
  34. data/lib/sidekiq/fetch.rb +5 -6
  35. data/lib/sidekiq/job_logger.rb +42 -14
  36. data/lib/sidekiq/job_retry.rb +71 -57
  37. data/lib/sidekiq/launcher.rb +74 -60
  38. data/lib/sidekiq/logger.rb +69 -0
  39. data/lib/sidekiq/manager.rb +12 -15
  40. data/lib/sidekiq/middleware/chain.rb +3 -2
  41. data/lib/sidekiq/middleware/i18n.rb +5 -7
  42. data/lib/sidekiq/monitor.rb +148 -0
  43. data/lib/sidekiq/paginator.rb +11 -12
  44. data/lib/sidekiq/processor.rb +126 -82
  45. data/lib/sidekiq/rails.rb +24 -32
  46. data/lib/sidekiq/redis_connection.rb +46 -14
  47. data/lib/sidekiq/scheduled.rb +50 -25
  48. data/lib/sidekiq/testing.rb +35 -27
  49. data/lib/sidekiq/testing/inline.rb +2 -1
  50. data/lib/sidekiq/util.rb +20 -14
  51. data/lib/sidekiq/version.rb +2 -1
  52. data/lib/sidekiq/web.rb +45 -53
  53. data/lib/sidekiq/web/action.rb +14 -10
  54. data/lib/sidekiq/web/application.rb +83 -58
  55. data/lib/sidekiq/web/helpers.rb +105 -67
  56. data/lib/sidekiq/web/router.rb +18 -15
  57. data/lib/sidekiq/worker.rb +144 -41
  58. data/sidekiq.gemspec +16 -27
  59. data/web/assets/javascripts/application.js +0 -0
  60. data/web/assets/javascripts/dashboard.js +21 -23
  61. data/web/assets/stylesheets/application.css +35 -2
  62. data/web/assets/stylesheets/bootstrap.css +2 -2
  63. data/web/locales/ar.yml +1 -0
  64. data/web/locales/en.yml +2 -0
  65. data/web/locales/es.yml +4 -3
  66. data/web/locales/ja.yml +7 -4
  67. data/web/views/_footer.erb +4 -1
  68. data/web/views/_nav.erb +3 -17
  69. data/web/views/busy.erb +5 -1
  70. data/web/views/layout.erb +1 -1
  71. data/web/views/queue.erb +1 -0
  72. data/web/views/queues.erb +2 -0
  73. data/web/views/retries.erb +4 -0
  74. metadata +25 -171
  75. data/.travis.yml +0 -18
  76. data/bin/sidekiqctl +0 -99
  77. data/lib/sidekiq/core_ext.rb +0 -119
  78. data/lib/sidekiq/logging.rb +0 -106
  79. data/lib/sidekiq/middleware/server/active_record.rb +0 -22
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
- require 'securerandom'
3
- require 'sidekiq/middleware/chain'
2
+
3
+ require "securerandom"
4
+ require "sidekiq/middleware/chain"
4
5
 
5
6
  module Sidekiq
6
7
  class Client
7
-
8
8
  ##
9
9
  # Define client-side middleware:
10
10
  #
@@ -38,7 +38,7 @@ module Sidekiq
38
38
  # Generally this is only needed for very large Sidekiq installs processing
39
39
  # thousands of jobs per second. I don't recommend sharding unless you
40
40
  # cannot scale any other way (e.g. splitting your app into smaller apps).
41
- def initialize(redis_pool=nil)
41
+ def initialize(redis_pool = nil)
42
42
  @redis_pool = redis_pool || Thread.current[:sidekiq_via_pool] || Sidekiq.redis_pool
43
43
  end
44
44
 
@@ -52,6 +52,11 @@ module Sidekiq
52
52
  # retry - whether to retry this job if it fails, default true or an integer number of retries
53
53
  # backtrace - whether to save any error backtrace, default false
54
54
  #
55
+ # If class is set to the class name, the jobs' options will be based on Sidekiq's default
56
+ # worker options. Otherwise, they will be based on the job class's options.
57
+ #
58
+ # Any options valid for a worker class's sidekiq_options are also available here.
59
+ #
55
60
  # All options must be strings, not symbols. NB: because we are serializing to JSON, all
56
61
  # symbols in 'args' will be converted to strings. Note that +backtrace: true+ can take quite a bit of
57
62
  # space in Redis; a large volume of failing jobs can start Redis swapping if you aren't careful.
@@ -63,18 +68,19 @@ module Sidekiq
63
68
  #
64
69
  def push(item)
65
70
  normed = normalize_item(item)
66
- payload = process_single(item['class'.freeze], normed)
71
+ payload = process_single(item["class"], normed)
67
72
 
68
73
  if payload
69
74
  raw_push([payload])
70
- payload['jid'.freeze]
75
+ payload["jid"]
71
76
  end
72
77
  end
73
78
 
74
79
  ##
75
- # Push a large number of jobs to Redis. In practice this method is only
76
- # useful if you are pushing thousands of jobs or more. This method
77
- # cuts out the redis network round trip latency.
80
+ # Push a large number of jobs to Redis. This method cuts out the redis
81
+ # network round trip latency. I wouldn't recommend pushing more than
82
+ # 1000 per call but YMMV based on network quality, size of job args, etc.
83
+ # A large number of jobs can cause a bit of Redis command processing latency.
78
84
  #
79
85
  # Takes the same arguments as #push except that args is expected to be
80
86
  # an Array of Arrays. All other keys are duplicated for each job. Each job
@@ -84,19 +90,19 @@ module Sidekiq
84
90
  # Returns an array of the of pushed jobs' jids. The number of jobs pushed can be less
85
91
  # than the number given if the middleware stopped processing for one or more jobs.
86
92
  def push_bulk(items)
87
- arg = items['args'.freeze].first
93
+ arg = items["args"].first
88
94
  return [] unless arg # no jobs to push
89
- raise ArgumentError, "Bulk arguments must be an Array of Arrays: [[1], [2]]" if !arg.is_a?(Array)
95
+ raise ArgumentError, "Bulk arguments must be an Array of Arrays: [[1], [2]]" unless arg.is_a?(Array)
90
96
 
91
97
  normed = normalize_item(items)
92
- payloads = items['args'.freeze].map do |args|
93
- copy = normed.merge('args'.freeze => args, 'jid'.freeze => SecureRandom.hex(12), 'enqueued_at'.freeze => Time.now.to_f)
94
- result = process_single(items['class'.freeze], copy)
95
- result ? result : nil
96
- end.compact
97
-
98
- raw_push(payloads) if !payloads.empty?
99
- payloads.collect { |payload| payload['jid'.freeze] }
98
+ payloads = items["args"].map { |args|
99
+ copy = normed.merge("args" => args, "jid" => SecureRandom.hex(12), "enqueued_at" => Time.now.to_f)
100
+ result = process_single(items["class"], copy)
101
+ result || nil
102
+ }.compact
103
+
104
+ raw_push(payloads) unless payloads.empty?
105
+ payloads.collect { |payload| payload["jid"] }
100
106
  end
101
107
 
102
108
  # Allows sharding of jobs across any number of Redis instances. All jobs
@@ -114,15 +120,13 @@ module Sidekiq
114
120
  def self.via(pool)
115
121
  raise ArgumentError, "No pool given" if pool.nil?
116
122
  current_sidekiq_pool = Thread.current[:sidekiq_via_pool]
117
- raise RuntimeError, "Sidekiq::Client.via is not re-entrant" if current_sidekiq_pool && current_sidekiq_pool != pool
118
123
  Thread.current[:sidekiq_via_pool] = pool
119
124
  yield
120
125
  ensure
121
- Thread.current[:sidekiq_via_pool] = nil
126
+ Thread.current[:sidekiq_via_pool] = current_sidekiq_pool
122
127
  end
123
128
 
124
129
  class << self
125
-
126
130
  def push(item)
127
131
  new.push(item)
128
132
  end
@@ -140,14 +144,14 @@ module Sidekiq
140
144
  # Messages are enqueued to the 'default' queue.
141
145
  #
142
146
  def enqueue(klass, *args)
143
- klass.client_push('class'.freeze => klass, 'args'.freeze => args)
147
+ klass.client_push("class" => klass, "args" => args)
144
148
  end
145
149
 
146
150
  # Example usage:
147
151
  # Sidekiq::Client.enqueue_to(:queue_name, MyWorker, 'foo', 1, :bat => 'bar')
148
152
  #
149
153
  def enqueue_to(queue, klass, *args)
150
- klass.client_push('queue'.freeze => queue, 'class'.freeze => klass, 'args'.freeze => args)
154
+ klass.client_push("queue" => queue, "class" => klass, "args" => args)
151
155
  end
152
156
 
153
157
  # Example usage:
@@ -158,8 +162,8 @@ module Sidekiq
158
162
  now = Time.now.to_f
159
163
  ts = (int < 1_000_000_000 ? now + int : int)
160
164
 
161
- item = { 'class'.freeze => klass, 'args'.freeze => args, 'at'.freeze => ts, 'queue'.freeze => queue }
162
- item.delete('at'.freeze) if ts <= now
165
+ item = {"class" => klass, "args" => args, "at" => ts, "queue" => queue}
166
+ item.delete("at") if ts <= now
163
167
 
164
168
  klass.client_push(item)
165
169
  end
@@ -184,25 +188,25 @@ module Sidekiq
184
188
  end
185
189
 
186
190
  def atomic_push(conn, payloads)
187
- if payloads.first['at'.freeze]
188
- conn.zadd('schedule'.freeze, payloads.map do |hash|
189
- at = hash.delete('at'.freeze).to_s
191
+ if payloads.first["at"]
192
+ conn.zadd("schedule", payloads.map { |hash|
193
+ at = hash.delete("at").to_s
190
194
  [at, Sidekiq.dump_json(hash)]
191
- end)
195
+ })
192
196
  else
193
- q = payloads.first['queue'.freeze]
197
+ queue = payloads.first["queue"]
194
198
  now = Time.now.to_f
195
- to_push = payloads.map do |entry|
196
- entry['enqueued_at'.freeze] = now
199
+ to_push = payloads.map { |entry|
200
+ entry["enqueued_at"] = now
197
201
  Sidekiq.dump_json(entry)
198
- end
199
- conn.sadd('queues'.freeze, q)
200
- conn.lpush("queue:#{q}", to_push)
202
+ }
203
+ conn.sadd("queues", queue)
204
+ conn.lpush("queue:#{queue}", to_push)
201
205
  end
202
206
  end
203
207
 
204
208
  def process_single(worker_class, item)
205
- queue = item['queue'.freeze]
209
+ queue = item["queue"]
206
210
 
207
211
  middleware.invoke(worker_class, item, queue, @redis_pool) do
208
212
  item
@@ -210,25 +214,25 @@ module Sidekiq
210
214
  end
211
215
 
212
216
  def normalize_item(item)
213
- raise(ArgumentError, "Job must be a Hash with 'class' and 'args' keys: { 'class' => SomeWorker, 'args' => ['bob', 1, :foo => 'bar'] }") unless item.is_a?(Hash) && item.has_key?('class'.freeze) && item.has_key?('args'.freeze)
214
- raise(ArgumentError, "Job args must be an Array") unless item['args'].is_a?(Array)
215
- raise(ArgumentError, "Job class must be either a Class or String representation of the class name") unless item['class'.freeze].is_a?(Class) || item['class'.freeze].is_a?(String)
216
- raise(ArgumentError, "Job 'at' must be a Numeric timestamp") if item.has_key?('at'.freeze) && !item['at'].is_a?(Numeric)
217
- #raise(ArgumentError, "Arguments must be native JSON types, see https://github.com/mperham/sidekiq/wiki/Best-Practices") unless JSON.load(JSON.dump(item['args'])) == item['args']
218
-
219
- normalized_hash(item['class'.freeze])
220
- .each{ |key, value| item[key] = value if item[key].nil? }
221
-
222
- item['class'.freeze] = item['class'.freeze].to_s
223
- item['queue'.freeze] = item['queue'.freeze].to_s
224
- item['jid'.freeze] ||= SecureRandom.hex(12)
225
- item['created_at'.freeze] ||= Time.now.to_f
217
+ raise(ArgumentError, "Job must be a Hash with 'class' and 'args' keys: { 'class' => SomeWorker, 'args' => ['bob', 1, :foo => 'bar'] }") unless item.is_a?(Hash) && item.key?("class") && item.key?("args")
218
+ raise(ArgumentError, "Job args must be an Array") unless item["args"].is_a?(Array)
219
+ raise(ArgumentError, "Job class must be either a Class or String representation of the class name") unless item["class"].is_a?(Class) || item["class"].is_a?(String)
220
+ raise(ArgumentError, "Job 'at' must be a Numeric timestamp") if item.key?("at") && !item["at"].is_a?(Numeric)
221
+ # raise(ArgumentError, "Arguments must be native JSON types, see https://github.com/mperham/sidekiq/wiki/Best-Practices") unless JSON.load(JSON.dump(item['args'])) == item['args']
222
+
223
+ normalized_hash(item["class"])
224
+ .each { |key, value| item[key] = value if item[key].nil? }
225
+
226
+ item["class"] = item["class"].to_s
227
+ item["queue"] = item["queue"].to_s
228
+ item["jid"] ||= SecureRandom.hex(12)
229
+ item["created_at"] ||= Time.now.to_f
226
230
  item
227
231
  end
228
232
 
229
233
  def normalized_hash(item_class)
230
234
  if item_class.is_a?(Class)
231
- raise(ArgumentError, "Message must include a Sidekiq::Worker class, not class name: #{item_class.ancestors.inspect}") if !item_class.respond_to?('get_sidekiq_options'.freeze)
235
+ raise(ArgumentError, "Message must include a Sidekiq::Worker class, not class name: #{item_class.ancestors.inspect}") unless item_class.respond_to?("get_sidekiq_options")
232
236
  item_class.get_sidekiq_options
233
237
  else
234
238
  Sidekiq.default_worker_options
@@ -1,21 +1,41 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Sidekiq
2
4
  module Extensions
3
-
4
5
  def self.enable_delay!
5
6
  if defined?(::ActiveSupport)
7
+ require "sidekiq/extensions/active_record"
8
+ require "sidekiq/extensions/action_mailer"
9
+
10
+ # Need to patch Psych so it can autoload classes whose names are serialized
11
+ # in the delayed YAML.
12
+ Psych::Visitors::ToRuby.prepend(Sidekiq::Extensions::PsychAutoload)
13
+
6
14
  ActiveSupport.on_load(:active_record) do
7
- require 'sidekiq/extensions/active_record'
8
15
  include Sidekiq::Extensions::ActiveRecord
9
16
  end
10
17
  ActiveSupport.on_load(:action_mailer) do
11
- require 'sidekiq/extensions/action_mailer'
12
18
  extend Sidekiq::Extensions::ActionMailer
13
19
  end
14
20
  end
15
21
 
16
- require 'sidekiq/extensions/class_methods'
22
+ require "sidekiq/extensions/class_methods"
17
23
  Module.__send__(:include, Sidekiq::Extensions::Klass)
18
24
  end
19
25
 
26
+ module PsychAutoload
27
+ def resolve_class(klass_name)
28
+ return nil if !klass_name || klass_name.empty?
29
+ # constantize
30
+ names = klass_name.split("::")
31
+ names.shift if names.empty? || names.first.empty?
32
+
33
+ names.inject(Object) do |constant, name|
34
+ constant.const_defined?(name) ? constant.const_get(name) : constant.const_missing(name)
35
+ end
36
+ rescue NameError
37
+ super
38
+ end
39
+ end
20
40
  end
21
41
  end
@@ -1,31 +1,27 @@
1
1
  # frozen_string_literal: true
2
- require 'sidekiq'
2
+
3
+ require "sidekiq"
3
4
 
4
5
  module Sidekiq
5
6
  module ExceptionHandler
6
-
7
7
  class Logger
8
- def call(ex, ctxHash)
9
- Sidekiq.logger.warn(Sidekiq.dump_json(ctxHash)) if !ctxHash.empty?
10
- Sidekiq.logger.warn "#{ex.class.name}: #{ex.message}"
11
- Sidekiq.logger.warn ex.backtrace.join("\n") unless ex.backtrace.nil?
8
+ def call(ex, ctx)
9
+ Sidekiq.logger.warn(Sidekiq.dump_json(ctx)) unless ctx.empty?
10
+ Sidekiq.logger.warn("#{ex.class.name}: #{ex.message}")
11
+ Sidekiq.logger.warn(ex.backtrace.join("\n")) unless ex.backtrace.nil?
12
12
  end
13
13
 
14
- # Set up default handler which just logs the error
15
14
  Sidekiq.error_handlers << Sidekiq::ExceptionHandler::Logger.new
16
15
  end
17
16
 
18
- def handle_exception(ex, ctxHash={})
17
+ def handle_exception(ex, ctx = {})
19
18
  Sidekiq.error_handlers.each do |handler|
20
- begin
21
- handler.call(ex, ctxHash)
22
- rescue => ex
23
- Sidekiq.logger.error "!!! ERROR HANDLER THREW AN ERROR !!!"
24
- Sidekiq.logger.error ex
25
- Sidekiq.logger.error ex.backtrace.join("\n") unless ex.backtrace.nil?
26
- end
19
+ handler.call(ex, ctx)
20
+ rescue => ex
21
+ Sidekiq.logger.error "!!! ERROR HANDLER THREW AN ERROR !!!"
22
+ Sidekiq.logger.error ex
23
+ Sidekiq.logger.error ex.backtrace.join("\n") unless ex.backtrace.nil?
27
24
  end
28
25
  end
29
-
30
26
  end
31
27
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
- require 'sidekiq/extensions/generic_proxy'
2
+
3
+ require "sidekiq/extensions/generic_proxy"
3
4
 
4
5
  module Sidekiq
5
6
  module Extensions
@@ -19,39 +20,28 @@ module Sidekiq
19
20
  # The email method can return nil, which causes ActionMailer to return
20
21
  # an undeliverable empty message.
21
22
  if msg
22
- deliver(msg)
23
- else
24
- raise "#{target.name}##{method_name} returned an undeliverable mail object"
25
- end
26
- end
27
-
28
- private
29
-
30
- def deliver(msg)
31
- if msg.respond_to?(:deliver_now)
32
- # Rails 4.2/5.0
33
23
  msg.deliver_now
34
24
  else
35
- # Rails 3.2/4.0/4.1
36
- msg.deliver
25
+ raise "#{target.name}##{method_name} returned an undeliverable mail object"
37
26
  end
38
27
  end
39
28
  end
40
29
 
41
30
  module ActionMailer
42
- def sidekiq_delay(options={})
31
+ def sidekiq_delay(options = {})
43
32
  Proxy.new(DelayedMailer, self, options)
44
33
  end
45
- def sidekiq_delay_for(interval, options={})
46
- Proxy.new(DelayedMailer, self, options.merge('at' => Time.now.to_f + interval.to_f))
34
+
35
+ def sidekiq_delay_for(interval, options = {})
36
+ Proxy.new(DelayedMailer, self, options.merge("at" => Time.now.to_f + interval.to_f))
47
37
  end
48
- def sidekiq_delay_until(timestamp, options={})
49
- Proxy.new(DelayedMailer, self, options.merge('at' => timestamp.to_f))
38
+
39
+ def sidekiq_delay_until(timestamp, options = {})
40
+ Proxy.new(DelayedMailer, self, options.merge("at" => timestamp.to_f))
50
41
  end
51
42
  alias_method :delay, :sidekiq_delay
52
43
  alias_method :delay_for, :sidekiq_delay_for
53
44
  alias_method :delay_until, :sidekiq_delay_until
54
45
  end
55
-
56
46
  end
57
47
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
- require 'sidekiq/extensions/generic_proxy'
2
+
3
+ require "sidekiq/extensions/generic_proxy"
3
4
 
4
5
  module Sidekiq
5
6
  module Extensions
@@ -22,19 +23,20 @@ module Sidekiq
22
23
  end
23
24
 
24
25
  module ActiveRecord
25
- def sidekiq_delay(options={})
26
+ def sidekiq_delay(options = {})
26
27
  Proxy.new(DelayedModel, self, options)
27
28
  end
28
- def sidekiq_delay_for(interval, options={})
29
- Proxy.new(DelayedModel, self, options.merge('at' => Time.now.to_f + interval.to_f))
29
+
30
+ def sidekiq_delay_for(interval, options = {})
31
+ Proxy.new(DelayedModel, self, options.merge("at" => Time.now.to_f + interval.to_f))
30
32
  end
31
- def sidekiq_delay_until(timestamp, options={})
32
- Proxy.new(DelayedModel, self, options.merge('at' => timestamp.to_f))
33
+
34
+ def sidekiq_delay_until(timestamp, options = {})
35
+ Proxy.new(DelayedModel, self, options.merge("at" => timestamp.to_f))
33
36
  end
34
37
  alias_method :delay, :sidekiq_delay
35
38
  alias_method :delay_for, :sidekiq_delay_for
36
39
  alias_method :delay_until, :sidekiq_delay_until
37
40
  end
38
-
39
41
  end
40
42
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
- require 'sidekiq/extensions/generic_proxy'
2
+
3
+ require "sidekiq/extensions/generic_proxy"
3
4
 
4
5
  module Sidekiq
5
6
  module Extensions
@@ -20,20 +21,21 @@ module Sidekiq
20
21
  end
21
22
 
22
23
  module Klass
23
- def sidekiq_delay(options={})
24
+ def sidekiq_delay(options = {})
24
25
  Proxy.new(DelayedClass, self, options)
25
26
  end
26
- def sidekiq_delay_for(interval, options={})
27
- Proxy.new(DelayedClass, self, options.merge('at' => Time.now.to_f + interval.to_f))
27
+
28
+ def sidekiq_delay_for(interval, options = {})
29
+ Proxy.new(DelayedClass, self, options.merge("at" => Time.now.to_f + interval.to_f))
28
30
  end
29
- def sidekiq_delay_until(timestamp, options={})
30
- Proxy.new(DelayedClass, self, options.merge('at' => timestamp.to_f))
31
+
32
+ def sidekiq_delay_until(timestamp, options = {})
33
+ Proxy.new(DelayedClass, self, options.merge("at" => timestamp.to_f))
31
34
  end
32
35
  alias_method :delay, :sidekiq_delay
33
36
  alias_method :delay_for, :sidekiq_delay_for
34
37
  alias_method :delay_until, :sidekiq_delay_until
35
38
  end
36
-
37
39
  end
38
40
  end
39
41
 
@@ -1,12 +1,13 @@
1
1
  # frozen_string_literal: true
2
- require 'yaml'
2
+
3
+ require "yaml"
3
4
 
4
5
  module Sidekiq
5
6
  module Extensions
6
7
  SIZE_LIMIT = 8_192
7
8
 
8
9
  class Proxy < BasicObject
9
- def initialize(performable, target, options={})
10
+ def initialize(performable, target, options = {})
10
11
  @performable = performable
11
12
  @target = target
12
13
  @opts = options
@@ -23,9 +24,8 @@ module Sidekiq
23
24
  if marshalled.size > SIZE_LIMIT
24
25
  ::Sidekiq.logger.warn { "#{@target}.#{name} job argument is #{marshalled.bytesize} bytes, you should refactor it to reduce the size" }
25
26
  end
26
- @performable.client_push({ 'class' => @performable, 'args' => [marshalled] }.merge(@opts))
27
+ @performable.client_push({"class" => @performable, "args" => [marshalled]}.merge(@opts))
27
28
  end
28
29
  end
29
-
30
30
  end
31
31
  end